📄 load.asm
字号:
COM EQU 50H ; 指令寄存器
DAT EQU 51H ; 数据寄存器
RS EQU P2.1 ; LCD寄存器选择信号
RW EQU P2.2 ; LCD读/写选择信号
E EQU P2.3 ; LCD使能信号
ORG 0000H
LJMP MAIN ;主程序入口
ORG 000BH
LJMP BT0 ;T0中断入口
ORG 0030H ;主程序,初始化
MAIN: MOV SP,#60H
LCALL INT
MOV 30H,#30H
MOV 31H,#0A5H
MOV 32H,#30H
MOV 33H,#30H
MOV 34H,#30H
MOV R7,#30H
LCALL N1 ;显示 200808588 ZPP Voltage = 0.000
MOV TMOD,#00H ;定时器T0设为方式0
MOV TH0,#00h ;装入定时常数
MOV TL0,#00h
SETB TR0 ;启动T0
MOV 24h, #03h ;装入T0中断次数
MOV IE,#82H ;开中断
LP: MOV R7,#30H ;显示缓冲区首地址
LCALL DISPLY
SJMP LP ;循环显示
DISPLY:
mov com,#0CAH ;设置数据起始地址(第而行第10位)
lcall pr1
mov r1,#05h
mov r0,#30h
l: MOV DAT,@r0
LCALL PR2
INC R0
djnz r1,l
ret
;1. 逐字依次输入方式演示程序段
N1:MOV COM,#01H ;清屏
LCALL PR1
MOV COM,#06H ;设置输入方式
LCALL PR1
MOV COM,#081H ;设置数据起始地址(第一行地二位)
LCALL PR1
MOV DPTR,#TAB1
MOV R2,#0EH
MOV R3,#00H
WRIN1:
MOV A,R3
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R3
DJNZ R2,WRIN1
MOV COM,#0C1H ;设置数据起始地址(第二行地二位)
LCALL PR1
MOV DPTR,#TAB2
MOV R2,#9
MOV R3,#00H
WRIN2:
MOV A,R3
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R3
DJNZ R2,WRIN2
RET
TAB1: DB "200808588 ZPP"
TAB2: DB "VOLTAGE="
; LCD间接控制方式下的初始化子程序
INT:
LCALL DELAY ; 调延时子程序
MOV COM,#38H ; 设置工作方式(2行,8位数据)
LCALL PR1
MOV COM,#01H ; 清屏
LCALL PR1
MOV COM,#06H ; 设置输入方式
LCALL PR1
MOV COM,#0CH ; 设置显示方式
LCALL PR1
RET
DELAY:MOV R6,#0FH ; 延时子程序
MOV R7,#00H
DELAY1: NOP
DJNZ R7,DELAY1
DJNZ R6,DELAY1
RET
;LCD间接控制方式的驱动子程序如下
;1 读BF和AC值
PR0: PUSH ACC
MOV P0,#0FFH ; P0置位, 准备读
CLR RS ; RS=0
SETB RW; R/W=1
SETB E ; E=1
LCALL DELAY
MOV COM,P0 ; 读BF和AC6-4值
CLR E ; E=0
POP ACC
RET
;2 写指令代码子程序
PR1: PUSH ACC
CLR RS ; RS=0
SETB RW ; R/W=1
PR11:MOV P0,#0FFH; P0置位, 准备读
SETB E ; E=1
LCALL DELAY
NOP
MOV A,P0
CLR E
JB ACC.7,PR11;BF=1?
CLR RW; R/W=0
MOV P0,COM
SETB E ; E=1
CLR E ; E=0; E=0
POP ACC
RET
;3 写显示数据子程序
PR2:PUSH ACC
CLR RS ; RS=0
SETB RW; R/W=1
PR21:MOV P0,#0FFH
SETB E ; E=1
LCALL DELAY
MOV A,P0 ; 读BF和AC6-4值
CLR E ; E=0
JB ACC.7,PR21
SETB RS
CLR RW
MOV P0,DAT; 写入数据
SETB E
CLR E
POP ACC
RET
;4 读显示数据子程序
PR3:PUSH ACC
CLR RS ; RS=0
SETB RW; R/W=1
PR31:MOV P0,#0FFH ; P0置位, 准备读
SETB E ; E=1
LCALL DELAY
MOV A,P0 ; 读BF和AC6-4值
CLR E ; E=0
JB ACC.7,PR31
SETB RS
SETB RW; R/W=1
MOV P0,#0FFH ; 读数据
SETB E ; E=1
MOV DAT,P0
CLR E ; E=0
POP ACC
RET
; 定时器T0中断服务程序,读取ADC0809第0通道的A/D转换结果并化为显示值
BT0:PUSH ACC ;保护现场
PUSH PSW
MOV PSW,#08H
CLR TR0 ;停止T0
MOV TH0,#00h ;重装定时常数
MOV TL0,#00h
MOV DPTR,#0F6FFH ;0809端口地址
MOV A,#0 ;0通道
MOVX @DPTR,A ;启动0809
MOV R7,#0FFH ;等待A/D转换完
DJNZ R7,$
MOVX A,@DPTR ;读0809转换结果
MOV B, #33H
DIV AB
MOV 30H, A
MOV A, #10
XCH A, B
MOV R6, A
MUL AB ;得LED2的值
MOV R6, A
MOV A, #33H
XCH A, B
ANL 32H, #0
CJNE A, #01H, LED02
MOV 32H, #5
INC R6
LED02:
MOV A, R6
DIV AB
ADD A, 32H
MOV 32H, A
MOV A, #10
XCH A, B
MOV R6, A
MUL AB ;得LED3的值
MOV R6, A
MOV A, #33H
XCH A, B
ANL 33H, #0
CJNE A, #01H, LED03
MOV 33H, #5
INC R6
LED03:
MOV A, R6
DIV AB
ADD A, 33H
MOV 33H, A
XCH A, B
ANL 34H, #0
CJNE A, #01H, LED04
MOV 33H, #5
INC R6
LED04:
MOV A, R6
DIV AB
ADD A, 34H
MOV 34H, A
rtn1: SETB TR0
ORL 30H,#30H ;显示值换为ASSIC码
mov 31H,#0a5H ;小数点
ORL 32H,#30H
ORL 33H,#30H
ORL 34H,#30H
POP PSW
POP ACC
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -