S 如何编写12864液晶模块驱动程序【驰宇微】_卖家圈子_门别网
收藏夹门别网 天猫商城网店出售转让 淘宝网店转让出售 京东店铺出售 网店买卖交易平台  


肖邦德 等级:1 / 门别币:20
发表:2019-4-1 9:25:14  查看:725  回复:2
如何编写12864液晶模块驱动程序【驰宇微】



编写12864液晶模块驱动程序要特别注意以下问题:1、时序,一般IC资料和12864液晶模块技术资料都会提供完整的时序图。时序不对,就会缺画或者乱显。2、注意12864液晶模块是由2个驱动IC同时控制的,所以在写驱动程序的时候,要注意片选信号的设置。

下面以CYW12864G为例,提供一个驱动程序供12864液晶模块使用和爱好者参考:

;TEST TO 12864-7 (C12864-1)

;CONTROLLER: KS0108

;SIDE: 128 X 64 DOTS

;DRAW: WHY

;DATE: 1999.5.24

;****************************************************************

;RS REG P3.0 ;DEFINE LCM DATA/INSTRUCTION PIN

;R/W REG P3.1 ;DEFINE LCM READ/WRITE PIN

;E REG P3.2 ;DEFINE LCM ENABLE PIN

;CS1 REG P3.3 ;DEFINE LCM CHIP 1 SELECT

;CS2 REG P3.4 ;DEFINE LCM CHIP 2 SELECT

;RSTB REG P3.5 ;DEFINE LCM RESET PIN

;DB0~DB7 REG P1.0~P1.7 ;DEFINE LCM DATA BUS

;****************************************************************

RS EQU P3.4 ; DEFINE LCM DATA/INSTRUCTION PIN

RW EQU P3.5 ; DEFINE LCM READ/WRITE PIN

E EQU P3.7 ; DEFINE LCM CHIP ENABLE PIN

CS1 EQU P3.3 ; DEFINE LCM CHIP 1 SELECT PIN

CS2 EQU P3.2 ; DEFINE LCM CHIP 2 SELECT PIN

RSTB EQU P3.0 ; DEFINE LCM /RESET PIN

;DB0~DB7 REG P1.0~P1.7 ;DEFINE LCM DATA BUS

;****************************************************************

ORG 0000H

AJMP MAIN

ORG 0030H ;由于其间可能有中断

MAIN: MOV R0, #020H

;****************************************************************

;* 为保证对LCM操作指令之前,电压已经稳定,增加一段KKL延时 *

;* P3.0~P3.6的脚上输出方波,以显示程序开始执行 *

;****************************************************************

KKL: MOV P3, #7FH ; P3.0~P3.6=1P3.7=E=0, DB0~DB7高阻,P3口变化不影响LCM

lcall DELAY

lcall DELAY

MOV P3, #00H

lcall DELAY

lcall DELAY

djnz R0, KKL ; KKL执行延时,P3.0~P3.6 输出方波

MOV R0, #020H

MOV P3, #7FH

KKL1: lcall DELAY ; KKL1执行后,P3.0~P3.6 短时保持高电平

lcall DELAY

lcall DELAY

djnz R0, KKL1

;****************************************************************

NOP

INIT: CLR RSTB ;DISPLAY RESET

NOP

NOP

SETB RSTB

MOV P3,#0FH ;E=RW=ES=0, CS1=CS2=RSTB, ENBALE CHIP 1 AND CHIP 2

SETB RW ;R/W=1

CLR RS ;RS=0

INIT1: ORL P1,#0FFH ;P1 INKEYT MODE

SETB E ;E=1 ,释放 DB0~DB7 数据总线,P1可以读LCM的数据

MOV A,P1 ;READ BUSY SIGNAL

CLR E ;E=0DB0~DB7高阻

JB ACC.7,INIT1 ;BUSY END? DB0~DB7 忙,一直查,直到不忙

JB ACC.4,INIT1 ;RESET END? 如在复位,一直查,直到退出复位

MOV A,#0C0H ;DISPLAY START LINE

LCALL TRS0 ;写命令字: 设置开始显示行为 0

MOV A,#03FH ;DISPLAY ON

LCALL TRS0 ;写命令字:显示开关为“开”

START:

LCALL CLEAR ; 满屏像素全部写入“0”,不亮

LCALL ICON ; 在右半屏第8,60列开始后的4列中全部写人数据“80H

LCALL KEY ; 有按键按下,C=0,退出KEY,没有按键按下,一直等待

LCALL TEST ; 按键按下8次,满屏显示8个不同的字

;***********************************************************************

;* STR1: 程序从START开始执行到该处共按9次按键后,P3.1输出短时间的方波 *

;* 调试中,P3.1有短时间的方波输出,表明程序能正常执行。但显示屏 *

;* 没有数据输出,说明程序向DRAM写数据失败。 *

;************************************************************************

STR0: MOV R2, #080H

STR1: CPL P3.1 ; 输出短时间的方波

CALL DELAY

CALL DELAY

CPL P3.1

CALL DELAY

CALL DELAY

DJNZ R2, STR1

; ******************************************************************

LCALL KEY ; 有按键按下,->START循环

JMP START

; ########################################################################

;**************************************************

;* CLEAR: DRAM全部单元写“00*

;**************************************************

CLEAR: MOV P3,#0FH ; E=RW=ES=0, CS1=CS2=RSTBCLEAR DISPLAY RAM

MOV R5,#0B8H

MOV A,#0C0H ; 设置显示开始行地址:Z=0

LCALL TRS0

CLEAR2: MOV A,R5

LCALL TRS0 ; 设置页地址:X=0

MOV A,#40H ; 设置列地址:Y=0

LCALL TRS0

MOV R4,#40H ; 设置列长度=64

CLEAR1: MOV A,#00H

LCALL TRS1 ;DRAM指定单元写“00”,然后列地址自动加一

DJNZ R4,CLEAR1 ;DRAM全部单元(64)写“00

INC R5 ;X=X+1,即指向下一页

CJNE R5,#0C0H,CLEAR2 ; 同上操作,写满8页结束

RET

;********************************************************************

; ICON: 在右半屏第8,60列开始后的4列中全部写人数据“80H*

;********************************************************************

ICON: CLR CS1 ;TEST ICONCS1=0:左半屏关

SETB CS2 ; CS2=1:右半屏开

MOV A,#0BFH ; 设置页地址:X=7,8

LCALL TRS0

MOV A,#07CH ; 设置列地址:Y=60

LCALL TRS0

MOV R4,#04H

MOV A,#80H

ICON1: LCALL TRS1 ; 8,60列开始后的4列全部写人数据“80H

DJNZ R4,ICON1

RET

;****************************************************************

; TEST: 按键按下8次,满屏显示8个不同的字 *

;****************************************************************

TEST: MOV DPTR,#ADATA ;TEST 1

MOV 67H,DPH

MOV 68H,DPL ;#ADATA->[67H68H]

MOV R0,#07H

TEST5: MOV R5,#0B8H

MOV P3,#0FH ; E=RW=ES=0, CS1=CS2=RSTB

TEST3: MOV A,R5

LCALL TRS0 ; 设置页地址: X=0

MOV A,#40H

LCALL TRS0 ; 设置列地址: Y=0

MOV R4,#08H ; 定义写8个字模

TEST2: MOV DPH,67H

MOV DPL,68H ; 初:DPTR ->#ADATA

MOV R3,#08H ; 定义字模宽度=8

TEST1: MOV A,#00H

MOVC A,@A+DPTR

LCALL TRS1 ; DRAM指定页、列写入字模数据后,列地址自动加一

INC DPTR ; DPTR-> 下一个字模数据的地址

DJNZ R3,TEST1 ; 写入8,一个字模数据写结束

DJNZ R4,TEST2 ; 一个字模数据写结束后,->TEST2,在后续列重写前面一个字模数据

INC R5 ; 写了8个,指向下一页

CJNE R5,#0BFH,TEST3 ; 8页中写64个同一个字模数据的内容

SETB CS1 ; CS1=1:左半屏开

CLR CS2 ; CS2=0:右半屏关

MOV A,#0BFH

LCALL TRS0 ; 设置页地址:X=7,8

MOV A,#40H

LCALL TRS0 ; 设置列地址:Y=0

LCALL TESTS ; DRAM8页中写入8个同一字模的内容

CLR CS1 ; CS1=0:左半屏关

SETB CS2 ; CS2=1:右半屏开

MOV A,#0BFH

LCALL TRS0 ; 设置页地址:X=7,8

MOV A,#40H

LCALL TRS0 ; 设置列地址:Y=0

LCALL TEST

关键词标签: 12864



给楼主点动力吧,已有 0 个人对这内容打赏,关于打赏说明.


收藏主题
推荐连接:淘宝网店价值评估天猫网店评估淘宝0信誉店铺

内容违规投诉举报请联系在线客服QQ:278336453
更多内容>>

下载APP客户端,随时随地上门别,方便卖家网店交易


快了年华 等级:1 / 门别币:123第1楼

编写

admin 等级:4 / 门别币:3322第2楼
回帖奖励 +4分
如何编写12864液晶模块驱动
电脑版 | 关于我们 | menbiewang | APP客户端下载
  Copyright 2019 版权所有 粤ICP备13008094号