51单片机控制数码管显示时钟,独立按键怎么弄
独立按钮的处理相对简单,通常通过IO端口单独控制。主要步骤包括未接触和检测到按钮的紧急和起重状态。
例如,您可以这样做:sbitkey = p1 ^0; if(key == 0){晚(1 0); if(key == 0){keyVal = 1 ; while(key == 0);}}在这里,首先,sbitkey = p1 ^0是确定的; 为了删除锁定的抖动,已经添加了1 0毫秒的延迟。
再次检测重要状态。
最后,输入循环,等待键发布。
在实际应用中,这里无限的主要处理。
还必须考虑大量键和长期按下的点击。
例如,可以添加计数器来检测可以添加的按下的按压或定性时钟的数量,以确定键是否长时间保存。
此外,为了确保程序的强度,建议检查错误并处理每个主要处理步骤中适当的例外。
例如:检查主要状态在延迟功能后仍为0,以防止由于外部噪声而导致错误的评估。
在5 1 个微控制器显示数字管的项目中,处理是不可或缺的一部分。
通过上述方法,可以有效地完成节点的检测和反馈,从而为时钟功能提供可靠的操作控制。
编程时,您还需要注意以避免抖动锁对程序的影响。
它可以通过硬件电路设计,例如引入调试电路或向软件添加延迟以确保主要状态检测的准确性。
简而言之,尽管对独立按钮的处理非常简单,但是在详细实施时,仍然必须谨慎,以确保程序的稳定性和可靠性。
单片机控制多位数码管的电子时钟程序
微控制器可以控制多座数字管的电子时钟,并且独立按钮可以显示时间和日期,而独立的按钮可以执行警报设置软件编程。Keil Engineering C语言代码:***** *******************************:数字管电子时钟实施功能:数字管显示时间,日期,时间和日期可以调整并闹钟 它可以设置,并且闹钟响了1 分钟。
************************************* #Includereg5 2 .h#Defineuintunsignedint , TT, T, NUMDU, Set,Aclock,Rili; unsignedlonginttime,time1 = 0; unsignedlongintsecond,分钟,小时,年= 2 01 2 ,mon = 1 2 ,day = 3 1 ; uCharCodedu [] = {0x3 f,0x06 ,0x5 b,0x4 f,0x6 6 ,0x6 d,0x7 d,0x07 ,0x7 f,0x6 6 f,0x7 7 ,0x7 c,0x3 9 ,0x5 e,0x3 9 ,0x5 e,0x7 9 ,0x7 1 }; ] = {0xfe,0xfd,0xfb,0xf7 ,0xef,0xdf,0xbf,0x7 f}; Ucharmth [1 3 ] = {0,3 1 ,2 8 ,3 1 ,3 1 ,3 1 ,3 1 ,3 0,3 1 ,3 0,3 1 }; //每月ucharymth [1 3 ] = {0,2 ,9 ,2 ,2 ,2 ,2 ,2 ,2 ,2 }; sbitdula = p2 ^0; sbitbeep = p2 ^2 ; // ring voiddelay(uintdel); //程序void display(uintsd,uintmm,uinthy); // show program voidadd(); // voidalarmclock(); //闹钟voidinit(); //初始化intclock(); //计算时间voidCalender(); //计算日期voidmain(){p2 = 0xff; init(); 而(1 ){add(); 如果(rili == 1 )//日期日历和时间显示显示(太阳,月,年); Elsedisplay(第二,分钟,时间); AlarmClock();}} voidDisplay(Uintsd,Uintmm,uinthy){Inty0,Y1 ,Y2 ; if(rili ==){y0 = hy/1 000,y1 = hy%1 000; ; dula = 1 ; switch(numwe){case0:p0 =(tt == 1 set == 1 )? 0x00 :( rili == 1 )? du [y0]:du [hy/1 0]; 休息; case1 :p0 =(tt == 1 set == 2 )? 0x00 :( rili == 1 )? DU [Y1 /1 00]:DU [HY%1 0]; 休息; case2 :p0 =(rili!= 1 )? 0x4 0 :( tt == 1 set == 3 )? 0x00:du [y2 /1 0]; 休息; CAS E3 :p0 =(tt == 1 set == 4 )? 0x00 :( rili == 1 )? DU [HY%1 0]+0x8 0:DU [mm/1 0]; 休息; case4 :p0 =(tt == 1 set == 5 )? 0x00 :( rili == 1 )? DU [mm/1 0]:du [mm%1 0]; 休息; case5 :p0 =(rili!= 1 )? 0x4 0 :( tt == 1 set == 6 )? 0x00:dU [mm%1 0]+0x8 0; 休息; case6 :p0 =(tt == 1 set == 7 )? 0x00:DU [SD/1 0]; 休息; case7 :p0 =(tt == 1 set == 8 )? 0x00:DU [SD%1 0]; 休息;} dula = 0; 延迟(5 );}} voidInit()//初始化{wela = 0; dula = 0; tmod = 0x01 ; //计时器0设置计时器0工作模式1 TH0 =(6 5 5 3 6 -5 0000)/2 5 6 ; //计时器是8 位//时间5 MSTL0 =(6 5 5 3 6 -5 0000)%2 5 6 ; //计时器低8 -bit IE = 0x8 f; //打开中断tcon = 0x1 5 ; //启动开始计时器和工作模式} intclock()//时间计算{if(t == 1 0 | t == 2 0)tt =! tt; // flash标志位(t == 2 0){t = 0; if(!(set!= 0aclock == 0))时间++; if(time = time1 time1 +6 0)蜂鸣= 0; elsebeep = 1 ; calender(); if(aclock == 0){second = time%6 0; 分钟=(时间%3 6 00)/6 0; 时间=时间/3 6 00; if(hour == 2 4 ){time = 0; 小时= 0;}} else {second = time1 %6 0; 分钟=(Time1 %3 6 00)/6 0; 小时= Time1 /3 6 00; if(hour == 2 4 ){time = 0; 小时= 0;}}} voiddelay(uintdel){uinti,j; for(i = 0; idel; i ++(j = 0; /timer是低8 -bit t ++; clock; clock();} voidSetTime()interrupt0 // if(key0 == 0){delain(2 ){{if(rili!= 1 ){if(set == 2 | set = set = set+2 ;} elset;} voidcalendar() 如果(2 ); 0)(2 ] = 2 8 ;){月= 1 ; voidadd()//一个{intge,ge1 ,ge2 ,shi1 ,shi2 ,bai2 ,qian2 ; if(rili == 1 ){ge = day%1 0; ge1 = mo nth%1 0; GE2 =年%1 0; shi =天/1 0; shi1 =月/1 0; shi2 =年%1 00/1 0; bai2 = 1 000/1 00年; Qian2 = Year/1 000;} else {ge = second%1 0 y1 == 0){if(rili == 1 ){if(%4 == 0年%1 00!= 0)|(%4 00 == 0) ymth [2 ] = 1 0; Elseymth [2 ] = 9 ; switch(set){case1 :qian2 =(qian2 +1 )%1 0; 休息; bai2 =(bai2 +1 )%1 0; 休息; case3 :shi2 =(shi2 +1 )%1 0; 休息; 案例4 :GE2 =(GE2 +1 )%1 0; 休息; case5 :shi1 =(shi1 +1 )%2 ; 休息; case6 :ge1 =(shi1 == 1 )? (GE1 +1 )%3 :(GE1 +1 )%1 0; 休息; case7 :shi =(shi =)月== 2 )? (SHI+1 )%3 :(SHI+1 )%4 ; 休息; case8 :ge =(shi == 3 )? (GE+1 )%ymth [月] :(月== = 2 )? (GE+1 )%ymth [2 ] :( GE+1 )%1 0; 休息;}年= Qian2 *1 000+bai2 *1 00+shi2 *1 0+ge2 ; 月= SHI1 *1 0+GE1 ; day = shi*1 0+ge;} else {switch(set){case1 :shi2 =(shi2 +1 )%3 ; 休息; 案例2 :GE2 =(GE2 +1 )%4 ; 休息; case4 :shi1 =(shi1 +1 )%6 ; 休息; 案例5 :GE1 =(GE1 +1 )%1 0; 休息; CAS E7 :shi =(shi+1 )%6 ; 休息; 案例8 :GE =(GE+1 )%1 0; 休息;} second = shi*1 0+ge; 分钟= shi1 *1 0+ge1 ; 小时= shi2 *1 0 +ge2 ; if(aclock == 0)时间=小时*3 6 00+分钟*6 0+秒; elSetime1 =小时*3 6 00+minute*6 0+sect;} while(!key 1 );}}} voidalatClock()//设置alarm aramar {if(key2 == 0){eliple(eliple(2 ); if(key2 == 0){while(!key2 ); 时钟= 1 ; rili = 0; set = 0; 而(1 ){if(rili == 1 )显示(日,月,年); Elsedisplay(第二,分钟,时间); 添加 (); if(key2 == 0){while e(!key2 ); 时钟= 0; set = 0; break;}}}}}引脚连接指南:1 PO端口连接是一个常见的数字管。
2 ^0和p2 ^1 是数字段闩锁和位锁存,每个闹钟显示功能按钮p3 ^1 您可以选择闹钟,日期和时间:
求程序用AT89C51单片机 用六位数码管实现数字时钟,显示时分秒,用两个按键可分别调整时、分。
#include1 ; tr0 = 1 ;} voidTimer0()中断1 //计数器计数器中断{th0 =(6 5 5 3 6 -4 5 8 7 2 )/2 5 6 ; tl0 =(6 5 5 3 6 -4 5 8 7 2 )%2 5 6 ;,aa ++; 如果(aa == 2 0)//采访2 次位1 s,请在第二秒{miao ++中添加1 个; AA = 0; if(miao == 6 0){fen ++; // 6 0s,在几分钟内加1 ,清除0miao = 0秒; 在小时内}}}} if(m == 0)// corce {delay(2 ); if(m == 0)fen ++; 如果(fen == 6 0)fen = 0; 延迟(2 ); } if(n == 0)//小时更改{delay(2 ); if(n == 0)shi ++; if(shi == 2 4 )shi = 0; 延迟(2 ); }
单片机课程设计8位数码管电子钟at89c52代码怎么写?
该设计基于基于微控制器基于微控制器的多数数小时时钟时钟时钟时钟时钟时钟,该微控制器以数字数字类型显示。在关键活动中使用微控制器的内部计时器。
时间,几分钟,分钟,分钟,分钟和警报配置以及云的持续时间以及持续时间和时间的持续时间。
通过硬件软件通过硬件软件从硬件软件中全面全面。
Simulary Project启动了Simulary项目,将模拟项目提交给Simulativetonontroller,并提交一个十六进制文件以开始模拟。
单击功能切换按钮同时显示效率时间。
切割设置按钮。
添加警报时间调整。
当警报在当时时,蜂鸣器可以一次单击按钮停止。
使用KEIL比较TOOD的程序代码。
包含详细的评论,以促进实施实施。
该程序是通过广告参考设计的,以参考实际对象中的现实。
环境环境电路连接方法,包括运行速度和操作事实与物理生产之间存在差异,这是有差异的。
设计报告是设计,设计和设计的。
模拟文件,计划源代码,划定的程序性,设计病房表格;设计器相关的软件和解决方案也列在列表中。
下载链接:docs.QQQQQQQQQQQQ/DOC/DS0F4 E