|
- ;=================================================================
- ;程序編寫(xiě)人:蘭建文
- ;編寫(xiě)地點(diǎn):51hei培訓(xùn)機(jī)構(gòu)
- ;時(shí)間:6月2日下午星期二
- ;功能:本程序?qū)崿F(xiàn)液晶的信息功能
- ;=======================開(kāi)始初始化================================
- EN BIT P2.5 ;時(shí)鐘信號(hào)
- RS BIT P3.4 ;決定要傳送的是命令還是數(shù)據(jù)
- RW BIT P3.5 ;決定要讀還是寫(xiě),一般寫(xiě)的時(shí)候多
- SJ EQU P0 ;數(shù)據(jù)線
- SHUZI EQU 30H
- ;========================系統(tǒng)程序==================================
- ORG 0000H
- JMP START
- ORG 30H
- START:MOV R0,#32
- CALL CHUSHIHUA ;LCD初始化
- MAIN:
- CALL XIANSHI ;顯示
- JMP MAIN
- ;======================初始化子程序===============================
- ;輸入:無(wú)
- ;輸出:無(wú)
- ;實(shí)現(xiàn)的功能:初始化LCD
- ;=================================================================
- CHUSHIHUA:MOV SJ,#38H
- ACALL ENABLE ;寫(xiě)指令08H,設(shè)定LCD為16*2顯示,5*6點(diǎn)陣,8位數(shù)據(jù)接口
- MOV SJ,#08H
- ACALL ENABLE ;寫(xiě)指令08H
- MOV SJ,#01H
- ACALL ENABLE ;寫(xiě)指令01H,顯示清屏
- MOV SJ,#06H
- ACALL ENABLE ;寫(xiě)指令06H,顯示光標(biāo)自動(dòng)右移,整屏不移動(dòng)
- MOV SJ,#0CH
- ACALL ENABLE ;寫(xiě)指令0CH,開(kāi)顯示,不顯示光標(biāo)
- RET
- ;========================顯示子程序===============================
- ;輸入:
- ;輸出:"P0口"
- ;實(shí)現(xiàn)的功能:把數(shù)輸出到P0口顯示
- ;=================================================================
- XIANSHI:
- MOV SJ,#18H
- CALL ENABLE
- MOV SJ,#80H ;第一行顯示第一個(gè)字符的位置
- CALL ENABLE ;調(diào)用寫(xiě)指令
- MOV DPTR,#TAB0;第一行表頭位置
- CALL WRITE1 ;調(diào)用第一行寫(xiě)子程序
- CALL DELAY1
- MOV SJ,#0C0H ;第二行位置
- CALL ENABLE ;調(diào)用寫(xiě)指令
- MOV DPTR,#TAB1;第二行表頭位置
- CALL WRITE1 ;調(diào)用第二行寫(xiě)子程序
- CALL DELAY1
- DJNZ R0,L
- MOV R0,#32
- MOV R1,#10
- LL:CALL DELAY
- DJNZ R1,LL
- L:RET
- ;======================寫(xiě)命令時(shí)序程序=============================
- ;輸入:
- ;輸出:"P0口"
- ;實(shí)現(xiàn)的功能:寫(xiě)時(shí)序
- ;=================================================================
- ENABLE:CLR RS
- CLR RW
- SETB EN
- CALL DELAY
- CLR EN
- RET
- ;==========================寫(xiě)入子程序=============================
- ;輸入:
- ;輸出:"P0口"
- ;實(shí)現(xiàn)的功能:寫(xiě)時(shí)序
- ;=================================================================
- WRITE1:MOV SHUZI,#00H ;將30H清0
- L1:MOV A,SHUZI ;把30H的值送到ACC
- MOVC A,@A+DPTR ;查表取將顯示的數(shù)據(jù)并把要顯示的數(shù)送入ACC
- CALL WRITE2 ;調(diào)用寫(xiě)程序?qū)懭雴蝹(gè)字節(jié)
- INC SHUZI ;將工作寄存器指針加一
- MOV A,SHUZI ;把30H的內(nèi)容送到ACC
- CJNE A,#10H,L1 ;ACC的值加到16后就返回到L1處
- RET
- ;=======================寫(xiě)數(shù)據(jù)時(shí)序子程序==========================
- ;輸入:
- ;輸出:
- ;實(shí)現(xiàn)的功能:寫(xiě)數(shù)據(jù)
- ;=================================================================
- WRITE2:MOV SJ,A ;寫(xiě)單個(gè)字符
- SETB RS ;寫(xiě)數(shù)據(jù)到顯示端口
- CLR RW ;寫(xiě)數(shù)據(jù)時(shí)序
- SETB EN
- CALL DELAY
- CLR EN
- RET
- ;============================延時(shí)子程序============================
- ;輸入;無(wú)
- ;輸出: 無(wú)
- ;實(shí)現(xiàn)的功能:延時(shí)5MS
- ;==================================================================
- DELAY:
- MOV R6,#4
- L7:MOV R5,#100
- DJNZ R5,$
- DJNZ R6,L7
- RET
- DELAY1:MOV R7,#10
- L9:MOV R3,#25
- L8:MOV R4,#100
- DJNZ R4,$
- DJNZ R3,L8
- DJNZ R7,L9
- RET
- ;==============================表的制作============================
- TAB0:DB "WWW#SsONEEDU#COMWWW#STsNEEDU#COM"
- TAB1:DB "MCU-20-L-JIANWENMCU-20-L-JIANWEN"
- ;=========================程序結(jié)束=================================
- END
復(fù)制代碼
|
|