編程如下:
#include <reg52.h> //52系列頭文件
#define uchar unsigned char //變量類型宏定義
#define uint unsigned int
sbit Key = P2^0; //按鍵位聲明
sbit Bell = P2^3; //門鈴位聲明
uint p; //中斷次數變量
void main() //主程序
{
TMOD = 0x00; //設置T0工作於方式0
TH0 = (8192-700)/32; //T0計數器裝入定時700us初值
TL0 = (8192-700)%32;
IE = 0x82; //開總中斷,開T0中斷
if(Key==0) //如果鍵被按下
{
TR0 = 1; //啟動T0定時器計時
}
while(Key==0); //等待按鍵松開
}
void Timer0() interrupt 1 //T0中斷服務子程序
{
Bell = ~Bell; //每次中斷發生時,門鈴狀態取反
p++; //中斷計次值加1
if(p<=400) //如果中斷<=400次,
{
TH0 = (8192-700)/32; //重裝700us定時初值
TL0 = (8192-700)%32;
}
if(p>400) //如果中斷次數>400
{
TH0 = (8192-1000)/32; //則重裝定時 1ms 初值
TL0 = (8192-1000)%32;
if(p==1000) //如果中斷次數 =800次
{
P = 0; //中斷計數值歸0
TR0 = 0; //關閉T0定時器
}
}
}
操作說明:每當按下並保持,響鈴壹聲。松開後再按,即重復上述狀態。