雾盈FPGA笔记(十六)基于FPGA的LCD12864文字图像显示
本帖最后由 雾盈 于 2016-9-20 20:25 编辑FPGA驱动LCD12864显示文字图像
雾盈 2016-8-14
雾盈FPGA笔记汇总目录
这个小实验还是挺有意思的吧。
能看出来是谁吗
一、 什么是LCD12864 ?
LCD,即液晶显示器(Liquid Crystal Display)。12864是一种统称,只说明类屏的一个特征,就是128*64个点构成。对于液晶屏的特性则没有说明。也就是说LCD12864的种类有很多种。
本文所使用的这一种液晶为晶联讯生产的JLX12864G-13903型液晶显示器,可以显示128列*64行点阵单色图片,或显示8个/行*4行16*16点阵的汉字,或显示16个/行*8行8*8点阵的英文、数字、符号。
这块液晶屏的手册可在官网(http://jlxlcd.cn/china/download.asp]晶联讯官网资料手册 http://jlxlcd.cn/china/download.asp )上找到,我也可以把手册挂在文章后面。
二、 基本原理
LCD(液晶屏)在 LCD 上排列着 128×64 点阵,128 个列信号与驱动 IC(integrated circuit集成电路)相连,64 个行信号也与驱动 IC 相连,IC 邦定在LCD 玻璃上(这种加工工艺叫COG).
1)工作电图:
下图 是JLX12864G-13903 图像点阵型模块的电路框图,它由驱动IC ST7565R 及LCD 组成。
2)液晶屏结构
说完LCD12864的内部组成结构,我们再来看看这个屏的结构,我画了下面这个图大概描绘了一下这个屏的结构。
我们可以看到,一个屏是由八个page页组成,每个page页里有128*8个小方格点,这个总共就是128*8*8=128*64个小格点。
3)点亮液晶屏
这个屏有128*64个点,如同对应一张像素128*64图片上的128*64个像素点。要想点亮其中某一个像素点,就给这个像素点传输数据“0”,低电平点亮。
需要注意的是,传输数据到液晶屏是按照某一种方式的,它有四种传输方式:
由上向下填充数据;
有下向上填充数据;
由左到右填充;
由右到左填充。
下面录个GIF动图,给你们看看数据按照从上到下顺序传到液晶屏,是怎样一种效果。
GIF动图。
由动图可以我们可以看到,数据填充是按照page页的顺序,一页一页去填充。在一个page里,先填满一列八个小方格,也就是填了一个字节八位的数据,然后填第二个数据,直到填满128行,这个page页算是被填满了。
然后按照同样的方式去填充下一个page页,直到填满八个page页,这样整个屏就被数据填满了。
液晶屏结构介绍到这里已经足够我们进行后面的传输工作了,想要了解更多关于液晶屏的原理或者某个不同型号的LCD12864的童鞋,可以通过制造厂商的官网下载该液晶屏的资料。
下面我们来讲输出数据到LCD12864的时序过程。
三、SPI协议时序图。
下图是我从官方手册截的时序图。
可以看到这个数据传输是按照SPI四线串行接口协议来传输数据的
说明一下上图四根信号线的含义:
CS(-):片选信号,低电平有效。
A0:即RS ,寄存器选择信号,H高电平时选择数据寄存器 ,L低电平时选择指令寄存器。
SCL:串行时钟线。时钟频率大概在2.5M左右,亲测有效。因为刚开始我看手册的时候,手册上算出来是25M 时钟频率,但是数据不能正确传输。
SDA(SI):串行数据线
还有一个线上图没有画出来,
RES :复位信号线,低电平复位有效,复位完成后,回到高电平,液晶才能开始工作。复位延迟时间不能小于1us。
SPI协议的特征:
1、 在时钟线SCL为低电平时,SDA数据发生改变。
2、 片选信号线CS(-)为低电平时,数据传输有效。
3、 A0 寄存器选择信号,H高电平时选择数据寄存器 ,传输为数据。
L低电平时选择指令寄存器,传输为指令。
[四、 FPGA驱动LCD12864 过程。
由官方手册的指令表和参数表,知道了FPGA驱动LCD12864的整个过程。
第一步:LCD初始化
1):上电
拉低复位信号RES一段时间再放开上电过程最少维持1us。
复位结束后
2):发送指令
1. 软件复位 0XE2
2. 升压步骤一 0X2C
3. 升压步骤二 0X2E
4. 升压步骤三 0X2F
5. 粗调对比度,可设置范围0x20~0x27 我感觉取中间值比较好
6. 微调对比度 0X81
7. 微调对比度的值,可设置范围0x00~0x3f
8. 1/9偏压比 0XA2
9. 设置行扫描顺序:从上到下 0XC0
10. 设置列扫描顺序:从左到右 0XA1
其他扫描顺序看下面手册截图
11.起始行位置:从第一行开始 0X40
12.开显示 0XAF
第二步:发送数据
每发一组数据一前还必须先发送三组指令,设置页面显示地址。
1、 发送页地址0XB0+N(N为当前页数)
2、 发送指令0X10
3、 发送指令0X00
4、 发送数据。
工作过程就是这些了。
五、 框图
框图如上。
框图一搭整个思路就很清晰了。
Send_data 模块里就是spi协议传输的内容。
让数据传输满足spi的时序要求,传输就不会有错误。
整个程序需要注意的有几点:
第一点要注意的就是那个cnt_shift 移位计数器,我刚开始写的是当一个数据发送完毕后,反馈给LCD_Ctrl一个send_done,但是因为这个信号是个脉冲信号,不能满足控制模块的逻辑要求,总会跳跃状态。所以,这里就直接将移位计数器状态返回给控制模块。
数据移位并串转换是用的飞龙老师教的方法。貌似就这一种方法了,待我研究一下。
第二点:行列扫描的判断。
这段逻辑应该写的严谨一些,否则它会少发送一页数据或者发送乱码。
其他的就没什么了。
图片转mif文件 的方法我会再发一个帖子,本篇帖子篇幅有点长了。
后面照例贴上源代码。
倒着显示,是为了下板子的时候观察方便,你们可以将数据倒过来发送,就会正着显示。 总结的很好 太棒了感谢分享 加油 小陈同学,加油; 要想点亮其中某一个像素点,就给这个像素点传输数据“1”,高电平点亮。??????????????????????????? 感谢分享 感谢分享。。。。。。。。。
正在学习的同学可以参考一下:):):):):):) 赞一个,666
页:
[1]
2