当前位置:高校自动化网 >> fpga >> 浏览文章

NIOSII中LCD驱动及图片显示

文章来源:ednchina 作者:avic


该文章讲述了NIOSII中LCD驱动及图片显示.

本文转载自黑金动力社区:http://www.heijin.org 

 

     

介     

      这一节,我们来讲解与点阵LCD相关的内容,主要介绍硬件结构及其驱动编写。

      做我们这行的,我相信很少有人不知道点阵LCD的,就算没用过也应该见过(俗话说,没吃过猪肉还没见过猪跑啊,呵呵)。不用我多说,大家也知道这东西是做什么用的。不过可能很多人对他的结构还不是很熟悉。通常我们所见到的LCD模块具有LCM(玻璃)、背光、PCB板。其实这三样只有一样是必须要有的,那就是LCM(玻璃)。大家就有点疑问了,没有背光无所谓了,那没有PCB板,就一块玻璃有啥用啊。大家接着听我说,点阵的LCD模块按驱动控制器的集成方式,分为两种:COB和COG,COG就是将驱动控制芯片集成到了玻璃里面,我们只需要在电路板上加上无法集成的电容电阻就可以了;而COB是那种需要将驱动芯片焊接在LCD模块后面的PCB板上的。这回大家应该明白为什么只有一块玻璃就能显示了吧。

      在我们黑金开发板上使用的LCD就是128*64的COG液晶,它将驱动控制IC集成到了LCM上,这样就省去了PCB底板,给我们节省了很大的空间。下面,我简单介绍一下这款液晶的一些参数,如下图所示,它的驱动芯片为ST7565P。支持三种接口方式,我们采用的是串行时序方式,接口简单,使用方便,相比其他两种,也节省了很多的管脚。

点击浏览下一页

      下图为LCD的串行接口原理图,大家可以看到,仅四根线就可以搞定了。

点击浏览下一页

      对于LCD而言,需要清楚的了解驱动控制IC的显存与LCD上的点的对应关系,这一点非常重要。通过下图,我们可以了解到,LCD的显存中存在8(page)*8+1行,即65行,s0-s131,即132列,而液晶只有64*128个点。因此显存上的一些数据是不能显示的。通过实验测试得知,最后一行(page8中的D0)和最后三列(ADC为正常时,s129、s130、s131;ADC为反向时,s0、s1、s2)是不能显示的,而显存上其他数据与LCD上的点一一对应。如下图的红圈处所示的区域。

点击浏览下一页

      显示屏上的每一个点都对应有控制器片内的显示缓存RAM中的一个位, 显示屏上64*128个点分别对应着显示RAM的8个Page, 每一个Page有128个byte的空间对应,如下表所示

点击浏览下一页

      大家如要点亮 LCD 屏上的某一个点时,实际上就是对该点所对应的显示 RAM 区中的某一个位进行置 1 操作;所以就要确定该点所处的行地址、列地址。从上图中可以看出,液晶的行地址实际上就是 Page 的信息,每一个 Page应有 8 行;而列地址则表示该点的横坐标,在屏上为从左到右排列,Page 中的一个 Byte 对应的是一列(8行,即 8 个点) ,达 128列。 可以根据这样的关系在程序中控制 LCD显示屏的显示。

硬件设置     

      下面我们来看,如果如何在NIOS下驱动液晶屏。首先,我们需要在软核中四个PIO口,分别对应LCD的四个引脚。如下图所示,四个PIO模块全部为输出。

点击浏览下一页

      建好以后,自动分配地址,中断,编译…

      然后,我们回到Quartus中,通过TCL脚本分配好管脚疑惑,LCD部分如下图示是

点击浏览下一页

      接着又是编译,完成以后,硬件部分的设置就结束了。

软件开发

      接下来,我们打开NIOS IDE软件。

      第一步做的还是需要进行一次完全编译,Ctrl+b,漫长的等待…

      编译完成后,我们进入system.h,查看是否有我们想要得到的LCD部分,如下表所示

/*
 * LCD_SI configuration
 *
 */
#define LCD_SI_NAME "/dev/LCD_SI"
#define LCD_SI_TYPE "altera_avalon_pio"
#define LCD_SI_BASE 0x000018b0
…
/*
 * LCD_A0 configuration
 *
 */
#define LCD_A0_NAME "/dev/LCD_A0"
#define LCD_A0_TYPE "altera_avalon_pio"
#define LCD_A0_BASE 0x000018c0
…
/*
 * LCD_SCL configuration
 *
 */
#define LCD_SCL_NAME "/dev/LCD_SCL"
#define LCD_SCL_TYPE "altera_avalon_pio"
#define LCD_SCL_BASE 0x000018d0
…
/*
 * LCD_CS configuration
 *
 */
#define LCD_CS_NAME "/
相关文章:
  • Nios II下载程序到串行配置芯片EPCS方法
  • TI DSP USB2.0仿真器自制
  • modelsim入门简单教程
  • 上一篇:连载FPGA黑金开发板NIOSII那些事儿--LCD中英文字符显示二十二
    下一篇:NIOSII的USB主机模式
    最近更新