YM12864C图形液晶显示模块读写测试.doc

上传人:仙人指路1688 文档编号:4146833 上传时间:2023-04-07 格式:DOC 页数:16 大小:1.36MB
返回 下载 相关 举报
YM12864C图形液晶显示模块读写测试.doc_第1页
第1页 / 共16页
YM12864C图形液晶显示模块读写测试.doc_第2页
第2页 / 共16页
YM12864C图形液晶显示模块读写测试.doc_第3页
第3页 / 共16页
YM12864C图形液晶显示模块读写测试.doc_第4页
第4页 / 共16页
YM12864C图形液晶显示模块读写测试.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《YM12864C图形液晶显示模块读写测试.doc》由会员分享,可在线阅读,更多相关《YM12864C图形液晶显示模块读写测试.doc(16页珍藏版)》请在三一办公上搜索。

1、YM12864C图形液晶显示模块读写测试(一)、YM12864C模块一.概述YM12864C 是一种图形点阵液晶显示器。它主要采用动态驱动原理由行驱动控制器和列驱动器两部分组成了128(列)64(行)的全点阵液晶显示。此显示器采用了COB 的软封装方式,通过导电橡胶和压框连接LCD,使其寿命长,连接可靠。二.特性1.工作电压为+5V10% ,可自带驱动 LCD 所需的负电压。2.全屏幕点阵,点阵数为128(列)64(行),可显示8(/行)4(行)个(1616 点阵)汉字,也可完成图形,字符的显示。3.与 CPU 接口采用5 条位控制总线和8 位并行数据总线输入输出,适配M6800 系列时序。4

2、.内部有显示数据锁存器,自带上电复位电路。5.简单的操作指令 显示开关设置,显示起始行设置,地址指针设置和数据读/写等指令。三硬件说明1)显示数据 RAM(DDRAM)DDRAM(6488 bits)是存储图形显示数据的。此RAM 的每一位数据对应显示面板上一个点的显示(数据为H)与不显示(数据为L)。DDRAM 的地址与显示位置关系对照图(见附录一)2)I/O 缓冲器(DB0DB7)I/O 缓冲器为双向三态数据缓冲器。是LCM(液晶显示模块)内部总线与MPU总线的结合部。其作用是将两个不同时钟下工作的系统连接起来,实现通讯。I/O缓冲器在片选信号/CS 有效状态下,I/O 缓冲器开放,实现L

3、CM(液晶显示模块)与MPU 之间的数据传递。当片选信号为无效状态时,I/O 缓冲器将中断LCM(液晶显示模块)内部总线与MPU 数据总线的联系,对外总线呈高阻状态,从而不影响MPU 的其他数据操作功能。3)输入寄存器输入寄存器用于接收在 MPU 运行速度下传送给LCM(液晶显示模块)的数据并将其锁存在输入寄存器内,其输出将在LCM(液晶显示模块)内部工作时钟的运作下将数据写入指令寄存器或显示存储器内。4)输出寄存器输出寄存器用于暂存从显示存储器读出的数据,在MPU 读操作时,输出寄存器将当前锁存的数据通过I/O 缓冲器送入MPU 数据总线上。5)指令寄存器指令寄存器用于接收 MPU 发来的指

4、令代码,通过译码将指令代码置入相关的寄存器或触发器内。6)状态字寄存器状态字寄存器是 LCM(液晶显示模块)与MPU 通讯时唯一的“握手”信号。状态字寄存器向MPU 表示了LCM(液晶显示模块)当前的工作状态。尤其是状态字中的“忙”标志位是MPU 在每次对LCM(液晶显示模块)访问时必须要读出判别的状态位。当处于“忙”标志位时,I/O 缓冲器被封锁,此时MPU 对LCM(液晶显示模块)的任何操作(除读状态字操作外)都将是无效的。7)X 地址寄存器X 地址寄存器是一个三位页地址寄存器,其输出控制着DDRAM 中8 个页面的选择,也是控制着数据传输通道的八选一选择器。X 地址寄存器可以由MPU 以

5、指令形式设置。X 地址寄存器没有自动修改功能,所以要想转换页面需要重新设置X 地址寄存器的内容。8)Y 地址计数器Y 地址计数器是一个6 位循环加一计数器。它管理某一页面上的64 个单元。Y地址计数器可以由MPU 以指令形式设置,它和页地址指针结合唯一选通显示存储器的一个单元,Y 地址计数器具有自动加一功能。在显示存储器读/写操作后Y 地址计数将自动加一。当计数器加至3FH 后循环归零再继续加一。9)Z 地址计数器Z 地址计数器是一个6 位地址计数器,用于确定当前显示行的扫描地址。Z 地址计数器具有自动加一功能。它与行驱动器的行扫描输出同步,选择相应的列驱动的数据输出。10)显示起始行寄存器显

6、示起始行寄存器是一个 6 位寄存器,它规定了显示存储器所对应显示屏上第一行的行号。该行的数据将作为显示屏上第一行显示状态的控制信号。11)显示开/关触发器显示开/关触发器的作用就是控制显示驱动输出的电平以控制显示屏的开关。在触发器输出为“关”电平时,显示数据锁存器的输入被封锁并将输出置“0”,从而使显示驱动输出全部为非选择波形,显示屏呈不显示状态。在触发器输出为“开”电平时,显示数据锁存器被控制,显示驱动输出受显示驱动数据总线上数据控制,显示屏将呈显示状态。12)复位端/RES复位端/RES 用于在LCM(液晶显示模块)上电时或需要时实现硬件电路对LCM(液晶显示模块)的复位。该复位功能将实现

7、:􀁺 设置显示状态为关显示状态􀁺 显示起始寄存器清零。显示RAM 第一行对应显示屏上的第一行。􀁺 在复位期间状态字中RESET 位置“1”。实物图13) 模块引脚图三 读写时序电路连接图如下:C源程序代码如下: 本程序只演示了一行八(每个字为16*16)个汉字的显示,其它部分的显示与此类同。程序采用上面的原理图均通过实测。#includesbit lcd_rs=P22; /指令/数据选择端;0为指令,1为数据sbit lcd_rw=P21; /读/写选择端;0为写,1为读sbit lcd_e=P20; /读写脉冲输入端,下降沿时数据写入LC

8、D中,高电平时从LCD中读出数据sbit lcd_cs1=P27; /左半屏片选端,低电平有效sbit lcd_cs2=P26; /右半屏片选端,低电平有效void lcd_init(); /YM12864C图形显示模块初始化函数声明unsigned char lcd_busf(); /YM12864C忙检测函数声明void lcd_l_comd(unsigned char l_comd); /向YM12864C左半屏写指令函数声明void lcd_r_comd(unsigned char r_comd); /向YM12864C右半屏写指令函数声明void lcd_l_data(unsigne

9、d char l_wdata); /向YM12864C左半屏写显示数据函数声明void lcd_r_data(unsigned char r_wdata); /向YM12864C右半屏写显示数据函数声明void lcd_write_l(unsigned char page,unsigned char lie,unsigned char number,unsigned char *wdata); /向YM12864C的指定页,指定列,写入8或16字节的显示数据void lcd_write_r(unsigned char page,unsigned char lie,unsigned char n

10、umber,unsigned char *wdata); /向YM12864C的指定页,指定列,写入8或16字节的显示数据/* (16 X 16 , 宋体 );阴码,逆向取模(低位在前),列行式,C51格式,16进制 */* 显示扫描从左上角第1列(竖为列,横为行)向下,从左到右扫描 */ /采用Pctolcd2002字模软件提取unsigned char code displ= /左半屏第1与2页的显示编码0x24,0x28,0xE0,0x3F,0xE0,0x2C,0x23,0xD5,0xA9,0xBF,0xC0,0x95,0x89,0xBF,0x00,0x00,0x40,0x30,0x0F

11、,0x10,0x3F,0x12,0x09,0xFF,0x4A,0x4A,0x7F,0x4A,0x4A,0x4A,0x40,0x00,/*耀,0*/0x00,0x10,0x0C,0x24,0x24,0x24,0x24,0x25,0xE6,0x24,0x24,0x24,0x14,0x0C,0x04,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x41,0x81,0x7F,0x01,0x01,0x01,0x01,0x01,0x00,0x00,/*宇,1*/0x10,0x12,0x92,0x72,0xFE,0x51,0x91,0x00,0x22,0xCC,0x00,0x00,

12、0xFF,0x00,0x00,0x00,0x04,0x02,0x01,0x00,0xFF,0x00,0x04,0x04,0x04,0x02,0x02,0x02,0xFF,0x01,0x01,0x00,/*科,2*/0x08,0x08,0x88,0xFF,0x48,0x28,0x00,0xC8,0x48,0x48,0x7F,0x48,0xC8,0x48,0x08,0x00,0x01,0x41,0x80,0x7F,0x00,0x40,0x40,0x20,0x13,0x0C,0x0C,0x12,0x21,0x60,0x20,0x00;/*技,3*/unsigned char code dispr=

13、/右半屏第1与2页的显示编码0x00,0x10,0x10,0x10,0x90,0x70,0x00,0xFF,0x20,0x60,0x90,0x08,0x04,0x00,0x00,0x00,0x10,0x10,0x08,0x06,0x01,0x40,0x80,0x7F,0x00,0x00,0x01,0x06,0x0C,0x18,0x08,0x00,/*水,0*/0x00,0x00,0xFC,0x84,0x84,0x84,0x84,0xFC,0x84,0x84,0x84,0x84,0xFC,0x00,0x00,0x00,0x00,0x00,0x7F,0x10,0x10,0x10,0x10,0x1F

14、,0x10,0x10,0x10,0x10,0x7F,0x00,0x00,0x00,/*田,1*/0x00,0x42,0x62,0x5A,0xC6,0x10,0x54,0x54,0x54,0xFF,0x54,0x54,0x7C,0x10,0x10,0x00,0x40,0x23,0x14,0x08,0x17,0x28,0x29,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x40,0x00,/*建,2*/0x10,0x21,0x86,0x70,0x00,0x02,0x8A,0x92,0x42,0x46,0x19,0x81,0x81,0x91,0x8D,0x00,0x04,

15、0xFC,0x03,0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x40,0x44,0x44,0x44,0xFF,0x00;/*滔,3*/main() lcd_init(); /YM12864C图形显示模块初始化 lcd_write_l(1,1,16,&displ0); /向左半屏,第1页,第1列,写入16字节的显示数据(即该字的上半部分) lcd_write_l(2,1,16,&displ16); /向左半屏,第2页,第1列,写入16字节的显示数据(即该字的下半部分) lcd_write_l(1,17,16,&displ32); lcd_write_l(2,17,1

16、6,&displ48); lcd_write_l(1,33,16,&displ64); lcd_write_l(2,33,16,&displ80); lcd_write_l(1,49,16,&displ96); lcd_write_l(2,49,16,&displ112); lcd_write_r(1,1,16,&dispr0); /向右半屏,第1页,第1列,写入16字节的显示数据(即该字的上半部分) lcd_write_r(2,1,16,&dispr16); /向右半屏,第2页,第1列,写入16字节的显示数据(即该字的下半部分) lcd_write_r(1,17,16,&dispr32);

17、lcd_write_r(2,17,16,&dispr48); lcd_write_r(1,33,16,&dispr64); lcd_write_r(2,33,16,&dispr80); lcd_write_r(1,49,16,&dispr96); lcd_write_r(2,49,16,&dispr112); while(1);/*函数名称:lcd_init函数功能:LCD12864C初始化入口参数:出口参数:其 它:*/void lcd_init() lcd_r_comd(0xc0); /显示起始行设置,它规定了显示屏上最顶一行所对应的显示存储器的行地址 lcd_l_comd(0xc0);

18、/取值范围c0ff,(对应164行) lcd_r_comd(0xb8); /页地址设置,从左上角向左下角每8行为1页,取值范围b8bf(对应18页) lcd_l_comd(0xb8); lcd_r_comd(0x40); /列地址设置,从左上角第1列开始扫描显示,取值范围407f(对应164列) lcd_l_comd(0x40); lcd_r_comd(0x3f); /3f开显示,3e关显示 lcd_l_comd(0x3f);/*函数名称:lcd_busf函数功能:读LCD12864C忙标志位入口参数:出口参数:temp返回忙闲状态;0为闲,1为忙其 它:*/unsigned char lcd

19、_busf() unsigned char temp=0; P2=0x3a; /左右半屏同时选中,读忙标志位 P0=0xff; P2=0x3b; /E=0 temp=P0; if(temp&0x80)=0x80) temp=1; else temp=0; P2=0xfa; /E=0;左右半屏均不选中 return(temp); /返回0为闲,1为忙/*函数名称:lcd_l_write函数功能:向LCD12864左半屏写指令入口参数:comd 中的内容为写入的指令出口参数:其 它:*/void lcd_l_comd(unsigned char l_comd) while(lcd_busf();

20、/等待LCD12864C空闲 P2=0X78; /选择左半屏,写指令,E=0,RS=0,RW=0,CS1=0 P0=l_comd; P2=0x79; /E=1 P2=0x78; /E=0/*函数名称:lcd_r_write函数功能:向LCD12864C右半屏写指令入口参数:comd 中的内容为写入的指令出口参数:其 它:*/void lcd_r_comd(unsigned char r_comd) while(lcd_busf(); P2=0xb8; /CS2=0,RS=0,RW=0,E=0 P0=r_comd; P2=0xb9; /E=1 P2=0xb8; /E=0/*函数名称:lcd_l_

21、data函数功能:向LCD12864C左半屏写数据入口参数:wdata 中的内容为写入的数据出口参数:其 它:*/void lcd_l_data(unsigned char l_wdata) while(lcd_busf(); P2=0x7c; /CS1=0,RS=1,RW=0,E=0 P0=l_wdata; P2=0x7d; /E=1 P2=0x7c; /E=0/*函数名称:lcd_r_data函数功能:向LCD12864C右半屏写数据入口参数:data 中的内容为写入的数据出口参数:其 它:*/void lcd_r_data(unsigned char r_wdata) while(lcd

22、_busf(); P2=0xbc; /CS2=0,RS=1,RW=0,E=0 P0=r_wdata; P2=0xbd; /e=1 P2=0xbc; /e=0/*函数名称:lcd_write_l函数功能:写LCD12864C左半屏,从X页,N列开始写入number字节数据入口参数:page 为页数取值范围18,lie表示从哪一列开始写入显示数据取值范围164,number 为写 入的列的列数(即字节数)取值范围164,wdata 中的内容为写入的显示数据。出口参数:其 它:*/void lcd_write_l(unsigned char page,unsigned char lie,unsign

23、ed char number,unsigned char *wdata) unsigned char i; lcd_l_comd(0xb7+page); lcd_l_comd(0x3f+lie); for(i=0;inumber;i+) lcd_l_data(*wdata);wdata+; /*函数名称:lcd_write_r函数功能:写LCD12864C右半屏,从X页,N列开始写入number字节数据入口参数:page 为页数取值范围18,lie表示从哪一列开始写入显示数据取值范围164,number 为写 入的列的列数(即字节数)取值范围164,wdata 中的内容为写入的显示数据。出口参

24、数:其 它:*/void lcd_write_r(unsigned char page,unsigned char lie,unsigned char number,unsigned char *wdata) unsigned char i; lcd_r_comd(0xb7+page); lcd_r_comd(0x3f+lie); for(i=0;inumber;i+) lcd_r_data(*wdata);wdata+; 汇编读写子程序(源代码)如下:CS1 BIT P2.7 ;片选左CS2 BIT P2.6 ;片选右RS BIT P2.2 ;指令/数据寄存器选择RW BIT P2.1 ;读

25、/写选择E BIT P2.0 ;时钟信号输出端,下降沿时LCM发送或接收数据COM EQU 25H ;指令暂存器DAT EQU 26H ;数据暂存器;1左区驱动子程序;1)写指令代码子程序(左)PRL0: CLR CS1SETB CS2CLR RS ; RS=0SETB RW ; R/W=1PRL01: CLR EMOV P0,#0FFH ; P1 口置“1”SETB E ; E=1JB P0.7,PRL01 ; 判忙标志为“0”否,否再读CLR E ; E=0CLR RW ; R/W=0MOV P0,COM ; 写指令代码SETB E ; E=1CLR E ; E=0RET;2)写显示数据子

26、程序(左)PRL1: CLR CS1SETB CS2CLR RS ; RS=0SETB RW ; R/W=1PRL11: CLR EMOV P0,#0FFH ; P1 口置“1”SETB E ; E=1JB P0.7,PRL11 ; 判忙标志为“0”否,否再读CLR E ; E=0SETB RS ; RS=1CLR RW ; R/W=0MOV P0,DAT ; 写数据SETB E ; E=1CLR E ; E=0RET;3)读显示数据子程序(左)PRL2: CLR CS1SETB CS2CLR RS ; RS=0SETB RW PRL21: CLR EMOV P0,#0FFH ; P1 口置“

27、1”SETB E ; E=1JB P0.7,PRL21 ; 判忙标志为“0”否,否再读CLR E ; E=0SETB RS ; RS=1MOV P0,#0FFH ; P1 口置“1”SETB E ; E=1MOV DAT,P0 ; 写数据CLR E ;E=0RET;2右区驱动子程序;1)写指令代码子程序(右)PRR0: SETB CS1CLR CS2CLR RS ; RS=0SETB RW ; R/W=1PRR01: CLR EMOV P0,#0FFH ; P1 口置“1”SETB E JB P0.7,PRR01 ; 判忙标志为“0”否,否再读CLR E ; E=0CLR RW ; R/W=0

28、MOV P0,COM ; 写指令代码SETB E ; E=1CLR E ; E=0RET;2)写显示数据子程序(右)PRR1: SETB CS1CLR CS2CLR RS ; RS=0SETB RW ; R/W=1PRR11: CLR EMOV P0,#0FFH ; P1 口置“1”SETB E ; E=1JB P0.7,PRR11 ; 判忙标志为“0”否,否再读CLR E ; E=0SETB RS ; RS=1CLR RW ; R/W=0MOV P0,DAT ; 写数据SETB E ;E=1CLR E ; E=0RET;3)读显示数据子程序(右)PRR2: SETB CS1CLR CS2CLR RS ; RS=0SETB RW ; R/W=1PRR21: CLR EMOV P0,#0FFH ; P1 口置“1”SETB E ; E=1JB P0.7,PRR21 ; 判忙标志为“0”否,否再读CLR E ; E=0SETB RS ; RS=1MOV P0,#0FFH ; P1 口置“1”SETB E ; E=1MOV DAT,P0 ; 写数据CLR E ; E=0RET字模提取软件截图如下:字符模式图形模式本例所使用的字模提取软件设置如图所示

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号