⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 time.asm

📁 此程序是关系电子时钟的
💻 ASM
字号:
;实用单片机电子钟的制作
       ORG 0000H
       AJMP MAIN
       ORG 000BH
       AJMP TIME
       ORG 046H
MAIN:  MOV 20H,#00H	;计时的0.1秒、秒、时和分单元清0
       MOV 21H,#00H     ;秒
       MOV 22H,#00H     ;分
       MOV 23H,#00H     ;时
       MOV IP,#02H		;设置T0中断优先
       MOV IE,#82H     ;T0充许中断
       MOV TMOD,#01H	;定时器的初始化
       MOV TL0,#00H    ;定时0.1秒
       MOV TH0,#0DCH
       SETB TR0		;启动定时器工作
       MOV SP,#40H		;堆栈指针设为40H
NEXT:  LCALL DISP		;调用显示子程序
       LCALL KEY		;调按键判断子程序
       JZ NEXT			;无键按下转NEXT
       LCALL ANKEY		;有键按下转按键处理子程序
       SJMP NEXT		;按键处理完转NEXT
       NOP
       NOP
       NOP	
;定时中断处理程序:
TIME:		PUSH ACC		;现场保护
		PUSH PSW
		MOV TL0,#00H	;重置初值
		MOV TH0,#0DCH
		INC 20H			;计时处理
		MOV A,20H
		CJNE A,#100,RETI1
		MOV 20H,#00H
		MOV A,21H
		ADD A,#01H
		DA A
		MOV 21H,A
		CJNE A,#60H,RETI1
		MOV 21H,#00H
		MOV A,22H
		ADD A,#01H
		DA  A
		MOV 22H,A
		CJNE A,#60H,RETI1
	        MOV 22H,#00H
		MOV A,23H
		ADD A,#01H
		DA A
		MOV 23H,A
		CJNE A,#24H,RETI1
		MOV 23H,#00H
 RETI1:	        POP PSW		;恢复现场
		POP ACC
		RETI		;中断返回
		NOP
		NOP
; 显示子程序
DISP:		ANL 2FH,#10H		;拆字,注意小数点的显示
		MOV A,21H
		ANL A,#0FH
		ORL A,2FH
		MOV 2FH,A
		MOV A,21H
		ANL A,#0F0H
		SWAP A
		MOV 2EH,A
		ANL 2DH,#10H
		MOV A,22H
		ANL A,#0FH
		ORL A,2DH
		MOV 2DH,A
	        MOV A,22H
		ANL A,#0F0H
		SWAP A
		MOV 2CH,A
		ANL 2BH,#10H
		MOV A,23H
		ANL A,#0FH
		ORL A,2BH
		MOV 2BH,A
		MOV A,23H
		ANL A,#0F0H
		SWAP A
		MOV 2AH,A
		MOV R0,#2FH
		MOV R3,#06H
		MOV DPTR,#TABLE
		MOV A,#0DFH
LOOP1:	        MOV B,A			;送位控制字与段控制字
               	MOV P2,A
	        MOV A,@R0
		MOVC A,@A+DPTR
		MOV P1,A
		MOV R2,#80H		;延时
		DJNZ R2,$
		DEC R0
		MOV A,B
		RR A
		DJNZ R3,LOOP1
		RET
TABLE:	        DB 0C0H,0F9H,0A4H,0B0H,99H,92H			;小数点不亮的代码
		DB 82H,0F8H,80H,90H,00,00,00,00,00,00
		DB 40H,79H,24H,30H,19H,12H,02H,78H		;小数点亮的显示代码
		DB 00H,10H,00,00,00,00,00,00
		NOP
		NOP
;按键判断程序
KEY:		MOV P0,#0FFH		;读按键状态
		MOV A,P0
		CPL A
		ANL A,#0FH
	        JZ RETX		       ;无键按下返回,有键按下延时去抖动
	        LCALL DISP
	        LCALL DISP
	        MOV A,P0
	        CPL A
	        ANL A,#0FH
	        JZ RETX			;是抖动则返回主程序,否则读按键状态存入R6及A中
		MOV R6,A
LOOP2:	        LCALL DISP		;等待按键的释放
	        MOV A,P0
	        CPL A
		ANL A,#0FH
		JNZ LOOP2
		MOV A,R6
RETX:	        RET
	        NOP
	        NOP
;按键处理子程序
ANKEY:	        CLR EA			;关中断
LX:		MOV A,R6
		JB ACC.0,L1		;是功能键转L1
		JB ACC.1,L2		;是确认键转L2
		JB ACC.2,L3		;是增1键转L3
		JNB ACC.3,L12	        ;不是减1键,转L12
		JB 2BH.4,L61		;判断使哪一位(时、分、秒)的值减1
		JB 2DH.4,L81
		JB 2FH.4,L91
L12:		LCALL DISP
		LCALL DISP
		LCALL KEY
		JZ L12
		LJMP LX
L2:		MOV 25H,#00H	        ;是确认键,处理完毕返回
		CLR 2BH.4
		CLR 2DH.4
		CLR 2FH.4
		SETB EA
		RET
L3:		JB 2BH.4,L6
		JB 2DH.4,L8
		JB 2FH.4,L9
		AJMP L12
L1:		MOV A,25H
		JZ LB1
		JB ACC.0,LB2
		JB ACC.1,LB3
		JNB ACC.2,L12
LB1:		MOV 25H,#01H		;25H单元是标志位,(25H)=01H调节时单元的值
		SETB 2BH.4		
		CLR 2DH.4
		CLR 2FH.4
		AJMP L12
LB3:		MOV 25H,#04H		;(25H)=04H调节秒单元的值
		SETB 2FH.4
		CLR 2DH.4
		CLR 2BH.4
		AJMP L12
LB2:		MOV 25H,#02H		;(25H)=02H,调节分单元的值
		SETB 2DH.4
		CLR 2BH.4
		CLR 2FH.4
		AJMP L12
L61:		AJMP L611		;调节时间时注意使用的是十进制,而且注意
L81:		AJMP L811		;分和秒都是60进制,时是24进制
L91:		AJMP L911
L6:		MOV A,23H
	        ADD A,#01H
		DA A
		MOV 23H,A
		CJNE A,#24H,L15
L15:		JC L112
		MOV 23H,#00H
L112:		AJMP L12
L8:		MOV A,22H
		ADD A,#01H
		DA A
		MOV 22H,A
		CJNE A,#60H,L16
L16:		JC L112
		MOV 22H,#00H
		AJMP L12
L9:		MOV A,21H
		ADD A,#01H
		DA A
		MOV 21H,A
		CJNE A,#60H,L17
L17:		JC L112
		MOV 21H,#00H
		AJMP L12
L611:		MOV A,23H
		ADD A,#99H
		DA A
		MOV 23H,A
		CJNE A,#0H,L112
		MOV 23H,#23H
		AJMP L12
L811:		MOV A,22H
		ADD A,#99H
		DA A
		MOV 22H,A
		CJNE A,#99H,L112
		MOV 22H,#59H
		AJMP L12
L911:		MOV A,21H
		ADD A,#99H
	        DA A
		MOV 21H,A
		CJNE A,#99H,L112
		MOV 21H,#59H
		AJMP L12
		NOP
		NOP	
		END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -