51单片机简洁版+复杂版汇编数字钟_第1页
51单片机简洁版+复杂版汇编数字钟_第2页
51单片机简洁版+复杂版汇编数字钟_第3页
51单片机简洁版+复杂版汇编数字钟_第4页
51单片机简洁版+复杂版汇编数字钟_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、51 单片机简洁版汇编数字钟/*程序名称: 51 单片机数码管电子钟汇编程序显示格式:简要说明:实现 24小时制电子钟, 8 位数码管显示,显示时分秒23-59-59 (小时十位如果为 0 则不显示)P0 口输出段选信号, P2 口输出位选信号P1.0 为调时按钮, P1.1 为调分按钮;晶振 12M编写: JiangX.net*/ORG 0000H ; 程序入口地址LJMP STARTORG 000BH ; 定时器 0 中断入口地址LJMP TIMER_0K1 BIT P1.0 ;定义调时按键K2 BIT P1.1 ;定义调分按键START:MOV TMOD,#01H ; 定时器 0,工作模

2、式 1MOV TH0,#03CHMOV TL0,#0B0H ; 赋初值,定时 50msSETB EA ; 开中断总开关SETB TR0 ; 开启定时器 0SETB ET0 ; 定时器 0中断允许位MOV R6,#0 ; 用于控制走时的基准时钟源,计中断次数MOV R5,#0 ;R5 用于控制扫描按键的时间间隔MOV 20H,#0 ;秒个位寄存器清零MOV 21H,#0 ;秒十位寄存器清零MOV 22H,#0 ;分个位寄存器清零MOV 23H,#0 ;分十位寄存器清零MOV 24H,#0 ;时个位寄存器清零MOV 25H,#0 ;时十位寄存器清零LJMP DISPLAYTIMER_0:CLR E

3、AINC R6INC R5MOV TH0,#03CHMOV TL0,#0B0H ; 重新赋初值,定时 50msSETB EARETIADD_TIME:CJNE R6,#20,EXIT ; 定时器中断 20 次, 1 秒到MOV R6,#0INC 20HMOV A,20HCJNE A,#10,EXIT ; 如果秒个位等于 10,清零MOV 20H,#00HINC 21HMOV A,21HCJNE A,#6,EXIT ; 如果秒十位等于 6 ,清零MOV 21H,#00HINC 22HMIN:MOV A,22HCJNE A,#10,EXIT ; 如果分个位等于 10,清零MOV 22H,#00HI

4、NC 23HMOV A,23HCJNE A,#6,EXIT ; 如果分十位等于 6 ,清零INC 24HMOV 23H,#00HHOUR:MOV A,25HCJNE A,#2,LOOP ; 如果时十位等于 2 ,检查时个位MOV A,24HCJNE A,#4,EXIT ; 如果时个位等于 4 ,清零MOV 24H,#00H ; 清零时个位MOV 25H,#00H ; 清零时十位LJMP EXITLOOP:MOV A,24HCJNE A,#10,EXIT ; 如果时个位等于 10,清零MOV 24H,#00HINC 25HLJMP EXITEXIT:LJMP DISPLAY ; 刷新完毕,跳转到

5、显示DISPLAY:MOV DPTR,#TABLEMOV A,20HCLR P2.7LCALL DELAYSETB P2.7 ; 显示秒个位MOV A,21HMOVC A,A+DPTRMOV P0,ACLR P2.6LCALL DELAYSETB P2.6 ; 显示秒十位MOV A,#0BFHMOV P0,ACLR P2.5LCALL DELAYSETB P2.5 ; 显示“ - ”MOV A,22HMOVC A,A+DPTRMOV P0,ACLR P2.4LCALL DELAYSETB P2.4 ; 显示分个位MOV A,23HMOVC A,A+DPTRMOV P0,ACLR P2.3LCA

6、LL DELAYSETB P2.3 ; 显示分十位MOV A,#0BFHMOV P0,ACLR P2.2LCALL DELAYSETB P2.2 ; 显示“ - ”MOV A,24HMOVC A,A+DPTRMOV P0,ACLR P2.1LCALL DELAYSETB P2.1 ; 显示时个位MOV DPTR,#TABLE1该位使用TABLE1以消除前置0MOV A,25HCLR P2.0LCALL DELAYSETB P2.0 ; 显示时十位CJNE R5,#4,EXIT0 ; 当 R5 到 4 时,扫描按键MOV R5,#0KEY_SCAN:JNB K1,ADD_HOURJNB K2,A

7、DD_MINLJMP ADD_TIME ; 无键按下,跳至走时ADD_HOUR:INC 24H ; 小时加 1LJMP HOUR ; 更新ADD_MIN:INC 22H ; 分钟加 1LJMP MIN ; 更新EXIT0:LJMP ADD_TIMEDELAY:MOV R7,#150 ;扫描延时DJNZ R7,$RETTABLE:;数码管字形显示编码表DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;字形显示编码TABLE1:DB 0FFH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;小时位的十位数编码,该位如果

8、为0则不显示END ;程序结束厂i 厂i n tj 口口口LJ1 一 -F |i 疋,OQi:手 CO GO3-R20 I OKKKKPM】PlFL*4S土S-旳J2.0ML020Pl.DPl.P:L2Pi.3P1JP1.5/MOSI Pl.fiAflSCi P1.7/SCK RSTP3.0/RZDP3./TP3.2/INTDP3.3/INTTP3.4/T0P3.5/T1_P争6亟P3.7/RDXTAL2XTALI:KI-VCC PO.O PO IPO 2P0.3P04P0.5P0.6PD.7 IZ/VPPPSEMP27P2.fiP2.5P2.4P2.3P2.2PllP2.030p:C33 D

9、p40 T R2-R9 3303; i nil垒 Pll J I j7.F.l=l - 1=1 丁 i门 31 F0.533 FO.d32 70.731Cmo-Rj7瓦27亘252?2377匚#qU P0?qU-Pajz寻? tcz二-tl:cz.i: Le_/HeaeT E E 补 o o o tbseasJKChgP27 i O8P曲HzEP20P24LEDLED:31 vccP21P22Q48550Q5 PJ5855Q1輸P2tP27 K8550QS8550Pl.DRAI inK FDn_iaSf尸ADDvccU1 AT8DS52VCCvccU1 AT8DS52VCC汇编程序设计:/*程

10、序名称:51单片机8位数码管数字钟汇编程序简要说明:实现24小时制电子钟,8位数码管显示,显示时分秒显示格式:23-59-59 (小时十位如果为0则不显示)通过3只按键来调整时间调整选择键SET_KEYP1.0 ;通过选择键选择调整位,选中位闪 烁增加键ADD_KEYP1.1 ;按一次使选中位加 1减少键DEC_KE;P1.2 ;按一次使选中位减 1如果长按ADD_KE或DEC_KEY识别后则进行调时快进,此时停止闪烁如果选中位是秒,则按增加键或减少键都是将秒清零P0 口输出数码管段选信号,P2 口输出数码管位选信号。晶振12M 编写: JiangX.net最后更新: 08/12/31 晚*/

11、ORG 0000H ; 程序入口地址LJMP STARTORG 000BH ; 定时器 0 中断入口地址LJMP TIMER_0ORG 0300H/* 程序开始,初始化 */START:SETB 48H ; 使用一个 bit 位用于调时闪烁标志SETB 47H ; 使用一个 bit 位用于产生脉冲用于调时快进时基MOV R1,#0 ; 调整选择键功能标志: 0 正常走时、 1 调时、2 调分、 3 调秒MOV 20H,#00H ; 用于控制秒基准时钟源的产生MOV 21H,#00H ; 清零秒寄存器MOV 22H,#00H ; 清零分寄存器MOV 23H,#00H ; 清零时寄存器MOV 24

12、H,#00H ; 用于控制调时闪烁的基准时钟的产生MOV IP,#02H ;IP,IE 初始化MOV IE,#82HMOV TMOD,#01H ;设定定时器 0 工作方式 1MOV TH0,#3CHMOV TL0,#0B0H ; 赋定时初值,定时 50msSETB TR0 ; 启动定时器 0MOV SP,#40H ; 重设堆栈指针*主程序 */MAIN:LCALL DISPLAY ; 调用显示子程序LCALL KEY_SCAN ; 调用按键检测子程序JZ MAIN ; 无键按下则返回重新循环LCALL SET_KEY ; 调用选择键处理子程序JB 46H,MAIN ; 如果已进行长按调整(调时

13、快进) ,则不再执行下 面的单步调整LCALL ADD_KEY ; 调用增加键处理子程序,加一LCALL DEC_KEY ; 调用减少键处理子程序,减一LJMP MAIN ; 重新循环/* 定时器中断服务程序 */TIMER_0:PUSH ACCPUSH PSW ; 保护现场MOV TH0,#3CHMOV TL0,#0B0H ; 重新赋定时初值CPL 47H ; 产生脉冲用于调时快进时基INC 24HMOV A,24HCJNE A,#10,ADD_TIME ; 产生 0.5 秒基准时钟,用于调时闪烁CPL 48H ; 取反调时闪烁标志位MOV 24H,#00HADD_TIME: ; 走时INC

14、 20HMOV A,20HCJNE A,#20,RETI1 ; 产生 1 秒基准时钟MOV 20H,#00H ; 一秒钟时间到,清零 20HMOV A,21HADD A,#01HDA A ; 作十进制调整MOV 21H,ACJNE A,#60H,RETI1MOV 21H,#00H ; 一分钟到MOV A,22HADD A,#01HDA AMOV 22H,ACJNE A,#60H,RETI1MOV 22H,#00H ; 一小时到MOV A,23HADD A,#01HDA AMOV 23H,ACJNE A,#24H,RETI1MOV 23H,#00H ; 到 24 点 , 清零小时RETI1:PO

15、P PSWPOP ACC ; 恢复现场RETI ; 中断返回*DISPLAY:MOV A,21H ; 秒ANL A,#0FHMOV 2FH,A ; 转换出秒个位,存入 2FHMOV A,21HANL A,#0F0HSWAP AMOV 2EH,A ; 转换出秒十位,存入 2EHJB 46H,MIN ; 如果长按按键(调时快进) ,则跳过闪烁处理程序CJNE R1,#3,MIN ;如果R1为3,闪烁秒位待调整JB 48H,MINMOV 2FH,#0AH ; 使该位为 10,查表得到使该位不显示的输出MOV 2EH,#0AHMIN:MOV A,22H ; 分ANL A,#0FHMOV 2DH,A ;

16、 转换出分个位,存入 2DHMOV A,22HANL A,#0F0HSWAP AMOV 2CH,A ; 转换出分十位,存入 2CHJB 46H,HOUR ; 如果长按按键(调时快进) ,则跳过闪烁处理程序CJNE R1,#2,HOUR ; 如果 R1 为 2,闪烁分位待调整JB 48H,HOURMOV 2DH,#0AH ; 使该位为 10,查表得到使该位不显示的输出MOV 2CH,#0AHHOUR:MOV A,23H ; 时ANL A,#0FHMOV 2BH,A ; 转换出时个位,存入 2BHMOV A,23HANL A,#0F0HSWAP AMOV 2AH,A ; 转换出时十位,存入 2AH

17、JB 46H,DISP ; 如果长按按键(调时快进) ,则跳过闪烁处理程序CJNE R1,#1,DISP ; 如果 R1 为 1,闪烁时位待调整JB 48H,DISPMOV 2BH,#0AH ; 使该位为 10,查表得到使该位不显示的输出MOV 2AH,#0AH/* 数码管动态扫描显示 *DISP:MOV DPTR,#TABLEMOV A,2FHMOVC A,A+DPTRMOV P0,ACLR P2.7LCALL DELAYSETB P2.7 ; 显示秒个位MOV A,2EHMOVC A,A+DPTRMOV P0,ACLR P2.6LCALL DELAYSETB P2.6 ; 显示秒十位MOV

18、 A,#0BFHMOV P0,ACLR P2.5LCALL DELAYSETB P2.5 ; 显示“ - ”MOV A,2DHMOVC A,A+DPTRMOV P0,ACLR P2.4LCALL DELAYSETB P2.4 ; 显示分个位MOV A,2CHMOVC A,A+DPTRMOV P0,ACLR P2.3LCALL DELAYSETB P2.3 ; 显示分十位MOV A,#0BFHMOV P0,ACLR P2.2LCALL DELAYSETB P2.2 ; 显示“ - ”MOV A,2BHMOVC A,A+DPTRMOV P0,ACLR P2.1LCALL DELAYSETB P2.

19、1 ; 显示时个位MOV DPTR,#TABLE1该位使用TABLE1以消除前置0MOV A,2AHMOVC A,A+DPTRMOV P0,ACLR P2.0LCALL DELAYSETB P2.0 ; 显示时十位RET/* 按键检测子程序 */KEY_SCAN:CLR 46H ; 关闭长按调整(调时快进)标志MOV P1,#0FFH ; 将 P1 口设置成输入状态MOV A,P1CPL AANL A,#07H ;P1 口低 3位连接 3 个按键,只判断该 3位JZ EXIT_KEY ; 无键按下则返回LCALL DELAY ; 延时去抖动MOV A,P1 ; 重新判断CPL AANL A,#

20、07HJZ EXIT_KEY ; 键盘去抖动MOV R5,A ; 临时将键值存入 R5MOV R4,#00H ; 用于控制调时快进速度; 设置为 00H 是为了在进入长按处理前加长延时区分用户的长按与 短按,防止误快进LOOP: ; 进入长按处理LCALL DISPLAY ; 使长按时显示正常MOV A,P1CPL AANL A,#07HJB 47H,LOOP1INC R4 ; 调时快进间隔时间基准加 1LOOP1:CJNE R1,#03H,LOOP2 ; 如果调秒时长按,则不处理LJMP LOOP3LOOP2:CJNE R4,#99H,LOOP3MOV R4,#70H ; 确认用户长按后,重

21、新设定起始值,加快调时快 进速度SETB 46H ; 长按调整(调时快进)标志LCALL ADD_KEYLCALL DEC_KEYLOOP3:JNZ LOOP ; 等待键释放MOV A,R5 ; 输出键值RETEXIT_KEY:RET*延时子程序 */DELAY:MOV R7,#150DJNZ R7,$RET*选择键处理子程序 */SET_KEY:CJNE R5,#01H,EXIT ; 选择键键值INC R1 ; 调整选择功能标志加一CJNE R1,#4,EXITMOV R1,#0MOV 24H,#00H ; 调时闪烁基准清零RET*增加键处理子程序 */ADD_KEY:CJNE R5,#02H,EXIT ; 增加键键值CJNE R1,#01H,NEXT1 ; 选择键功能标志为 1 ,调时,否则跳出MOV A,23HADD A,#01HDA AMOV 23H,ACJNE A,#24H,EXITMOV

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论