1、 ORG 0000HLJMP MAINORG 001BHLJMP TIMER1ORG 0070H;1.初始化MAIN: MOV DPTR,#NUMMOV 30H,#20 ;中断计数 20 次MOV TH1,#4CHMOV TL1,#0B0H ;定时 50msMOV TH0,#00H ;清 T0 数据MOV TL0,#00H ;清 T0 数据MOV 3EH,#00H ;存 TH0MOV 3FH,#00H ;存 TL0MOV IE,#88HMOV TMOD,#15HSETB TR1SETB TR0 LOOP0: ACALL CH_BCD ;调用字符变换函数ACALL LED ;调用显示函数SJMP
2、 LOOP0 ;2.完成 16 进制数变换为非压缩 BCD 码CH_BCD: MOV R6,3EH ;转存至 R6,转换 BCD 码MOV R7,3FH ;转存至 R7,转换 BCD 码CLR AMOV R2,AMOV R3,AMOV R4,AMOV R5,#16 ;共 16 位LOOP1: CLR CMOV A,R7RLC A ;高端移一位到 CYMOV R7,AMOV A,R6RLC AMOV R6,AMOV A,R4 ;送到 BCD 码的低端ADDC A,R4 ;自身相加 相当于左移一位DA A ;十进制调整 变成 BCD 码MOV R4,AMOV A,R3ADDC A,R3DA AMO
3、V R3,AMOV A,R2ADDC A,R2DA AMOV R2,ADJNZ R5,LOOP1 ;以上完成 BCD 码的转换;将 R6R7 转换为压缩 BCD 码,存放在 R2R3R4MOV R0,#40H ;设置指针,40H 到 44H 存放 BCD 码MOV A,R2MOV R0,AINC R0MOV A,R3SWAP A ;高低四位互换ANL A,#0FHMOV R0,AINC R0MOV A,R3ANL A,#0FHMOV R0,AINC R0MOV A,R4SWAP AANL A,#0FHMOV R0,AINC R0MOV A,R4ANL A,#0FHMOV R0,A ;以上完成
4、BCD 码的拆分RET ;3.完成数码管的显示LED:MOV A,40HCJNE A,#0,XS2XS1:MOV DPTR,#NUMMOV P2,#0F7HMOV A,41HMOVC A,A+DPTRMOV P0,AACALL DELMOV P2,#0FBHMOV A,42HMOVC A,A+DPTRMOV P0,AACALL DELMOV P2,#0FDHMOV A,43HMOVC A,A+DPTRMOV P0,AACALL DELMOV P2,#0FEHMOV A,44HMOVC A,A+DPTRMOV P0,AACALL DELRETXS2: MOV P2,#0F7HMOV A,40HM
5、OVC A,A+DPTRMOV P0,AACALL DELMOV P2,#0FBHMOV A,41HMOVC A,A+DPTRMOV P0,AORL P0,#080HACALL DELMOV P2,#0FDHMOV A,42HMOVC A,A+DPTRMOV P0,AACALL DELMOV P2,#0FEHMOV A,43HMOVC A,A+DPTRMOV P0,AACALL DELRETDEL:MOV R7,#08H ;延时DEL0:MOV R6,#3CHDJNZ R6,$DJNZ R7,DEL0RET;4.中断函数TIMER1: MOV TH1,#4CHMOV TL1,#0B0H ;定时 50msDJNZ 30H,NEXT0 ;判断是否到 1 秒,不到 1 秒则减一跳出中断MOV 30H,#20MOV 3EH,TH0 ;存高位MOV 3FH,TL0 ;存低位MOV TH0,#00H ;清 T0 数据MOV TL0,#00H ;清 T0 数据NEXT0: RETINUM: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND