?? 程序.txt
字號:
240128A(T6963C)的A51編程實例
說明:
1. 虛框內為外供負電壓調節對比度方法,若模塊內已內帶負電壓,VO及VOUT空接,復位使用模塊內上電復位.若用LED背光,LED+接背光電源+5V(200mA).
2. 片選信號/CE接CPU的P2.7(A15),則當A15=0時模塊選定.
3. 命令/數據選擇C/D接CPU的P2.0(A8),則當A8=1時為命令,A8=0時為數據.
4. 由2,3得到LCD模塊典型命令口地址為0100H,典型數據口地址為0000H.
使LCD顯示一屏圖形
1. 用戶事先要做的是在WINDOWS的畫筆中(點擊左下角開始->程序->附件->畫圖,對LCD顯示屏在電腦上進行預編輯,完成后取名DEMO.BMP并保存。
2. 圖形制作方法:
a. 進入WINDOWS畫筆,在"圖象"->"屬性"->"寬度=240,高度=128,象素,黑白"->"確定".
b. 利用畫筆工具對屏幕先在電腦上編輯,完成后再"圖象"->"翻轉/旋轉"->"垂直翻轉"-> "確定".
c. "圖象"->"反色",b,c是為了使BMP數據存放格式與LCD所需一致,減輕CPU處理時間.
d. 將所作背景取名為DEMO.BMP并保存.
3. CPU內部ROM空間安排,將以下源文件DEMO.ASM編譯生成DEMO.HEX文件.在CPU燒錄時先從ROM地址0調入DEMO.HEX(格式為十六進制HEX),再從ROM地址0800H處調入DEMO.BMP(格式為二進制BIN),將該合并成的文件燒錄到AT89C55中即可上電運行。
4. 現讓屏幕先顯示DEMO.BMP,觀察其效果。注意字體選擇FS(PIN18)一定要接低,否則所顯圖形會錯位。
5. 以下為用MCS-51匯語言編寫的DEMO源程序,該程序中的子程經過調試可直接用。
;---------------------------------------------------------------
PORTD EQU 0000H ;模塊數據口地址(A15=0.A8=0)
PORTC EQU 0100H ;模塊命令口地址(A15=0.A8=1)
BMP_DEMO EQU 0800H ;定義位圖存放首地址
;----------------------------------------------------------------
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV SP,#60H ;設堆棧
LCALL DEL_10MS ;模塊上電復位
LCALL LCD_INT ;模塊初始化
MOV DPTR,#BMP_DEMO
LCALL SCREEN ;顯示一正屏位圖
AJMP $ ;觀察效果
;---------------------------------------------------------------
; 延時子程
;---------------------------------------------------------------
DEL_10MS:
MOV R6,#10
DL2:
MOV R7,#200
DL1:
NOP
NOP
NOP
DJNZ R7,DL1
DJNZ R6,DL2
RET
;--------------------------------------------------------------
; 寫兩個參數 (參數1在DPL中,參數2在DPH中)
;--------------------------------------------------------------
WD2:
PUSH DPL
PUSH DPH
PUSH ACC
MOV A,DPL
LCALL WD1
MOV A,DPH
LCALL WD1
POP ACC
POP DPH
POP DPL
RET
;-------------------------------------------------------------
; 寫一個參數(參數在A中)
;-------------------------------------------------------------
WD1:
PUSH DPL
PUSH DPH
PUSH ACC
PUSH ACC
LCALL CH_STA1
POP ACC
MOV DPTR,#PORTD
MOVX @DPTR,A
POP ACC
POP DPH
POP DPL
RET
;-------------------------------------------------------------
; 自動方式下寫一個顯示數據(數據在A中)
;-------------------------------------------------------------
AWD:
PUSH DPL
PUSH DPH
PUSH ACC
PUSH ACC
LCALL CH_STA3
POP ACC
MOV DPTR,#PORTD
MOVX @DPTR,A
POP ACC
POP DPH
POP DPL
RET
;-------------------------------------------------------------
; 寫一個命令 (命令字在A中)
;-------------------------------------------------------------
WC:
PUSH DPL
PUSH DPH
PUSH ACC
PUSH ACC
LCALL CH_STA1
POP ACC
MOV DPTR,#PORTC
MOVX @DPTR,A
POP ACC
POP DPH
POP DPL
RET
;-------------------------------------------------------------
; 判斷狀態0,1
;-------------------------------------------------------------
CH_STA1:
PUSH DPL
PUSH DPH
PUSH ACC
MOV DPTR,#PORTC
CH_1:
MOVX A,@DPTR
ANL A,#03H
CJNE A,#03H,CH_1
POP ACC
POP DPH
POP DPL
RET
;-------------------------------------------------------------
; 判斷狀態3
;-------------------------------------------------------------
CH_STA3:
PUSH DPL
PUSH DPH
PUSH ACC
MOV DPTR,#PORTC
CH_3:
MOVX A,@DPTR
ANL A,#08H
CJNE A,#08H,CH_3
POP ACC
POP DPH
POP DPL
RET
;-------------------------------------------------------------
; LCD模塊初始化
;-------------------------------------------------------------
LCD_INT:
MOV DPTR,#00H ;圖形顯示區首地址為 00H;
LCALL WD2 ;寫入兩個參數;
MOV A,#42H ;
LCALL WC ;寫入設置圖形顯示區首地址命令42H;
MOV DPTR,#001EH ;圖形顯示區寬度為30=240/8;
LCALL WD2 ;寫入兩個參數;
MOV A,#43H ;
LCALL WC ;寫入設置圖形顯示區寬度命令43H;
MOV A,#80h ;
LCALL WC ;寫入設置文本與圖形邏輯"或"合成顯示;
MOV A,#98H ;
LCALL WC ;寫入設置顯示方式僅為圖形顯示;
RET
;-------------------------------------------------------------
; 顯示一幅240X128的黑白位圖,位圖在ROM中存放首地址在DPTR中
;-------------------------------------------------------------
SCREEN:
PUSH DPL
PUSH DPH
MOV DPTR,#00H ;設置顯緩寫地址
LCALL WD2
MOV A,#24H
LCALL WC
MOV A,#0B0H ;設置進入顯示數據自動寫模式
LCALL WC
POP DPH
POP DPL
MOV R7,#128 ;共128行
GRAPH:
MOV R6,#30 ;每行30個字節
GRAPH1:
MOV A,#3EH ;ROM中顯示數據存放地址偏移量
MOVC A,@A+DPTR ;從ROM中取顯示數據
LCALL AWD ;自動寫一個顯示數據,顯緩地址指針自動加一
INC DPTR ;調整ROM數據指針
DJNZ R6,GRAPH1 ;一行未寫完繼續寫
INC DPTR ;調整ROM數據指針
INC DPTR
DJNZ R7,GRAPH ;128行未寫完繼續寫
LCALL CH_STA3 ;檢測狀態3
MOV A,#0B2H ;
LCALL WC ;退出自動寫模式
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -