?? lcdtest1.asm
字號(hào):
;---------------------------------------------------管腳配置
RS BIT P3.5 ;P3.4腳接RS端
R_W BIT P3.6 ;P3.5腳接R_W端
E BIT P3.7 ;P3.6腳接E端
D_BUS DATA P0 ;P1口控制D_BUS輸出
;----------------------------------------------------LCD Commands RS RW D7 D6 D5 D4 D3 D2 D1 D0
; LCD_CLS equ 1 ;清顯示 0 0 0 0 0 0 0 0 0 1
; LCD_HOME equ 2 ;光標(biāo)復(fù)位 0 0 0 0 0 0 0 0 1 0
; LCD_SETMODE equ 4 ;光標(biāo)和顯示模式設(shè)置 0 0 0 0 0 0 0 1 I/D S
;I/D=1光標(biāo)右移,0左移,S=1文字移動(dòng)使能
; LCD_SETVISIBLE equ 8 ;顯示開關(guān)控制 0 0 0 0 0 0 1 D C B
;D:控制整體顯示的開與關(guān),高電平開顯示
;C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo)
;B:控制光標(biāo)是否閃爍,高電平閃爍
; LCD_SHIFT equ 16 ;光標(biāo)或顯示移位 S/C 0 0 0 0 0 1 S/C R/L 0 0
;高電平時(shí)移動(dòng)文字,低電平時(shí)移動(dòng)光標(biāo)
; LCD_SETFUNCTION equ 32 ;功能設(shè)置命令 0 0 0 0 1 DL N F 0 0
;DL:高電平為4位總線,低電平為8位總線
;N:低電平為單行顯示,高電平時(shí)雙行顯示
;F: 低為5x7點(diǎn)陣字符,高為5x10點(diǎn)陣字符
; LCD_SETCGADDR equ 64 ;字符發(fā)生器RAM地址設(shè)置 0 0 0 1 字符發(fā)生寄存器地址
; LCD_SETDDADDR equ 128 ;置數(shù)寄存器地址 0 0 1 顯示數(shù)據(jù)寄存器地址
;---------------------------------------------------------------------
ORG 0000H ;從0000H處開始
LJMP MAIN ;跳轉(zhuǎn)到MAIN處
ORG 000BH
AJMP INSE
ORG 0030H ;主程序從0030H處開始
MAIN:
MOV TMOD,#0
MOV TL0,#0
MOV TH0,#0
SETB EA
SETB ET0
SETB TR0
MOV R5,#50
MOV SP,#60H ;堆棧指針指向70H
LCALL INITIAL ;調(diào)用啟動(dòng)LCM子程序進(jìn)行初始化
LCALL CLS ;調(diào)用清除LCM子程序
MOV A,#80H ;向A送立即數(shù)80H設(shè)定顯示地址為第一行第一列
LCALL WRITE_COM ;調(diào)用寫指令到LCM子程序
;MOV A,#01000001B ;字母“A”的代碼。
;LCALL WRITE_DATA
MOV DPTR,#LINE1 ;將第一行字符串的啟始地址送如DPTR中
LCALL DISP ;調(diào)用顯示字符串到LCM子程序
MOV A,#0C0H ;向A送立即數(shù)0C0H設(shè)定顯示地址為第二行第一列
LCALL WRITE_COM
;MOV A,#01000010B ;字母“A”的代碼。
;LCALL WRITE_DATA
;LCALL WRITE_COM ;調(diào)用寫指令到LCM子程序
MOV DPTR,#LINE2 ;將第二行字符串的啟始地址送如DPTR中
LCALL DISP ;調(diào)用顯示字符串到LCM子程序
SJMP $ ;程序動(dòng)態(tài)停機(jī)
INSE: MOV TL0,#0 ;中斷服務(wù)子程序。
MOV TH0,#0
DJNZ R5,NO
MOV R5,#50
NO: RETI
LINE1: DB " welcome to ",00H ;第一行字符串
LINE2: DB " www.zwmcu.com! ",00H ;第二行字符串
INITIAL: ;初始化LCD子程序
MOV A,#00111000B ;使用8Bits匯流排,顯示兩行,使用5*7的字型。
LCALL WRITE_COM
MOV A,#00001111B ;顯示器開,光標(biāo)開,光標(biāo)閃爍。
LCALL WRITE_COM
MOV A,#00000110B ;字符不動(dòng),光標(biāo)自動(dòng)右移一格
LCALL WRITE_COM
RET
CHECK_BUSY: ;查詢忙碌信號(hào)子程序
PUSH ACC
BUSY_LOOP:
CLR RS
SETB R_W
CLR E
SETB E
MOV A,D_BUS
CLR E
JB ACC.7,BUSY_LOOP
POP ACC
ACALL DEL
RET
WRITE_COM: ;寫指令到LCD子程序
LCALL CHECK_BUSY
CLR E
CLR RS
CLR R_W
SETB E
MOV D_BUS,A
CLR E
RET
WRITE_DATA: ;寫數(shù)據(jù)到LCD子程序
LCALL CHECK_BUSY
CLR E
SETB RS
CLR R_W
SETB E
MOV D_BUS,A
CLR E
RET
CLS: ;清除LCD子程序
MOV A,#01H
LCALL WRITE_COM
RET
DEL:
MOV R6,#5 ;2.7ms延時(shí)子程序
D1:
MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
DISP:
PUSH ACC ;將A的內(nèi)容壓棧
DISP_LOOP:
CLR A ;A清零
MOVC A,@A+DPTR ;查表將字符串內(nèi)容送入A
JZ END_DISP ;若查到的內(nèi)容為0則終止查表
LCALL WRITE_DATA ;調(diào)用寫數(shù)據(jù)到LCM子程序
INC DPTR ;DPTR加1指向下一個(gè)對(duì)象
SJMP DISP_LOOP ;跳轉(zhuǎn)到DISP_LOOP循環(huán)執(zhí)行
END_DISP:
POP ACC ;彈出壓棧內(nèi)容至A
RET
END ;程序結(jié)束
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -