有时候带手机不方便,可以又想知道时间,这时候可以用蜂鸣器做一个音频的时间提醒器,每60秒发一声提醒
提醒器计时可以使用单片机的定时器T0、T1来做,计时的定时器用T1来做,工作在方式2(8位自动装载),系统运行提示的定时器用T0来做,工作在方式1(16位定时)
代码如下
#include "reg52.h" #define uint unsigned int #define uchar unsigned char #define time_set0 5000//设置定时器0的计时长度 #define th0 (65536-time_set0)/256//计算定时器高8位装入值 #define tl0 (65536-time_set0)%6 //计算定时器低8位装入值 #define time_set1 256-200//设置定时器1的计时长度 sbit P1_1=P1^1;//系统运行指示灯管脚 sbit beep=P1^7;//蜂鸣器管脚 uint cnt=0;//计数器 uint cnt2=0;//计数器 uint cnt3=0;//计数器 void delay(uint i)//延时函数 { uchar k; for(;i>0;i--) for(k=0;k<200;k++); } timer0()interrupt 1 using 1//定时器0设置 { cnt++;//每次中断增加一 if(cnt>100)//计数时间5ms*100=500ms { cnt=0; } TH0=th0;//重装定时器 TL0=tl0; } timer1()interrupt 3 using 2//定时器1设置 { cnt2++; if(cnt2>=5000)//计数时间0.2ms*5000=1s { cnt2=0; cnt3++;//秒计数器增加一 P1_1=!P1_1;//指示灯每秒翻转一次 } } void main() { TMOD=0x21;//设置定时器1方式2(高4位0010,自动重装TH->TL,计满255),定时器0方式1(低4位0001,16位定时器,可计满65535) TH0=th0;//装载定时器初始值 TL0=tl0; TH1=time_set1; TL1=time_set1; EA=1;//开总中断 ET0=1;//开定时器0中断 ET1=1;//开定时器1中断 TR0=1;//打开定时器0 TR1=1;//打开定时器1 while(1) { if(cnt3>=60)//计时60秒 { cnt3=0;//计时清零 beep=0;//打开蜂鸣器 delay(100);//延时100 beep=1;//关闭蜂鸣器 } } }