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

📄 万年历显示.asm

📁 可调万年历led版:led数码显示时间及温度
💻 ASM
字号:
            	ORG 0000H
                TEMPER_L   EQU 56H
		TEMPER_H   EQU 55H
		TEMPER_NUM EQU 60H
		DQ	   BIT P3.5
                MOV SP,#7
                MOV R0,#0AH
		MOV A,#2AH
		MOVX @R0,A
		INC R0
		MOV A,#06H
		MOVX @R0,A
MAIN:           ACALL KEY
                ACALL READ
                ACALL CAI
                ACALL	GET_TEMPER	;调“读出转换后的温度值”
		ACALL	TEMPER_COV	;调“温度转换”
                MOV	A,	TEMPER_NUM
		ANL	A,	#0FH
                MOV     2EH,A
                MOV	A,	TEMPER_NUM
		SWAP	A
		ANL	A,	#0FH
                MOV     2FH,A
                ACALL DISP
                SJMP MAIN
;----------------------------;读DS12887并分配内部RAM
READ:           MOV R2,#3
		MOV R1,#20H
		MOV R0,#00H
LP1:	        MOVX A,@R0
		MOV @R1,A
		INC R0
		INC R0
		INC R1
		DJNZ R2,LP1
LP2:	        MOVX A,@R0
		MOV @R1,A
		INC R0
		INC R1
		CJNE R0,#0AH,LP2
		RET
;--------------------------显示子程序
DISP:           MOV R3,#00H
                MOV R1,#3CH
LP4:            MOV A,@R1
                ORL A,R3
                MOV P1,A
                ACALL DELAY
                DEC R1
                MOV A,R3
                ADD A,#10H
                MOV R3,A
                CJNE R3,#00H,LP4
                RET
;-------------------------拆字分配RAM子程序
CAI:	        MOV A,20H
		MOV B,#10
		DIV AB
		MOV 30H,B
		MOV 31H,A
		MOV A,21H
		MOV B,#10
		DIV AB
		MOV 32H,B
		MOV 33H,A
		MOV A,22H
		MOV B,#10
		DIV AB
		MOV 34H,B
		MOV 35H,A
		MOV 36H,23H
		MOV A,24H
		MOV B,#10
		DIV AB
		MOV 37H,B
		MOV 38H,A
		MOV A,25H
		MOV B,#10
		DIV AB
		MOV 39H,B
		MOV 3AH,A
		MOV A,26H
		MOV B,#10
		DIV AB
		MOV 3BH,B
		MOV 3CH,A
		RET
;------------------------键盘扫描
KEY:            JB P2.3,OUT
                ACALL DELAY2
                JNB P2.3,$
                MOV 70H,#0
                MOV R0,#0BH
                MOV A,#8EH
                MOVX @R0,A
NT:             JNB P2.3,TX1
                JNB P2.0,TX2
                JNB P2.1,TX3
                JNB P2.2,TX4
                ACALL FLASH
                SJMP NT
TX1:            ACALL KEY23
                SJMP OUT
TX2:            ACALL KEY20
                SJMP NT
TX3:            ACALL KEY21
                SJMP NT
TX4:            ACALL KEY22
                SJMP NT
OUT:            RET
;------------------闪烁子程序
FLASH:          MOV R7,#10
LK1:	        ACALL READ
		ACALL CAI
		ACALL DISP
		DJNZ R7,LK1
		MOV R7,#10
	        ACALL JUDGE
KK1:	        ACALL DISP
		DJNZ R7,KK1
;------------------判断修改单元
JUDGE:          MOV A,70H
                CJNE A,#0,NEXT
                MOV 3CH,#0FH
                MOV 3BH,#0FH
                SJMP OUT2
NEXT:           CJNE A,#1,NEXT_1
                MOV 3AH,#0FH
                MOV 39H,#0FH
                SJMP OUT2
NEXT_1:         CJNE A,#2,NEXT_2
                MOV 38H,#0FH
                MOV 37H,#0FH
                SJMP OUT2
NEXT_2:         CJNE A,#3,NEXT_3
                MOV 36H,#0FH
                SJMP OUT2
NEXT_3:         CJNE A,#4,NEXT_4
                MOV 35H,#0FH
                MOV 34H,#0FH
                SJMP OUT2
NEXT_4:         CJNE A,#5,NEXT_5
                MOV 33H,#0FH
                MOV 32H,#0FH
                SJMP OUT2
NEXT_5:         CJNE A,#6,NEXT_6
                MOV 31H,#0FH
                MOV 30H,#0FH
                SJMP OUT2
NEXT_6:         MOV 3CH,#0FH
                MOV 3BH,#0FH
OUT2:           RET
;-------------------子键处理0
KEY23:          ACALL DELAY
                JB P2.3,OUT23
                ACALL DELAY2
                JNB P2.3,$
                MOV R0,#0BH
                MOV A,#06H
                MOVX @R0,A
OUT23:          RET
;---------------------子键1
KEY20:          ACALL DELAY2
                JB P2.0,OUT20
                ACALL DELAY2
                JNB P2.0,$
                INC 70H
                MOV A,70H
                CJNE A,#7,OUT20
                MOV 70H,#0
OUT20:          RET
;--------------------子键2
KEY21:          ACALL DELAY2
                JB P2.1,OUT21
                ACALL DELAY2
                JNB P2.1,$
                MOV A,70H
                ADD A,70H
                SETB 7FH
                MOV DPTR,#TAB
                JMP @A+DPTR
OUT21:          RET
;--------------------子键3
KEY22:          ACALL DELAY2
                JB P2.2,OUT22
                ACALL DELAY2
                JNB P2.2,$
                MOV A,70H
                ADD A,70H
                CLR 7FH
                MOV DPTR,#TAB
                JMP @A+DPTR
OUT22:          RET
;?------------------子程序0
OPR0:           MOV R0,#09H
                MOVX A,@R0
                JB 7FH,ADDYEAR
                CJNE A,#0,MX
                MOV A,#99
                SJMP OT
ADDYEAR:        CJNE A,#99,MX1
                MOV A,#0
                SJMP OT
MX1:            INC A
                SJMP OT
MX:             DEC A
OT:             MOVX @R0,A
                RET
;?------------------子程序1
OPR1:           MOV R0,#08H
                MOVX A,@R0
                JB 7FH,ADDMOUTH
                CJNE A,#1,MX2
                MOV A,#12
                SJMP OT1
ADDMOUTH:       CJNE A,#12,MX3
                MOV A,#1
                SJMP OT1
MX3:            INC A
                SJMP OT1
MX2:            DEC A
OT1:            MOVX @R0,A
                RET
;?------------------子程序2
OPR2:           MOV R0,#07H
                MOVX A,@R0
                JB 7FH,ADDDAY
                CJNE A,#1,MX4
                MOV A,#31
                SJMP OT2
ADDDAY:         CJNE A,#31,MX5
                MOV A,#1
                SJMP OT2
MX5:            INC A
                SJMP OT2
MX4:            DEC A
OT2:            MOVX @R0,A
                RET
;?-------------------子程序3
OPR3:           MOV R0,#06H
                MOVX A,@R0
                JB 7FH,ADDWEEK
                CJNE A,#1,MX6
                MOV A,#7
                SJMP OT3
ADDWEEK:        CJNE A,#7,MX7
                MOV A,#1
                SJMP OT3
MX7:            INC A
                SJMP OT3
MX6:            DEC A
OT3:            MOVX @R0,A
                RET
;?--------------------子程序4
OPR4:           MOV R0,#04H
                MOVX A,@R0
                JB 7FH,ADDHOUR
                CJNE A,#0,MX8
                MOV A,#23
                SJMP OT4
ADDHOUR:        CJNE A,#23,MX9
                MOV A,#0
                SJMP OT4
MX9:            INC A
                SJMP OT4
MX8:            DEC A
OT4:            MOVX @R0,A
                RET
;?-------------------子程序5
OPR5:           MOV R0,#02H
                MOVX A,@R0
                JB 7FH,ADDMIN
                CJNE A,#0,MX10
                MOV A,#59
                SJMP OT5
ADDMIN:         CJNE A,#59,MX11
                MOV A,#0
                SJMP OT5
MX11:           INC A
                SJMP OT5
MX10:           DEC A
OT5:            MOVX @R0,A
                RET
;?-------------------子程序6
OPR6:           MOV R0,#00H
                MOVX A,@R0
                JB 7FH,ADDSEC
                CJNE A,#0,MX12
                MOV A,#59
                SJMP OT6
ADDSEC:         CJNE A,#59,MX13
                MOV A,#0
                SJMP OT6
MX13:           INC A
                SJMP OT6
MX12:            DEC A
OT6:            MOVX @R0,A
                RET
;----------------------读出转换后的温度值
GET_TEMPER:
        LCALL	INIT_1820
	MOV	A,	#0CCH	; 跳过ROM匹配------0CC
	LCALL	WRITE_1820
	MOV	A,	#44H	; 发出温度转换命令
	LCALL	WRITE_1820
        LCALL	INIT_1820
	MOV	A,	#0CCH	; 跳过ROM匹配
	LCALL	WRITE_1820
	MOV	A,	#0BEH	; 发出读温度命令
	LCALL	WRITE_1820
	LCALL	READ_18200	;READ_1820
	RET
;-------------------写DS18B20的程序
WRITE_1820:
	MOV	R2,	#8
	CLR	C
WR1:	CLR	DQ
	MOV	R3,	#6
	DJNZ	R3,	$
	RRC	A
	MOV	DQ,	C
	MOV	R3,	#23
	DJNZ	R3,	$
	SETB	DQ
	NOP
	DJNZ	R2,	WR1
	RET
;-------------------读DS18B20的程序,从DS18B20中读出两个字节的温度数据
READ_18200:
	MOV	R4,	#2	; 将温度高位和低位从DS18B20中读出
	MOV	R1,	#56H	; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)
RE00:	MOV	R2,	#8
RE01:	CLR	C
	SETB	DQ
	NOP
	NOP
	CLR	DQ
	NOP
	NOP
	NOP
	SETB	DQ
	MOV	R3,	#7
	DJNZ	R3,	$
	MOV	C,	DQ
	MOV	R3,	#23
	DJNZ	R3,	$
	RRC	A
	DJNZ	R2,	RE01
	MOV	@R1,	A
	DEC	R1
	DJNZ	R4,	RE00
	RET
;-------------------将从DS18B20中读出的温度数据进行转换
TEMPER_COV:MOV	A,	#0F0H
	ANL	A,	TEMPER_L	; 舍去温度低位中小数点后的四位温度数值
	SWAP	A
	MOV	TEMPER_NUM,	A
	MOV	A,	TEMPER_L
	JNB	ACC.3,	TEMPER_COV1	; 四舍五入去温度值
	INC	TEMPER_NUM
TEMPER_COV1:MOV	A,	TEMPER_H
	ANL	A,	#07H
	SWAP	A
	ORL	A,	TEMPER_NUM
	MOV	TEMPER_NUM,A	; 保存变换后的温度数据
	LCALL	BIN_BCD
	RET
;-------------------将16进制的温度数据转换成压缩BCD码
BIN_BCD:MOV	DPTR,	#TEMP_TAB
	MOV	A,	TEMPER_NUM
	MOVC	A,	@A+DPTR
	MOV	TEMPER_NUM,	A
        RET
;------------------18B20初始化
INIT_1820:CLR	DQ
	  MOV	R0,	#200     ;持续400US的低电平
	  DJNZ	R0,	$	;
	  SETB	DQ               ;上升沿
	  MOV	R0,	#32	;64US
	  DJNZ	R0,	$
	  JNB	DQ,	INIT_1820
	  MOV	R0,	#80	;160US
	  DJNZ	R0,	$	; 延时
          RET
;------------------延时子程序
DELAY2:	MOV	R6,	#0FFH
QQ:	MOV	R7,	#0FFH
    	DJNZ	R7,	$
	DJNZ	R6,	QQ
	RET
DELAY:  MOV R5,#255
     	DJNZ R5,$
        RET
;-----------------温度数值表
TEMP_TAB:DB 00H,01H,02H,03H,04H,05H,06H,07H
	 DB 08H,09H,10H,11H,12H,13H,14H,15H
         DB 16H,17H,18H,19H,20H,21H,22H,23H
	 DB 24H,25H,26H,27H,28H,29H,30H,31H
	 DB 32H,33H,34H,35H,36H,37H,38H,39H
	 DB 40H,41H,42H,43H,44H,45H,46H,47H
	 DB 48H,49H,50H,51H,52H,53H,54H,55H
	 DB 56H,57H,58H,59H,60H,61H,62H,63H
	 DB 64H,65H,66H,67H,68H,69H,70H,71H
	 DB 72H,73H,74H,75H,76H,77H,78H,79H
	 DB 80H,81H,82H,83H,84H,85H,86H,87H
	 DB 88H,89H,90H,91H,92H,93H,94H,95H
	 DB 96H,97H,98H,99H
;?---------------散转子程序表
TAB:     AJMP OPR0
         AJMP OPR1
         AJMP OPR2
         AJMP OPR3
         AJMP OPR4
         AJMP OPR5
         AJMP OPR6
         END

⌨️ 快捷键说明

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