利用单片机的定时器和数码管,设计一个电子时钟
1 '将为您提供电路和程序,//几天前,1 'LED为网络写作,即微控制器的计时时钟正在调整功能,您可以参考我的 程序/*********************************************************************************************************************************************************************** ******************************************************************************************************************************************************************************* ******************************************************************************************************************************************************************************* ******************************************************************************************************************************************************************************* ******************************************************************************************************************************************************************************* ******************************************************************************************************************************************************************************* ******************************************************************************************************************************************************************************* ******************************************************************************************************************************************************************************* ***************************************************************************************************************************************SBITSHUG_03 ./ = P2 tube2 sBitshug_03 = P2 tube2 sBitshug_03 = P2 ^ 2 ; // digital = tube3 sbitkshug _04 = p2 ^ 3 ,//数字管4 scbitshug_05 = p2 ^ 4 ; //数字管5 SBITSHUG_06 = P2 ^ 5 ://数字管6 SBITKY = 1 ,// key = p0 ^ 2 :// sbribe = p0 ^ 2 :// sbribe = p0 ^ 2 :// sbribe = p0 ^ 2 :// sbribe = p0 ^ 2 :// :// sbribe = p0 ^ 2 :// sbribe = p0 sbribe = p0 ^ 2 :// ^ // = p0:// = sbatesdey0_0_0 p0 ^ 3 ; //键菜单#Defeled_datap1 // P1 数据端口unsignedCharvalue_temp = 0; unsignedcharvalvalue_outk = 0; unsignedcharvalue_shio = 8 ; UnignedCharviao = 0; UnignedCharcundevalue_miao = 0; unsignedCharCodeValue_miao = 0; unsignedCharCodeValue_miao = 0; unsignedCharCodeValue_miao = 0; UnignedCharCodeVal-0xb0,09 9 ,0x 9 2 ,0x8 2 ,0xf8 ,0x8 09 09 0}; //通用阳极unsignedCharcodevalue_tab1 [] = {0x4 0x7 9 ,0x2 4 ,0,0x1 9 ,0x1 2 ,0x02 ,0x7 8 ,0x00,0x1 0}; sugfundelay / voiddelay_1 ms(unsignedinttime){unsignedIntx,y; for(x = time; x> 0; x-)for(y = 1 2 0; y> 0; yr);} / voiddisp_laylylyledketcmd(vacui) LED_DATA = value_tab0 [value_shio / x] / ******* / 0; sh = 1 ug_02 ; value_tab1 = [x = value_shio]: / ********************************************************************************************************************************************************************************************** value_tab1 ,0 = /******************************************************************************************************************** / MORA(5 ):shug_04 = 0; / ***秒*** / shug_05 = 1 :led_data = value_tab0 [value_miao / x] / *********************** / = 0,shug_06 = 1 ; 0,shug_06 = 1 ; = Value_Tr0% [value_miao% 1 0] / ********************************************************************************************************************************** ** = 1 ; ** ** / ** ** / ** = ==) {key01 ==)} If (key0_01 == 0),} {(key0_01 == 0)} { y_1 ms(1 0)if(key02 == 0){value_miao-; == -1 ){value_shio-; value_feno = 5 9 ; {value_shio = 2 3 ;}}} while(key0_02 == 0);}} if(key0_03 == 0),if(value_miao === ++;如果(value_feno ++ ==; _feno == 6 0){value_feno = 0; value_shio ++; if(value_shio == 2 4 ){value_shio == 0 //}} p2 == 0x00,tero_init == == 0x00; tero_init == == 0x00; = p3 = 0x00; ; while(1 ){scan_keyoutcmd(); disp_yleyletkecmd()// // 1 == tl0 if(value_temp === ++;51单片机控制数码管显示时钟,独立按键怎么弄
独立按钮的处理相对简单,通常通过IO端口单独控制。主要步骤包括未接触和检测到按钮的紧急和起重状态。
例如,您可以这样做:sbitkey = p1 ^0; if(key == 0){晚(1 0); if(key == 0){keyVal = 1 ; while(key == 0); 为了删除锁定的抖动,已经添加了1 0毫秒的延迟。
检测主要状态。
最后,输入循环,等待键发布。
在实际应用中,这里无限的主要处理。
还必须考虑大量键和长压力的点击。
例如,可以添加计数器来检测可以添加的按下的按压或定性时钟的数量,以确定键是否长时间保存。
此外,为了确保程序的强度,建议检查错误并处理每个主要处理步骤中适当的例外。
例如:检查主要状态在延迟功能后仍为0,以防止由于外部噪声而导致错误的评估。
在5 1 个微控制器显示数字管的项目中,处理是不可或缺的一部分。
通过上述方法,可以有效地完成节点的检测和反馈,从而为时钟功能提供可靠的操作控制。
编程时,您还需要注意以避免抖动锁对程序的影响。
它可以通过硬件电路设计,例如引入调试电路或向软件添加延迟以确保主要状态检测的准确性。
简而言之,尽管对独立按钮的处理非常简单,但是在详细实施时,仍然必须谨慎,以确保程序的稳定性和可靠性。
急求一个用51单片机编的可按键调时的数字时钟程序,数码管显示,C语言编写,谢谢。
#include= 1 ; rw = 0; EP = 0; p0 = dat; _nop _(); _ nop _(); _ nop _(); _ nop_(); _wcmd(pos | 0x8 0); // Data pointer = 8 0+ address code (00h ~ 2 7 h, 4 0h ~ 6 7 h)} // Set two custom characters, (Note: LCD1 6 02 Custom character in LCD1 6 02 is 0x00-0x07 , so you can define 8 characters) The first line of "01 0000000" (D7 D6 address is set by D4 D3 Varna storage status IS,D2 D1 D0 VARNA线地址(0--7 ))是LCD_WDAT(0x1 F); 1 ); //“ 01 000001 ”行2 地址lcd_wdat(0(0 x1 1 ); LCD_WCMD(0x4 5 ); //“ XXX1 1 1 1 1 ”第7 行数据LCD_ WCMD(0x4 7 ); //“ 01 0001 1 1 1 ”第8 行地址LCD_WDAT(0x00); /“ 01 001 001 ”行2 地址lcd_wdat(0x1 b); //“ xxx1 1 01 1 ”第二行数据lcd_wcmd(0x4 a); 1 “第四行数据lcd_wcmd(0x4 c); //“ 01 001 1 00”第五行地址lcd_wda t(0x1 d); lcd_wcmd(0x4 f); //“ 01 001 1 1 ”第8 行地址lcd_wd_wd at(0x00); //“ XXX00000”第8 行数据} // LCD Initiative设置voidlcd_init(){lcd_wcmd(0x3 8 ); “无显示)延迟(1 ); lcd_wcmd(0x06 ); {Astrosper(leap_year()&&月<= 2 )经历的leap年数//这既是leap年,一月和2 月,elsec = 5 ; , '2 'dis_buf1 [3 ] = 4 8 ; //'0'dis_buf1 [4 ] =年/1 0+4 8 ; dish_buf1 [5 ] =年%1 0+4 8 ; dis_buff1 [6 ] = 0 x2 d; [1 0] =日期/1 0+4 dish_buf1 [1 1 ] =日期1 0+4 8 ; dis_buf1 [1 2 ] = 0x2 0; dis_buf1 [1 3 ] = dis_week [4 *周]; dish_buf1 [1 4 ] = dis_week [4 *周+1 ]; dish_buf1 [1 5 ] = dis_week [4 *[1 ] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] 2 [0] 2 [2 ]; dish_buf2 [3 ] = t 2 [3 ]; dish_buf2 [4 ] = t2 [4 ]; dis_buf2 [5 ] = t2 [5 ]; dish_buf2 [6 ] = t2 [6 ]; 标致dis_buf2 [8 ] = dis_h/1 0+4 8 ; 观看以启用dis_buf2 [9 ] = dis_h%1 0+4 8 ; dis_buf2 [1 0] = 0x3 a; //':'dis_buf2 [1 1 ] = dis_m/1 0+4 8 ; dish_buf2 [1 2 ] = dis_m%1 0+4 8 ; dis_buf2 [1 3 ] = 0x3 a; dis_buf2 [1 4 ]。
ler voidpro_timedate(){sec ++; if(sec> 5 9 ){sec = 0; 最小++; if(min> 5 9 ){min = 0; 小时++; 如果(小时> 2 3 ){小时= 0; 日期++; if(月== 1 ||月= 3 = 4 ||月= 4 ||月== 9 ||月==)if(date> 3 0){date = 1 ; 月++;} // 3 0天月琼脂(月== 2 ) ()(sec =臂章&& armhore) <= 1 5 ; pro_display()调用显示处理功能} //已完成键扫描程序; 更新性能数据,0 x5 0表示“ p” pro_display(); 1 :lcd_pos(0x4 9 ); 休息; //光标设置小时警报设置状态案例2 :lcd_pos(0x4 c); 设置第二个警报设置位置案例4 :update_disbuf(0x5 0,“时间:”,小时,最小,压缩); pro_display(); lcd_pos(0x05 ); 休息; // 光标; 年度调整状态案例5 :LCD_POS(0x08 ); 4 F); 休息; //设置光学第二调整位置默认值:break;}} if(skey == 0x02 )//设置键按{pro_key(); //设置密钥处理程序键取键}}}}}}}}} lcd_wcmd(0x0c); = 0x8 f; // CPU Interpt,Int0,Int1 ,Interpt TR0 = 1 ; //计时器0 start} //主程序,arbhikaran和早期值设置voidmain(){lcd_init(); // arbhikaran lcdlcd_sef_chr(); ,几个月,星期日和工作日的Week_prock(); 警报= 1 ; //早期power-on,启用闹钟ion = 0x8 f; // CPU开关互动,INT0,INT1 ,TIMER0,TIMER1 SWITS ON INDEPT IP = 0x04 ; ,很容易引起错误)tmod = 0x1 1 ; //计时器,计时器1 在模式1 中工作,1 6 位正时模式th0 = 0xdc; TL0 = 0x00; //计时器0 1 0ms定时设置th1 = 0xf的初始值; TL1 = 0x00; //计时器设置1 tr0 = 1 的初始值; 手臂; //分析闹钟(al)启用或关闭臂= 1 :胜任,闹钟= 0:offdate_disbuf(0x5 0,“ alarm”:“,armhore,armmin,armake); //更新显示数据pro_display(); 无用(0x5 0,“警报:”,Armhore,Armin,Arms); //更新显示数据pro_display(); rmmin,armesec); pro_display(); lcd_pos(0x4 c); 休息; 案例3 :ARMK ++; if(ARMSEC> 5 9 )ARMSEC = 0; UPDATE_DISBUF(0x5 0,“警报:”,Armhore,Arms,Arms); pro_display(0x4 f); , 如果(年> 9 9 )年= 0; Week_prook(); //工作日update_disbuf的自动计算(0x5 0,“时间:”,小时,分钟,sec); pro_display(); lcd_pos(0x05 ); 休息; 案例5 :月++; SBUF(0x5 0,时间:“,小时,最小,压缩); pro_display(); lcd_pos(0x08 ); 休息; 案例6 :日期++; if(月== 1 ||月== 3 ||月== 5 | f(月= 4 ||月= 4 ||月== 9 ||月== 1 1 )if(date> 3 0)日期= 1 ; week_prock()//更新自动计算9 ); 休息; 案例8 :最小++; if(min> 5 9 )min = 0; update_disbuf(0x5 0,“时间:”,小时,最低,sec); pro_display(); lcd_pos(0x4 c); ,“时间:”,小时,分钟,压缩); pro_display(); lcd_pos(0x4 f); 休息; 默认值:break;} //计时器1 Interpt处理程序,警报声VoidTimer1 ()Interpt3 {Th1 = 0xf; TL1 = 0x00; spk = 〜spk; 处理程序,停止警报声音voidint1 ()互动2 {if(tr1 )tr1 = 0;}实验详细信息:要输入设置状态到K1 ,按K2 ,按K2 ,按K2 ,输入闹钟的设置,使用K3 ,显示第二个小型扬声器的第二,年,每月,日和时间,分钟,第二,第二,表明闹钟功能能够。
“时间”显示在2 000 - 2 09 9 年的变化中。
求程序用AT89C51单片机 用六位数码管实现数字时钟,显示时分秒,用两个按键可分别调整时、分。
#include/2 5 6 ; TL0 =(6 5 5 3 6 -4 5 8 7 2 )%2 5 6 ; //计时器的初始值为5 0 ms(1 2 m晶体振荡器)被分配给初始值。
4 5 8 7 2 EA = 1 ; ET0 = 1 ; tr0 = 1 ; 2 )/2 5 6 ; TL0 =(6 5 5 3 6 -4 5 8 7 2 )%2 5 6 ; AA ++; if(aa == 2 0)//添加位1 s的2 次,{miao ++;添加1 秒1 ; AA = 0; if(miao == 6 0){fen ++; 所有6 0英寸,每分钟1 个; if(shi == 2 4 )shi = 0; //添加1 小时}}}} if(m == 0)// delain(2 ); if(m == 0)fen ++; 如果(fen == 6 0)fen = 0; 延迟(2 );}延迟(n == 0);