?? yejingchuankou.txt
字號:
12864液晶顯示模塊測試匯編程序(單屏 PSB)串口驅動
點擊: 383, 文章入庫日期: 2008-04-24 12:11:00, 來源: www.picavr.com
--------------------------------------------------------------------------------
; BM12864 串口(3線)接口程序
;
;***************************************************************************
;* Date : 2006.8.4 *
;* Create by : 突出重圍 *
;***************************************************************************
;連線圖:*LCM---89s51* *LCM---89s51* *LCM----------89s51* *LCM------89s51 *
; *CS----P3.0* *SID---P3.1* *SCLK-----------P3.2* *PSB----------P3.5 *
; *RESET----------P3.3 *
;注:89s51的晶振頻率為12MHz *
;***************************************************************************
PSB BIT P3.5
RES BIT P3.3
CS BIT P3.0
STD BIT P3.1 ;串行數據線
SCLK BIT P3.2 ;串行時鐘線
START EQU 30H ;起始字節
COM EQU 31H ;命令/數據
HDATA EQU 32H ;命令/數據字節高位
LDATA EQU 33H ;命令/數據字節低位
ASC EQU 34H ;ASCII數據單元
XPOS EQU 35H
YPOS EQU 36H
ORG 0000H
MAIN:
MOV SP,#60H
CLR RES
SETB RES ; 可以直接接電源VDD
SETB CS ; 可以直接接電源VDD
CLR PSB ; 可以直接接地VSS
CALL LCDRESET ; 模塊系統初始化
CALL HZKDIS ; 顯示漢字子程序
MOV START,#0F8H ; 寫入命令(11111000)
MOV COM,#80H ; 設定顯示位置
CALL LCDWRITE
MOV START,#0FAH ;寫數據 (11111010)
;MOV COM,#10H ;顯示字符
;CALL LCDWRITE
; MOV COM,#11H ;顯示字符
;CALL LCDWRITE
;MOV COM,#1EH ;顯示字符
;CALL LCDWRITE
;MOV COM,#1FH ;顯示字符
;CALL LCDWRITE
MOV START,#0F8H ; 寫入命令(11111000)
MOV COM,#34H ;擴充功能設定
CALL LCDWRITE
MOV COM,#05H ;反白選擇
CALL LCDWRITE
CALL DL40MS ;延時
CALL DL40MS
CALL DL40MS
CALL DL40MS ;延時
CALL DL40MS
CALL DL40MS
;MOV A,#055H ;繪圖方式下寫55數據
;CALL LCDFILL
;CALL CLEAR ;清屏
MOV COM,#01H ;清屏
CALL LCDWRITE
JMP MAIN
CLEAR: ;清屏子程序
MOV A,#00H
CALL LCDFILL
RET
LCDRESET:
LCALL DL1MS ;延時等待內部復位
MOV START,#0F8H ; 寫入命令(11111000)
MOV COM,#30H ;使用基本指令集
LCALL LCDWRITE
MOV COM,#0CH
LCALL LCDWRITE ;整體顯示ON
MOV COM,#01H ;清屏
LCALL LCDWRITE
LCALL DL1MS
MOV COM,#06H ;顯示右移
LCALL LCDWRITE
LCALL DL1MS
RET
LCDWRITE: ;模塊寫入子程序
MOV A,COM ;送待發數據命令A
ANL A,#0F0H ;屏蔽低4位
MOV HDATA,A ;將高4位送HDATA單元
MOV A,COM ;取低4位
SWAP A ;高低4位互換
ANL A,#0F0H
MOV LDATA,A ;將低4位送LDATA單元
MOV A,START ;取起始字節
LCALL SENDBIT ;發送
LCALL DL1MS ;延時1ms
MOV A,HDATA
LCALL SENDBIT
LCALL DL1MS
MOV A,LDATA
LCALL SENDBIT
LCALL DL1MS
RET
HZKDIS: ;顯示漢字子程序
MOV R5,#2
MOV START,#0F8H ;寫入命令(11111000)
MOV COM,#80H ;設定顯示位置
LCALL LCDWRITE
MOV DPTR,#TAB ;指向文字型代碼表
MOV A,#00H ;取漢字代碼低位
DIS_1: MOV R6,#8 ;每行八個漢字
DIS_2: MOV START,#0FAH ;寫數據 (11111010)
CLR A
MOVC A,@A+DPTR
MOV COM,A
CALL LCDWRITE ;寫入顯示模塊
INC DPTR ;取漢字代碼高位
CLR A
MOVC A,@A+DPTR
MOV COM,A
CALL LCDWRITE ;寫入顯示模塊
INC DPTR
CALL DL40MS
DJNZ R6,DIS_2 ;未顯示完則繼續
MOV START,#0F8H ; 寫入命令(11111000)
MOV COM,#90H ;第二行地址
CALL LCDWRITE
DJNZ R5,DIS_1
MOV R5,#2
MOV START,#0F8H ;寫入命令(11111000)
MOV COM,#88H ;第三行地址
CALL LCDWRITE
DIS_4: MOV R6,#08H
DIS_3:
MOV START,#0FAH ;寫數據 (11111010)
CLR A
MOVC A,@A+DPTR
MOV COM,A
CALL LCDWRITE ;寫入顯示模塊
INC DPTR ;取漢字代碼高位
CLR A
MOVC A,@A+DPTR
MOV COM,A
CALL LCDWRITE ;寫入顯示模塊
INC DPTR
CALL DL40MS
DJNZ R6,DIS_3 ;未顯示完則繼續
MOV START,#0F8H ; 寫入命令(11111000)
MOV COM,#98H ;第四行地址
CALL LCDWRITE
DJNZ R5,DIS_4 ;遇“0”結束顯示
RET ;寫完兩行則結束
LCDFILL: ;繪圖
MOV R4,A
MOV XPOS,#0
MOV YPOS,#0
MOV START,#0F8H
MOV COM,#30H ;重新選擇基本指令?
CALL LCDWRITE
MOV COM,#01H ;清屏
CALL LCDWRITE
MOV COM,#36H ;擴充功能設定
CALL LCDWRITE
LCD_A1:
MOV YPOS,#0
LCD_A2:
MOV START,#0F8H
MOV A,XPOS ;設定繪圖首地址
ADD A,#80H ; X坐標
MOV COM,A
CALL LCDWRITE
MOV A,YPOS ;Y坐標
ADD A,#80H
MOV B,A
MOV COM,A
CALL LCDWRITE
MOV START,#0FAH
MOV COM,R4
CALL LCDWRITE
CALL LCDWRITE
INC YPOS
MOV A,B
CJNE A,#87H,LCD_A2 ;最后一列地址為87H
INC XPOS
MOV A,XPOS
CJNE A,#20H,LCD_A1 ;最后行地址為80H+20H=0A0H
MOV XPOS,#0
LCD_A3:MOV YPOS,#0
LCD_A4:
MOV START,#0F8H
MOV A,XPOS ;設定繪圖首地址
ADD A,#80H ; X坐標
MOV COM,A
CALL LCDWRITE
MOV A,YPOS ;Y坐標
ADD A,#80H
MOV B,A
MOV COM,A
CALL LCDWRITE
MOV START,#0FAH
MOV COM,R4
CALL LCDWRITE
CALL LCDWRITE
INC YPOS
MOV A,B
CJNE A,#8FH,LCD_A4 ;最后一列地址為8FH
INC XPOS
MOV A,XPOS
CJNE A,#20H,LCD_A3 ;最后行地址為80H+20H=0A0H
RET
SENDBIT: ;串行字節數據發送子程序
MOV R7,#08H ;發送8位
SEND_1: RLC A
MOV STD,C ;數據送數據線
CLR SCLK ;產生同步時鐘
SETB SCLK
DJNZ R7,SEND_1 ;未發送完8位繼續
RET
DL1MS: ;延時子程序
PUSH 00H ;0.1MS
PUSH 01H
PUSH 02H
MOV R2,#01H
WA_PA: MOV R0,#0FH
WA_PB: MOV R1,#0FH
DJNZ R1,$
DJNZ R0,WA_PB
DJNZ R2,WA_PA
POP 02H
POP 01H
POP 00H
RET
NOP
RET
DL40MS: ;延時子程序
PUSH 00H ;40MS
PUSH 01H
PUSH 02H
MOV R2,#01H
DL_PA: MOV R0,#0FFH
DL_PB: MOV R1,#0FFH
DJNZ R1,$
DJNZ R0,DL_PB
DJNZ R2,DL_PA
POP 02H
POP 01H
POP 00H
RET
NOP
NOP
NOP
RET
TAB:
DB " 大漠孤煙直 "
DB " 長河落日圓 "
DB " 欲將輕騎逐 "
DB " 大雪滿弓刀 "
DB 00H
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -