求蜂鸣器指教

2019-07-15 23:43发布

如何让蜂鸣器发出1khz的稳定频率的声音,求指教
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
qq729101414
1楼-- · 2019-07-16 03:53
定时器定时200us,中断里翻转接到蜂鸣器的IO 就行;
xiangyu6
2楼-- · 2019-07-16 05:06
本帖最后由 xiangyu6 于 2013-7-13 20:38 编辑

采用定时器进行频率设置,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;                            //让蜂鸣器状态取反
    }
}
学单片机的人
3楼-- · 2019-07-16 10:36
 精彩回答 2  元偷偷看……
xiangyu6
4楼-- · 2019-07-16 13:14
学单片机的人 发表于 2013-7-13 20:51
非常感谢啊~~看来还是要多用中断函数……总之很谢谢你

呵呵,客气啦!
jem.wangjing
5楼-- · 2019-07-16 15:51
嗯,定时中断。
准电子大神
6楼-- · 2019-07-16 16:13
这个用中断函数的定时是十分准确的,但如果只是粗略的定时的话,毕竟蜂鸣器不需要那么准确的精度(毕竟你分辨不出来1khz和990hz的音频吧?)直接用一个延时函数,然后调用就好了。
贴出代码::

void delay500us()
{

unsigned char j;

for(j=0;j<57;j++)          //500us基准延时程序
{
  ;
}
}

void beep()        //产生1KHZ频率声音的函数
{
        fmq=0;
        delay500us();
        fmq=1;
        delay500us();       

}

一周热门 更多>