c - 在 PIC 上找到正确的端口并实现蜂鸣器

标签 c port hardware pic

大家下午好,

我目前正在钻研嵌入式系统的全新世界(无论如何对我来说),并且正在努力理解一些东西。我四处寻找答案,但要么答案非常明显以至于没有隐含说明,要么我问错了问题。

问题是这样的;我有一个 QL200 开发板,它有几个组件与 PIC16F877A 接口(interface)(按钮、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 和频率来获得声音。提前致谢!

最佳答案

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

如果你没有示波器,如果你正在做任何严肃的工作,那就买一个。对于查看芯片上的端口级别(输入或输出)也很有用。

关于c - 在 PIC 上找到正确的端口并实现蜂鸣器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34795803/

相关文章:

c - 你知道任何用 C 编写的开源 Http 客户端,它可以在 *nix 和 Windows 上运行吗?

c - 如何在 C 中检查动态分配的字符串数组中的每个字符?

Ruby NET::SCP 和自定义端口

linux - 如何使用笔记本电脑控制PC?

java - 如何在Android中实现双指缩放?

c - 如何在ATMEL studio C程序中读取和写入同一端口

c - 释放动态结构数组的内存

javascript - 为什么 javascript 在创建 url-Object 时会忽略 url-string 的端口?

windows - 如何将 Cocoa/Mac 应用程序移植到 Windows?

linux - Web服务器(和相关软件)是否使用计算机的所有CPU内核?