微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > LCD的ARM编程方式,LCD Linux程序如何写入?

LCD的ARM编程方式,LCD Linux程序如何写入?

时间:04-25 来源:网络整理 点击:

软件实现 本系统对图形显示方式进行编程。图形显示方式可显示任何形状的图形(包括字符),在该方式下,T6963C还可以提供对"位"的操作,即通过命令控制液晶屏上的任意一点是否显示。每个点的显示状态用一位二进制信息表示,当这一位信息为"1"时显示屏上相应的点就显示,为"0"时则不显示。 但由于本设计中采用的是32位ARM处理器,而不是8位的51系列,因此在直接控制方式下的编程过程中,应注意数据的对应关系。 1. T6963指令集及时序 T6963拥有一系列操作指令,通过这些指令可以实现对显示屏的控制。在设计过程中,根据T6963的指令系统以及时序信号波形图等进行编程。T6963指令系统见表1。液晶显示模块的控制引脚和读写信号的控制关系如图2所示。

  表1:T6963指令表

  图2:T6963信号时序图

  2. 程序流程图 通常液晶显示编程的过程是:首先编写状态查询、写指令、写数据、读数据等子程序;然后编写清屏、画点等基本子程序;在此基础上编写程序以显示字符、数字、汉字及复杂的图形等。每条指令的执行都是先送入参数,再送入指令代码,因此每次操作之前最好先进行状态字检测。 通过对内置T6963点阵式液晶显示的软件设计,可以发现该液晶显示控制模块的控制语句简单、调试方便。T6963C内部通过一根地址线来确定两个寄存器,当地址线为低电平,选择DATA寄存器;当地址线为高电平,则选择COMMAND/STATUS寄存器。在对T6963C发送每条指令或参数前,必须先读取COMMAND/STATUS寄存器以检查T6963C的状态字。状态字节的含义如下: STA0:1/0,指令读写状态为准备好/忙;

  STA1:1/0,数据读写状态为准备好/忙;

  STA2:1/0,数据自动读状态为准备好/忙;

  STA3:1/0,数据自动写状态为准备好/忙;

  STA4:未用;

  STA5:1/0,控制器运行检测可能/不能;

  STA6:1/0,屏读/拷贝状态为出错/正确;

  STA7:1/0,闪烁状态检测为正常显示/关显示。 由于各状态位的含义不同,因此在不同的场合应检测不同的状态位。在CPU对T6963C中每一字节的指令或数据进行读写前,应先将STA0和STA1同时置为"准备好"状态。T6963C模块的控制指令可带有0个、1个或2个参数。在执行每条指令时都是先送入参数(如果有的话),再送入指令代码。当向T6963C读、写数据或写入命令时,必须严格遵循T6963C的时序。如果送入的参数多于规定个数,则认为最后一次送入的有效。每次操作之前必须先进行状态字检测。
 

        图3a给出了显示操作的流程框图

  图3:(a) 显示操作流程框图;(b) 双参数指令传输过程。 以上每个步骤又需要完成以下流程:对于无参数或自动指令,以上过程仅执行1次,单参数指令需执行2次,而双参数指令则需执行3次(前2次传参数,最后1次传指令)。图3b以双参数指令为例给出了指令传输过程。 检测程序如下: //指令、数据读写状态检查 void RWCheck()

  {

  unsigned int dat = 0;

  do

  {

  *AT91C_PIOB_CODR=CS;

  *AT91C_PIOA_ODSR = DATA_BUS;

  *AT91C_PIOB_SODR = A0;

  *AT91C_PIOB_CODR = RD;

  delay_bus();

  dat=*AT91C_PIOA_PDSR;//读出当前PIO管脚状态

  dat = 0x00600000&dat;//取出需要的数据位,看STA0,STA1是否准备好

  delay_bus();

  *AT91C_PIOA_SODR = RD;

  delay_bus();

  *AT91C_PIOA_SODR=CS;

  } 3. 汉字显示 以本系统的显示模块LCM240128为例,液晶显示屏上横向的8个点是一个字节数据,某位为1则对应点变亮,对于240×128的显示模块来说,每行为240点,每列为128点。每个字节在显示缓冲区中均有对应的地址,液晶屏幕的左上角横向8个点对应液晶模块显示缓冲区的首地址。最常见的显示方式有两种,以常用的16×16点阵汉字为例,一种是先将左半部16个字节写入显示缓冲区,再写入右半部的16个字节;另一种则先写入上半部的16个字节,再写入下半部的16个字节。然后单片机通过接口电路,按照规定的时序将待显示汉字字模的所有字节按液晶控制器规定的方式,在预定位置写入液晶控制器缓冲区。程序如下: void ShowHZ(unsigned int lin,unsigned int column,unsigned int hzcode)

  {

  unsigned char i;

  unsigned int StartAddr = 0;

  StartAddr=lin*LineChar column; //定位起始行

  for(i=0;i《16;i )

  {

  OutPortCom3((unsigned char)(StartAddr), (unsigned char)(StartAddr》》8), 0x24);

OutPortCom2( HZTable[hzcode][i*2], 0xc0); //左

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top