蜂鸣器按键控制

#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit BELL=P1^4;//定义蜂鸣器
sbit key1=P3^0;//定义按键
sbit key2=P3^1;//定义按键
sbit rd=P3^4;
uint num;
/*1ms廷时*/
void delay_ms(uint z)
{
uint i,j;
for(i=0;ifor(j=0;j<110;j++);
}
/*定时器初始化*/
void init_timer0()
{
TMOD=0x01;
TH0=(65535-20000)/256;
TL0=(65535-20000)%256;
EA=0;
ET0=1;
TR0=1;
}
void main()
{
rd=0;
BELL=0;
init_timer0();
while(1)
{
if(key1==0)
{
delay_ms(10); //延时消抖
if(key1==0) //再次判断按键是否真的被按下
{
while(key1==0); //等待释放按键
EA=1;
BELL=1; //开启总中断
}
}
if(key2==0)
{
delay_ms(10); //延时消抖
if(key2==0) //再次判断按键是否真的被按下
{
while(key2==0); //等待释放按键
EA=0; //关闭总中断
BELL=0; //关闭蜂鸣器
}
}
}
}
void timer0() interrupt 1
{
TH0=(65535-20000)/256;
TL0=(65535-20000)%256; //中断计时2ms(500Hz),之所以用中断是因为定时比较准确 想改延时就把里面的2000改掉,这个数除以1000得的数就是多少毫秒
num++;
if(num==1) //让蜂鸣器工以 500Hz频率工作
{
num=0;
BELL=~BELL;
}
}

相关文档
最新文档