- ;=================================================================
- ;程序編寫人:蘭建文
- ;編寫地點:51hei培訓機構
- ;時間:6月2日下午星期二
- ;功能:本程序實現液晶的信息功能
- ;=======================開始初始化================================
- EN BIT P2.5 ;時鐘信號
- RS BIT P3.4 ;決定要傳送的是命令還是數據
- RW BIT P3.5 ;決定要讀還是寫,一般寫的時候多
- SJ EQU P0 ;數據線
- SHUZI EQU 30H
- ;========================系統程序==================================
- ORG 0000H
- JMP START
- ORG 30H
- START:MOV R0,#32
- CALL CHUSHIHUA ;LCD初始化
- MAIN:
- CALL XIANSHI ;顯示
- JMP MAIN
- ;======================初始化子程序===============================
- ;輸入:無
- ;輸出:無
- ;實現的功能:初始化LCD
- ;=================================================================
- CHUSHIHUA:MOV SJ,#38H
- ACALL ENABLE ;寫指令08H,設定LCD為16*2顯示,5*6點陣,8位數據接口
- MOV SJ,#08H
- ACALL ENABLE ;寫指令08H
- MOV SJ,#01H
- ACALL ENABLE ;寫指令01H,顯示清屏
- MOV SJ,#06H
- ACALL ENABLE ;寫指令06H,顯示光標自動右移,整屏不移動
- MOV SJ,#0CH
- ACALL ENABLE ;寫指令0CH,開顯示,不顯示光標
- RET
- ;========================顯示子程序===============================
- ;輸入:
- ;輸出:"P0口"
- ;實現的功能:把數輸出到P0口顯示
- ;=================================================================
- XIANSHI:
- MOV SJ,#18H
- CALL ENABLE
- MOV SJ,#80H ;第一行顯示第一個字符的位置
- CALL ENABLE ;調用寫指令
- MOV DPTR,#TAB0;第一行表頭位置
- CALL WRITE1 ;調用第一行寫子程序
- CALL DELAY1
- MOV SJ,#0C0H ;第二行位置
- CALL ENABLE ;調用寫指令
- MOV DPTR,#TAB1;第二行表頭位置
- CALL WRITE1 ;調用第二行寫子程序
- CALL DELAY1
- DJNZ R0,L
- MOV R0,#32
- MOV R1,#10
- LL:CALL DELAY
- DJNZ R1,LL
- L:RET
- ;======================寫命令時序程序=============================
- ;輸入:
- ;輸出:"P0口"
- ;實現的功能:寫時序
- ;=================================================================
- ENABLE:CLR RS
- CLR RW
- SETB EN
- CALL DELAY
- CLR EN
- RET
- ;==========================寫入子程序=============================
- ;輸入:
- ;輸出:"P0口"
- ;實現的功能:寫時序
- ;=================================================================
- WRITE1:MOV SHUZI,#00H ;將30H清0
- L1:MOV A,SHUZI ;把30H的值送到ACC
- MOVC A,@A+DPTR ;查表取將顯示的數據并把要顯示的數送入ACC
- CALL WRITE2 ;調用寫程序寫入單個字節
- INC SHUZI ;將工作寄存器指針加一
- MOV A,SHUZI ;把30H的內容送到ACC
- CJNE A,#10H,L1 ;ACC的值加到16后就返回到L1處
- RET
- ;=======================寫數據時序子程序==========================
- ;輸入:
- ;輸出:
- ;實現的功能:寫數據
- ;=================================================================
- WRITE2:MOV SJ,A ;寫單個字符
- SETB RS ;寫數據到顯示端口
- CLR RW ;寫數據時序
- SETB EN
- CALL DELAY
- CLR EN
- RET
- ;============================延時子程序============================
- ;輸入;無
- ;輸出: 無
- ;實現的功能:延時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"
- ;=========================程序結束=================================
- END
復制代碼
|