在PIC上找到正确的PORT并实现蜂鸣器

时间:2016-01-14 17:22:03

标签: c port pic embedded-control

下午所有,

我正在钻研嵌入式系统的全新世界(对我而言),并且正在努力理解某些东西。我已经四处寻找答案,但要么答案非常明显,以至于没有含蓄地说明,或者我提出了错误的问题。

问题是这个;我有一个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和频率来实现声音。提前谢谢!

1 个答案:

答案 0 :(得分:1)

您必须以所需频率的两倍切换输出端口引脚,因为这也被描述为音频和语音功能,只是启用输出无法做到这一点。如果它与其他输出共享一个端口,则必须在切换时保留其他输出的状态。

如果您没有oscilloscpe,如果您正在做任何认真的工作,请找一个。也可用于查看芯片的端口电平(输入或输出)。