微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求一个程序思路,关于蜂鸣器。

求一个程序思路,关于蜂鸣器。

时间:10-02 整理:3721RD 点击:
当按键按下时 蜂鸣器频率加1  让数码管显示频率 出来。只求思路  不求帮我写程序

cnt100us是全局变量,因为定时器设置了100us自动重载(可根据实际需要更改),中断发生1次cnt100us+1,num也是全局变量,可以在按键程序中++/- -。num数值越大频率越低,反之亦然。

你这不已经是思路了吗,思路就是你想要做什么,达到什么目标,你这连先做什么,后做什么都有了。

......问题是不知道 怎么开始写了。也许我上面的陈述有错。好尴尬   又是大哥 你。

陈述没错啊,
一,检测按键
二,如果按键按下,频率加1
三,显示频率
没错啊

那这个问题。问得我自己都 笑了。按键和显示我都可以写出来。就是这个频率是什么 ?怎么去写?

蜂鸣器分有源和无源两种,有源的蜂鸣器驱动不需要改变频率,无源蜂鸣器需要一定频率的脉冲来驱动。
频率可以用定时器来实现,那更改频率就是更改定时器的定时时间。

按键和显示你都可以写出来,这个你应该一看就明白了。
void Timer0Init(void)                        //100微秒@12.000MHz
{
        TMOD = 0x02;                                //设置定时器自动重载模式
        TL0 = 0x9C;                                        //设置定时初值
        TH0 = 0x9C;                                        //设置定时重载值
        TR0 = 1;                                        //定时器0开始计时
        EA=1;                                                //开总中断
        ET0=1;                                                //开定时器0中断       
}
void timer0() interrupt        1                //中断服务程序
{
        Cnt100us++;                                        //定时器中断计数变量自+1
        if(Cnt100us>=num)                        //改变num值就改变频率(反比)
        {                                                        //频率=1/秒/2/num
                Cnt100us=0;                                //定时器中断计数变量清0
                Buzzer=~Buzzer;                        //蜂鸣器端口取反
        }
}

因为刚学,所以不是很明白 。我想问一下你这个cnt100us怎么来? 是不是要在上面写一个延时函数? 还有那个num是不是也要在上面定义一个全局变量num?就比如说我那个按键按下num++这样来改变他的值吗?

那不是和我的初忠相反了。我是想让按键按下后频率++  让数码管显示频率 出来。

而且大神,我还想补充下。我按照你上面的去写了 蜂鸣器可以响。但那是当cnt100us=0时才会响。但我是想测试这个蜂鸣器到达哪个频率时响声最大。  所以需要一个数码管显示出它的频率。 频率从0开始++

那里打错了。是cnt100us>=num时就会响、。

无源电磁式蜂鸣器常识
额定电压:电磁式蜂鸣器以1 / 2方波驱动
工作电压:可正常工作的适用电压范围,但不保证低于额定电压时仍能达到最低音压 。
消耗电流:正常发声后,持续的消耗电流量。而启动瞬间需要的电流,一般至少需要持续耗电流的三倍 。
直流电阻:以电表直接量测的直流阻抗。
声音输出:加以额定的电压,1 / 2方波,以数据库表在距离10厘米测得。
额定频率:蜂鸣器每一个频率都仍有声音,额定的频率指建议使用的最大,且音压一致性较好的频点 。
操作温度:能维持正常动作的温度-30 - +70度。
以某品牌无源电磁式蜂鸣器为例,在额定电压下其谐振频率附近就是最大音量,但我通常取2.5KHz,音质清脆。
额定电压:1.5V
电压范围:1.0V--3.0V      
消耗电流:最大45mA(在1.5V, 2048Hz, 1/2 方波)  
线圈阻抗:16.0±4.0 Ω     
输出音压:85dB      
谐振频率:2048 Hz      
操作温度:-20℃-- +60℃      
贮藏温度:-30℃-- +70℃

虽然还不是很懂,但你已经帮我解释很多了。最后还想问你最后 一个问题,        
TL0 = 0x9C;  
TH0 = 0x9C;
这两个地方的0x9c是怎么计算的?
因为是自学   所以问题比较多。麻烦了。   

百度一下,单片机定时器初值计算方式,应该就能解决这个问题了。PS:因为不知道你用什么单片机,所以只能指引你自己去搜索答案了。

51单片机的定时器0模式2是8位自动重装模式,在12M晶振时,最大定时256us,如果设定100us就用256-100=156=0x9c。当计数100个脉冲TL0溢出不仅置位TF0,而且会自动动将TH0的内容重新装入TL0。知道这个道理就行,实际使用中可以借助定时器计算器。

51单片机的定时器0模式2是8位自动重装模式,在12M晶振时,最大定时256us,如果设定100us就用256-100=156=0x9c。当计数100个脉冲TL0溢出不仅置位TF0,而且会自动动将TH0的内容重新装入TL0。知道这个道理就行,实际使用中可以借助定时器计算器。

强烈支持小编ing……

说的很详细。谢了   那我要改变它的频率值不是可以直接改变这个0x9c就行了?我试了下把这个0x9c改成一个变量  然后按键按下后定义这个变量++  蜂鸣器的声音会变大呢、。

可以这么做,只要搞懂定时器的工作原理,代码随意写。

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

网站地图

Top