找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

[嵌入式/ARM] 基于FPGA的液晶显示接口设计

[复制链接]
admin 发表于 2013-3-22 18:14:48 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

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

×
在小规模图形液晶显示模块上使用液晶显示驱动控制器组成液晶显示驱动和控制系统,是当今低成本,低功耗,高集成化设计的最好选择,SED1520是当前最常用的一种液晶显示驱动控制器,这类图形液晶显示模块的规模为32行,本文用到的液晶模块CM12232即是内置SED1520的液晶显示模块,该模块的驱动控制系统由两片SED1520组成。

     FPGA即现场可编程门阵列器件,这是一种超大规模集成电路,具有在电路可重配置的能力(in circuit reconfigurable,ICR)。设计者设计的逻辑可在编译、适配后变成网络表下载到FPGA芯片上之后,FPGA即可执行设计的逻辑功能。因此,FPGA在芯片控制、接口逻辑设计等各个方面的应用越来越广泛。

系统硬件设计

     本方案采用的FPGA为Altera公司的ACEX1K30芯片,它可提供系统的时钟及读写控制,ACEX系列的FPGA由逻辑阵列块LAB(Logic array block)、嵌入式阵列块EAB(embedded array block)、快速互联以及IO单元构成,每个逻辑阵列块包含8个逻辑单元LE(logic element)和一个局部互联[1]。每个逻辑单元则由一个4输入查找表(LUT)、一个可编程触发器、快速进位链、级连链组成,多个LAB和多个EAB则可通过快速通道互相连接。EAB是ACEX系列器件在结构设计上的一个重要部件,他是输入端口和输出端口都带有触发器的一种灵活的RAM块,其主要功能是实现一些规模不太大的FIFO、ROM、RAM和双端口RAM等。在本液晶显示接口电路中,EAB主要用宏功能模块实现片上ROM。它通过调用FPGA上的EAB资源来实现汉字的显示和字符的存储,并根据控制信号产生的地址值从ROM中读取字符值,然后送LCD显示器进行显示。

     由于所用的图形点阵液晶块内置有SED1520控制器,所以,其电路特性实际上就是SED1520的电路特性。SED1520的主要特性如下[2]:
       具有液晶显示行驱动器,具有16路行驱动输出,并可级联实现32行驱动。

     具有液晶显示列驱动器,共有61路列驱动输出。

     内置时序发生器,其占空比可设置为1/16和1/32两种。

     内藏显示存储器,显示存储器内的数据可直接显示,"1"为显示,"0"为不显示。

     接口总线时序可适配8080系列或M6800系列,并可直接与计算机接口。

     操作简单,有13条控制指令。

     采用CMOS工艺,可在电压低至2.4-7.0V时正常工作,功耗仅30μW。

     本设计所用的字符液晶模块CM12232由两块SED1520级连驱动,其中一个工作在主工作方式下,另一个工作在从方式下,主工作方式SED1520负责上半屏16行的驱动和左半屏的61列驱动,从工作方式的SED1520则负责下半屏16行的驱动和右半屏的61列驱动,使能信号E1、E2用来区分具体控制的是那一片SED1520,其系统的硬件连接图如图1所示。

     由图1可见,该系统的硬件部分连接十分简单,其中FPGA部分没画出,而液晶与FPGA的接口则可直接以网表的形式给出,将它们直接与FPGA的普通I/O引脚相连即可。

系统的软件接口实现

     具体实现的重点是如何从存放有字符的ROM块中读出数据,并按照液晶的时序正确的写入,在介绍具体实现方法前,首先要熟悉SED1520的指令。

     SED1520的控制指令表
  
                  
              
        begin     
        if clk2'event and clk2=`1'then case conv_integer (data)is     
        when 0|2|4|6|8|10|12|13|138|139|264|265|390|391=>A01<=`0';cs11<=`0';cs21<=`1';     
        when 1|3|5|7|9|11|75|76|201|202|327|328|453|454=>A01<=`0';cs11<=`1';cs21<=`0';
      
      when 14 to 74=>A01<=`1';cs11<=`0';cs21<=`1';
      
      when 140 to 200=>A01<=`1';cs11<=`0';cs21<=1';
      
      when 266 to 326=>A01<=`1';cs11<=`0';cs21<=`1';
      
      when 392 to 452=>A01<=`1';cs11<=`0';cs21<=`1';
      
      when 77 to 137=>A01<=`1';cs11<=`1';cs21<=`0';
      
      when 203 to 263=>A01<=`1';cs11>=`1';cs21<=`0';
      
      when 329 to 389=>A01<=`1';cs11<=`1';cs21<=`0';
      
      when 455 to 515=>A01<=`1';cs11<=`1';cs21<=`0';
      
      when others=>A01<=`0';cs11<=`1';cs21<=`1';
      
      end case;     
        end if;     
        end process3;     
        a0<=a01;     
        cs1<=cs11 or csflag;     
        cs2<=cs21 or csflag;     
        ad<=data;     
        end Behavioral;     
            其中的关键程序为Process3;在该过程中,A01负责该数据写到液晶数据线上显示还是写到液晶的控制寄存器进行控制,A01为0时为写命令,A01为1时为写数据。
      
          程序中,ROM地址的前13个单元均为写命令,根据SED1520的控制命令字,ROM表中的0、2、4、6、8、10单元依次是E2、A4、A9、A0、C0、AF,主要用于实现对CSI主工作的SED1520复位、退出休闲状态、设置占空比为1/32、顺时针显示数据RAM中的内容、显示起始对应显示存储器的0行、显示开这一系列的初始化工作;而1,3,5,7,9,11单元则写入到CS2(即从工作的SED1520)实现其初始化[4]。第13单元放的是B8(即页地址设置为0),从14-74单元,A01=1为写数据,此时片选CS1有效,ROM表中连续放入"武汉理工"4个汉字的上半部分字模(本方案共显示16个汉字"武汉理工大学自动化学院重点实验室"分两行,每行8个字显示);之后,75、76单元为写命令,ROM中的数据为B8,00表示设置显示页为0页,该页的列地址从0开始[5]。从77-137单元地址向CS2(即从动工作方式的SED1520)写数据即"大学自动"的前半部分字模,接下来的138、139单元为写命令,ROM中的数据为B9,00即表示页地址设置为1列,地址为0,140-200单元放入"武汉理工"的下半部分字模,201、202单元为写命令,ROM中的数据为B9、00表示页地址设置为1列,地址为0,203-263中为"大学自动"的下半部分字模,之后,8个字的写入过程与前8个字的写入过程相同,写命令单元用于控制要写的页。
      
      结束语     
            本方案以FPGA为控制核心实现了对字符点阵液晶的控制,该方案硬件电路简单,软件程序简洁,对液晶的控制简单而且稳定,且可灵活改动,若要改变液晶显示的汉字,只需改变ROM表中的字模即可,实践证明,该设计是对液晶应用的一种行之有效的方法。
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-23 22:48 , Processed in 0.053272 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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