?? 19264接口程序.txt
字號:
JMP START
org 0023h
LJMP RS232
START: MOV SP,#60H ; void main() {
MAIN: LCALL DELAY400MS ; void delay(void);
CALL LCDRESET ; void lcdreset(void);
MOV A,#55H
CALL LCDFILL ; void lcdfill( uchar a );
MOV DPTR,#STRING1 ; uchar *p = *string1;
CALL PUTSTR ; void putstr( uchar *p);
MOV YPOS,#2
MOV XPOS,#0
CALL PUTSTR ; void putatr( uchar *p);
M1: AJMP M1 ; whil(1);
; }
;****************************************************************
; 長延時程序,主要用于初始化之前,CPU等待LCM準備好(400MS)
;****************************************************************
DELAY400MS:
MOV R0,#20
DL4_PA: MOV R1,#100
DL4_PB: MOV R2,#100
DJNZ R2,$
DJNZ R1,DL4_PB
DJNZ R0,DL4_PA
RET
;****************************************************************
; 短延時程序,主要用于顯示演示速度
;****************************************************************
DELAY:
MOV R5,#4
DLY_PA: MOV R4,#0
DJNZ R4,$
DJNZ R5,DLY_PA
RET
;****************************************************************
;獲取字串內字符編碼,C=0顯示結束,字符串以0FFH結尾作為結束標志
;以兩字節組成一個字符:前一字節表示是全角(>=80H)還是半角(<80H)
; 后一字節字符點陣表內偏移量“內碼”
;****************************************************************
GETSTRCHAR:
GSC_PA:
CLR A
MOVC A,@A+DPTR ;先讀取字頭
INC DPTR
MOV B,A
INC A
CLR C ;置程序出口標志(表示已經結束)
JZ GSC_LAX ;如果是結束碼(0ffh+1=00h)
CLR A
MOVC A,@A+DPTR ;真正讀取“內碼”
INC DPTR
SETB C ;編碼有效
GSC_LAX:
RET
;****************************************************************
;字符數據輸出
;****************************************************************
PUTSTR:
; CALL DELAY
CALL GETSTRCHAR ;取字符串中的字符碼
PUSH DPL
PUSH DPH
JNC PSR_LAX ;顯示結束
JNB B.7,PSR_LBY ;編碼<128,英文
;CHINESE: ;漢字輸出16*16=8*16 + 8*16
CALL HZKPOS ;點陣碼偏移量換算
CALL PUTCWDOT ;16*16點陣輸出
JMP PSR_LBX
PSR_LBY:
;ENGLISH: ;英文(數字)半角字符輸出
CALL EZKPOS ;點陣碼偏移量換算
CALL PUTCHARDOT ;8*16點陣輸出
PSR_LBX:
POP DPH
POP DPL
JMP PUTSTR ;繼續下一位
PSR_LAX:POP DPH
POP DPL
RET
;****************************************************************
;全角字符數據輸出,16*16點陣
;****************************************************************
PUTCWDOT:
PUSH XPOS
MOV R7,#16
PCW_PA: ;上半個字符
CLR A
MOVC A,@A+DPTR ;獲取點陣碼
CALL LCDWRITE ;寫入LCM(上半個字部分)
INC XPOS ;X坐標加1
INC DPTR ;指向下一個點陣碼
DJNZ R7,PCW_PA
INC YPOS
POP XPOS
MOV R7,#16
PCW_PB: ;下半個字符
CLR A ;
MOVC A,@A+DPTR ;再取一個點陣碼
CALL LCDWRITE ;輸出
INC DPTR ;指向下一個點陣碼
INC XPOS ;指向下一列
DJNZ R7,PCW_PB
DEC XPOS
CALL CUSORNEXT ;坐標指針自動移位計算(指向下一列)
MOV A,XPOS ;判斷是否換行?
JNZ PCW_PC
INC YPOS
PCW_PC: DEC YPOS ;返回上半個字部分
RET
;****************************************************************
;半角字符數據輸出,8*16點陣
;****************************************************************
PUTCHARDOT:
PUSH XPOS
MOV R7,#8
PAC_PA: ;上半個字符
CLR A
MOVC A,@A+DPTR ;獲取點陣碼
CALL LCDWRITE ;寫入LCM(上半個字部分)
INC DPTR ;指向下一個點陣碼
INC XPOS
DJNZ R7,PAC_PA
INC YPOS
POP XPOS
MOV R7,#8
PAC_PB: ;下半個字符
CLR A ;
MOVC A,@A+DPTR ;再取一個點陣碼
CALL LCDWRITE ;輸出
INC DPTR ;指向下一個點陣碼
INC XPOS
DJNZ R7,PAC_PB
DEC XPOS
CALL CUSORNEXT ;坐標指針自動移位計算(指向下一列)
MOV A,XPOS ;判斷是否換行?
JNZ PAC_LA2
INC YPOS
PAC_LA2:
DEC YPOS ;返回上半個字部分
RET
;****************************************************************
; 漢字庫實際指針換算,結果置入DPTR
;****************************************************************
HZKPOS:
MOV B,#32
MUL AB
MOV DPTR,#HZKDOT
AJMP ZKPOS
;****************************************************************
; 英文字母數字實際指針換算,結果置入DPTR
;****************************************************************
EZKPOS:
MOV B,#16
MUL AB
MOV DPTR,#EZKDOT ;修改數據指針,指向所選字母
ZKPOS: ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
RET
;****************************************************************
;全屏填充程序,填充內容在調用前設定于A中
;****************************************************************
LCDFILL: ;LCD整屏顯示A的內容
MOV R7,A
MOV YPOS,#0
LFL_PB: MOV XPOS,#0
LFL_PA: MOV A,R7
CALL LCDWRITE ;定位并寫數據
CALL CUSORNEXT
MOV A,XPOS
JNZ LFL_PA
MOV A,YPOS
JNZ LFL_PB
RET
;****************************************************************
;按給定的XY坐標定位,并寫數據子程序
;****************************************************************
LCDWRITE:
CALL LCDPOS ;坐標指針定位
CALL LCDWD ;寫數據
RET
;****************************************************************
; 連續輸出時的坐標指針換算,自動指向下一個可寫入地址
;****************************************************************
CUSORNEXT:
ANL YPOS,#7
INC XPOS
MOV A,XPOS
CJNE A,#192,CNT_LAX
MOV XPOS,#0
INC YPOS
MOV A,YPOS
ANL A,#0F8H
JZ CNT_LAX
MOV YPOS,#0
CNT_LAX:
RET
;****************************************************************
;一字節數據輸出
;****************************************************************
LCDWD: MOV B,A
MOV A,XPOS
CJNE A,#64,$+3
JNC LWD_LA1
MOV A,B
CALL LCDWD1
JMP LWD_LA3
LWD_LA1:CJNE A,#128,$+3
JNC LWD_LA2
MOV A,B
CALL LCDWD2
JMP LWD_LA3
LWD_LA2:CJNE A,#192,$+3
JNC LWD_LA3
MOV A,B
CALL LCDWD3
LWD_LA3:
RET
;****************************************************************
; X,Y坐標定位處理
;****************************************************************
LCDPOS:
PUSH ACC
MOV A,YPOS ;取Y座標
ANL A,#7 ;保留低三位
ADD A,#0B8H ;光標定位指令
MOV B,A ;暫存Y坐標
CLR C
MOV A,XPOS ;取X坐標值
SUBB A,#PD1 ;左區邊界
JNC LPS_LA1 ;如果不在左區
MOV A,XPOS ;重新取X坐標值
ANL A,#3FH ;左邊部分(CS1)
ORL A,#40H ;X方向定位指令
CALL LCDWC1 ;X定位
MOV A,B ;Y定位
CALL LCDWC1
JMP LPS_LA3 ;返回
LPS_LA1:CLR C
MOV A,XPOS
SUBB A,#PD1*2 ;中間區右邊界
JNC LPS_LA2 ;如果不在中間區
MOV A,XPOS
ANL A,#3FH ;中間部分(CS2)
ORL A,#40H ;X方向定位指令
CALL LCDWC2 ;X定位
MOV A,B
CALL LCDWC2 ;Y坐標定位
JMP LPS_LA3 ;返回
LPS_LA2:CLR C
MOV A,XPOS
SUBB A,#PD1*3 ;右邊區域邊界
JNC LPS_LA3 ;如果還出界則不予定位
MOV A,XPOS
ANL A,#3FH ;右邊部分(CS3)
ORL A,#40H ;X方向定位指令
CALL LCDWC3
MOV A,B
CALL LCDWC3 ;Y方向定位
LPS_LA3:
POP ACC
RET
;****************************************************************
; LCM系統復位
;****************************************************************
LCDRESET:
MOV A,#3EH ;關LCD顯示
CALL LCDWC1
CALL LCDWC2
CALL LCDWC3
MOV A,#3FH ;打開LCD顯示
CALL LCDWC1
CALL LCDWC2
CALL LCDWC3
MOV A,#0C0H ;設首址
CALL LCDWC1
CALL LCDWC2
CALL LCDWC3
RET
;****************************************************************
; 控制命令輸出
;****************************************************************
LCDWC1: CALL WAITIDLE1
SJMP WCCOM
LCDWC2: CALL WAITIDLE2
SJMP WCCOM
LCDWC3: CALL WAITIDLE3
WCCOM: CLR DI
CLR RW
MOV DATA_LCM,A ;E=1 D/I=0 R/W=0
SETB ELCM
NOP
CLR ELCM
RET
;****************************************************************
;數據寫輸出(分為左中右3個程序)
;****************************************************************
LCDWD1: ;片1寫數據子程序
CALL WAITIDLE1 ; BUSY ?
SJMP WDCOM
LCDWD2: ;片2寫數據子程序
CALL WAITIDLE2
SJMP WDCOM
LCDWD3: ;片3寫數據子程序
CALL WAITIDLE3
WDCOM: SETB DI ; D/I=1 R/W=0
CLR RW
MOV DATA_LCM,A
SETB ELCM ; e = 1;
NOP ; _nop_()
CLR ELCM ; e = 0;
RET
RET
;****************************************************************
; BUSY狀態等待
;****************************************************************
WAITIDLE1:
PUSH ACC
MOV DATA_LCM,#0FFH ; E=1 CS1=0 CS2=1 CS3=1 D/I=0 R/W=1
CLR CS1
SETB CS2
SETB CS3
AJMP WT_COM
WAITIDLE2:
PUSH ACC
MOV DATA_LCM,#0FFH ; E=1 CS1=1 CS2=0 CS3=1 D/I=0 R/W=1
SETB CS1
CLR CS2
SETB CS3
AJMP WT_COM
WAITIDLE3:
PUSH ACC
MOV DATA_LCM,#0FFH ; E=1 CS1=1 CS2=1 CS3=0 D/I=0 R/W=1
SETB CS1
SETB CS2
CLR CS3
WT_COM: CLR DI
SETB RW
SETB ELCM
WT_PA: MOV A,DATA_LCM
JB ACC.7,WT_PA
CLR ELCM
POP ACC
RET
HZKDOT:
;茂 C3515 0
DB 004H,004H,0C4H,044H,05FH,044H,044H,0F4H
DB 044H,04FH,054H,064H,044H,046H,004H,000H
DB 080H,040H,03FH,000H,040H,040H,020H,020H
DB 013H,00CH,018H,024H,043H,080H,0E0H,000H
;興 C4843 1
DB 000H,0FEH,04AH,04AH,000H,0FEH,0EAH,0AAH
DB 0AAH,0FEH,000H,04AH,04AH,0FEH,000H,000H
DB 002H,083H,042H,022H,012H,01BH,002H,002H
DB 002H,00BH,012H,022H,062H,0C3H,002H,000H
;國 C2590 2
DB 000H,0FEH,002H,0D2H,052H,052H,0D2H,03EH
DB 0D2H,016H,01AH,012H,0FFH,002H,000H,000H
DB 000H,0FFH,050H,053H,052H,04AH,06BH,050H
DB 04FH,054H,07BH,040H,0FFH,000H,000H,000H
;際 C2842 3
DB 000H,0FEH,022H,0D2H,00EH,020H,0B8H,04FH
DB 0B2H,09EH,080H,09FH,072H,08AH,006H,000H
DB 000H,0FFH,004H,008H,007H,021H,012H,00AH
DB 046H,082H,07EH,006H,00AH,012H,031H,000H
;( C0308 4
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,0C0H,030H,008H,004H,002H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,003H,00CH,010H,020H,040H,000H,000H
;廣 C2567 5
DB 000H,000H,0FCH,044H,054H,054H,07CH,055H
DB 0D6H,054H,07CH,054H,054H,044H,044H,000H
DB 080H,060H,01FH,080H,09FH,055H,035H,015H
DB 01FH,015H,015H,035H,05FH,080H,000H,000H
;東 C2211 6
DB 000H,008H,0E8H,0A8H,0A8H,0A8H,0A8H,0FFH
DB 0A8H,0A8H,0A8H,0A8H,0E8H,00CH,008H,000H
DB 000H,040H,023H,012H,00AH,006H,002H,0FFH
DB 002H,006H,00AH,012H,023H,060H,020H,000H
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -