本文目录一览 #definucharunsignedcharsbitdula = p2 ^6 ; sbitwela = p2 ^7 ; sbitbeep = p2 ^3 ; Arterd,K,A1 ,A0,B1 ,B0,C1 ,C1 ,S,S,F,F,M,KEY,KEY,KEY,KEY,KEY,KEY,B1 1 0,TEMP,QQ; UCharshi2 0,Shi1 0,Fen2 0,Fen1 0,Miao2 0,Miao1 0,new,ok = 1 ,wei; 不受控制。
le [] = {0x3 f,0x06 ,0x5 b,0x4 f,0x6 6 ,0x6 d,0x7 d,0x07 ,0x7 f,0x6 f,0x7 7 ,0x7 c,0x3 9 ,0x5 e,0x3 9 ,0x5 e,0x7 9 ,0x7 1 }; > 0; j-)for(k = 1 2 5 ; k> 0; k-);} voddisplay(ucharshi2 ,ucharshi1 ,ucharshi1 ,ucharfen2 ,ucharfen1 ,ucharfen1 ,ucharfen1 ,ucharmiao2 ,ucharmiao2 ,ucharmiao1 ){dula = 0; p0 = table [shi2 ]; dula = 1 ; dula = 0; vela = 0; p0 = 0xfe; vela = 1 ; vela = 0; 延迟(5 ); p0 =表[SH1 ] | 0x8 0; dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula; 1 ; dula = 0; p0 = 0xfd; vela = 1 ; vela = 0; 延迟(5 ); p0 = table [fen2 ]; dula = 1 ; dula = 0; p0 = 0xfb; vela = 1 ; vela = 0; 延迟(5 ); p0 =表[fen1 ] | 0x8 0; dula = 1 ; dula = 0; p0 = 0xf7 ; vela = 1 ; vela = 0; 延迟(5 ); p0 = table [miao2 ]; dula = 1 ; dula = 0; p0 = 0xef; vela = 1 ; vela = 0; 延迟(5 ); p0 = table [miao1 ]; dula = 1 ; dula = 0; p0 = 0xdf; vela = 1 ; vela = 0; 后期(5 );} voidkeyscan0(){p3 = 0xfb; temp = p3 ; temp = temp = temp&0xf0; if(temp!= 0xf0){delay(1 0); i f(temp!= 0xf0){temp = p3 ; switch(temp){case0xb:ok = 0; 休息; case0x7 b:ok = 1 ; break;}}}}}}} voidkeyscan(){{p3 = 0xfe; temp = p3 ; temp = temp&0xf0; if(temp!= 0xf0){delay(1 0); 如果(temp!= 0xf0){temp = p3 ; switch(temp){case0xee:key = 0; wei ++; case0xde:为= 1 ; wei ++; 休息; case0xbe:key = 2 ; wei ++; 休息; case0x7 e:key0x7 e:key = 3 ; wei ++; 休息; ;}} p3 = 0xfd; temp = p3 ; temp = temp = temp&0xf0; if(temp!= 0xf0){delay(1 0); 如果(temp!= 0xf0){temp = p3 ; switch(temp){case0xed:key = 4 ; wei ++; 休息; case0xdddd:key = 5 ; wei ++; 休息; case0xbd:key = 6 ; wei ++; 休息; case0x7 d:key = 7 ; wei ++; brake;} while(exture!= 0xf0){temp = p3 ; temp = temp&0xf0; beep = 0;} beep = 1 ;}} p3 = 0xfb; temp = p3 ; temp = temp = temp&0xf0; if(temp!= 0xf0){delay(1 0); 如果(temp)){temp = p3 ; switch(temp){case0xeb:key = 8 ; wei ++; 休息; case0xdb:key = 9 ; wei ++; brake;} 0;} beep = 1 ;}}}}}}}} voidMain(){tmod = 0x01 ; th0 =(6 5 5 3 6 -4 6 08 0)/2 5 6 ; 计时器将在5 0000微型秒内开始阻塞。
TL0 =(6 5 5 3 6 -4 6 08 0)%2 5 6 ; 0; if(pp == 2 0){pp = 0; M ++; if(m == 6 0){m = 0; F ++; if(f == 6 0){f = 0; S ++; 如果(s = 2 4 ;)//这是2 4 小时的周期。
{s = 0;}}}}} a0 = s%1 0; A1 = S/1 0; B0 = F%1 0; B1 = f/1 0; C0 = m%1 0; C1 = M/1 0; 显示(a1 ,a0;。
是2 a1 =键; elsewei-; break; break; case 2 :if(a1 == 1 | a1 == 0)a0 = key; elesif; elesif(key
该程序使用微控制器5 1 并控制通过P2 .5 和P2 .6 门显示的数字管显示,并且使用P1 .0到P1 .7 的门用于控制1 按钮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)%2 5 6 确保计时设备0类型每0.2 5 6 秒中断一次。
延迟函数用于延迟,z参数是延迟的数量,该函数使用两个 - 层级戒指来获得延迟。
在timer1 中断服务函数中,更新了计时器0的初始值,每0.2 5 6 秒更新计时时间,并且每两秒钟更新小时数的功能都可以判断可变k的值。
显示功能用于查看时间,通过P0端口检查数字管显示,并选择控制段以及通过P2 .5 和P2 .6 门选择位。
该函数计算小时数,分钟和秒,然后通过查看表将值转换为相应数字管的视图代码。
总体而言,该程序通过MicroController 5 1 实现了数字时钟的基本功能,包括显示时间,按钮的控制以及时间更新,具有很高的实用性和可操作性。
typedefunsinsigned; typedefunsignsignedCharuchar;#dendeDkekep2 #dendefekkekekakask0x07 sbitle1 = p2 ^6 ; //确定位sbitle位控制端口2 = p2 ^7 ; //确定段控制端口uchykeypre ssdown = 0x00; Uchcharkeyraease = 0x00; ucharlastkey = 0x00; 无效的); //初始化计时器,函数该数字在计时器中确定。
cucharcodeNum [] = {0xc0.0xf9 .0xa4 .0x9 9 .0x8 2 .0x5 2 .0xf8 .0x8 0.0x9 0; ; mm = 0; h_ granning();}} voids_incree(无效)//增加管子,seg = 0-9 数字,digi = bit 0-6 {le2 = 1 ; p0 =(0x01 << digi); le2 = 0; p0 = 0x00; le1 = 1 ; p0 = num [seg]; if(digi == 1 || digi == 3 )p0&= 0x7 f; //指示定界符的延迟(5 0); p0 = 0xff; le1 = 0;} voidmain(无效){p0 = 0xff; le1 = 0; le2 = 0; t0_init(); while(1 ){if(mode!= 1 || t_cycle){屏幕(HH/1 0.0); //十分位数屏幕(HH%1 0.1 )屏幕; //单小时屏幕} if(mode!= 2 || t_cycle){屏幕(mm/1 0.2 ); //十分位数屏幕(mm%1 0,3 ); //表示单分钟}屏幕(SS/1 0.4 ); //显示秒数的十位数字(SS%1 0.5 ); //显示秒的单位数字}}} voidkey_process(ivebalid)//钥匙架{ucharcurkey; 键| = keymask; //设置对应于curokey =(〜key)和keymask状态键的IO; KeyPressDown =(〜lastKey)&curkey; keyLease = lastKey&(〜curkey); lastKey = curkey; keyLease){essue1 :if(mode == 2 )mode = 0; ElSemode ++; 休息; 问题2 :if(mode == 1 )h_increase(); if(mode == 2 )m_intercrease(); 休息; 问题4 :SS = 0; 破碎的; 默认:休息; EdeFunSignedCharch; ucharhh = 1 4 ; ; voidt0_init(无效){tmod&= 0xf0; tmod | = 0x01 ; //计时器确定起始值,时间的时间为1 0ms。
th0 = 0xd8 ; TL0 = 0xF0; tr0 = 1 ; ie = 0x8 2 ;} voidt0_intsrv(无效)intruption1 {//计时器再次开始时间。
th0 = 0xd8 ; TL0 = 0xF0; U_1 0MS ++; if(u_1 0ms%2 0 == 0)// 2 00m();} key_process(); //设置密钥处理} proreus仿真电路:
在本文中,我们介绍了基于5 1 微控制器设计电子手表的想法。
首先,我们定义存储数小时,分钟,秒和T0的溢出时间的单元:小时,分钟,秒和数。
该程序的入口点设置为0000H,主程序的入口点为003 0H。
在主要程序中,首先将堆栈的底部设置为6 0小时,同时清除小时,分钟和秒,初始化从T0到0的溢出数量。
设置T0在模式1 中运行,用于定时设置T0的初始值。
关闭中断,然后打开T0。
输入循环后,请等待计时溢出并执行相关操作。
当检测到正时溢流时,首先关闭T0并保护场。
重置T0的值,打开T0,然后将1 添加到溢出的数量中。
然后,它根据溢出的数量检测键盘输入,并调整秒,分钟和小时值。
在调整过程中,通过BCD代码调整了值,并处理进位。
当秒,分钟和时间值达到6 0、6 0和2 4 时,进行相应的清除操作。
在调整过程中,使用延迟摇动以消除由密钥抖动引起的错误操作。
在显示部分中,通过检查表格在数字管上显示时间,并通过控制P2 端口上的各种位来控制数字管显示。
总之,程序结构和处理流的合理设计实现了基于5 1 微控制器的电子时钟功能。
这个设计思想不仅满足基本的显示需求,而且还提供了特定的操作灵活性,并且适合各种应用程序方案。
51单片机电子钟程序数码管显示
#includele [] = {0x3 f,0x06 ,0x5 b,0x4 f,0x6 6 ,0x6 d,0x7 d,0x07 ,0x7 f,0x6 f,0x7 7 ,0x7 c,0x3 9 ,0x5 e,0x3 9 ,0x5 e,0x7 9 ,0x7 1 }; > 0; j-)for(k = 1 2 5 ; k> 0; k-);} voddisplay(ucharshi2 ,ucharshi1 ,ucharshi1 ,ucharfen2 ,ucharfen1 ,ucharfen1 ,ucharfen1 ,ucharmiao2 ,ucharmiao2 ,ucharmiao1 ){dula = 0; p0 = table [shi2 ]; dula = 1 ; dula = 0; vela = 0; p0 = 0xfe; vela = 1 ; vela = 0; 延迟(5 ); p0 =表[SH1 ] | 0x8 0; dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula = dula; 1 ; dula = 0; p0 = 0xfd; vela = 1 ; vela = 0; 延迟(5 ); p0 = table [fen2 ]; dula = 1 ; dula = 0; p0 = 0xfb; vela = 1 ; vela = 0; 延迟(5 ); p0 =表[fen1 ] | 0x8 0; dula = 1 ; dula = 0; p0 = 0xf7 ; vela = 1 ; vela = 0; 延迟(5 ); p0 = table [miao2 ]; dula = 1 ; dula = 0; p0 = 0xef; vela = 1 ; vela = 0; 延迟(5 ); p0 = table [miao1 ]; dula = 1 ; dula = 0; p0 = 0xdf; vela = 1 ; vela = 0; 后期(5 );} voidkeyscan0(){p3 = 0xfb; temp = p3 ; temp = temp = temp&0xf0; if(temp!= 0xf0){delay(1 0); i f(temp!= 0xf0){temp = p3 ; switch(temp){case0xb:ok = 0; 休息; case0x7 b:ok = 1 ; break;}}}}}}} voidkeyscan(){{p3 = 0xfe; temp = p3 ; temp = temp&0xf0; if(temp!= 0xf0){delay(1 0); 如果(temp!= 0xf0){temp = p3 ; switch(temp){case0xee:key = 0; wei ++; case0xde:为= 1 ; wei ++; 休息; case0xbe:key = 2 ; wei ++; 休息; case0x7 e:key0x7 e:key = 3 ; wei ++; 休息; ;}} p3 = 0xfd; temp = p3 ; temp = temp = temp&0xf0; if(temp!= 0xf0){delay(1 0); 如果(temp!= 0xf0){temp = p3 ; switch(temp){case0xed:key = 4 ; wei ++; 休息; case0xdddd:key = 5 ; wei ++; 休息; case0xbd:key = 6 ; wei ++; 休息; case0x7 d:key = 7 ; wei ++; brake;} while(exture!= 0xf0){temp = p3 ; temp = temp&0xf0; beep = 0;} beep = 1 ;}} p3 = 0xfb; temp = p3 ; temp = temp = temp&0xf0; if(temp!= 0xf0){delay(1 0); 如果(temp)){temp = p3 ; switch(temp){case0xeb:key = 8 ; wei ++; 休息; case0xdb:key = 9 ; wei ++; brake;} 0;} beep = 1 ;}}}}}}}} voidMain(){tmod = 0x01 ; th0 =(6 5 5 3 6 -4 6 08 0)/2 5 6 ; 计时器将在5 0000微型秒内开始阻塞。
TL0 =(6 5 5 3 6 -4 6 08 0)%2 5 6 ; 0; if(pp == 2 0){pp = 0; M ++; if(m == 6 0){m = 0; F ++; if(f == 6 0){f = 0; S ++; 如果(s = 2 4 ;)//这是2 4 小时的周期。
{s = 0;}}}}} a0 = s%1 0; A1 = S/1 0; B0 = F%1 0; B1 = f/1 0; C0 = m%1 0; C1 = M/1 0; 显示(a1 ,a0;。
是2 a1 =键; elsewei-; break; break; case 2 :if(a1 == 1 | a1 == 0)a0 = key; elesif; elesif(key
51单片机多功能LED点阵显示数字时钟
该数字时钟程序在蛋白质上运行良好,您可以单独设计电路。该程序使用微控制器5 1 并控制通过P2 .5 和P2 .6 门显示的数字管显示,并且使用P1 .0到P1 .7 的门用于控制1 按钮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)%2 5 6 确保计时设备0类型每0.2 5 6 秒中断一次。
延迟函数用于延迟,z参数是延迟的数量,该函数使用两个 - 层级戒指来获得延迟。
在timer1 中断服务函数中,更新了计时器0的初始值,每0.2 5 6 秒更新计时时间,并且每两秒钟更新小时数的功能都可以判断可变k的值。
显示功能用于查看时间,通过P0端口检查数字管显示,并选择控制段以及通过P2 .5 和P2 .6 门选择位。
该函数计算小时数,分钟和秒,然后通过查看表将值转换为相应数字管的视图代码。
总体而言,该程序通过MicroController 5 1 实现了数字时钟的基本功能,包括显示时间,按钮的控制以及时间更新,具有很高的实用性和可操作性。
51单片机6位数码管显示时间
C5 1 微控制器六位数微控制器管时钟用于分开数字三键管子时钟以设置时间:设置键:设置 - >> minute steters-代表每小时设置状态点火,两个数字数字点火指示确定何时打开的分钟 分钟分钟的更改:更改时钟设置条件的值并设置分钟设置键:将秒设置为零C语言代码://main.c#includecucharcodeNum [] = {0xc0.0xf9 .0xa4 .0x9 9 .0x8 2 .0x5 2 .0xf8 .0x8 0.0x9 0; ; mm = 0; h_ granning();}} voids_incree(无效)//增加管子,seg = 0-9 数字,digi = bit 0-6 {le2 = 1 ; p0 =(0x01 << digi); le2 = 0; p0 = 0x00; le1 = 1 ; p0 = num [seg]; if(digi == 1 || digi == 3 )p0&= 0x7 f; //指示定界符的延迟(5 0); p0 = 0xff; le1 = 0;} voidmain(无效){p0 = 0xff; le1 = 0; le2 = 0; t0_init(); while(1 ){if(mode!= 1 || t_cycle){屏幕(HH/1 0.0); //十分位数屏幕(HH%1 0.1 )屏幕; //单小时屏幕} if(mode!= 2 || t_cycle){屏幕(mm/1 0.2 ); //十分位数屏幕(mm%1 0,3 ); //表示单分钟}屏幕(SS/1 0.4 ); //显示秒数的十位数字(SS%1 0.5 ); //显示秒的单位数字}}} voidkey_process(ivebalid)//钥匙架{ucharcurkey; 键| = keymask; //设置对应于curokey =(〜key)和keymask状态键的IO; KeyPressDown =(〜lastKey)&curkey; keyLease = lastKey&(〜curkey); lastKey = curkey; keyLease){essue1 :if(mode == 2 )mode = 0; ElSemode ++; 休息; 问题2 :if(mode == 1 )h_increase(); if(mode == 2 )m_intercrease(); 休息; 问题4 :SS = 0; 破碎的; 默认:休息; EdeFunSignedCharch; ucharhh = 1 4 ; ; voidt0_init(无效){tmod&= 0xf0; tmod | = 0x01 ; //计时器确定起始值,时间的时间为1 0ms。
th0 = 0xd8 ; TL0 = 0xF0; tr0 = 1 ; ie = 0x8 2 ;} voidt0_intsrv(无效)intruption1 {//计时器再次开始时间。
th0 = 0xd8 ; TL0 = 0xF0; U_1 0MS ++; if(u_1 0ms%2 0 == 0)// 2 00m();} key_process(); //设置密钥处理} proreus仿真电路:
51单片机设计电子时钟的思路
在设计电子手表时,5 1 微控制器是一个常见的选择。在本文中,我们介绍了基于5 1 微控制器设计电子手表的想法。
首先,我们定义存储数小时,分钟,秒和T0的溢出时间的单元:小时,分钟,秒和数。
该程序的入口点设置为0000H,主程序的入口点为003 0H。
在主要程序中,首先将堆栈的底部设置为6 0小时,同时清除小时,分钟和秒,初始化从T0到0的溢出数量。
设置T0在模式1 中运行,用于定时设置T0的初始值。
关闭中断,然后打开T0。
输入循环后,请等待计时溢出并执行相关操作。
当检测到正时溢流时,首先关闭T0并保护场。
重置T0的值,打开T0,然后将1 添加到溢出的数量中。
然后,它根据溢出的数量检测键盘输入,并调整秒,分钟和小时值。
在调整过程中,通过BCD代码调整了值,并处理进位。
当秒,分钟和时间值达到6 0、6 0和2 4 时,进行相应的清除操作。
在调整过程中,使用延迟摇动以消除由密钥抖动引起的错误操作。
在显示部分中,通过检查表格在数字管上显示时间,并通过控制P2 端口上的各种位来控制数字管显示。
总之,程序结构和处理流的合理设计实现了基于5 1 微控制器的电子时钟功能。
这个设计思想不仅满足基本的显示需求,而且还提供了特定的操作灵活性,并且适合各种应用程序方案。