at89c51单片机实现电子时钟,不带闹铃。 显示时分秒。 求图求程序
#includeif(flag1 == 1 ){temp = temp+1 ;} tt = temp*0.06 2 5 ; //获取实际的小数温度值,因为DS1 8 B2 0 //可以在0.06 2 5 度时正确,这是读取数据的最低部分表示//0.06 2 5 度。
温度= TT*1 0+0.5 ; //放大倍数在十次中,进行此操作的目的还将将第一个小数点和//变成显示的数字,并在同时。
温度返回; //返回温度值}无效的屏幕1 (unt temp)//显示温度程序{uchar a1 ,a2 ,a3 ,a4 ; a1 = temp/1 000; //将所有三个数字划分为A2 = temp/1 00%1 0; A3 =温度/1 0%1 0; a4 = temp%1 0; if(flag1 == 1 ){shu1 = 0; p0 = 0x4 0; 延迟(1 ); shu1 = 1 ; } if(flag1 == 0){shu1 = 0; shu1 = 0; shu1 = 0; shu3 = 0; shu3 = 0; shu3 = 0; shu3 = 0; shu3 = 0; shu3 = 0; shu3 = 0; shu3 = 0; shu4 = 0; p0 = table [a4 ]; 延迟(1 ); Shu4 = 1 ;}/*-------------------------------------------------------------------/void init_timer0 () {tmod = 0x1 1 ; th0 =(6 5 3 6 -5 0000)/2 5 6 ; TL0 =(6 5 5 3 6 -5 0000)%2 5 6 ; tr0 = 1 ; ET0 = 1 ; EA = 1 ;}/*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ (6 5 3 6 -5 0000)/2 5 6 ; TL0 =(6 5 5 3 6 -5 0000)%2 5 6 ; DD ++; if(dd> = 2 0){sec ++; dd = 0;} //每1 000ms,第二个单位如果(sec> = 6 0){min ++; sec = 0;} //每6 0年代,如果(min> = 6 0){小时++; min = 0;小时,时间单元增加了清晰的x [0] =小时/1 0; x [1 ] =小时%1 0; x [2 ] = min/1 0; x [3 ] =最小%1 0; x [4 ] = sec/1 0; x [5 ] = sec%1 0;}/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- while (! Key_SW); //控制台绝望的延迟(5 ); //键盘的需求(!key_sw); //键盘的需求} if(set_key == 0){delay(5 ); if(set_key == 0){if(((sw == 1 )||(sw == 2 )){set ++; if(set> = 4 )set = 0; }} while(!set_key); 延迟(5 ); while(!set_key); } if(key_up == 0){delay(5 ); if(key_up == 0){if(sw == 1 ){if(set == 1 ){hour ++; x [0] =小时/1 0; x [1 ] =小时%1 0; } if(set == 2 ){min ++; x [2 ] = min/1 0; x [3 ] =最小%1 0; } if(set == 3 ){sec ++; x [4 ] = sec/1 0; x [5 ] = sec%1 0; }} if(sw == 2 ){if(set == 1 ){hour1 ++;   y [0] =小时1 /1 0; y [1 ] =小时1 %1 0; } if(set == 2 ){min1 ++; y [2 ] = min1 /1 0; y [3 ] = min1 %1 0; } if(set == 3 ){sec1 ++; y [4 ] = sec1 /1 0; y [5 ] = sec1 %1 0; }}} while(!key_up); 延迟(5 ); while(!key_up); } if(key_down == 0){delay(5 ); if(key_down == 0){if(sw == 1 ){if(set == 1 ){hour---; x [0] =小时/1 0; x [1 ] =小时%1 0; } if(set == 2 ){min-; x [2 ] = min/1 0; x [3 ] =最小%1 0; } if(set == 3 ){sec--; x [4 ] = sec/1 0; x [5 ] = sec%1 0; }} if(sw == 2 ){if(set == 1 ){hour1 --; y [0] =小时1 /1 0; y [1 ] =小时1 %1 0; } if(set == 2 ){min1 --; y [2 ] = min1 /1 0; y [3 ] = min1 %1 0; } if(set == 3 ){-----*/无效的屏幕(UCHAR AA,UCHAR BB,UCHAR CC,UCHAR BA,UCHAR BA,UCHAR SH,UCHAR G){if(set == 0){shu1 = 0; p0 = table [aa]; 延迟(1 ); shu1 =1 ; shu2 = 0; p0 =购买[BB]; 延迟(1 ); shu2 = 1 ; } if(set == 1 ){shu1 = 0; shu1 = 0; shu1 = 0; shu1 = 1 ; shu2 = 0; shu2 = 0; shu2 = 1 ; shu4 = 1 ; shu5 = 1 ; shu6 = 1 ; } shu2 = 0; p0 =表[1 1 ]; 延迟(1 ); shu2 = 1 ; 如果(set == 0){shu3 = 0; p0 = table [cc]; 延迟(1 ); shu3 = 1 ; shu4 = 0; p0 = table [ba]; 延迟(1 ); shu4 = 1 ; } if(set == 2 ){shu3 = 0; p0 = table [cc]; 延迟(1 ); shu3 = 1 ; shu4 = 0; shu4 = 0; (1 ); shu4 = 1 ; shu1 = 1 ; shu2 = 1 ; shu5 = 1 ; shu6 = 1 ; } shu4 = 0; p0 =表[1 1 ]; 延迟(1 ); shu4 = 1 ; if(set == 0){shu5 = 0; p0 = table [sh]; 延迟(1 ); shu5 = 1 ; shu6 = 0; p0 = table [g]; 延迟(1 ); shu6 = 1 ; } if(set == 3 ){shu5 = 0; p0 = table [sh]; 延迟(1 ); shu5 = 1 ; shu6 = 0; p0 = table [g]; 延迟(1 ); shu6 = 1 ; shu1 = 1 ; shu2 = 1 ; shu3 = 1 ; shu4 = 1 ; }}} /*========== alarm(无效){if(x [0] == y [0])&&(x [1 ] == y [1 ])&&(x [2 ])&&(x [3 ] == y [3 ]) 蜂鸣=〜蜂鸣; }}其他{beep = 0; }}/*----------------------------- Invalid Key () {init_timer0 (); //计时器的初始化,而(1 ){tmpchange(); //温度转换键(); //键盘扫描if(sw == 0){screet1 (tmp()); //显示LED1 = 0温度程序; LED2 = 1 ; LED3 = 1 ; } if(sw == 1 ){屏幕(x [0],x [1 ],x [2 ],x [3 ],x [4 ],x [5 ]); //屏幕时间LED1 = 1 ; LED2 = 0; LED3 = 1 ; } if(sw == 2 ){屏幕(y [0],y [1 ],y [2 ],y [3 ],y [4 ],y [5 ]); //屏幕LED警报时间= 1 ; LED2 = 1 ; LED3 = 0; } 警报 (); //警报时间}}}
51单片机控制数码管显示时钟,独立按键怎么弄
独立密钥的处理相对简单,通常通过IO连接单独控制。主要步骤包括消除和识别钥匙的紧迫和起重状态。
例如,您可以按以下方式实现它:sbitkey = p1 ^0; if(key == 0){delay(1 0); if(key == 0){keyVal = 1 ; while(key == 0);}}这是一个键sbitkey = p1 ^0定义了;然后确定(按钮== 0)是否按下按钮。
添加了1 0毫秒的延迟以消除重要的抖动。
再次识别关键条件。
如果仍然为0,则假定按钮实际按下,键为1 最后,将其放在循环中,等待按钮释放。
在实际应用中,关键处理不仅限于它。
还必须考虑到密钥和长期出版社的几下单击。
例如,可以添加计数器以查看按下按钮的频率,或者可以添加计时器以确定长时间记录按钮。
为了确保程序的鲁棒性,还建议在关键处理的每个步骤中添加合适的错误测试和出色的治疗方法。
例如,检查延迟功能后的关键条件是否仍为0,以防止外部干扰引起的错误判断。
在5 1 个微控制器控制数字管显示时钟的项目中,密钥处理是必不可少的部分。
上述方法可以有效地实现按钮的检测和反应,该操作为时钟功能提供了可靠的操作控制。
编程时,您还必须确保避免关键烦恼对程序的影响。
它可以通过硬件电路来设计,例如简而言之,尽管独立按钮的处理很简单,但在实现程序的稳定性和可靠性时仍必须小心。
基于51单片机的数码管设计电子时钟,可以调时间的,怎么弄唉,大家帮帮忙
让我们谈谈这些步骤:1 DigitalTube驱动器电路。通常,使用9 01 3 或诸如7 4 HC5 7 3 之类的晶体管来驱动它们,以便可以正常打开和关闭它们。
2 使用动态扫描显示数字管所需的数字。
这可以通过中断是否可以扫描。
3 使用像DS1 3 02 这样的实时时钟芯片获取所需的时间数据。
此类型的网站上有许多源程序,您可以搜索它。
您必须学习哪些点:(1 )初始化芯片; (2 )时间数据; (3 )知道如何更改数据。
4 使用密钥更改时间数据。
有很多方法,请指示参考。
使用三个按钮,即:设置键(这是一个多路复用按钮,按一次进入设置模式,然后进行一定的bitblitz。
按下,让下一个bitblitz接一个接一个地,然后确认设置设置直到设置编号完成。
这不仅仅是数据更改,还包括来自DS1 3 02 数据的更改。