完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
`` 本帖最后由 雾_盈 于 2016-8-30 18:05 编辑 FPGA驱动LCD12864显示文字图像 雾盈 2016-8-14 这个小实验还是挺有意思的吧。 能看出来是谁吗 一、 什么是LCD12864 ? LCD,即液晶显示器(Liquid Crystal Display)。12864是一种统称,只说明类屏的一个特征,就是128*64个点构成。对于液晶屏的特性则没有说明。也就是说LCD12864的种类有很多种。 本文所使用的这一种液晶为晶联讯生产的JLX12864G-13903型液晶显示器,可以显示128列*64行点阵单色图片,或显示8个/行*4行16*16点阵的汉字,或显示16个/行*8行8*8点阵的英文、数字、符号。 这块液晶屏的手册可在官网晶联讯官网资料手册上找到,我也可以把手册挂在文章后面。 二、 基本原理 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个像素点。要想点亮其中某一个像素点,就给这个像素点传输数据“1”,高电平点亮。 需要注意的是,传输数据到液晶屏是按照某一种方式的,它有四种传输方式: 由上向下填充数据; 有下向上填充数据; 由左到右填充; 由右到左填充。 下面录个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文件 的方法我会再发一个帖子,本篇帖子篇幅有点长了。 后面照例附上上源代码。
lcd12864.zip
(4.62 KB, 下载次数: 375
)
`` |
|
相关推荐
|
|
1016 浏览 0 评论
434 浏览 0 评论
求FPGA 驱动控制ltc2271 或者 ltc2180 或者 ltc2190或者 ltc2202 的代码
1847 浏览 0 评论
498 浏览 0 评论
求助:遇见诡异问题,FPGA模块A输出端口连接模块B输入后,模块A不能正常工作的
1963 浏览 1 评论
4687 浏览 104 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-2 13:17 , Processed in 0.548973 second(s), Total 36, Slave 28 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号