#include"reg52.h"
#define?uchar?unsigned?char
#define?uint?unsigned?int
sbit?BELL=P1^0;//定義蜂鳴器
sbit?key1=P1^1;//定義按鍵
sbit?key2=P1^2;//定義按鍵
uint?num;
/*1ms廷時*/
void?delay_ms(uint?z)
{
uint?i,j;
for(i=0;i<z;i++)
for(j=0;j<110;j++);
}
/*定時器初始化*/
void?init_timer0()
{
TMOD=0x01;
TH0=(65535-2000)/256;
TL0=(65535-2000)%256;
EA=0;
ET0=1;
TR0=1;
}
void?main()
{
BELL=0;
init_timer0();
while(1)
{
if(key1==0)
{
delay_ms(10);?//延時消抖
if(key1==0) ?//再次判斷按鍵是否真的被按下
{
while(key1==0);//等待釋放按鍵
EA=1; ?//開啟總中斷
}
}
if(key2==0)
{
delay_ms(10);?//延時消抖
if(key2==0) ?//再次判斷按鍵是否真的被按下
{
while(key2==0); ?//等待釋放按鍵
EA=0; ? ?//關閉總中斷
BELL=0; ? ?//關閉蜂鳴器
}
}
}
}
void?timer0()?interrupt?1
{
TH0=(65535-2000)/256;
TL0=(65535-2000)%256;?//中斷計時2ms(500Hz),之所以用中斷是因為定時比較準確?想改延時就把裏面的2000改掉,這個數除以1000得的數就是多少毫秒
num++;
if(num==1) ?//讓蜂鳴器工以?500Hz頻率工作
{
num=0;
BELL=~BELL;
}
}