?? load.asm
字號:
COM EQU 50H ; 指令寄存器
DAT EQU 51H ; 數(shù)據(jù)寄存器
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設(shè)為方式0
MOV TH0,#00h ;裝入定時常數(shù)
MOV TL0,#00h
SETB TR0 ;啟動T0
MOV 24h, #03h ;裝入T0中斷次數(shù)
MOV IE,#82H ;開中斷
LP: MOV R7,#30H ;顯示緩沖區(qū)首地址
LCALL DISPLY
SJMP LP ;循環(huán)顯示
DISPLY:
mov com,#0CAH ;設(shè)置數(shù)據(jù)起始地址(第而行第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 ;設(shè)置輸入方式
LCALL PR1
MOV COM,#081H ;設(shè)置數(shù)據(jù)起始地址(第一行地二位)
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 ;設(shè)置數(shù)據(jù)起始地址(第二行地二位)
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 ; 調(diào)延時子程序
MOV COM,#38H ; 設(shè)置工作方式(2行,8位數(shù)據(jù))
LCALL PR1
MOV COM,#01H ; 清屏
LCALL PR1
MOV COM,#06H ; 設(shè)置輸入方式
LCALL PR1
MOV COM,#0CH ; 設(shè)置顯示方式
LCALL PR1
RET
DELAY:MOV R6,#0FH ; 延時子程序
MOV R7,#00H
DELAY1: NOP
DJNZ R7,DELAY1
DJNZ R6,DELAY1
RET
;LCD間接控制方式的驅(qū)動子程序如下
;1 讀BF和AC值
PR0: PUSH ACC
MOV P0,#0FFH ; P0置位, 準(zhǔn)備讀
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置位, 準(zhǔn)備讀
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 寫顯示數(shù)據(jù)子程序
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; 寫入數(shù)據(jù)
SETB E
CLR E
POP ACC
RET
;4 讀顯示數(shù)據(jù)子程序
PR3:PUSH ACC
CLR RS ; RS=0
SETB RW; R/W=1
PR31:MOV P0,#0FFH ; P0置位, 準(zhǔn)備讀
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 ; 讀數(shù)據(jù)
SETB E ; E=1
MOV DAT,P0
CLR E ; E=0
POP ACC
RET
; 定時器T0中斷服務(wù)程序,讀取ADC0809第0通道的A/D轉(zhuǎn)換結(jié)果并化為顯示值
BT0:PUSH ACC ;保護現(xiàn)場
PUSH PSW
MOV PSW,#08H
CLR TR0 ;停止T0
MOV TH0,#00h ;重裝定時常數(shù)
MOV TL0,#00h
MOV DPTR,#0F6FFH ;0809端口地址
MOV A,#0 ;0通道
MOVX @DPTR,A ;啟動0809
MOV R7,#0FFH ;等待A/D轉(zhuǎn)換完
DJNZ R7,$
MOVX A,@DPTR ;讀0809轉(zhuǎn)換結(jié)果
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 ;小數(shù)點
ORL 32H,#30H
ORL 33H,#30H
ORL 34H,#30H
POP PSW
POP ACC
RETI
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -