下午所有,
我正在钻研嵌入式系统的全新世界(对我而言),并且正在努力理解某些东西。我已经四处寻找答案,但要么答案非常明显,以至于没有含蓄地说明,或者我提出了错误的问题。
问题是这个;我有一个QL200开发板,它有几个组件,我与PIC16F877A(按钮,LED,LCD屏幕和蜂鸣器)连接。我真正挣扎的最后一个组成部分是蜂鸣器。
通过一些阅读,我被引导相信,为了发出蜂鸣声,我只需设置它在高电平下工作的引脚。但是我不确定如何做到这一点。此外,我发现(通过运气或指导)所有其他组件运行的端口,但我不知道他们实际如何分配他们的端口。是通过为它们分配端口还是将它们设置在某个端口上作为标准?
例如,我的LCD面板正在运行PORTD:
#define lcd PORTD
void writeCommand(unsigned char ch)
{
lcd = ch;
RS = 0;
RW =0;
E = 1;
lcdDelay();
E=0;
}
void Init_lcd(void)
{
ADCON1 = 0x07; //required setting of analog to digital
TRISD = 0x00;
TRISA1 = 0;
TRISA2 = 0;
TRISA3 = 0;
writeCommand(0x0f);
writeCommand(0x38); //set to two line mode
clearDisplay();
writeString("MAIN MENU");
}
这是来自数据表吗?我只是被告知这是在PORTD,所以运行它,它的工作原理。
然而现在轮到蜂鸣器了,我甚至难以开始。在线使用PORTB的几个例子,但我已经在PORTB上使用按钮作为输入:
#define TempButton1 RB1
#define TempButton2 RB2
#define TempButton3 RB3
最后一点是,一旦我找到了蜂鸣器正在运行的端口,将蜂鸣器抬高以使其发出声音是一件简单的事吗?即:
//declarations
#define buzzer PORT(x)
//in a function somewhere
buzzer = 1; //hopefully buzzer should sound
我的很多研究表明,这种方式应该有效,但有些人使用PMW和频率来实现声音。提前谢谢!
答案 0 :(得分:1)
您必须以所需频率的两倍切换输出端口引脚,因为这也被描述为音频和语音功能,只是启用输出无法做到这一点。如果它与其他输出共享一个端口,则必须在切换时保留其他输出的状态。
如果您没有oscilloscpe,如果您正在做任何认真的工作,请找一个。也可用于查看芯片的端口电平(输入或输出)。