单片机实现电子钟万年历秒表闹铃(10页).doc

上传人:1595****071 文档编号:35953631 上传时间:2022-08-24 格式:DOC 页数:10 大小:224.50KB
返回 下载 相关 举报
单片机实现电子钟万年历秒表闹铃(10页).doc_第1页
第1页 / 共10页
单片机实现电子钟万年历秒表闹铃(10页).doc_第2页
第2页 / 共10页
点击查看更多>>
资源描述

《单片机实现电子钟万年历秒表闹铃(10页).doc》由会员分享,可在线阅读,更多相关《单片机实现电子钟万年历秒表闹铃(10页).doc(10页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、-单片机实现电子钟万年历秒表闹铃-第 10 页程序清单/项目名称: 数字电子钟/项目设计者: /项目设计时间: 2011年12月23日/项目功能:电子钟上电或按键复位后能自动显示系统提示符“P.”, 并不断闪烁进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。电子钟能显示年月日时分秒、秒表,任意时间闹铃,整点闹铃/* crystal=12Mhz */#include#define uchar unsigned char#de

2、fine uint unsigned int sbit kaig=P10; /*启动/调制键*/ sbit ksec=P11; /*调整秒/日/秒表开关*/ sbit kmin=P12; /*调整分/月/显示秒表*/ sbit khour=P13; /*调整时/年的低两位*/ sbit date=P14; /*显示日期开关*/sbit bai=P15; /*调整年高二位/整点闹钟开关*/ sbit save=P16; /*保存设置的闹铃时间*/sbit offl=P17; /*闹铃开关*/sbit loud=P31; /*扬声器*/uint num=0,sec=0,min=0,hour=0,h

3、ao=0,miao=0,fen=0,shi=0;/ 计时 秒 分 时毫秒 秒 分 时uint day=1,mou=1,year=2000,dx=0,co=0,stopnao=0,shour=0,smin=2;/ 日 月 年 显示 整点/闹铃开关 时 分uchar secshi=0,secge=0,minshi=0,minge=0,hourshi=0,hourge=0;/时间 秒个位 秒十位 分个位 分十位 时个位 时十位 uchar i=0, flag=0, j=0, yearqian=0, yearbai=0;/ 上电标志 电子钟启停标志 秒表启动标志 年千位 年百位uchar moushi

4、=0,mouge=0,dayge=0,dayshi=0,yearshi=0,yearge=0;/ 月十位 月个位 日个位 日十位 年十位 年个位uchar haoshi=0,haoge=0,miaoshi=0,miaoge=0,fenge=0,fenshi=0,shige=0,shishi=0;/秒表 毫秒十位 个位 秒十位 秒个位 分个位 分十位 时个位 时十位 Unsigned char code table10=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;/* *0*1*2*3*4*5*6*7*8*9*/void delay(uns

5、igned int z); /延时1ms函数 void time0(); / 定时器0中断方式工作 void time1(); / 定时器1中断方式工作 void display(); /显示子程序 void keyscan(); /键扫描键功能子程序/函数名: main()/功能: 主函数 /调用函数:display(),keyscan() main() TMOD=0x11; P3=0X0FF; IP=0X02; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65536-10000)/256; TL1=(65536-10000)%256

6、; EA=1; /*开启中断总开关*/ ET0=1; /*开启定时器0中断*/ i=0; /*控制显示,开关是否开启过*/ TR0=0; /*关闭定时器*/ ET1=0; TR1=1; while(1) keyscan(); display();/函数名: void delay(uint z)/功能: 延时时间为1ms/输入参数:z,1ms计数/说明: 总共延时时间为1ms乘以z,crystal=12Mhzvoid delay(unsigned int z) unsigned int x,y,a; for(x=z;x0;x-) for(y=142;y0;y-) for(a=2;a0;a-);

7、/函数名: void time0()/功能: 定时50ms/说明:用于电子钟时间void time0() interrupt 1 using 2 num+; /中断次数 TH0=(65536-50000)/256; TL0=(65536-50000)%256; if(num=20) /*1s才变化显示*/ num=0; sec+; if(sec=60)/分 sec=0; min+; if(min=60)&(!co) loud=0; if(min!=60) loud=1;if(min=smin)&(hour=shour)&(!stopnao) loud=0;if(min=(smin+1)&(ho

8、ur=shour) loud=1; if(min=60)/ /时 min=0; hour+; if(hour=24) hour=0; min=0; sec=0;day+;/日 if(mou=1)|(mou=3)|(mou=5)|(mou=7)|(mou=8)|(mou=10)|(mou=12) if(day=32) day=1;mou+;goto ww; if(mou=4)|(mou=6)|(mou=9)|(mou=11) if(day=31) day=1;mou+;goto ww; if(year%4=0)&(year%100)!=0)|(year%400=0)&(mou=2) if(day

9、=30) day=1;mou+;goto ww; if(mou=2)if(day=29) day=1;mou+;ww:if(mou=13) mou=1;year+;/年 if(year=10000) year=0;/函数名: void time1()/功能: 定时10ms/说明: 用于秒表计时 void time1() interrupt 3 using 3 hao+; TH1=(65536-10000)/256; TL1=(65536-10000)%256; if(hao=100)/*/ hao=0; miao+; if(miao=60)/*/ miao=0; fen+; if(fen=60

10、)/*/ fen=0; shi+; if(shi=24)/*/ shi=0;/函数名: display()/功能: 八位LED数码显示/说明: 显示时间/显示年月日/显示秒表,显示时间LED3点表示整点闹铃已打开,显示时间LED6点表示定时闹铃已打开void display() if(i=1)&(j=0)&(dx=0)/显示时间 secge=sec%10; secshi=sec/10; minge=min%10; minshi=min/10; hourge=hour%10; hourshi=hour/10; P2=0xfe; P0=tablesecge; delay(1); P2=0xff;

11、P2=0x0fd; P0=tablesecshi; delay(1); P2=0xff; P2=0x0fb; if(co=1)P0=0xbf; /整点报时关闭 else P0=0x3f; /整点报时开启 delay(1);P2=0xff; P2=0x0f7; P0=tableminge; delay(1); P2=0xff; P2=0x0ef; P0=tableminshi; delay(1); P2=0xff; P2=0x0df; if(stopnao=1)P0=0xbf; /闹铃关闭 else P0=0x3f; /闹铃开启 delay(1); P2=0xff; P2=0x0bf; P0=t

12、ablehourge; delay(1); P2=0xff; P2=0x7f; P0=tablehourshi; delay(1); P2=0xff;if(i=1)&(j=1) /显示秒表 haoge=hao%10; haoshi=hao/10; miaoge=miao%10; miaoshi=miao/10; fenge=fen%10; fenshi=fen/10; shige=shi%10; shishi=shi/10; P2=0xfe; P0=tablehaoge; delay(1); P2=0xff; P2=0x0fd; P0=tablehaoshi; delay(1);P2=0xff

13、; P2=0x0fb; P0=tablemiaoge-0x80;/ delay(1);P2=0xff; P2=0x0f7; P0=tablemiaoshi; delay(1); P2=0xff; P2=0x0ef; P0=tablefenge-0x80;/ delay(1); P2=0xff; P2=0x0df; P0=tablefenshi; delay(1); P2=0xff; P2=0x0bf; P0=tableshige-0x80; / delay(1); P2=0xff; P2=0x7f; P0=tableshishi; delay(1); P2=0xff; if(i=1)&(dx=

14、1)&(j=0) /显示年月日 dayge=day%10; dayshi=day/10; mouge=mou%10; moushi=mou/10; yearge=year%10; yearshi=(year/10)%10; yearbai=(year/100)%10; yearqian=year/1000; P2=0xfe; P0=tabledayge; delay(1); P2=0xff; P2=0x0fd; P0=tabledayshi; delay(1);P2=0xff; P2=0x0fb; P0=tablemouge-0x80; delay(1);P2=0xff; P2=0x0f7;

15、P0=tablemoushi; delay(1); P2=0xff; P2=0x0ef; P0=tableyearge-0x80; delay(2); P2=0xff; P2=0x0df; P0=tableyearshi; delay(1); P2=0xff; P2=0x0bf; P0=tableyearbai; delay(1); P2=0xff; P2=0x7f; P0=tableyearqian; delay(1); P2=0xff; P0=0x0c; P2=0x7f; delay(10); P2=0XFF; delay(60);/函数名: void keyscan()/功能:键扫描并实

16、现键功能 /说明: 调制时间、年月日、设置闹铃、秒表开启关闭void keyscan()/*K1*/ if(kaig=0) delay(10); if(kaig=0) dodisplay( );while(!kaig); TR0=!TR0; flag=!flag;i=1;/*开启一次才为1*/*K2*/ if(ksec=0) display(); if(ksec=0) do display();while(!ksec); if(flag=0)&(dx=0)/调整秒 sec+; if(sec=60)/ sec=0; display(); if(flag=0)&(dx=1)/调整日 day+; i

17、f(mou=1)|(mou=3)|(mou=5)|(mou=7)|(mou=8)|(mou=10)|(mou=12) if(day=32) day=1; /越过该月天数日期的日为1 goto www; if(mou=4)|(mou=6)|(mou=9)|(mou=11) if(day=31) day=1; /越过该月天数日期的日为1goto www; if(year%4=0)&(year%100)!=0)|(year%400=0)&(mou=2)if(day=30) day=1; /越过该月天数日期的日为1goto www;if(mou=2) if(day=29) day=1; www:dis

18、play();if(flag=1)&(i=1) ET1=!ET1; /秒表开关 j=1; /*K3*/ if(kmin=0)/ display(); if(kmin=0) do display();while(!kmin); if(flag=0)&(dx=0)/调整分 min+; if(min=60) min=0; display(); if(dx=1)&(flag=0)/调整月 mou+; if(mou=13) mou=1;if(year%4=0)&(year%100)!=0)|(year%400=0)&(mou=2)/闰年 if(day=30) day=1; if(mou=2)&(year

19、%4!=0)if(day=29) day=1;if(mou=4)|(mou=6)|(mou=9)|(mou=11) if(day=31) day=1; if(flag=1)&(j=1) j=0; hao=0; miao=0; fen=0; shi=0; /*K4* */ if(khour=0)/ display(); if(khour=0) do display();while(!khour); if(flag=0)&(dx=0)/调整时 hour+; if(hour=24) hour=0; display(); if(dx=1)&(flag=0)/调整年 year+; if(year%4=0

20、)&(year%100)!=0)|(year%400=0)&(mou=2)/闰年 if(day=30) day=1; if(mou=2)&(year%4!=0) if(day=29) day=1; /不是闰年 if(year%100=0) year=100*(year/100);/*K5*/ if(date=0) display();if(date=0) dodisplay(); while(!date);/键释放 dx=!dx; /时间和日期显示转换/*K6*/ if(bai=0) display(); if(bai=0) do display();while(!bai); /键释放if(f

21、lag=1) co=!co; /整点报时控制 if(loud=0)loud=1; /强制关闭整点闹铃 if(flag=0)&(dx=1) /年百位千位调整 year=year+100; if(year=10000) year=year%100;/*K7* */ if(save=0)&(dx=0)&(flag=0) display(); if(save=0) dodisplay();while(!save);/ /shour=hour; /保存闹铃设置的时smin=min; /保存闹铃设置的分/*K8*/ if(offl=0) display(); if(offl=0) do display(); while(!offl);/等待键释放 if(loud=0) loud=1; /强制关闭闹铃stopnao=!stopnao; /闹铃开关标志

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

当前位置:首页 > 教育专区 > 单元课程

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com