51单片机多功能LED点阵显示数字时钟
该数字手表程序适合蛋白质,您可以自己设计Protuas的电路。该程序使用5 1 个微控制器,并通过P2 .5 和P2 .6 连接控制数字管道显示。
端口P1 .0至P1 .7 用于控制从按钮1 到按钮8 的状态检测。
该程序通过计时器0实现第二阶段的时序函数,并每0.2 5 6 秒更新显示数据,以确保时间显示的准确性。
在主函数中,调用开始功能以初始化微控制器,然后输入无限循环。
该按钮正在循环中评估,按下小时数,数分钟的数量增加。
。
计时器0在开始函数中初始化并在模式1 中设置,以便计时器的溢流速率为0 1 ms和计时器0(6 5 5 3 6 -4 000)/2 5 6 和(6 5 5 3 6 -4 000)的初始值定时设备0的时间每0.2 5 6 秒中断一次。
延迟函数用于延迟,参数z是延迟的数量,并且该函数使用两个 - 布线循环来实现延迟。
在timer1 中断服务函数中,初始值由计时器0更新,计时函数每0.2 5 6 秒更新一次,并且通过评估变量k的值来实现每两秒钟的更新一次。
显示功能用于指示通过P0连接控制数字管道显示的时间,并控制段的选择和选择,以及通过端口P2 .5 和P2 .6 选择段的选择。
该函数计算小时,分钟和秒的数量,然后通过查找表格将值转换为相应的数字管指示器代码。
总体而言,该程序通过5 1 微控制器实现了数字手表的基本功能,包括时间显示,键盘控制和计时更新,具有很高的实用性和业务能力。
51单片机设计数码管显示时钟的程序怎么写
#include用数码管及定时器实现简易时钟
使用微控制器 +数字管,您可以制作一个简单的时钟。#include
当s = 1 时,设置警报时间//(也通过调整时间,调整功能); //(一分钟后将自动自动)。
再次更改,s = 0.Keyscan(); // s开关(0-1 - 2 -0)是通过外部访谈1 实现的。
显示(小时1 ,minu1 ,sec1 ); //闹钟显示}显示(小时0,minu0,sec0); //临时手表(k)/*k是由外部干扰0。
0手表执行的秒表(0-1 -2 -0)的状态; *********************************************/voidinit(){a = 0; b = 0; k = 0; s = 0; 小时0 = 0; minu0 = 0; sec0 = 0; 小时= 0; minu = 0; sec = 0; 小时1 = 0; minu1 = 0; sec1 = 0; tmod = 0x1 1 ; /计时器0.1 在方法1 上工作; 0 =(6 5 5 3 6 -5 000)%2 5 6 ; th1 =(6 5 5 3 6 -5 0000)/2 5 6 ; TL1 =(6 5 5 3 6 -5 0000)%2 5 6 ; EA = 1 ; ex0 = 1 ; 设置中断ET0 = 1 ; ET1 = 1 ; it0 = 1 ; = 1 ; px0 = 1 ; px1 = 1 ; tr0 = 0; ******************************************************/voidimer0_int()interrupt1 // stopwatch {th0 =(6 5 5 3 6 -5 000) /2 5 6 ; TL0 =(6 5 5 3 6 -5 000)%2 5 6 ; a ++; if(a == 2 ){a = 0; SEC ++; 迷你++; if(minu == 6 0){minu = 0; ***** **外部中断0中断功能**************/voidex0_int()interrupt0 {k ++; if(k == 3 )k = 0; if(k == 1 ){tr0 = 〜tr0; if(tr0 == 1 ){小时= 0; minu = 0; sec = 0; *************/voidex1 _int()interrupt2 {s ++; if(s == 3 )s = 0;}/******************************************************************************************************************************************* */voidTimer1 _int()interrupt3 //控制操作小时{th1 =(6 5 5 3 6 -5 0000)/2 5 6 ; TL1 =(6 5 5 3 6 -5 0000)%2 5 6 ; if(s == 2 ){if(ho ur1 == hours0 && minu0 == minu1 )sound();} b ++; if(b == 2 0){b = 0; sec0 ++; if(sec0 == 6 0){sec0 = 0; Minu0 ++; if(minu0 == 6 0){minu0 = 0; 小时0 ++; 如果(小时0 == 2 4 )小时0 = 0;}}}}}/********************************************************* ****** ****/voidkeyscan(){if(s == 1 ){if(qingling == 0){delay(1 0); if(qingling == 0){sec1 = 0; minu1 = 0; h our1 = 0;}} if(tiaofen == 0){delay(1 0); if(tiaofen == 0){minu1 ++; if(minu1 == 6 0){minu1 = 0;}临时(!tiaofen);} if(tiaoshi == 0){hours1 ++; 如果(小时1 == 2 4 ){小时1 = 0; ); if(qingling == 0){sec0 = 0; minu0 = 0; 小时0 = 0;}} if(tiaofen == 0){del ay(1 0); if(tiaofen == 0){minu0 ++; if(minu0 == 6 0){minu0 = 0;}临时(!tiaofen);}} if(tiaoshi == 0){hours0 ++; if(hours0 = = 2 4 ){hours0 = 0;}临时(!tiaoshi);}}}}}}/*************************************************************************************************************************************************** ****** ***********/voiddisplay(Ucharhour,Ucharminu,ucharsec){ H2 =小时%1 0; m1 = minu/1 0; M2 = minu%1 0; S1 = SEC/1 0; S2 = SEC%1 0; p0 = 0xff; p2 = table [h1 ]; p0 =选择[7 ]; 延迟(5 ); p0 = 0xff; p2 =表[H2 ]; p0 =选择[6 ]; 延迟(5 ); p0 = 0xff; p2 = 0x4 0 ;; p0 =选择[5 ]; 延迟(5 ); p0 = 0xff; p2 = table [m1 ]; p0 = 0xff; p2 = table [m2 ]; p0 =选择[3 ]; 延迟(5 ); p0 = 0xff; p2 = 0x4 0; p0 = select [2 ]; 延迟(5 ); p0 = 0xff; p2 = table [s1 ]; p0 = select [1 ]; 延迟(5 ); p0 = 0xff; p2 = table [s2 ]; p0 = select [0]; 延迟(5 );}/******************************************************************** ***/voidSound(){sounder =〜sounder; ; 对于(x = z; x> 0; x-)for(y = 1 1 0; y> 0; y--);}
单片机课程设计8位数码管电子钟at89c52代码怎么写?
在设计中,旨在根据5 1 微控制器创建多办公室数字时钟和拨盘时钟,该计算机以八位数字数字管显示,并具有多个功能。主要功能包括微控制器的内部计时器,以查看狮子,使用八位数管显示时间,一分钟和第二个,然后添加或闪闪发光的时间,第二次,当闪烁时,第二次,第二次,闪烁并添加后面,然后在迁移中添加后期,然后添加,然后添加以后添加后日落 时钟并配置其叮当声间隔,持续时间和手动消除了闹钟。
通过Proteus蛋白质软件,对软件上硬件的全面验证是一种效果。
步骤的仿真包括启动模拟项目,选择微控制器并在己捷文件中导入以启动模拟。
在显示时间的状态下,按SET键输入模式切换,时钟,分钟和秒闪光度在逐步中以实现设置。
同时,按下任务切换按钮在恐怖时间中均匀,并在日落按钮下输入调整警报。
当时间的恐怖到达时,圆圈是第二秒6 秒钟,警报可能会通过按压停止压力。
程序代码由KEIL编译工具编写,并包含详细注释,以促进逻辑的实现。
示意图在真实对象中配备了参考。
模拟和物理生产之间存在差异,包括操作环境,调试方法,巡逻连接方法,操作速度和需求实现。
设计报告详细介绍了政策框架,硬件计划,软件设计,模拟调试,摘要和参考文档。
设计信息列表包括但不是有限的仿真文件,程序源代码,项目报告,示意图,功能需求,设计报告,软件和硬件过程框图,说明视频以及相关的软件材料,学习材料等。
常见问题和解决方案也在列表中。
链接:docs.qq.com/doc/ds0f4 eg
单片机控制多位数码管的电子时钟程序
使用微控制器控制多位数字管的电子时钟,并使用可以显示时间和日期并具有警报功能的独立按钮来控制它。Keil Engineering C语言代码: /**** *************************************项目名称:数字管电子时钟实现功能:数字管显示时间和日期,可以设置时间和日期,并且可以设置闹钟,以及一分钟的闹钟孔 长的。
******************** unsignedlongintime,time1 = 0; unsignedlongintecond,分钟,小时,年= 2 01 2 ,月= 1 2 ,day = 3 1 ; echarcodedu [] = {0x06 ,0x5 b,0x6 6 .0x6 d,0x7 .0x7 f,0x7 7 .0x7 c,0x7 9 .0x7 1 }; ] = {0xfe,0xfd,0xfb,0xf7 .0xef,0xdf,0xbf,0x7 f}; Uchharth [1 3 ] = {0.3 1 ,2 8 ,3 1 ,3 1 ,3 1 ,3 1 ,3 0,3 1 ,3 0,3 1 }; //每月相应的天数uchharymth [1 3 ] = {0.2 ,9 ,2 ,1 ,2 ,2 ,2 ,1 ,2 ,2 }; ; sbitbeep = p2 ^2 ; // ring voiddelay(uintdel); //延迟程序显示(Uintsd,Uintmm,uinthy); //程序voidadd(); //添加一个void闹钟时钟(); //闹钟voidinit(); //初始化intclock(); //计算时间voidCalender(); //此外,计算日期voidmain(){p2 = 0xff; init(); 而(1 ){add(); 如果(rili == 1 )//日历和时间显示(日,月,年); 小时; alarmclock();}} voiddisplay(uintm,uintmm,uintthy){inty0,y1 ,y2 ; y2 = hy%1 00;} for(numWe = 0; numwe8 ; numwe ++){p0 = 0xff; wela = 1 ; p0 =我们[numwe]; wela = 0; p0 = 0xff; dula = 1 ; switch(numwe){case0:p0 =(tt == 1 set == 1 )? 0x00 :( rili == 1 )? 您[Y0]:您[hy/1 0]; 休息; case1 :p0 =(tt == 1 set == 2 )? 0x00 :( rili == 1 )? du [y1 /1 00]:您[hy%1 0]; 休息; case2 :p0 =(rili!= 1 )? 0x4 0 :( tt == 1 set == 3 )? 0x00:您[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 )? 您[mm/1 0]:您[mm%1 0]; 休息; 案例5 :p0 =(rili!= 1 )? 0x4 0 :( tt == 1 set == 6 )? 0x00:dU [mm%1 0]+0x8 0; 休息; case6 :p0 =(tt == 1 set == 7 )? 0x00:您[SD/1 0]; 休息; 案例7 :p0 =(tt == 1 set == 8 )? 0x00:您[SD%1 0]; 休息;} dula = 0; 延迟(5 );}} voidInit()//初始化{wew = 0; dula = 0; tmod = 0x01 ; //计时器0作为工作模式1 TH0 =(6 5 5 3 6 -5 0000)/2 5 6 ; // The timer is eight bits /////// is are timed 5 mstl0 = (6 5 5 3 6 -5 0000)%2 5 6 ; //计时器低8 位IE = 0x8 f; //打开中断tcon = 0x1 5 ; //计算计时器和工作模式} intclock()//时间{if == 1 0 | t == 2 0)tt =! tt; ///// flashing标志位if(t == 2 0){t = 0; if(!(set!= 0aclock == 0))时间++; if(time = time1 time1 +6 0)peep = 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 {第二次1 %6 0; 分钟=(Time1 %% 3 6 00)/6 0; 小时= Time1 /3 6 00; if(hour == 2 4 ){time = 0; 小时= 0;}}}} voidDelay(uintdel){uinti,j; 对于(i = 0; idel; i ++)for(j = 0; j1 00; j ++);} voidTimer0()intrupt1 //计时器0中断{th0 =(6 5 5 3 6 -5 0000)/2 5 6 ; //计时器是8 位//计时器5 MSTL0 =(6 5 5 3 6 -5 0000)%2 5 6 ; 计时器为低八++; clock();} voidSetTime()interrupt0 // it0 {if(key0 == 0){delay(2 ); (set == 2 | set == 5 )set = set+2 ; elsset ++;} elset ++; 如果(set == 9 ){set = 0; t = 0;} // while(!key0);}}}} voidCalendar()intrupt2 / / calendar {if(key3 == 0){delay(2 ); 如果(key3 == 0)rili =! rili; set = 0; aclock = 0;}} voidCalender()//计算日历{if(time = time = = 8 6 4 00){tag ++; if(((年%4 == 0年%1 00!= 0)|(年%4 00 == 0))mth [2 ] = 2 9 ; Elsemth [2 ] = 2 8 ; if(每日月份]){day = 1 ; 一个月++; 如果(第1 2 个月){月= 1 ; year ++;}}}} voidadd()//添加{intge,ge1 ,ge2 ,shi,Shi1 ,Shi2 ,bai2 ,Qian2 ; if(rili == 1 ){ge = day%1 0; ge1 = mo n -te%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 =第二%1 0; GE1 =分钟%1 0; GE2 =小时%1 0; shi =第二/1 0; shi1 = hinus/1 0; shi2 = hour/1 0;} if(key1 == 0){delay(2 ); if(ke y1 == 0){if(rili == 1 ){if((((eNem%4 == 0年%1 00!= 0))|(年%4 00 == 0))ymth [2 ] = 1 0; Elseymth [2 ] = 9 ; switch(set){case1 :qian2 =(qian2 +1 )%1 0; 休息; case2 :bai2 =(bai2 +1 )%1 0; 休息; case3 :shi2 =(shi2 +1 )%1 0; 休息; 案例4 :GE2 =(GE2 +1 )%1 0; 休息; 案例5 :shi1 =(shi1 +1 )%2 ; 休息; case6 :ge1 =(shi1 == 1 )? (GE1 +1 )%3 :(GE1 +1 )%1 0; 休息; 案例7 :shi =((月== 2 )?(shi+1 )%3 :(shi+1 )%4 ; break; case 8 :ge =(shi == 3 )?(ge+1 )%ymth [月] :( == = 2 )? = Qian2 *1 000+Bai2 *1 0+GE2 ; 休息; 小时*3 6 00+分钟*6 0+秒; rili = 0;