集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 8996|回复: 17

雾盈FPGA笔记(十六)基于FPGA的LCD12864文字图像显示

[复制链接]
雾盈 发表于 2016-8-15 15:42:52 | 显示全部楼层 |阅读模式
本帖最后由 雾盈 于 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点阵的英文、数字、符号。
这块液晶屏的手册可在官网([url= http://jlxlcd.cn/china/download.asp]晶联讯官网资料手册[/url] 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文件 的方法我会再发一个帖子,本篇帖子篇幅有点长了。




后面照例贴上源代码。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 雾盈 发表于 2016-8-15 15:48:21 | 显示全部楼层
倒着显示,是为了下板子的时候观察方便,你们可以将数据倒过来发送,就会正着显示。
回复 支持 2 反对 0

使用道具 举报

奋斗的小孩 发表于 2017-12-3 21:54:19 | 显示全部楼层
总结的很好
回复 支持 1 反对 0

使用道具 举报

芙蓉王 发表于 2016-8-15 17:23:59 | 显示全部楼层
                           太棒了  感谢分享
Esmiamor 发表于 2016-8-16 09:44:01 | 显示全部楼层
             加油
zhiweiqiang33 发表于 2016-8-16 11:53:31 | 显示全部楼层
小陈同学,加油;
陈飞龙 发表于 2016-9-20 11:37:16 | 显示全部楼层
要想点亮其中某一个像素点,就给这个像素点传输数据“1”,高电平点亮。???????????????????????????
zxopenwgb 发表于 2016-9-21 09:25:33 | 显示全部楼层
                感谢分享
陈飞龙 发表于 2017-10-14 15:12:22 | 显示全部楼层
正在学习的同学可以参考一下
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-24 10:15 , Processed in 0.074860 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表