积分规则 网站地图 帮助中心    
嵌入式软件 单 片 机 DSP 存储器 传感控制 光电显示
嵌入式硬件 CPLD/FPGA SOPC AD/DA 接口电路 模拟设计
I C设计 通信产品 汽车电子 电源产品 消费电子 数控系统
工业控制 军工/航天 安防产品 医疗电子 计算机外设 测试测量
供应 I C
求购 公司库

  IC 求购 销售 公司 论文 DATASHEET 参考设计 论坛
当前位置: 电子技术 >> 光电显示 >> 应用论文
  相关分类: 相关文章 | 应用论文 | 新产品 | 下载 |
液晶显示在嵌入式系统中的应用
 
作者:杭州广播电视大学 杨悦梅   来源:国外电子元器件    点击数:166   更新时间:2008-6-4
您可以添加到网摘 让更多人关注此文章:

    摘要:介绍了液晶显示在嵌入系统中的应用编程,给出了在液晶显示与系统接口的应用层编程中,采用环形结构算法来达到快速、简单地进行汉字代码的编码以及汉字的分页和分行显示的显示应用程序。

关键词:嵌入式系统;液晶显示;环形结构算法;汉字显示


1 引言


在嵌入系统中,一个良好的人机界面必须提供友善的菜单,同时应能实现汉字和图形显示,并应提供英文、数字输入和汉字输入功能。笔者采用香港精电公司的128×64点阵显示模块在以MPC860作为主CPU并以Nuclus PLUS为嵌入式操作系统的系统中进行液晶显示取得了较为满意的效果。图1所示为其结构框图。


香港精电公司的128×64点阵模块内部自带液晶图形显示控制芯片T6963,其中C/D脚用于控制字与数据,RD和WR分别为读、写使能端。当WR为低时,C/D为高为写命令,C/D为低为写数据;而当RD为低时,C/D为高为读状态C/D为低为读数据。另外,CE为器件使能引脚,D0~D7为数据和地址复用总线引脚。

2 应用编程


利用MPC860嵌入式系统的快速性,可将显示应用程序分为两层,其中底层为硬件接口层,上层为应用层。硬件接口层主要是显示液晶模块自带的ASCII函数和显示汉字代码函数。由于硬件各不相同,在此不作具体介绍。而上层应用层的主要功能是提供友善的菜单,同时实现汉字和图形显示,并提供英文、数字输入和汉字输入功能。由于硬件接口层的隔离作用,不同的系统具有一定的通用性,以下重点介绍应用层编程中的汉字代码编码方法和显示编程的实现这两部分。


2.1 汉字代码编码


一般西文为8×8点阵,因而显示一个西文字需要8个字节而每个汉字占4个西文字体,因此显示一个汉字需要32个字节。汉字字库表为一张数据表 每个汉字在数据表中,通常由32个字节组成一个点阵图形。由于ASCII码编码是由0X00-0X7F表示,因此每个汉字可由两个字节0Xxx和0Xyy来表示,每个字节为0X80~0XFF(区别于ASCII代码)。第一汉字定义为0X80 0X80,依此类推直至0X80 0XFF ,0X81 0X80,……,……,0XFF 0XFF ,总计可以定义128×128=16384个汉字。


一个汉字代码表可简单表示为:


hz code tableINT=


//汉字“数”的32字节的点阵图形代码为


0x080x490x2A0x080xFF0x190x2C0x4A


0x100xFE0x220x220x140x180x250x42


0x400x400x400x840xFE0x080x880x88


0x880x900x500x200x500x880x0E0x04


//汉字“据”的32字节的点阵图形代码为


0x100x130x120x120xFF0x120x160x1B


0x320xD20x130x150x150x150x590x21


0x040xFE0x040x040xFC0x200x240xFE


0x200x240xFE0x040x040x040xFC0x04,



}


2.2 显示编程


在系统显示中,主要的显示方式有页处理和行处理两种。系统可以根据按键来显示某一页。实际上,页也是由相应行来显示的。页中的行可由按键来改变。一个页能显示8行ASCII码或4行汉字代码,带有汉字的行一般要占有2个只有ASCII码的行,而页可以由任意多行组成。显示时,通过按键可控制能显示行,并可在行中输入汉字或ASCII码。

    在设计中,所有的页可组成一个环形队列结构,页中的行也可组成一个环形队列结构,其关系如图2所示。图3所示是该系统的显示流程。


下面给出一个行结构:


typedef struct lcdLine


{


struct lcdLine *previous //前一行


struct lcdLine *next //后一行


unsigned short lineId //行特征字


unsigned char showflag //是否显示汉字


unsigned char start //显示行号 ,汉字一


定是奇数行如 1,3,5,7


unsigned char lcdseg16


//显示的代码如是ASCII码,0X10显示0,


0X3C显示\ 汉字为0X80 0X81 显示汉字“据”


void *flcdLinestruct lcdLine * plcdLine


//处理行函数


};


由于页是由行组成的,所以页结构的定义如下:


typedef struct lcdPage


{


struct lcdLine *firstLine //该页中的第一行


struct lcdPage *previous //前一页


struct lcdPage *next //后一页


unsigned short pageId //页特征字


} lcdPage


下面给出的是一个环行队列函数的程序代码:


VOID CSC Place On ListCS NODE **head CS NODE *new node


{


/* Determine if the list in non-empty. */


if *head


{


/* The list is not empty. Add the new


node to the end of the list. */


new node->cs previous=*head


->cs previous


(new node ->cs previous)->cs


next=new node


new node-> cs next =*head


(new node->cs next)->cs previous


=new node;


}


else


{


/* The list is empty setup the head and


the new node. */


*head = new node


new node -> cs previous = new node


new node -> cs next = new node


}


}


在建立了上述结构后,便可以得出行队列和页队列的组成方法:


lcdLine lcdLine30


lcdPage lcdPage10; //初始化列


lcdLine0..lcdseg0=0x80


lcdLine0..lcdseg1=0x80


lcdLine0..lcdseg2=0x80


lcdLine0..lcdseg3=0xBC


lcdLine0..lcdseg4=0x80


lcdLine0..lcdseg5=0x97


lcdLine0..lcdseg6=0x80


lcdLine0..lcdseg7=0x98


lcdLine0..lcdseg8=0x80


lcdLine0..lcdseg9=0x99


lcdLine0..lcdseg10=0x00


lcdLine0..lcdseg11=0x00


lcdLine0..lcdseg12=0x00


lcdLine0..lcdseg13=0x00


lcdLine0..lcdseg14=0x00


lcdLine0..lcdseg15=0x00


lcdLine0..start =1 //第二行起


lcdLine0..showflag =1 //汉字


lcdLine0.lineId =1001; //行标识


firstlcdLine 1=NULL


CSC Place On List &firstlcdLine 1 &lcdLine0 //第一页中的第一行


CSC Place On List&firstlcdLine 1&lcdLine1


CSC Place On List &firstlcdLine 1 &lcdLine2


CSC Place On List &firstlcdLine 1 &lcdLine3由于四行即可组成一个循环队列,其中lcdLine0指定为第一页的第一个入口行,FirstlcdLine 1与lcdLine为同一行,lcdPage0页的入口行为firstlcd-Line;lcdPage0.firstLine=firstlcdLine 1lcdPage0.pageID =1001,这样,依据该方法便可以生成任意多的页。具体方法如下:


lcdpage 1=NULL


lcdPage Place On List&lcdpage 1 &lcdpage0


lcdPage Place On List&lcdpage 1 &lcdpage1


lcdPage Place On List&lcdpage 1 &lcdpage2


lcdPage Place On List&lcdpage 1 &lcdpage3


lcdPage Place On List&lcdpage 1 &lcdpage4


lcdPage Place On List&lcdpage 1 &lcdpage5


这样,用五页即可组成一个循环队列,其中lcd-page_1与lcdpage0为同一页。


对于行的显示,最基础的行显示方法如下:


void disp lcd LinelcdMenu *lcdmunsigned char start //START为行号


{


unsigned char iloop


unsigned char ztzt1


unsigned char sign


unsigned char offset


unsigned char offlen


unsigned char *phz


unsigned char z0


phz=unsigned char *&hz code table


/汉字代码初地址


offset=start*16 //显示的位置 行号 *列号


offlen =0


loop=0


z0=0x00


sign=lcdm->showflag //是否为汉字


whileloop<16 //在同一行中从0列到15列


{


zt=lcdm->lcdsegloop //取第一个代码


ifzt<=0x7F /小于0X80为ASCII代码


{


disp self ascii&zt1offset


//在本行,显示自有的ASCII代码


ifsign==1


{


disp self ascii&z01offset 16


//在上一行,同一列的位置,不显示任何代码


}


offset=offset +1


offlen=offlen +1


loop++


}


else


{


loop++


zt1=lcdm->lcdsegloop


//取第二个代码


disp chinesephz+zt-0x80 *4096 +zt1-0x80 *321offset  //显示汉字


offset=offset + 2 


offlen=offlen +2


loop++


}


}


}


3 结束语


由于本系统在显示时采用了环形结构算法,因此,可以达到快速、简单的汉字显示效果。

[1]



相关文章
· 泰克新推出混合信号和数字荧光示波器,简便易用小巧便...[50]
· NEC推出9款用于车载多媒体系统的32位MCU[93]
· 基于ARM单片机的条码精密测量系统[334]
· 利用SPD实现嵌入式系统中内存的自动识别和配置[280]
· 高质量嵌入式系统开发的集成测试技术[236]
热门评论排行
·VHDL设计中电路简化问题的
·ARM嵌入式系统基础教程(N
·江苏嵌入式Linux教育培训
·ARM处理器应用开发4步骤
·锐极LINUX驱动培训班定于

文章评论
    没有任何评论
*只显示最新10条评论。评论内容只代表网友观点,与本站立场无关。更多评论
发表评论
  * 请先[登陆]再进行评论,谢谢。
评分: 1分 2分 3分 4分 5分
内容: *
发帖须知:
一.所发文章必须遵守《互联网电子公告服务管理规定》;
二.严禁发布供求代理信息,公司介绍,产品信息等广告宣传信息;
三.严禁恶意重复发帖;
四.严禁对个人,实体,民族,国家等进行漫骂,污蔑,诽谤。
 
热点新闻 [更多]
 
电子制造业如何化危为机
谁能成为“Wii”加速度传感器的新供
AMD抨击英特尔拖延反垄断指控案作法
台湾立院通过DRAM业整并提案&nb
Vishay 推出面向工业
中航芯控:医疗领域RFID应用势在必
安森美半导体为DDR3存储器模块应用
避免危及半导体业 德出手挽
HP实验室展示集CMOS电路与忆阻器
全球第二大代工巨头伟创力瘦身应对金融
 
热门下载 [更多]
 
[ PCB设计] Protel99教程下载
[ ] 手把手学单片机20个例
[ ] 单片机做的智能台灯
[ ] 单片机入门书
[ ] linux系统移植开发文档
[ ] IC卡的读写程序
[ ] 8051单片机C语言彻底应用
[ 常用软件] 555定时器电路设计软件V1.2
[ 常用软件] 51定时器计算软件
[ ] ARM处理器应用开发4步骤
 
论坛新帖 [更多]
 
Palm软件设计前的六问...
李嘉诚传中给年轻人提出了53条...
WindRiver产品介绍...
嵌入式Linux的GDB远程调...
ARM无痛苦起步...
最豪华适用的S3C2440开发...
[推荐]10MF020以太网数...
[推荐]10MF020以太网数...
[推荐]F020以太网核心模块...
[分享]PCB的设计与制作及加...

 
赞助商 [更多]
 

ICP许可证号:[粤 05056597]
联系电话:010-82517432 82517615 传真: 010-82517615

版权所有 Copyright © 2006 嵌入式技术网