当前位置:首页 > 显示光电 > 显示光电
[导读]本文分析了一种低成本的汉字液晶显示实现方法,并给出了其C语言实现函数的源程序,以及汉字字符串提取程序和点阵字模提取程序的源程序。

    在智能仪表等小型单片机应用系统中,一般采用发光二极管作功能提示,数码管显示数据。随着智能仪表功能的不断扩充和提高,这种显示方式逐渐不能满足需求。为系统添加一片液晶显示器作为显示设备,显然能够很大程度扩展系统功能,提升产品的档次。若在液晶显示器上显示汉字信息,如果采用带汉字库的液晶显示器会有一些弊端:成本高,汉字大小固定,缺乏一些特殊的功能函数。针对这种情况,本文分析了一种低成本的汉字液晶显示实现方法,并给出了其C语言实现函数的源程序,以及汉字字符串提取程序和点阵字模提取程序的源程序。显示函数的实现中还重点设计了灵活的putchar函数,以便在程序中使用printf函数作为显示输出函数。

1 基本原理
    这种低成本汉字液晶显示实现方法的基本原理是:采用一片图形液晶显示器作为显示设备,用软件实现汉字显示,汉字点阵字模直接从汉字库中提取出来后写到程序文件中。

    整个实现过程包括以下部分;汉字字符串的提取;汉字点阵字模的提取;图形液晶显示器驱动程序设计;汉字显示函数及putchar函数的设计。

2 汉字字符串及点阵字模的提取
    图形液晶显示器要显示汉字,必然需要汉字点阵字模,而要提取汉字点阵字模必须首先从程序中提取要显示的汉字字符串。一个汉字以两个字节的数据表示,这两个字节的数据有一个共同的特点就是数据最高位是“1”,这是与其他字符区分的重要特征。在C程序中,要显示的字符一般以双引号作为起始和终止,因此设计汉字字符串提取程序时只需要判断开始双引号和结束双引号之问的字符,将最高位为“1”的字符提取出来保存到另一汉字字符串文本文件中即可。C源程序FIND_CH.C,运行时可在命令行带多个C程序的文件名,输出汉字字符串文本文件到STRINGCH.TXT中。

    汉字字符串提取出来后,就将针对这些汉字从字库中提取其对应的点阵字模了。在此之前,先要设计保存这些点阵字模数据的方式,即数据结构。图形显示的每一个点对应用一位表示,对于不同点阵的字库,需要的数据字节长度是不相同的:8×8的点阵英文字母需要8×8/8—8个字节;12×12的点阵汉字需要12×12/8=18个字节16×16的点阵汉字需要16×16/8=32个字节;24×24的点阵汉字需要24×24/8=96个字节。生成的点阵字模数据,可以用H头文件的形式存储,以上字库对应为:EN8X8.H;C12X12.H;C16X16.H;C24X24.H。文件中首先定义包含的汉字数目,例如C12X12.H中:
    #define chl2x12_num 5

    表明本12*12点阵字库中有50个汉字。因为只提取了需要的汉字字模数据,并且将重复的字剔除掉。为了方便索引,在汉字字库建立汉字GB码信息数组,将汉字GB码的两字节数据用unsigned int表示,例如C12X12.H中:
    code unsigned int chl2x12_code[chl2x12一num]={0xalal,0xbaba,0xd7d6,0xd2ba,0xbea7},/*汉字液晶*/

    注意:在数据中总要预留1个汉字的空格(Oxalal),以便在以后程序设计时遇到显示没有找到字模数据的汉字时,显示空格,它对应的数据是全空。在汉字GB码信息数据后注释行中写入了对应汉字,以方便阅读。

    接下来的汉字点阵字模数据以二维数组表示:
    code unsigned char ehl2x12_dat[ehl2x12_num][18]={
    /*汉字12×12点阵库*/
    {Ox00,0x00,0x00,0x00,0x00,0x00,0x00.0x00,Ox00.0x00,0x00,Ox00,0x00,Ox00,Ox00,0x00,0x00,0x00},
    /*(BABA):88926418021e628262H0200201f20488884*/
    {0x88,0x92,0x64,0x18,0x02,0xle,0x62,0x82,0x62,OxIf,0x02,Ox00,Ox20,Oxlf,0x20,0x48,0x88,0x84},
    /*字(D7D6):0886828a8a8bcaaa9a82ca86f00000000408*/
    {0x08,0x86,0x82,0x8a,0xSa,0x8b,0xca,0xaa,Ox9a,Ox82,0xca,0x86,0xf0,0x00,0x00,Ox00,Ox04,Ox08),
    /*液(D2BA):88d22450e49c44a75c947404805f20508f88*/
    {0x88,Oxd2,0x24,Ox50.0xe4,0x9c,0x44,Oxa7,Ox5c,Ox94,0x74,0x04,0x80,0x5f,0x20,0x50,0x8f,0x88},
    /*晶(BEA7):00c0405fd51515d55f40c00000ff5555ff00*/
    {0x00,0xc0,0x40.0x5f,0xd5,0x15,0x15,0xd5,0x5f,0x40,0xc0.0xOO,0x00,Oxff.0x55,0x55,0xff,0x00)
    }:

    为了方便阅读和使用,除了对每个汉字将其GB码写入注释外,还将其数据直接写到注释中。
 
    提取字模程序的C源程序MK_CHIJlB.C,运行时除了在命令行参数中输入汉字字符串文本文件名之外,缺省字库16×16点阵,以参数S指定为12×12点阵,以参数H指定为24×24点阵。

    笔者发现KeiI_C51(V7.O以前的版本)在编译时,字符串中汉字GB码第二字节如果为0xfd,会错误地被忽略,造成显示错误。因此,在汉字点阵字模数据头文件内的注释中,对应的GB码后加入了一个“!”,以提示程序员在C程序的字符串中以\x??\xfd替换相应的字符。

3 液晶驱动程序设计
   
以常用的12864液晶模块为例,它与51单片机的接口非常简单。一般12864模块接口信号线的功能如表1所列。

    如果采用以上方法连接以后,编写驱动程序时就可用以下地址。
    左右半部操作时:数据地址0xffff,状态地址0xfeff。
    仅左半部操作时:数据地址Oxefff,状态地址Oxeeff
    仅右半部操作时:数据地址0xf7fff,状态地址0xf6ff。

    驱动程序除提供复位、开关显示、整屏填充、画点、读写显存等基础函数外,还提供了显示位置设定、英文显示、各点阵汉字显示、显示输出函数等。驱动程序源程序为kddrv.c及lcdd rv.h和deL_port.h。

4 汉字显示函数设计

    C语言程序员都非常熟悉和习惯使用printf系统输出函数,在汉字显示函数设计时尽量利用printf函数的功能,方便程序设计。在Keil_C5l中,printf函数词用putchar函数完成数据输出,而缺省的putchar函数是将数据通过串口输出。我们可以通过设计自己的putchar函数来实现输出送到液晶显示。

    在Keil-C51的LlB子目录下有一个putchal.c文件,提供了一个串口输出数据的putchar函数源程序。通过修改putchaI函数,设置一个标志变量,当需要将数据送液晶显示时,设置lcd_id=l,否则当Icd_jd=0时,数据仍然通过串口输出。
    注:程序及配套字库文件见本刊网站(www.dpj.com.cn)。

结语
    通过以上介绍,从硬件接口、底层函数、高级函数等方面,完全实现了汉字液晶显示的整个过程。通过对整个过程及原理的了解,您可以很轻松地实现和修改液晶显示函数,以配合您的系统需要,以极低的成本获取较好的效果。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭