|
定時(shí)器用作無(wú)源蜂鳴器的驅(qū)動(dòng)器程序示例
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key =P3^0;
sbit Buzzer=P2^3;
uchar num;
void Timer0Init() //250微秒@11.0592MHz
{
TMOD |= 0x02; //設(shè)置定時(shí)器模式
TL0 = 0x1A; //設(shè)置定時(shí)初值
TH0 = 0x1A; //設(shè)置定時(shí)重載值
TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
EA=1;
ET0=1;
}
void keyscan()//按鍵程序
{
static uchar count; //計(jì)數(shù)消抖變量
static bit key_sign=0; //按鍵自鎖標(biāo)志
if(key==0) //檢測(cè)輸入如果為0
{
if((++count>=100)&&(key_sign==0))
{
key_sign=1; //按鍵自鎖標(biāo)志置1,防止重復(fù)響應(yīng)
num=10; //任意置響鈴次數(shù)
}
}
else
{
count=0; //計(jì)數(shù)變量清0
key_sign=0; //按鍵自鎖標(biāo)志清0
}
}
void main()
{
Timer0Init();
while(1)
{
keyscan();
}
}
void timer0() interrupt 1
{
static uint count=0; //中斷計(jì)數(shù)變量
if(num>0)
{
count++;
if(count>2000) //0.5秒時(shí)間到
Buzzer=~Buzzer; //蜂鳴器端口取反
if(count>=4000) //1秒時(shí)間到
{
count=0; //計(jì)數(shù)清0
num--;
Buzzer=1; //蜂鳴器端復(fù)位
}
}
}
|
|