📄 7135+液晶显示.asm
字号:
;*********************************************
;51中对应的RAM地址:00H-1FH 为工作寄存器组
; 1FH-2FH 为位寻址区
; 30H-7FH 为便笺区
; 7FH-FFH SFR
;8255的端口分配及7135的接法
;PA.0 D1 ;A B 口为输入口
;PA.1 D2
;PA.2 D3
;PA.3 D4
;PA.4 D5
;PB.0 B1
;PB.1 B2
;PB.2 B3
;PB.3 B4
;PC.1 AA ;C口为输出口
;PC.2 BB
;PC.3 CC 接HC157的1号引脚 A/B端 这样4051只能靠AA BB选通4个通道
;A口读写地址: 98H
;B口读写地址: 99H
;C口读写地址: 9AH
;控制口地址: 9BH
;状态控制字 92H A口 B口 为输入 C口为输出
;20.0为转换完毕的标志位
;R7中存放7135的状态
;**************************************************/
;POSI EQU 30H
FUHAO EQU 31H
WAN EQU 32H
DOT EQU 33H
QIAN EQU 34H
BAI EQU 35H
SHI EQU 36H
GEWEI EQU 37H
;ST_OR EQU 38H
;ST_POL EQU 39H
LCD_COM EQU 0028H ;写指令
LCD_DATA EQU 00A8H ;写数据
LCD_TR EQU 0068H ;读状态
LCD_R EQU 00E8H ;读数据
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
MOV SP, #60H
MOV R2, #0AH ;寄存器区初始化
MOV R0, #30H
M1: MOV @R0, #00H
INC R0
DJNZ R2, M1
CLR 00H
MOV DOT, #2EH ;显示的是小数点
MOV 40H, #0D2H
MOV 41H, #0E7H
MOV 42H, #0B3H
MOV 43H, #0F6H
LCALL LCD_INT
M2: LCALL INT_8255
LCALL AD7135
LCALL LCD_DISP
LCALL DELAY
SJMP M2
LCD_DISP:
MOV A, R7
JB ACC.2, L4 ;显示益处
JNB ACC.3, L2
MOV FUHAO, #2DH ;正号
SJMP L6
L2: MOV FUHAO, #2BH ;负号
L6: MOV DPTR, #LCD_COM
CALL BUSY
MOV A, #92H ;LCD光标定位到92H
MOVX @DPTR, A
MOV R6, #07H
MOV R0, #31H
L3: MOV A, @R0
LCALL LCD_WR
INC R0
DJNZ R6, L3
SJMP L1
L4: MOV DPTR, #LCD_COM
CALL BUSY
MOV A, #92H ;LCD光标定位到92H
MOVX @DPTR, A
MOV R5, #04H
MOV R1, #40H
L5: MOV A, @R1
LCALL LCD_WR
INC R1
DJNZ R5, L5
L1: RET
AD7135:
MOV DPTR, #99H
MOVX A, @DPTR
JNB ACC.2, AD7135 ;等待BUSY为高
;MOV DPTR, #99H
WAIT1:
MOVX A, @DPTR
JB ACC.2, WAIT1 ;等待BUSY为低
MOV R7, A ;R7中存放7135的状态
MOV DPTR, #98H
D5: ;等待D5为高
MOVX A, @DPTR
JB ACC.4, D5
LCALL DELAY1MS
LCALL RD_BCD
MOV WAN, A
MOV DPTR, #98H
D4: ;等待D4为高
MOVX A, @DPTR
JB ACC.3, D4
LCALL DELAY1MS
LCALL RD_BCD
MOV QIAN, A
MOV DPTR, #98H
D3: ;等待D5为高
MOVX A, @DPTR
JB ACC.2, D3
LCALL DELAY1MS
LCALL RD_BCD
MOV BAI, A
MOV DPTR, #98H
D2: ;等待D5为高
MOVX A, @DPTR
JB ACC.1, D2
LCALL DELAY1MS
LCALL RD_BCD
MOV SHI, A
MOV DPTR, #98H
D1: ;等待D5为高
MOVX A, @DPTR
JB ACC.0, D1
LCALL DELAY1MS
LCALL RD_BCD
MOV GEWEI, A
SETB 00H
RET
;*****************读BCD码********************************
RD_BCD:
;PUSH ACC
PUSH DPH
PUSH DPL
MOV DPTR, #9AH ;C口设置
MOV A, #06H
MOVX @DPTR, A ;PC.3为0,读BCD码
MOV DPTR, #99H
MOVX A, @DPTR
ANL A, #0FH ;将B1——B4读出来
ADD A, #30H ;BCD TO ASCII
POP DPL
POP DPH
;POP ACC
RET
;*****************8255初始化*****************************
INT_8255:
MOV DPTR, #9BH ;A B口设置
MOV A, #92H
MOVX @DPTR, A
MOV DPTR, #9AH ;C口设置
MOV A, #02H
MOVX @DPTR, A ;PC.1为0
MOV A, #04H
MOVX @DPTR, A ;PC.2为0
MOV A, #07H
MOVX @DPTR, A ;PC.3为1 ;读HC157的B
RET
;*****************LCD的操作******************************
LCD_INT:
MOV DPTR, #LCD_COM
CALL BUSY
MOV A, #30H ;基本指令集
MOVX @DPTR, A
CALL BUSY
MOV A, #01H ;清屏幕
MOVX @DPTR, A
CALL BUSY
MOV A, #02H
MOVX @DPTR, A
CALL BUSY
MOV A, #06H
MOVX @DPTR, A
CALL BUSY
MOV A, #0CH
MOVX @DPTR, A
CALL BUSY
MOV A, #80H ;光标定位
MOVX @DPTR, A
RET
BUSY:
PUSH ACC
PUSH DPH
PUSH DPL
MOV DPTR, #LCD_TR
B1: MOVX A, @DPTR
JB ACC.7, B1
POP DPL
POP DPH
POP ACC
RET
LCD_WR:
PUSH DPH
PUSH DPL
MOV DPTR, #LCD_DATA
CALL BUSY
MOVX @DPTR, A
POP DPL
POP DPH
RET
DELAY: ; DELAYTIME 20MS
MOV R4, #40
DD1: MOV R3, #0FFH
DJNZ R3, $
DJNZ R4, DD1
RET
DELAY1MS: ; DELAYTIME 1MS
MOV R4, #2
DD2: MOV R3, #40H
DJNZ R3, $
DJNZ R4, DD1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -