|
|
由于你發(fā)的代碼不全,控制蜂鳴器端口翻轉(zhuǎn)的核心部分看不到,只能猜想是用的Px的Px.0和Px.1。所以很難用簡單幾句話表述清楚,直接給你寫個示例程序,稍有點C言語基礎(chǔ)就能看明白,既可以用仿真軟件仿真運行,也可以搭建實際電路測試。至于使用的端口不同,略改一下即可。有詳細注釋,別說還是看不懂。
- //以51系列單片機,晶振12MHz為基礎(chǔ)編寫的測試程序
- //蜂鳴器驅(qū)動端口P2.0、P2.1,可以根據(jù)實際管腳修改
- //按鍵程序作為測試蜂鳴器使用,每按一次響鈴1/4秒
- #include <reg52.h>
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit key=P2^2;
- bit flag=0;
- void Delay115us() //@12.000MHz
- {
- uchar i;
- i=55;
- while(--i);
- }
- void key_scan()
- {
- static uchar temp=0; //消抖計數(shù)
- static bit sign=0; //按鍵狀態(tài)記憶
- if(!key)
- {
- if(++temp==100 && sign==0)
- {
- sign=1;
- flag=1;//開啟蜂鳴器
- }
- }
- else
- {
- temp=0;
- sign=0;
- }
- }
- void Beep()//頻率4KHz/周期250us
- {
- uint i;
- if(flag)
- {
- P2|=0x01;//蜂鳴器端口置位,P2.0=1、P2.1=0,不影響P2其它端口狀態(tài)
- for(i=0;i<2000;i++)//響鈴1/4秒
- {
- if(i%2==0)
- P2+=0x01;//P2.0、P2.1同步翻轉(zhuǎn),不影響P2其它端口狀態(tài)
- else
- {
- P2-=0x01;//P2.0、P2.1同步翻轉(zhuǎn),不影響P2其它端口狀態(tài)
- _nop_(); //補償2us,正負(fù)半周脈沖等寬
- _nop_();
- }
- Delay115us();
- }
- P2&=0xfc;//蜂鳴器端口復(fù)位清0,不影響P2其它端口狀態(tài)
- flag=0; //關(guān)閉蜂鳴器
- }
- }
- void main()
- {
- P2&=0xfc;//初始化蜂鳴器端口P2.0、P2.1清0。
- while(1)
- {
- key_scan();
- Beep();
- }
- }
復(fù)制代碼 |
|