本文目录一览
此手表不仅是一种独特的时间和互动的体验。
显示此手表的核心功能功能的功能包括:真实时间显示:5 1 MicroController使用准确的计算来控制数字管以在“每个小时”秒钟的格式中实时显示真实时间的时间,因此每时每刻都可以清晰可见。
用户交互:六个按钮分别对应时间,分钟和秒。
方便重置几秒钟:它配备了一个特殊的第二重置按钮。
基本技术概念5 1 微控制器以低能消耗和高性能而闻名。
无论是 - ray at a in a in a a in a a ray sTC,该时钟设计与无缝兼容,反映了嵌入式控制场中5 1 个微控制器的广泛适用性。
通过Protues 8 .7 软件,我们部署了良好的仿真设计来可视化设计过程。
同时,使用准确的加密编写和优化程序。
打开计时器0 = 1 ; 为了充分体验该数字手表的魅力,我们在整个网络上提供了一个完整的软件包,包括KEIL5 程序,8 .7 安全模拟,详细的视频指南,开发指南和其他链接。
请注意,这是与图表,PCB设计和设计报告无关的仿真设计,但是随附的视频说明和说明将确保每个用户都可以轻松启动。
获取信息的方法:[Tencent文档]“手工艺数字时钟基于5 1 个微控制器”,只需单击即可立即启动您的数字手表设计旅程。
在探索这一创新时钟的过程中,我们将帮助您了解微控制器的魔力,并体验自己的手来创造时间的艺术。
立即加入我们,使技术和生活更加紧密地整合!
参考端口:数字管数据P0,数字管控制P2 ; 数字管控制P2 ; 侧数字管P2 P2 P2 P2 P2 P2 P2 P2 P2 P2 P2 ; 缓冲区0000HA用于识别启动添加地址。
JMP Mainorg 01 00HM0 001 00,#01 00; #0fhhmov smot,#02 HWS 2 8 H; #02 HWS 2 8 H,#02 HWS 2 8 H; #02 HW TL0; #02 H; #02 H; Timflow计时器; 自动重新安装。
启用计时器0 InterB FinB TR0。
总交叉的前EA; #DIS_CODE,#2 MOVCA, + DPTRMOV DPUA,02 HOV DPTRMOV DPUF @ a + DTPTRMOV DPUF @ a + dtptrmova, + dtptrmova, + dtptrmova, + dtptrmova, + dptrmova, + dptrmova, + dptrmova dtprmca amova,#8 M OVCA, + dptrmov dis_buf + 07 h,adisplay:mov dis_digit,#0feh; 从第一个数字管磁盘磁盘,#0SetB TR0对MOV的初始扫描; 启动计时器0,启动动态扫描以显示main_lp:nop; 主要程序循环,可以添加其他代码以更改5 0h-5 7 h中的值,以更改显示sjmp main_lp; ===================================================================================================== ================== 0 ==================================================================== 0 ===================================================================================================== ================== 0 ==================================================================== 0 * ===================================================================================================== ================== 0 ==================================================================== 0 ===================================================================================================== ================== 0 ==================================================================== 0 * ===================================================================================================== ================== 0 ==================================================================== 0 ===================================================================================================== ================== 0 ==================================================================== 0 * ===================================================================================================== ================== 0 ==================================================================== 0 ===================================================================================================== ================== 0 ==================================================================== 0 * =============== r0,a; r0 =基础地址 +偏移mov @ r0; @显示代码SWEV数字管Rl amovdis_digis_dovdis_dink。
DB 2 8 H,7 7 ,7 2 H,7 2 H,7 7 ,2 1 H,2 1 H,AI9 H,0B1 H,0B1 H,0B1 H,0B1 H,0B1 H
****************************** ,0。
; 等于1 0,清除MOV2 4 H,#00H inc2 5 h ljmpexit退出:ljmpdisplay; Mova,2 0h movca,@a+dptr movp0,clrp2 .7 lcalldelay setbp2 .7 ; 十个数字,#0BFH movp0,clrp2 .5 lcallltely setBp2 .5 ; 3 H movca,@a+dptr movp0,clrp2 .3 lcallltely setB2 .3 ; A+DPTR MOVP0,clrp2 .1 lcallldelay setb2 .1 ; 显示movdptr时一个位,#table1 ; 该位table1 用于摆脱Mova,2 5 h movca,@a+dptr movp0,clrp2 .0 lcalldeldeldeldeldeldel ay setbp2 .0; 4 H B0C0H,0F9 H,0A4 H,0B0H,9 9 H,9 2 H,8 2 H,0F8 H,8 0H,9 0H; 查看航空公司1 :DB0FFH,0F9 H,0A4 H,0B0H,9 9 H,9 2 H,8 2 H,0F8 H,8 0H,ND,ND
独立按钮可以执行时间日历。
警报设置软件编程:KEIL项目C语言代码: /*********************************************项目名称:数字管电子时钟实现功能:数字管显示时间和日期,时间和时间和日期,并且可以设置警报,并设置警报戒指一分钟。
******************************************/#includereg5 2 .h#defineuintunsignedint#defineucharunsignedcharuntnumwe,tt,t,numdu,set,aclock,rili;unsignedlonginttime,time1 =0;unsignedlongintsecond,minute,hour,year=2 01 2 ,月= 1 2 ,day = 3 1 ; uCharCodedu [] = {0x3 f,0x06 ,0x5 b,0x4 f,0x6 6 ,0x6 d,0x7 D,0x07 ,0x7 f,0x6 f,0x6 f,0x7 7 ,0x7 c,0x7 7 ,0x7 c,0x3 9 ,0x5 e,0x3 9 ,0x5 e,0x3 9 ,0x5 e,0x7 9 ,0x7 1 }; uCharCodeWe [] = {0xfe,0xfd,0xfb,0xf7 ,0xef,0xdf,0xbf,0xbf,0x7 f}; ucharmth [1 3 ] = {0,3 1 ,3 1 ,2 8 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 . ,3 0,3 1 ,3 0,3 1 }; // //每月相应的天数ucharymth [1 3 ] = {0,2 ,9 ,2 ,2 ,1 ,2 ,1 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,1 ,2 ,2 }; sbitdula = p2 ^0; sbitwela = p2 ^1 ; sbitKey0; sbitKey0 = p3 = p3 ^2 ;/sept s bity a s bity a s bity a s bity a s bitikey1 sbitKey2 = p3 ^0; //设置警报sbitkey3 = p3 ^3 ; sbitbeep = p2 ^2 ; // ring voiddelay(uintdel); // delay Program void void void display(uintmm,uintmm,uinthy,uinthy); /// intclock(); //计算时间voidcalender(); //计算日期voidmain(){p2 = 0xff; init(); 而(1 ){add(); 如果(rili == 1 )//指示显示(日,月,年); elsedisplay(第二,分钟, 小时); alarmclock();}} voiddisplay(uintsd,uintmm,uinthy){inty0,y1 ,y2 ; if(rili == 1 ){y0 = hy/1 000,y 1 = hy%1 000; y2 = hy%1 00;} for(numwe = 0; numwe8 ; numwe ++){p0 = 0xff; wela = 1 ; p0; p0 = we [numwe]; wela = 0; p0 = 0xff ; dula = 1 ; switch(numwe){case0:p0 =(tt == 1 set == 1 )?0x00:(rili == 1 ) ?0x00:(rili == 1 )?du [y1 /1 00]:du [hy%1 0]; break; case2 :p0 =(rili!= 1 )?0x4 0 :( tt == 1 set == 3 )?0x00:du [y2 /1 0]; breack; cas e3 :p0 =(tt == 1 set == 4 )?0x00:(rili == 1 )? p0 =(rili!= 1 )?0x4 0 :( tt == 1 set == 6 )?0x00:du [mm%1 0]+0x8 0; break; case6 :case6 :p0 =(tt == 1 1 )?0x4 0:(tt == 1 set == 1 set == 6 ) set == 7 )?0x00:du [sd/1 0]; break; case7 :p0 =(tt == 1 set == 8 )?0x00:dU [sd%1 0]; break;} dula = 0; delay(5 );}} voidInit(}} voidInit(;}} voidInit(;} 1 TH0 =(6 5 5 3 6 -5 0000)/2 5 6 ; //计时器是高八位//计时5 mstl0 =(6 5 5 3 6 -5 0000)%2 5 6 ; // //计时器是高8 位// Timer 5 MStl0 =(6 5 5 3 6 -5 0000) tcon = 0x1 5 ; //启动计时器和工作模式} intclock()//计算时间{if(t == 1 0 | t == 2 0)tt =!tt; // flash flag bit if(t == 2 0){t = 0; if(set!= 0alock == 0))time ++; if(time = time1 time1 +6 0)beep = 0; elsebeep = 1 ; calender(); calender(); if(aclock == 0){second = time %6 0; minute =(时间%3 6 00)/6 0; hour = time/3 6 00; if(hour == 2 4 ){time = 0; hour = 0; hour = 0;}} else {second = time1 %6 0; minute =(time1 %3 6 00)/6 0; hour = time1 /3 6 00; hour = time1 /3 6 00; if(hour == 2 4 ) voiddelay(uintdel){uinti,j; for(i = 0; idel; i ++)for(j = 0; j1 00; j1 00; j ++);} voidTimer0()intrupt1 // timper 0 Intrupt1 // timer 0中断{th0 =(6 5 5 3 6 -5 0000) 5 MSTL0 =(6 5 5 3 6 -5 0000)%2 5 6 ; // Timer 8 位t ++; clock();} voidSetTime()interrupt0 // it0 // it0 // it0 {if(key0 == 0){delays(delays(2 ); if(key0 == 0){if(rili!= 1 ){if(set == 2 | set == 5 )set = set = set+2 ; elsset ++;} elsset ++; if(set == 9 ){set = 0; t = 0; t = 0;} // voidCalendar()interrupt2 //日历{if(key3 == 0){delay(2 ); if(key3 == 0)rili =!rili; set = 0; aclock = 0;}} voidCalender()//计算日历{if(time == 8 6 4 00){day ++; if(((年%4 == 0年%1 00!= 0)|(年%4 00 == 0))mth [2 ] = 2 9 ; elSemth [2 ] = 2 8 ; if(daymth [noter]){day = 1 ; soner ++; nover ++; if(montr1 2 ) {intge,ge1 ,ge2 ,shi,shi1 ,shi2 ,bai2 ,qian2 ; if(rili == 1 ){ge = day%1 0; ge1 = mo nth%1 0; ge2 =年%1 0; shi = day/1 0; shi1 =月/1 0; shi2 = earl; bai2 = ear2 = earl; qian2 = Year/1 000;} else {ge = 第二%1 0; ge1 =分钟%1 0; ge2 =小时%1 0; shi = second/1 0; shi1 = minute/1 0; shi2 = hour/1 0;} if(key1 == 0){delays(2 ); if(key1 == 0){if(rili == 1 ){if((((eNem%4 == 0年%1 00!= 0))|(年%4 00 == 0))ymth [2 ] = 1 0; elseymth [2 ] = 9 ; switch(set){set(set){case1 :qi an2 =(Qian2 +1 )%1 0; Break; CASE2 :BAI2 =(BAI2 +1 )%1 0; Break; CASE3 :SHI2 =(SHI2 +1 )%1 0; Break; Break; Case4 :GE2 =(GE2 +1 )%1 0; BRE AK; case5 :shi1 =(shi1 +1 )%2 ; break; case6 :ge1 =(shi1 == 1 )?(ge1 +1 )%3 :(ge1 +1 )%1 0; break; break; case7 :shi =(月== 2 )?(s HI+1 )%3 :(SHI+1 )%4 ; break; case8 :ge =(shi == 3 )?(ge+1 )%ymth [月] :(月== 2 )?(ge+1 )%ymth [2 ] :( ge+1 ):( ge+1 )%1 0; brea k;}年= qian2 *1 000+bai2 *1 00+shi2 *1 0+ge2 ; shi1 *1 0+ge1 ; day; day = shi*1 0+ge;} else {switch(set){case1 :shi2 = (SHI2 +1 )%3 ; Break; CASE2 :GE2 =(GE2 +1 )%4 ; Break; CASE4 :SHI1 =(SHI1 +1 )%6 ; Break; Case5 :GE1 =(GE1 +1 )%1 0; break; break; cas; cas E7 :shi =(shi+1 )%6 ; break; case8 :ge =(ge+1 )%1 0; break;} second = shi*1 0+ge; minute = shi1 *1 0+ge1 ; hour = shi2 *1 0+ge2 ; ge2 ; if(aclock == 0)时间= 0)时间= 3 6 00+minne*3 6 00+minne*3 6 00+minine+second; Elsetime1 = Elsetime = Elsetime = 3 6 00+Secte; 1 );}}}} voidalarmclock()//设置警报 {if(key2 == 0){delay(2 ); if(key2 == 0){while(!key2 ); clock = 1 ; clock = 1 ; rili = 0; set = 0; set = 0; while(1 ){if(rili == 1 )display(day,day,day,ner,ear,年,年度,年度); elsedisplay(elsedisplay(secons,minine,hour,hour,hour);添加(添加(添加();添加(添加(); if(key 2 = = 0) e(!key2 ); clock = 0; set = 0; break;}}}}}}}}} pin连接指令:1 PO端口连接到8 作为通用数字管; 2 p2 ^0和p2 ^1 分别是段闩锁和数字管的钻头闩锁; 3 P3 ^0是警报显示功能按钮p3 ^1 是设置时钟时的数字调整,而单向增加p3 ^2 是设置键。
您可以设置闹钟,日期和时间选择p3 ^3 是日立和时间视图键4 的转换。
可以使用LED灯或蜂鸣器选择闹钟,默认提醒时间为1 分钟。
软件模拟和实验效果:
(); 空的(乌沙兹); 空白表演(UCHAR,UKAK,YUUCH),空声音(); / ***************************** s = 1 , alarm time Display Time Display (Hour 1 , MINU1 , CC); //闹钟显示}; 显示(5 小时,MINU0,SEQ); //小时小时显示; * / {她显示(Time,Minu,sec); // sto表面拟合位置}} ec = 0; 时间= 0; t ex1 = 1 ; / 1 位置设置中断ET0 = 1 ; 2 //停止p; 时间++; K ++; (k == 3 )k = 0; if(k0 == 1 ){dr0 =}} {k0 =} **************************************************************************************** tl1 =(6 5 5 3 6 -5 0000)%2 5 6 ,如果(b == 2 ){secker 0 = 0; }}}}}} sak 1 = 0; minu1 = 0; 时间= 0; 0;}}}}}}}}}}}}}}} {mineu0 == 6 0){minu0 == 6 0){minu0 == 6 0){minu0 ==; }}}ከሆነ(tiaosih == 0){ሰዓት(ሰዓት== 2 4 )ቁጥር******************************************** 0xf; p2 =表[(5 ); p0 = 0xf; p2 =表[1 ]; 延迟(5 ); p0 = 0xf; p2 = 1 (s1 ); p0 = 0x]; p0 = 0xf [0]; [0]; ****** /空声音
- 基于 AT89C51 单片机数字时钟如何设计?
- 单片机如何实现一位显示八位数据?
- 求基于51单片机P01,P2 LED接数码管,用三极管驱动的电子时钟程序,大神求救啊!
- 单片机控制多位数码管的电子时钟程序
- 题目二:电子时钟的设计 设计任务:1. 用8个7段LED数码管作为显示设备,设计时钟功能;(40) 2. 可以分别
基于 AT89C51 单片机数字时钟如何设计?
发现为5 1 个微控制器设计数字手表的艺术:熟练而实用的解决方案使我们能够根据AT8 9 C5 1 微控制器 - 直观且易于操作的数字手表发现创新的设计,该手表与微型控制器5 1 巧妙地结合在一起,与此手表5 1 相结合。此手表不仅是一种独特的时间和互动的体验。
显示此手表的核心功能功能的功能包括:真实时间显示:5 1 MicroController使用准确的计算来控制数字管以在“每个小时”秒钟的格式中实时显示真实时间的时间,因此每时每刻都可以清晰可见。
用户交互:六个按钮分别对应时间,分钟和秒。
方便重置几秒钟:它配备了一个特殊的第二重置按钮。
基本技术概念5 1 微控制器以低能消耗和高性能而闻名。
无论是 - ray at a in a in a a in a a ray sTC,该时钟设计与无缝兼容,反映了嵌入式控制场中5 1 个微控制器的广泛适用性。
通过Protues 8 .7 软件,我们部署了良好的仿真设计来可视化设计过程。
同时,使用准确的加密编写和优化程序。
打开计时器0 = 1 ; 为了充分体验该数字手表的魅力,我们在整个网络上提供了一个完整的软件包,包括KEIL5 程序,8 .7 安全模拟,详细的视频指南,开发指南和其他链接。
请注意,这是与图表,PCB设计和设计报告无关的仿真设计,但是随附的视频说明和说明将确保每个用户都可以轻松启动。
获取信息的方法:[Tencent文档]“手工艺数字时钟基于5 1 个微控制器”,只需单击即可立即启动您的数字手表设计旅程。
在探索这一创新时钟的过程中,我们将帮助您了解微控制器的魔力,并体验自己的手来创造时间的艺术。
立即加入我们,使技术和生活更加紧密地整合!
单片机如何实现一位显示八位数据?
1 数字试管计划-1 、2 ,5 、7 、7 ,在8 个数字管中描述。参考端口:数字管数据P0,数字管控制P2 ; 数字管控制P2 ; 侧数字管P2 P2 P2 P2 P2 P2 P2 P2 P2 P2 P2 ; 缓冲区0000HA用于识别启动添加地址。
JMP Mainorg 01 00HM0 001 00,#01 00; #0fhhmov smot,#02 HWS 2 8 H; #02 HWS 2 8 H,#02 HWS 2 8 H; #02 HW TL0; #02 H; #02 H; Timflow计时器; 自动重新安装。
启用计时器0 InterB FinB TR0。
总交叉的前EA; #DIS_CODE,#2 MOVCA, + DPTRMOV DPUA,02 HOV DPTRMOV DPUF @ a + DTPTRMOV DPUF @ a + dtptrmova, + dtptrmova, + dtptrmova, + dtptrmova, + dptrmova, + dptrmova, + dptrmova dtprmca amova,#8 M OVCA, + dptrmov dis_buf + 07 h,adisplay:mov dis_digit,#0feh; 从第一个数字管磁盘磁盘,#0SetB TR0对MOV的初始扫描; 启动计时器0,启动动态扫描以显示main_lp:nop; 主要程序循环,可以添加其他代码以更改5 0h-5 7 h中的值,以更改显示sjmp main_lp; ===================================================================================================== ================== 0 ==================================================================== 0 ===================================================================================================== ================== 0 ==================================================================== 0 * ===================================================================================================== ================== 0 ==================================================================== 0 ===================================================================================================== ================== 0 ==================================================================== 0 * ===================================================================================================== ================== 0 ==================================================================== 0 ===================================================================================================== ================== 0 ==================================================================== 0 * ===================================================================================================== ================== 0 ==================================================================== 0 ===================================================================================================== ================== 0 ==================================================================== 0 * =============== r0,a; r0 =基础地址 +偏移mov @ r0; @显示代码SWEV数字管Rl amovdis_digis_dovdis_dink。
DB 2 8 H,7 7 ,7 2 H,7 2 H,7 7 ,2 1 H,2 1 H,AI9 H,0B1 H,0B1 H,0B1 H,0B1 H,0B1 H
求基于51单片机P01,P2 LED接数码管,用三极管驱动的电子时钟程序,大神求救啊!
程序名称:5 1 微控制器数字管时钟组件进程说明:电子时钟实施2 4 小时,数字管宽度为8 个数字,显示时间,精细屏幕格式,第二个数字:2 3 -5 9 -5 9 (如果修改了十个小时,则不会在P1 .1 等级上显示。****************************** ,0。
; 等于1 0,清除MOV2 4 H,#00H inc2 5 h ljmpexit退出:ljmpdisplay; Mova,2 0h movca,@a+dptr movp0,clrp2 .7 lcalldelay setbp2 .7 ; 十个数字,#0BFH movp0,clrp2 .5 lcallltely setBp2 .5 ; 3 H movca,@a+dptr movp0,clrp2 .3 lcallltely setB2 .3 ; A+DPTR MOVP0,clrp2 .1 lcallldelay setb2 .1 ; 显示movdptr时一个位,#table1 ; 该位table1 用于摆脱Mova,2 5 h movca,@a+dptr movp0,clrp2 .0 lcalldeldeldeldeldeldel ay setbp2 .0; 4 H B0C0H,0F9 H,0A4 H,0B0H,9 9 H,9 2 H,8 2 H,0F8 H,8 0H,9 0H; 查看航空公司1 :DB0FFH,0F9 H,0A4 H,0B0H,9 9 H,9 2 H,8 2 H,0F8 H,8 0H,ND,ND
单片机控制多位数码管的电子时钟程序
使用微控制器控制多位数数字管的电子时钟,并使用独立按钮来控制它,该按钮可以显示时间和日期,并且具有警报功能。独立按钮可以执行时间日历。
警报设置软件编程:KEIL项目C语言代码: /*********************************************项目名称:数字管电子时钟实现功能:数字管显示时间和日期,时间和时间和日期,并且可以设置警报,并设置警报戒指一分钟。
******************************************/#includereg5 2 .h#defineuintunsignedint#defineucharunsignedcharuntnumwe,tt,t,numdu,set,aclock,rili;unsignedlonginttime,time1 =0;unsignedlongintsecond,minute,hour,year=2 01 2 ,月= 1 2 ,day = 3 1 ; uCharCodedu [] = {0x3 f,0x06 ,0x5 b,0x4 f,0x6 6 ,0x6 d,0x7 D,0x07 ,0x7 f,0x6 f,0x6 f,0x7 7 ,0x7 c,0x7 7 ,0x7 c,0x3 9 ,0x5 e,0x3 9 ,0x5 e,0x3 9 ,0x5 e,0x7 9 ,0x7 1 }; uCharCodeWe [] = {0xfe,0xfd,0xfb,0xf7 ,0xef,0xdf,0xbf,0xbf,0x7 f}; ucharmth [1 3 ] = {0,3 1 ,3 1 ,2 8 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 . ,3 0,3 1 ,3 0,3 1 }; // //每月相应的天数ucharymth [1 3 ] = {0,2 ,9 ,2 ,2 ,1 ,2 ,1 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,1 ,2 ,2 }; sbitdula = p2 ^0; sbitwela = p2 ^1 ; sbitKey0; sbitKey0 = p3 = p3 ^2 ;/sept s bity a s bity a s bity a s bity a s bitikey1 sbitKey2 = p3 ^0; //设置警报sbitkey3 = p3 ^3 ; sbitbeep = p2 ^2 ; // ring voiddelay(uintdel); // delay Program void void void display(uintmm,uintmm,uinthy,uinthy); /// intclock(); //计算时间voidcalender(); //计算日期voidmain(){p2 = 0xff; init(); 而(1 ){add(); 如果(rili == 1 )//指示显示(日,月,年); elsedisplay(第二,分钟, 小时); alarmclock();}} voiddisplay(uintsd,uintmm,uinthy){inty0,y1 ,y2 ; if(rili == 1 ){y0 = hy/1 000,y 1 = hy%1 000; y2 = hy%1 00;} for(numwe = 0; numwe8 ; numwe ++){p0 = 0xff; wela = 1 ; p0; p0 = we [numwe]; wela = 0; p0 = 0xff ; dula = 1 ; switch(numwe){case0:p0 =(tt == 1 set == 1 )?0x00:(rili == 1 ) ?0x00:(rili == 1 )?du [y1 /1 00]:du [hy%1 0]; break; case2 :p0 =(rili!= 1 )?0x4 0 :( tt == 1 set == 3 )?0x00:du [y2 /1 0]; breack; cas e3 :p0 =(tt == 1 set == 4 )?0x00:(rili == 1 )? p0 =(rili!= 1 )?0x4 0 :( tt == 1 set == 6 )?0x00:du [mm%1 0]+0x8 0; break; case6 :case6 :p0 =(tt == 1 1 )?0x4 0:(tt == 1 set == 1 set == 6 ) set == 7 )?0x00:du [sd/1 0]; break; case7 :p0 =(tt == 1 set == 8 )?0x00:dU [sd%1 0]; break;} dula = 0; delay(5 );}} voidInit(}} voidInit(;}} voidInit(;} 1 TH0 =(6 5 5 3 6 -5 0000)/2 5 6 ; //计时器是高八位//计时5 mstl0 =(6 5 5 3 6 -5 0000)%2 5 6 ; // //计时器是高8 位// Timer 5 MStl0 =(6 5 5 3 6 -5 0000) tcon = 0x1 5 ; //启动计时器和工作模式} intclock()//计算时间{if(t == 1 0 | t == 2 0)tt =!tt; // flash flag bit if(t == 2 0){t = 0; if(set!= 0alock == 0))time ++; if(time = time1 time1 +6 0)beep = 0; elsebeep = 1 ; calender(); calender(); if(aclock == 0){second = time %6 0; minute =(时间%3 6 00)/6 0; hour = time/3 6 00; if(hour == 2 4 ){time = 0; hour = 0; hour = 0;}} else {second = time1 %6 0; minute =(time1 %3 6 00)/6 0; hour = time1 /3 6 00; hour = time1 /3 6 00; if(hour == 2 4 ) voiddelay(uintdel){uinti,j; for(i = 0; idel; i ++)for(j = 0; j1 00; j1 00; j ++);} voidTimer0()intrupt1 // timper 0 Intrupt1 // timer 0中断{th0 =(6 5 5 3 6 -5 0000) 5 MSTL0 =(6 5 5 3 6 -5 0000)%2 5 6 ; // Timer 8 位t ++; clock();} voidSetTime()interrupt0 // it0 // it0 // it0 {if(key0 == 0){delays(delays(2 ); if(key0 == 0){if(rili!= 1 ){if(set == 2 | set == 5 )set = set = set+2 ; elsset ++;} elsset ++; if(set == 9 ){set = 0; t = 0; t = 0;} // voidCalendar()interrupt2 //日历{if(key3 == 0){delay(2 ); if(key3 == 0)rili =!rili; set = 0; aclock = 0;}} voidCalender()//计算日历{if(time == 8 6 4 00){day ++; if(((年%4 == 0年%1 00!= 0)|(年%4 00 == 0))mth [2 ] = 2 9 ; elSemth [2 ] = 2 8 ; if(daymth [noter]){day = 1 ; soner ++; nover ++; if(montr1 2 ) {intge,ge1 ,ge2 ,shi,shi1 ,shi2 ,bai2 ,qian2 ; if(rili == 1 ){ge = day%1 0; ge1 = mo nth%1 0; ge2 =年%1 0; shi = day/1 0; shi1 =月/1 0; shi2 = earl; bai2 = ear2 = earl; qian2 = Year/1 000;} else {ge = 第二%1 0; ge1 =分钟%1 0; ge2 =小时%1 0; shi = second/1 0; shi1 = minute/1 0; shi2 = hour/1 0;} if(key1 == 0){delays(2 ); if(key1 == 0){if(rili == 1 ){if((((eNem%4 == 0年%1 00!= 0))|(年%4 00 == 0))ymth [2 ] = 1 0; elseymth [2 ] = 9 ; switch(set){set(set){case1 :qi an2 =(Qian2 +1 )%1 0; Break; CASE2 :BAI2 =(BAI2 +1 )%1 0; Break; CASE3 :SHI2 =(SHI2 +1 )%1 0; Break; Break; Case4 :GE2 =(GE2 +1 )%1 0; BRE AK; case5 :shi1 =(shi1 +1 )%2 ; break; case6 :ge1 =(shi1 == 1 )?(ge1 +1 )%3 :(ge1 +1 )%1 0; break; break; case7 :shi =(月== 2 )?(s HI+1 )%3 :(SHI+1 )%4 ; break; case8 :ge =(shi == 3 )?(ge+1 )%ymth [月] :(月== 2 )?(ge+1 )%ymth [2 ] :( ge+1 ):( ge+1 )%1 0; brea k;}年= qian2 *1 000+bai2 *1 00+shi2 *1 0+ge2 ; shi1 *1 0+ge1 ; day; day = shi*1 0+ge;} else {switch(set){case1 :shi2 = (SHI2 +1 )%3 ; Break; CASE2 :GE2 =(GE2 +1 )%4 ; Break; CASE4 :SHI1 =(SHI1 +1 )%6 ; Break; Case5 :GE1 =(GE1 +1 )%1 0; break; break; cas; cas E7 :shi =(shi+1 )%6 ; break; case8 :ge =(ge+1 )%1 0; break;} second = shi*1 0+ge; minute = shi1 *1 0+ge1 ; hour = shi2 *1 0+ge2 ; ge2 ; if(aclock == 0)时间= 0)时间= 3 6 00+minne*3 6 00+minne*3 6 00+minine+second; Elsetime1 = Elsetime = Elsetime = 3 6 00+Secte; 1 );}}}} voidalarmclock()//设置警报 {if(key2 == 0){delay(2 ); if(key2 == 0){while(!key2 ); clock = 1 ; clock = 1 ; rili = 0; set = 0; set = 0; while(1 ){if(rili == 1 )display(day,day,day,ner,ear,年,年度,年度); elsedisplay(elsedisplay(secons,minine,hour,hour,hour);添加(添加(添加();添加(添加(); if(key 2 = = 0) e(!key2 ); clock = 0; set = 0; break;}}}}}}}}} pin连接指令:1 PO端口连接到8 作为通用数字管; 2 p2 ^0和p2 ^1 分别是段闩锁和数字管的钻头闩锁; 3 P3 ^0是警报显示功能按钮p3 ^1 是设置时钟时的数字调整,而单向增加p3 ^2 是设置键。
您可以设置闹钟,日期和时间选择p3 ^3 是日立和时间视图键4 的转换。
可以使用LED灯或蜂鸣器选择闹钟,默认提醒时间为1 分钟。
软件模拟和实验效果:
题目二:电子时钟的设计 设计任务:1. 用8个7段LED数码管作为显示设备,设计时钟功能;(40) 2. 可以分别
#incine“ regeTee” regeTee'red5 1 .h>; ukcy,//小时时间,mincy,//时钟,0x6 6 ,0x5 b,0x6 6 ,0x5 b,0x6 6 ,0x,0x6 6 ,0x,0x6 6 ,0x。(); 空的(乌沙兹); 空白表演(UCHAR,UKAK,YUUCH),空声音(); / ***************************** s = 1 , alarm time Display Time Display (Hour 1 , MINU1 , CC); //闹钟显示}; 显示(5 小时,MINU0,SEQ); //小时小时显示; * / {她显示(Time,Minu,sec); // sto表面拟合位置}} ec = 0; 时间= 0; t ex1 = 1 ; / 1 位置设置中断ET0 = 1 ; 2 //停止p; 时间++; K ++; (k == 3 )k = 0; if(k0 == 1 ){dr0 =}} {k0 =} **************************************************************************************** tl1 =(6 5 5 3 6 -5 0000)%2 5 6 ,如果(b == 2 ){secker 0 = 0; }}}}}} sak 1 = 0; minu1 = 0; 时间= 0; 0;}}}}}}}}}}}}}}} {mineu0 == 6 0){minu0 == 6 0){minu0 == 6 0){minu0 ==; }}}ከሆነ(tiaosih == 0){ሰዓት(ሰዓት== 2 4 )ቁጥር******************************************** 0xf; p2 =表[(5 ); p0 = 0xf; p2 =表[1 ]; 延迟(5 ); p0 = 0xf; p2 = 1 (s1 ); p0 = 0x]; p0 = 0xf [0]; [0]; ****** /空声音