📄 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 + -