微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求蜂鸣器指教

求蜂鸣器指教

时间:10-02 整理:3721RD 点击:
如何让蜂鸣器发出1khz的稳定频率的声音,求指教

定时器定时200us,中断里翻转接到蜂鸣器的IO 就行;

采用定时器进行频率设置,1khz说明周期是1ms,那么设置高电平为500us,低电平为500us。
程序如下:
#include <reg51.h>
sbit beep = P1 ^ 0;
char num;
void main()
{
    TMOD = 0x01;                               // 设置定时器0为工作方式(M1M0为01)
    TH0 = (65536 - 500) / 256;           //自动赋初值 最高位 定时0.5ms
    TL0 = (65536 - 500) % 256;         //                          最低位
    EA = 1;                                          //开总中断,CPU中断开
    ET0 = 1;                                        //定时器0中断
    TR0 = 1;                                        //启动定时器0
    beep = 0x01 ;
    while(1) ;
}                                                         //程序停止在这里等待中断发生
void T0_time(void) interrupt 1             // 定时/计数器0溢出中断
{
    TH0 = (65535 - 500) / 256;            //重装初值
    TL0 = (65535 - 500) % 256;
    num++;
    if(num == 1)                                    //如果到了1次,说明0.5ms已到,num可以用来方便修改周期,间接修改频率
    {
        num = 0;
        beep = ~beep;                            //让蜂鸣器状态取反
    }
}

非常感谢啊~~看来还是要多用中断函数……总之很谢谢你

呵呵,客气啦!

嗯,定时中断。

这个用中断函数的定时是十分准确的,但如果只是粗略的定时的话,毕竟蜂鸣器不需要那么准确的精度(毕竟你分辨不出来1khz和990hz的音频吧?)直接用一个延时函数,然后调用就好了。
贴出代码::
void delay500us()
{
unsigned char j;
for(j=0;j<57;j++)          //500us基准延时程序
{
  ;
}
}
void beep()        //产生1KHZ频率声音的函数
{
        fmq=0;
        delay500us();
        fmq=1;
        delay500us();       
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top