详细设计方案LCD12864液晶显示.doc

上传人:doc321 文档编号:14970400 上传时间:2022-02-28 格式:DOC 页数:13 大小:232KB
返回 下载 相关 举报
详细设计方案LCD12864液晶显示.doc_第1页
第1页 / 共13页
详细设计方案LCD12864液晶显示.doc_第2页
第2页 / 共13页
详细设计方案LCD12864液晶显示.doc_第3页
第3页 / 共13页
详细设计方案LCD12864液晶显示.doc_第4页
第4页 / 共13页
详细设计方案LCD12864液晶显示.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《详细设计方案LCD12864液晶显示.doc》由会员分享,可在线阅读,更多相关《详细设计方案LCD12864液晶显示.doc(13页珍藏版)》请在三一文库上搜索。

1、LCD12864详细设计方案1. LCD12864简介: FYD12864-0402B 是一种具有4 位/8 位并行、2 线或3 线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为12864, 内置8192 个16*16 点汉字,和128 个16*8点ASCII 字符集。利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示84 行1616 点阵的汉字。也可完成图形显示。低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低

2、于相同点阵的图形液晶模块。2. LCD12864规格: 基本特性:􀁺 低电源电压(VDD:+3.0-+5.5V)􀁺 显示分辨率:12864点􀁺 内置汉字字库,提供8192个1616 点阵汉字(简繁体可选)􀁺 内置 128 个168点阵字符􀁺 2MHZ 时钟频率􀁺 显示方式:STN、半透、正显􀁺 驱动方式:1/32DUTY,1/5BIAS􀁺 视角方向:6 点􀁺 背光方式:侧部高亮白色LED,功耗仅为普通LED 的1/51/10h

3、8698; 通讯方式:串行、并口可选􀁺 内置DC-DC 转换电路,无需外加负压􀁺 无需片选信号,简化软件设计􀁺 工作温度: 0 - +55 ,存储温度: -20 - +603. 框图说明12864主要由行驱动器/列驱动器及12864全点阵液晶显示器组成。4. 管脚说明注意:1、3脚和18脚之间可以通过电阻阻值大小调节液晶的对比度,本开发板默认使用4.7K阻值大小,如果4.7K和您的液晶显示不匹配,用户可以自己选择合适的阻值焊接上去即可。2、RW为读写指示。3、15脚需要接1,因为本开发板使用并行数据方式。5. 寄存器介绍在使用12864LC

4、D前先必须了解以下功能器件才能进行编程。12864内部功能器件及相关功能如下:1. 指令寄存器(IR) IR是用于寄存指令码,与数据寄存器数据相对应。当D/I=0时,在E信号下降沿的作用下,指令码写入IR。2数据寄存器(DR) DR是用于寄存数据的,与指令寄存器寄存指令相对应。当D/I=1时,在下降沿作用下,图形显示数据写入DR,或在E信号高电平作用下由DR读到DB7DB0数据总线。DR和DDRAM之间的数据传输是模块内部自动执行的。3忙标志:BF BF标志提供内部工作情况。BF=1表示模块在内部操作,此时模块不接受外部指令和数据。BF=0时,模块为准备状态,随时可接受外部指令和数据。 利用S

5、TATUS READ指令,可以将BF读到DB7总线,从检验模块之工作状态。4显示控制触发器DFF 此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示(DISPLAY OFF),DDRAM的内容就显示在屏幕上,DFF=0为关显示(DISPLAY OFF)。 DDF的状态是指令DISPLAY ON/OFF和RST信号控制的。5XY地址计数器 XY地址计数器是一个9位计数器。高3位是X地址计数器,低6位为Y地址计数器,XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器为DDRAM的页指针,Y地址计数器为DDRAM的Y地址指针。 X地址计数器是没有记数功能的,只能用指令设置。 Y地址

6、计数器具有循环记数功能,各显示数据写入后,Y地址自动加1,Y地址指针从0到63。6显示数据RAM(DDRAM) DDRAM是存储图形显示数据的。数据为1表示显示选择,数据为0表示显示非选择。DDRAM与地址和显示位置的关系见DDRAM地址表。7Z地址计数器 Z地址计数器是一个6位计数器,此计数器具备循环记数功能,它是用于显示行扫描同步。当一行扫描完成,此地址计数器自动加1,指向下一行扫描数据,RST复位后Z地址计数器为0。 Z地址计数器可以用指令DISPLAY START LINE预置。因此,显示屏幕的起始行就由此指令控制,即DDRAM的数据从哪一行开始显示在屏幕的第一行。此模块的DDRAM共

7、64行,屏幕可以循环滚动显示64行。12864LCD的指令系统及时序 该类液晶显示模块(即KS0108B及其兼容控制驱动器)的指令系统比较简单,总共只有七种。其指令表如表2所示:指令名称控制信号控制代码R/WRSDB7DB6DB5DB4DB3DB2DB1DB0显示开关0000111111/0显示起始行设置0011XXXXXX页设置0010111XXX列地址设置0001XXXXXX读状态10BUSY0ON/OFFRST0000写数据01写数据读数据11读数据表2:12864LCD指令表各功能指令分别介绍如下。 显示开/关指令 R/WRSDB7 DB6 DB5 DB4 DB3DB2DB1 DB00

8、000111111/0当DB01时,LCD显示RAM中的内容;DB00时,关闭显示。2、显示起始行(ROW)设置指令R/WRSDB7 DB6 DB5 DB4 DB3DB2DB1 DB00011显示起始行(063)该指令设置了对应液晶屏最上一行的显示RAM的行号,有规律地改变显示起始行,可以使LCD实现显示滚屏的效果。3、页(PAGE)设置指令R/WRSDB7 DB6 DB5 DB4 DB3DB2DB1 DB00010111页号(07)显示RAM共64行,分8页,每页8行。4、列地址(Y Address)设置指令R/WRSDB7 DB6 DB5 DB4 DB3DB2DB1 DB00001显示列地

9、址(063)设置了页地址和列地址,就唯一确定了显示RAM中的一个单元,这样MPU就可以用读、写指令读出该单元中的内容或向该单元写进一个字节数据。5、读状态指令R/WRSDB7 DB6 DB5 DB4 DB3DB2DB1 DB010BUSY0ON/OFFREST0000该指令用来查询液晶显示模块内部控制器的状态,各参量含义如下:BUSY:1-内部在工作0-正常状态ON/OFF:1-显示关闭0-显示打开RESET:1-复位状态0-正常状态在BUSY和RESET状态时,除读状态指令外,其它指令均不对液晶显示模块产生作用。在对液晶显示模块操作之前要查询BUSY状态,以确定是否可以对液晶显示模块进行操作

10、。6、写数据指令R/WRSDB7 DB6 DB5 DB4 DB3DB2DB1 DB001写数据 读数据指令 R/WRSDB7 DB6 DB5 DB4 DB3DB2DB1 DB011读显示数据 读、写数据指令每执行完一次读、写操作,列地址就自动增一。必须注意的是,进行读操作之前,必须有一次空读操作,紧接着再读才会读出所要读的单元中的数据。6. Verilog HDL源代码Verilog HDL代码为:/*Copyright (c)* Dongdong Studio * *-* : LCD12864* Last modified Date: 2012-6-18* Last Version: 1.0

11、* Descriptions: LCD12864*-* Created by: dongdong* Created date: 2012-6-18* Version: 1.0* Descriptions: The original version*-* Modified by:* Modified date:* Version:* Descriptions:*-*/module LCD12864(input sys_rst_n, /系统复位输入output reg LCD_DI , /LCD的寄存器选择输出信号output LCD_RW , /LCD的读、写操作选择输出信号output LCD

12、_EN , /LCD使能信号output reg 7:0 LCD_DATA , /LCD的数据总线(不进行读操作,故为输出)output LCD_CS1 , / PSB, 1 is 8 bit data modeoutput reg LCD_RST ); / Prameter defineparameter IDLE = 9b00000000; /初始状态,下一个状态为CLEARparameter SETFUNCTION = 9b00000001; /功能设置:8位数据接口parameter SETFUNCTION2 = 9b00000010; parameter SWITCHMODE = 9

13、b00000100; /显示开关控制:开显示,光标和闪烁关闭parameter CLEAR = 9b00001000; /清屏parameter SETMODE = 9b00010000; /输入方式设置:数据读写操作后,地址自动加一/画面不动parameter SETDDRAM = 9b00100000; /设置DDRAM的地址:第一行起始为0x80/第二行为0x90parameter WRITERAM = 9b01000000; /数据写入DDRAM相应的地址parameter STOP = 9b10000000; /LCD操作完毕,释放其控制/ REGsreg 21:0 wait_cnt

14、 ; reg sys_clk_lcd ; /LCD时钟信号reg 23:0 cnt ;reg 8:0 state ; /State Machine codereg flag ; /标志位,LCD操作完毕为0reg 4:0 char_cnt ; reg 7:0 data_disp ;/ =/ * MAIN CODE */ =assign LCD_CS1 = 1; / PSB, 1 is 8 bit data mode/ wait for 40ms when power onalways (posedge sys_clk or negedge sys_rst_n) begin if(!sys_rs

15、t_n) wait_cnt = 24b0; else if( wait_cnt = 24hff_ffff) wait_cnt = wait_cnt + 24b1; else ;end/ LCD RST VLD when 40ms has passed after power onalways (posedge sys_clk or negedge sys_rst_n) begin if(!sys_rst_n) LCD_RST = 1b0; else if( wait_cnt = 24hff_ffff) LCD_RST = 1b1; else LCD_RST = 1b0;end/ sys_clk

16、频率为50MHz, 产生LCD时钟信号, 10Hzalways (posedge sys_clk or negedge sys_rst_n) begin if (!sys_rst_n) cnt = 24b0; else if( cnt = 2499999 ) cnt = 24b0; else cnt = cnt + 24b1;endalways (posedge sys_clk or negedge sys_rst_n) begin if (!sys_rst_n) sys_clk_lcd = 0 ; else if(cnt = 2499999) sys_clk_lcd = sys_clk_lc

17、d ; else ;endassign LCD_RW = 1b0; /没有读操作,R/W信号始终为低电平assign LCD_EN = ( flag = 1) ? sys_clk_lcd : 1b0; /E信号出现高电平以及下降沿的时刻与LCD时钟相同/只有在写数据操作时,RS信号才为高电平,其余为低电平always (posedge sys_clk_lcd or negedge sys_rst_n) begin if(!sys_rst_n) LCD_DI = 1b0; else if ( state = WRITERAM ) LCD_DI = 1b1; else LCD_DI = 1b0;e

18、nd/ State Machinealways (posedge sys_clk_lcd or negedge sys_rst_n) begin if(!sys_rst_n) begin state = IDLE; LCD_DATA = 8bzzzzzzzz; char_cnt = 5b0; flag = 1b1; end else begin case(state) IDLE: begin state = SETFUNCTION; LCD_DATA = 8bzzzzzzzz; end SETFUNCTION: begin state = SETFUNCTION2; LCD_DATA = 8h

19、30; / 8-bit 控制界面,基本指令集动作 end SETFUNCTION2: begin state = SWITCHMODE; LCD_DATA = 8h30; / 清屏 end SWITCHMODE: begin state = CLEAR; LCD_DATA = 8h0c; / 显示开关:开显示,光标和闪烁关闭 end CLEAR: begin state = SETMODE; LCD_DATA = 8h01; end SETMODE: begin state = SETDDRAM; LCD_DATA = 8h06; / 输入方式设置: 数据读写后,地址自动加1,画面不动 end

20、 SETDDRAM: begin state = WRITERAM; if(char_cnt = 0) /如果显示的是第一个字符,则设置第一行的首字符地址 begin LCD_DATA = 8h80; /Line1 end else /第二次设置时,是设置第二行的首字符地址 begin LCD_DATA = 8h90; /Line2 end end WRITERAM: begin if(char_cnt = 11) begin char_cnt = char_cnt + 1b1; LCD_DATA = data_disp; if( char_cnt = 11 ) state = SETDDRA

21、M; else state = 12 & char_cnt = 27) begin LCD_DATA = data_disp; if(char_cnt = 27) begin state = STOP; char_cnt = 5b0; flag = 1b0; end else begin state = WRITERAM; char_cnt = char_cnt + 1b1; end end end STOP: state = STOP; default: state = IDLE; endcase endend/输出的字符always (char_cnt) begin case (char_

22、cnt) 6d0: data_disp = H; / 第 6d1: data_disp = e; / 一 6d2: data_disp = l; / 行 6d3: data_disp = l; / 的 6d4: data_disp = o; / 显 6d5: data_disp = ,; / 示 6d6: data_disp = w; / 内 6d7: data_disp = o; / 容 6d8: data_disp = r; / 6d9: data_disp = l; / 字符串变量形式 6d10: data_disp = d; / 6d11: data_disp =!; / 6d12:

23、data_disp = d; / 第二行的显示内容 6d13: data_disp = o; / 6d14: data_disp = n; 6d15: data_disp = g; 6d16: data_disp = d; 6d17: data_disp = o; 6d18: data_disp = n; 6d19: data_disp = g; 6d20: data_disp = ; 6d21: data_disp = s; 6d22: data_disp = t; 6d23: data_disp = u; 6d24: data_disp = d; 6d25: data_disp = i; 6d26: data_disp = o; default : data_disp = 8d32; endcaseendendmodule/end of RTL code 7. 日积月累Xxx8. 综合出的电路LCD12864代码综合出的电路如下:2012-6-22-10-25 (C) DongDong Stduio13 / 13文档可自由编辑打印

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1