/*
時間:2020年4月6日11:43:17
功能:門鈴,按下K1發出“叮咚”的聲響
*/
# include <reg51.h>
sbit K1 = P3^1;//按鍵K1
sbit beep = P1^5;//蜂鳴器
int ding,dong,flag,n;
void delay(int i)
{
while(i--);
}
void time0init() //定時器0初始化
{
TMOD=0X01; //定時器0 方式1
TH0=0Xff;
TL0=0X06; //定時250us
// TR0=1;
EA=1;
ET0=1;
}
void main()
{
time0init();
while(1)
{
if(K1==0)
{
delay(1000);
if(K1==0)
{
TR0 = 1;//按鍵按下,打開定時器
}
while(!K1);
}
}
}
void time0() interrupt 1
{
/*賦初值,250微秒*/
TH0=0Xff;
TL0=0X06;
ding = 0;
dong = 0;
flag = 0;
n = 0;
n++;
if(n==2000)
{
if(flag==0)
{
flag = 1;
}
else
{
flag = 0;
}
if(flag==1)//發出ding的聲音
{
ding++;
if(ding==1)
{
ding = 0;
beep=~beep;
}
}
if(flag==0)//發出dong的聲音
{
dong++;
if(dong==2)
{
dong = 0;
beep=~beep;
TR0 = 0;//關閉定時器
}
}
}
}
uj5u.com熱心網友回復:
你首先要弄清楚你用的蜂鳴器是有源蜂鳴器還是無源蜂鳴器,兩者驅動方式不同。另外看一下驅動的電壓電流是不是符合要求,必要時加放大器uj5u.com熱心網友回復:
ding = 0;dong = 0;
flag = 0;
n = 0;
這4個變數的初始化位置錯誤,把初始化放到main()函式里。放在中斷處理函式里,每進一次中斷處理函式這些變數都會被清零。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/42452.html
標籤:單片機/工控
上一篇:AT89C51 十字路口交通燈程式 東西方向路口紅燈30s 綠燈35s,黃燈要求以0.5s的頻率閃爍共閃爍5s 南北方向的黃燈也需要閃爍
下一篇:nrf24l01求助,已經三天了
