基于51单片机电子闹钟的设计 下载本文

if(shi1==255) shi1=23; } if(cnt==4) { miao2--; if(miao2==255) miao2=59; } if(cnt==5) { fen2--; if(fen2==255) fen2=59; } if(cnt==6) { shi2--; if(shi2==255) shi2=23; }

if(cnt==7)

{ miao3--; if(miao3==255) miao3=59; } if(cnt==8) { fen3--; if(fen3==255) fen3=59; } if(cnt==9) { shi3--; if(shi3==255) shi3=23;

25

}

if(cnt==10) { miao--;

if(miao==255) miao=59;cnt1++; } if(cnt==11) { fen--; if(fen==255) fen=59;cnt1++; } if(cnt==12) { shi--; if(shi==255) shi=23;cnt1++; } }

void clock() // 闹铃子函数 //判断秒的数值是否相等

{ if(miao==miao1&&alm1==0||miao==miao2&&alm2==0||miao==miao3&&alm3==0) //是,在判断分是否相等

if(fen==fen1&&alm1==0||fen==fen2&&alm2==0||fen==fen3&&alm3==0) //是,再判断时是否相等

if(shi==shi1&&alm1==0||shi==shi2&&alm2==0||shi==shi3&&alm3==0) { flag2=0; //是,则标志位,flag2清零 while(!(flag2==1200)&&(cnt==0)) //判断flag2是否到1200且不

// 为调时状态

//没有,则继续驱动蜂鸣器响

{if(key4==0)

{while(!key4) flag2=1200;

}

if(flag1>1) //等时方波驱动蜂鸣器

26

{ fmq=~fmq;

flag1=0; }

shijian(); //调用时间子函数 display(); //调用显示子函数 }

fmq=1; //关闭蜂鸣器 }

void main() // 主函数

{ init(); //调用初始化子函数 while(1)

{ clock(); //闹钟子函数 if(cnt==1||cnt==2||cnt==3) //显示子函数 { display1(); }

if(cnt==4||cnt==5||cnt==6)

}

{ display2(); }

if(cnt==7||cnt==8||cnt==9)

{ display3(); }

if(cnt==0||cnt==10||cnt==11||cnt==12||cnt==13)

{ display(); }

shijian();

key_scan();

//调用时间子函数 //调用键盘扫描子函数

} }

void time0() interrupt 1 // 定时中断 { TH0=0x3c; //初值50ms (65536-50000)/256 TL0=0x0b0;

// (65536-50000)%6

flag++; //标志位 flag1++;

flag2++;

}

27