|
#include<STC89C5xRC.H>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep=P1^0;
uchar ding,dong,flag,stop,k1;
uint n;
void delay(uint i)
{
while(i--);
}
void time0init() //定時器0初始化
{
TMOD=0X01; //定時器0 方式1
TH0=0Xff;
TL0=0X06; //定時250us
// TR0=1;
EA=1;
ET0=1;
IT0=1; //外部中斷0觸發(fā)方式:0低電平有效,1下降沿有效。
EX0=1; //外部中斷0中斷允許位:0禁止中斷,1允許中斷。
}
void biaohaoinit() //各個標號初始化
{
ding=0; //叮聲音 計數(shù)標志
dong=0; //咚聲音 計數(shù)標志
n=0; //定時0.5s標志
flag=0;
stop=0; //結(jié)束標志
k1=1;
}
void main()
{
time0init();
biaohaoinit();
while(1)
{
if(k1==0) //判斷按鍵是否按下
{
stop=0x00;
k1=1;
TR0=1; //打開定時器0
while(!stop); /*!stop的意思是取反,意思就是stop值為0,那么這里判斷就是1,
就一直循環(huán)執(zhí)行這條語句,當(dāng)stop值為1時,這里的!stop參數(shù)就是0,條件不成立,
就退出這個while循環(huán),繼續(xù)執(zhí)行下一條語句了。*/
ET0=0;
PCON = 0X02;
delay(2000);
_nop_();
_nop_();
}
}
}
void zhongduan0() interrupt 0
{
PCON = 0;
k1=0;
stop=0x00;
ET0=1;
}
void time0() interrupt 1
{
n++;
TH0=0Xff;
TL0=0X06; //250us
stop=0;
if(n==2000) //定時0.5s 叮響0.5秒,咚響0.5秒
{
n=0;
if(flag==0)
{
flag=~flag;
}
else
{
flag=0;
stop=1;
TR0=0; //關(guān)閉定時器0
}
}
if(flag==0)
{ //通過改變定時計數(shù)時間可以改變門鈴的聲音
ding++; //叮
if(ding==1)
{
ding=0;
beep=~beep;
}
}
else
{
dong++;
if(dong==2) //咚
{
dong=0;
beep=~beep;
}
}
}
|
|