1、 2 3 4 5 6 7 8 9 - 灭灯 cnsbit led_duan=P26;/段选通sbit led_wei=P27;/位选通sbit speaker=P23;/蜂鸣器sbit minitek=P30;/分校正 按键sbit hourk=P31;/小时校正 按键sbit p3_4=P34;/sbit yeark=P35;/年sbit monthk=P36;/月sbit dayk=P37;/日uchar data wei,i;bit leap_year;/闰年标志位bit dis_nyr;bit cal_year=1;bit calculate=1;/显示年月日 与 当前时间切换标志uc
2、har data c_min;/闹钟分寄存单元uchar data c_hou;/闹钟、小时寄存单元uchar data second;/秒uchar data minite;/分变量uchar data hour;/小时变量uchar data year,month,day;/定义年月日变量uchar data CNTA;uchar data speaker_num;/蜂鸣次数 bit beep;/整点报时标志bit run;/运行标志bit flash;/灭灯标志bit clarm_switch;/闹钟开关标志bit baoshi;/报时开关标志sbit led1=P16;/ 按键标识指示
3、灯sbit led2=P17;/ 运行标志指示灯sbit P3_2=P32;sbit P3_3=P33;uint n,k;/*10微秒级延时*/void delay_10us(uchar n) do _nop_(); _nop_(); while(-n);/*毫秒级延时 */void delay_ms(uint n) do delay_10us(131); while(-n);/* 当前时间转换*/clk_to_dis() dis0=second%10;dis1=second/10;if(flash)dis2=10; else dis2=11;dis3=minite%10;dis4=minit
4、e/10;dis5=hour%10;dis6=hour/10;/*定时闹钟显示译码(用于七段码显示)*/clarm_to_dis() dis0=c_min%10;dis1=c_min/10;/亮灯/灭灯dis3=c_hou%10;dis4=c_hou/10;dis5=10;dis6=13;/*年月日显示译码*/nyr_to_dis() dis0=day%10;dis1=day/10;dis2=10;-dis3=month%10;dis4=month/10;/ dis6=year%10;dis7=year/10;/*主函数*/void main()P2=0xff;P1=0XFF;p3_4=0;r
5、un=1;led2=0;/运行指示灯亮led1=1;flash=0x00; /第三位显示“-”wei=0x7f;/选通低位 i=0;second=21;minite=58;hour=9;CNTA=0x00;year=10;month=4;day=5;clk_to_dis();TMOD=0x11;TH0=15560/256;TL0=15560%256;TH1=0xfc;TL1=0x18;EA=1; PT0=1;EX0=1; /开中断;EX1=1;ET0=1;ET1=1;TR0=1;TR1=1;while(1) while(run=1) if(calculate)if(month=1|month=
6、3|month=5|month=7|month=8|month=10|month=12)day+;if(day31)day=0x01;month+; if(month=13)month=1;year+;cal_year=1;led1=0; /指示灯亮 if(month=4|month=6|month=9|month=11) day+; if(day30)day=0x01; led1=0; /指示灯亮 if(month=2) if(leap_year=1)if(day=30)day=1;else day+;if(day=29)day=1; while(cal_year) if(year+2000
7、)%400=0) leap_year=1; 被400整除为闰年 else if(year+2000)%100=0) leap_year=0;不能被400整除 能被100整除 不是闰年 else if(year+2000)%4=0) leap_year=1;不能被400、100整除 能被4整除 是闰年 else leap_year=0;cal_year=0;calculate=0;while(!minitek)for(n=0;n7)speaker_num=2*hour; /整点到 设定报时次数 蜂鸣标志 置1 beep=1;if(hour=24)hour=0;calculate=1;/0点到,日
8、期标志加一/*定时器中断T1*/timer1() interrupt 3 using 3 TH1=0xfc;P0=0xff;led_wei=1;led_wei=0;P0=segdisi;led_duan=1;led_duan=0;P0=wei;if(+i=8)i=0;wei=_cror_(wei,1);/*外中断0*/int_0() interrupt 0clarm_switch=!clarm_switch;/ 闹钟开关/ 开启显示 开启第一位显示C/ 关闭 不显示 for(k=0;k40;k+)speaker=!delay_ms(5);/*外中断1*/int_1() interrupt 2/闹钟时间设置/运行 转换开关run=!run;if(run)led2=0;else led2=1;for(k=0;90;k+)/ 蜂鸣器响/ 指示灯闪烁delay_10us(100);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1