可调时报时的单片机电子钟

上传人:ldj****22 文档编号:37707359 上传时间:2018-04-21 格式:DOC 页数:5 大小:39.50KB
返回 下载 相关 举报
可调时报时的单片机电子钟_第1页
第1页 / 共5页
可调时报时的单片机电子钟_第2页
第2页 / 共5页
可调时报时的单片机电子钟_第3页
第3页 / 共5页
可调时报时的单片机电子钟_第4页
第4页 / 共5页
可调时报时的单片机电子钟_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《可调时报时的单片机电子钟》由会员分享,可在线阅读,更多相关《可调时报时的单片机电子钟(5页珍藏版)》请在金锄头文库上搜索。

1、可调时报时的单片机电子钟可调时报时的单片机电子钟#include #define uchar unsigned char#define uint unsigned int#define ulong unsigned longsbit p3_0=P30; /显示日期显示日期sbit p3_1=P31; /时间设置外部中断时间设置外部中断 0sbit p3_2=P32; /选择设置位选择设置位sbit p3_3=P33; /时间设置时间设置+1sbit p3_4=P34; /设置完成,电子钟开始走设置完成,电子钟开始走sbit p3_5=P00; /闹铃显示闹铃显示bit flag=0; /判断一

2、般显示还是设置显示位判断一般显示还是设置显示位uint g_month=31,28,31,30,31,30,31,31,30,31,30,31; /非闰年非闰年uint r_month=31,29,31,30,31,30,31,31,30,31,30,31 ; /闰年闰年uint times=59; /T0 一秒中断次数一秒中断次数uint settimes=1; /设置位初始为最高位设置位初始为最高位年年uchar whichshow=0x80; /显示位初始为最高位显示位初始为最高位uchar yu; /显示设置的位显示设置的位uint stor; /存放设置开始时显示的位存放设置开始时显

3、示的位struct date uint year; uint month;uint day;date1=00,1,1; /初始化日期初始化日期struct timeuint hour;uint minite;uint second;time1=0,0,0; /初始化时间初始化时间struct time time2=0,0,0;union showdata /定义显示的位为共用体定义显示的位为共用体uint year1,year2;uint month1,month2;uint day1,day2;a; union showtimeuint hour1,hour2;uint min1,min2;

4、uint sec1,sec2;b;void delay(uint i) /延时程序延时程序 ims uchar j;while(i-)for(j=0;j1;whichshow=x|y;void display() /时间显示程序时间显示程序if(p3_0=1) /显示时分秒显示时分秒b.hour1=time1.hour/10; show(b.hour1); /时高位时高位 02b.hour2=time1.hour%10; show(b.hour2); /时低位时低位 09show(10);/横线横线 b.min1=time1.minite/10; show(b.min1); /分高位分高位 0

5、5b.min2=time1.minite%10; show(b.min2); /分低位分低位 09show(10);/横线横线b.sec1=time1.second/10; show(b.sec1); /秒高位秒高位 05b.sec2=time1.second%10; show(b.sec2); /秒低位秒低位 09if(p3_0=0) /显示年月日显示年月日a.year1=date1.year/10;show(a.year1); /年年a.year2=date1.year%10;show(a.year2);show(10);/横线横线a.month1=date1.month/10;show(

6、a.month1);/月月a.month2=date1.month%10;show(a.month2);show(10);/横线横线a.day1=date1.day/10;show(a.day1);/日日a.day2=date1.day%10;show(a.day2);void setshow(uchar ss) /设置时间显示设置时间显示 flag=1;if(ss6) settimes=1;goto loop4;else if(p3_3=0)goto loop2;else if(p3_4=0)goto loop5; /判断是否设置设置完毕,启动时钟判断是否设置设置完毕,启动时钟else go

7、to loop3;else setshow(settimes);goto loop4;loop1:if(p3_3=1) /设置设置 loop2:setshow(settimes);if(p3_3=0) switch(settimes)case 1:setyear();break;case 2:setmonth();break;case 3:setday();break; case 4:sethour();break;case 5:setmin();break;case 6:setsec();break;default:break;goto loop1;else if(p3_2=0) goto

8、loop3;else if(p3_4=0)goto loop5; /判断是否设置设置完毕,启动时钟判断是否设置设置完毕,启动时钟else goto loop2;else setshow(settimes);goto loop1;loop5: flag=0; /设置完成复位设置完成复位p3_0=1;settimes=1;whichshow=stor;yu=0;times=59;/T0 中断程序,计算时间和日期,时钟频率为中断程序,计算时间和日期,时钟频率为 12MHZ,产生,产生 16.9ms 中断,采用方式中断,采用方式 1,每秒中断,每秒中断 59 次次void time0() interr

9、upt 1 using 0 uint i;TH0=(65536-1000)/256;TL0=(65536-1000)%256; /复位定时器复位定时器 0times-;if (times=0) /一秒钟到一秒钟到if(+time1.second=60)time1.second=0;time1.minite+;if(time1.minite=60)time1.minite=0;time1.hour+;if(time1.hour=24)time1.hour=0;date1.day+;if(date1.day=mo_days()+1)date1.day=1;date1.month+;if(date1

10、.month=13)date1.month=1;date1.year+;times=59;display(); /显示程序显示程序if(times30)ring(); /整点报时程序,几点亮几下整点报时程序,几点亮几下else p3_5=1;void main() /主程序主程序TMOD=0x01; /定时器定时器 0 初始化初始化TH0=(65536-1000)/256;TL0=(65536-1000)%256;EA=1;ET0=1;EX0=1; /设置中断允许设置中断允许IP=0X01; /设置中断优先级,外部中断设置中断优先级,外部中断 0 高高TR0=1; /定时器开始定时器开始while(1); /死循环死循环

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号