第一篇:51单片机c语言电子钟(已加入调时、闹铃、整点报时功能)
51单片机c语言电子钟(已加入调时、闹铃、整点报时功能)
效果图:
程序如下:
//51单片机c语言电子钟(已加入调时、闹铃、整点报时功能)
//WHJWNAVY 2011/10/14
#include
P2=0XDF;P0=dispcode[10];//间隔符-delay(1);
P2=0XBF;
P0=dispcode[shi%10];//时个位 delay(1);P2=0X7F;P0=dispcode[shi/10];//时十位 delay(1);}
if(P1_6==0)//设定时 { delay(30);if(P1_6==0){ shi++;if(shi==24){ shi=0;} } delay(250);} if(P1_7==0)//设定分 { delay(30);
if(P1_7==0){ fen++;if(fen==60){ fen=0;} } delay(250);}
if((hour==shi)&(minite==fen)&(seconde==0))//闹铃时间到,报警十次。{ for(bjcs=0;bjcs<10;bjcs++){ P1_5=0;delay(500);P1_5=1;delay(500);} } }
/*主函数*/ void main(void){ P1=0XFF;TMOD = 0x11;//time0为定时器,方式1 TH0=0x3c;//预置计数初值,50ms TL0=0xb0;EA=1;//总中断开
ET0=1;//允许定时器0中断 TR0=1;//开启定时器0 while(1){ keyscan();//按键扫描 dingshi();//定时闹钟 zhengdian();//整点报时 display();//显示时间 } }
void timer0(void)interrupt 1 //定时器0方式1,中断一次 { TH0=0x3c;//手动加载计数脉冲次数
50ms
TL0=0xb0;TMOD=0x11;mstcnt++;//用于计算时间,每隔50ms加1 if(mstcnt==20)//mstcnt满20即为一秒 { seconde++;//秒+1 time_pro();//时间处理
mstcnt=0;//对计数单元的清零,重新开始计数 } }