| | 网站首页 | 技术文章 | 专业论文 | PLC可编程 | 单片机 | 变频器 | 传感器 | 嵌入式系统 | 电源技术 | 运动与伺服 | | 校园招聘 | 留言板 | |
|
![]() |
|
| 您现在的位置: 自动化学习网 >> 技术文章 >> 单片机 >> 文章正文 |
|
|||||
| 智能定时的4位电子钟(带定时控制) | |||||
作者:佚名 文章来源:本站原创 点击数: 更新时间:2007-3-23 ![]() |
|||||
|
12.1 电子钟 程序及操作指南:程序写入上电后,将在四个数码管 程序模拟的就是时钟。用按键数显键可将时间调至正确时 一下,数码管的闪烁位置就向前移一个数码管,按到第 键,数码管将会显示从1至9,显示到所需时间,松开按键 例设置成2334, 数码管分高位显示到3时松开按键一下长按 注意:如果小时设置超过23,数码管将显示ERR(错 程序实例(clock.asm): ORG 0000H AJMP MAIN ORG 0003H AJMP INT ;外中断0入口 ORG 000BH AJMP DIN0 ;定时器0入口 MAIN: 92 DISML EQU 30H DISMH EQU 31H DISHL EQU 32H DISHH EQU 33H ;显示分,时的个时位 TFLAG EQU 34H ;时间秒标志,判是否到50 个0.2秒,即50*0.2=1秒 SETFLAG EQU 35H ;设置标志,依次从个位到 十位到百位到千位 ADDFLAG EQU 36H MFLAG EQU 37H ;时间分标志,判是否到60 个一秒,即一分 MOV DISML,#00H MOV DISMH,#00H MOV DISHL,#00H MOV DISHH,#00H ;显示分,时的个时位初值 MOV TFLAG,#00H ;时间秒标志初值 MOV SETFLAG,#00H ;设置标志初值 MOV ADDFLAG,#00H ;设数加标志 MOV MFLAG,#00H ;时间分标志 MOV SCON,#00H ;串行口工作于方式0(同 步移位) MOV TMOD,#00000001B;定时器0工作于方式1 MOV TL0,#0EEH MOV TH0,#31H ;设定时时间为0.05秒,定 时20次则一秒 SETB EA ;开总中断 SETB ET0 ;开定时器0中断允许 SETB EX0 ;开外中断0允许 93 SETB TR0 ;开定时0运行 SETB IT0 ;外中断0下降沿触发 DIS: ACALL DISPLAY ;调用显示时钟程序 AJMP CRITERION ;调判断程序,按键是否按 了。 ; ACALL DELAY ; AJMP DIS DIN0: PUSH ACC ;设置时是否出错,比如小时设到超过了23////////// MOV A,DISHH CJNE A,#02H,INCC MOV A,DISHL CLR C SUBB A,#04H JC INCC MOV SETFLAG,#06H AJMP RE ;///////////////////////////////////////////// ;是否到一秒/////////////////////////////////// INCC: INC TFLAG MOV A,TFLAG CJNE A,#19,RE MOV TFLAG,#00H ;///////////////////////////////////////////// ;是否到一分/////////////////////////////////// INC MFLAG 94 MOV A,MFLAG CJNE A,#60,RE MOV MFLAG,#00H ;///////////////////////////////////////////// ;计分///////////////////////////////////////// INC DISML MOV A,DISML CJNE A,#0AH,RE MOV DISML,#00H INC DISMH MOV A,DISMH CJNE A,#06H,RE MOV DISMH,#00H ;///////////////////////////////////////////// ;计时///////////////////////////////////////// ;计时分两种情况,分为小时的高位到2和没到2,没到2时时 低位是逢10进位,到2后,时低位到4则全归0 MOV A,DISHH CJNE A,#02H,HJ ;///////////////////////////////////////////// ;第一种情况/////////////////////////////////// INC DISHL MOV A,DISHL CJNE A,#04H,RE MOV DISHL,#00H MOV DISHH,#00H AJMP RE ;///////////////////////////////////////////// 95 ;第二种情况/////////////////////////////////// HJ: INC DISHL MOV A,DISHL CJNE A,#0AH,RE MOV DISHL,#00H INC DISHH ;///////////////////////////////////////////// RE: MOV TL0,#0EEH MOV TH0,#31H ;设定时时间为0.02秒,定 时50次则一秒 POP ACC RETI ;退出中断 INT: PUSH ACC JB P3.2,EXIT MOV R3,#0FFH DJNZ R3,$ JB P3.2,EXIT ;判键抖 MOV A,SETFLAG CJNE A,#00H,ADD2 AJMP SETKEY ADD2: CJNE A,#06H,B0 ;是错误了吗,是的,去恢 复 MOV SETFLAG,#00H AJMP SETKEY B0: MOV R4,#15H ADD1: JB P3.2,SETKEY 96 ACALL DELAY DJNZ R4,ADD1 MOV ADDFLAG,#01H AJMP EXIT ;状态增值///////////////////////////////////// SETKEY: INC SETFLAG MOV A,SETFLAG CJNE A,#05H,EXIT MOV SETFLAG,#00H ;///////////////////////////////////////////// EXIT: POP ACC RETI ;显示时钟///////////////////////////////////// DISPLAY: MOV A,DISML MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A D1: JNB TI,D1 CLR TI MOV A,DISMH MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A D2: JNB TI,D2 CLR TI MOV A,DISHL 97 MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A D3: JNB TI,D3 CLR TI MOV A,DISHH MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A D4: JNB TI,D4 CLR TI RET ;///////////////////////////////////////////// ;判按键标志/////////////////////////////////// CRITERION: MOV A,SETFLAG CJNE A,#00H,ERFLAG ;设置标志为0,即没 有按键,继续去显示 AJMP RET1 ERFLAG: CJNE A,#06H,SETML1 ;设置标志为6,即错 误了,去显示错误 AJMP ERR SETML1: CJNE A,#01H,SETMH1 AJMP SETML ;设置标志为1,显示 设分低 SETMH1: CJNE A,#02H,SETHL1 AJMP SETMH ;设置标志为2,显示 设分高 98 SETHL1: CJNE A,#03H,SETHH1 AJMP SETHL ;设置标志为3,显示 设时低 SETHH1: CJNE A,#04H,RET1 ;设置标志为5,是退 出标志 AJMP SETHH ;设置标志为4,显示 设时高 RET1: SETB TR0 ACALL DELAY AJMP DIS ;///////////////////////////////////////////// ;设分低(分低位闪烁)///////////////////////// SETML: CLR TR0 MOV A,ADDFLAG CJNE A,#01H,SETML2 ;是否按下了2秒钟, 是就开始闪烁设置 JNB P3.2,ADD3 MOV ADDFLAG,#00H ;松开了,清闪标志 AJMP SETML2 ADD3: INC DISML MOV A,DISML CJNE A,#0AH,SETML2 MOV DISML,#00H SETML2: ACALL DELAY2 ACALL DISPLAY ACALL DELAY2 MOV SBUF,#00H 99 E1: JNB TI,E1 CLR TI MOV A,DISMH MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A E2: JNB TI,E2 CLR TI MOV A,DISHL MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A E3: JNB TI,E3 CLR TI MOV A,DISHH MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A E4: JNB TI,E4 CLR TI AJMP CRITERION ;////////////////////////////////////////////////// ;设分高(分高位闪烁)//////////////////////////////// SETMH: CLR TR0 MOV A,ADDFLAG CJNE A,#01H,SETMH2 ;是否按下了2秒钟, 是就开始闪烁设置 100 JNB P3.2,ADD4 MOV ADDFLAG,#00H ;松开了,清闪标志 AJMP SETMH2 ADD4: INC DISMH MOV A,DISMH CJNE A,#0AH,SETMH2 MOV DISMH,#00H SETMH2: ACALL DELAY2 ACALL DISPLAY ACALL DELAY2 MOV A,DISML MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A F1: JNB TI,F1 CLR TI MOV SBUF,#00H F2: JNB TI,F2 CLR TI MOV A,DISHL MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A F3: JNB TI,F3 CLR TI MOV A,DISHH MOV DPTR,#SETTAB MOVC A,@A+DPTR 101 MOV SBUF,A F4: JNB TI,F4 CLR TI AJMP CRITERION ;////////////////////////////////////////////////// ;设时低位(时低位闪烁)//////////////////////////// SETHL: CLR TR0 MOV A,ADDFLAG CJNE A,#01H,SETHL2 ;是否按下了2秒钟, 是就开始闪烁设置 JNB P3.2,ADD5 MOV ADDFLAG,#00H ;松开了,清闪标志 AJMP SETHL2 ADD5: INC DISHL MOV A,DISHL CJNE A,#0AH,SETHL2 MOV DISHL,#00H SETHL2: ACALL DELAY2 ACALL DISPLAY ACALL DELAY2 MOV A,DISML MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A G1: JNB TI,G1 CLR TI MOV A,DISMH 102 MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A G2: JNB TI,G2 CLR TI MOV SBUF,#00H G3: JNB TI,F3 CLR TI MOV A,DISHH MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A G4: JNB TI,G4 CLR TI AJMP C RITERION ;////////////////////////////////////////////////// ;设时高位(时高位闪烁)//////////////////////////// SETHH: CLR TR0 MOV A,ADDFLAG CJNE A,#01H,SETHH2 ;是否按下了2秒钟, 是就开始闪烁设置 JNB P3.2,ADD6 MOV ADDFLAG,#00H ;松开了,清闪标志 AJMP SETHH2 ADD6: INC DISHH MOV A,DISHH CJNE A,#03H,SETHH2 103 MOV DISHH,#00H SETHH2: ACALL DELAY2 ACALL DISPLAY ACALL DELAY2 MOV A,DISML MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A H1: JNB TI,H1 CLR TI MOV A,DISMH MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A H2: JNB TI,H2 CLR TI MOV A,DISHL MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A H3: JNB TI,H3 CLR TI MOV SBUF,#00H H4: JNB TI,H4 CLR TI AJMP CRITERION ;////////////////////////////////////////////////// ;错误显示////////////////////////////////////////// 104 ERR: CLR TR0 ACALL DELAY2 MOV SBUF,#0EAH I1: JNB TI,I1 CLR TI MOV SBUF,#0EAH I2: JNB TI,I2 CLR TI MOV SBUF,#9EH I3: JNB TI,I3 CLR TI MOV SBUF,#00H I4: JNB TI,I4 CLR TI AJMP CRITERION ;延时///////////////////////////////////////// DELAY: MOV R1,#100 DE: MOV R2,#100 DJNZ R2,$ DJNZ R1,DE RET ;////////////////////////////////////////////////// DELAY1: MOV R1,#0FFH DE1: MOV R2,#0FFH DJNZ R2,$ DJNZ R1,DE1 105 RET DELAY2: MOV 38H,#02H DE3: MOV R2,#0FFH DE2: MOV R1,#0FFH DJNZ R1,$ DJNZ R2,DE2 DJNZ 38H,DE3 RET SETTAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H, 0FEH,0F6H DB 0EEH,3EH,9CH,7AH,9EH,8EH ;数显代码 END |
|||||
| 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 基于普通单片机的LIN协议实现… 提高单片机系统可靠性的设计… 利用单芯片MCU提高照明系统能… 基于MCU的风光互补独立电源系… 单片机控制GSM手机的技术及应… 用51内核网络单片机构成的远… 在Bank Switch基础上 实现大… 用单片机实现DSP在线调试的一… 利用Flash实现单片机系统的在… 基于AT89C52单片机的自动存取… |
网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 文章索引 | 网站地图 | |
| 声明:本网站资源均来源于网络,如涉及版权问题,请通知我们,我们将尽快删除! QQ:279619038 备案序号:吉ICP备06005743号 自动化学习网版权所有 站长:guxing |
|