1、系统的工作原理
本系统以stm32f103rbt6为核心,采用晶彩光电的am240320tft液晶屏作为显示器,完成内容的显示,由于stm32f103rbt6内部flash为128k,如果用来储存汉字字库,对芯片资源是一种极大的浪费,所以本文中采用微控制器外挂spi接口flash的设计思路,将不用重复改变的中文字库存放在外部flash芯片里面,需要时再通过spi口调入处理器。由于stm32f103rbt6不带有fsmc,所以采用软件模拟总线的方法,完成对液晶模块的驱动。
2、系统硬件设计
2.1供电部分电路
由于整个系统采用3.3v供电,所以必须外部稳压电路将电压稳定到3.3v,本设计中采用三端稳压芯片lm1117-3.3,将外部电池电压稳定为3.3v位系统提供电源,为处理器、液晶显示器、spiflash供电,采用二极管in4007串接在电源正极,为系统提供电源反接保护。供电部分原理图如图1所示。
2.2液晶显示部分电路设计
液晶显示部分主要由微控制器驱动液晶显示模块完成人机界面状态的显示,通过发送命令字,完成液晶模块的初始化以及汉字的显示。
2.2.1stm32f系列arm微控制器的特点
stm32处理器采用arm公司的v7体系架构的内核cortex—m3,它的速度比arm7快三分之一,功耗低四分之三,同时集成了分支预测,单周期乘法,硬件除法等功能,大大地提高了处理器的数据处理能力,同时采用的thumb-2指令集,有效地降低了代码的密度,提高了程序的执行效率,通过对功耗和性能的分析,本文中采用的处理器为stm32f103rbt6,该处理器工作频率为72mhz,内置高速存储器(高达128k字节的闪存和20k字节的sram),丰富的增强i/o端口和联接到2条apb总线的外设。供电电压2.0~3.6v,一系列的省电模式保证低功耗应用的要求,达到了性能和功耗的平衡。
2.2.2tft液晶显示模块的特点
tft液晶显示屏是薄膜晶体管型液晶显示屏。tft液晶为每个像素都设有一个半导体开关,每个像素都可以通过点脉冲直接控制,因而每个节点都相对独立,并可以连续控制。不仅提高了显示屏的反应速度,同时可以控制显示色阶,所以tft液晶的色彩更真。
由于大多数带有lcd控制器的arm处理器都没有内部的程序存储器和数据存储器,而一般的cortex—m3内核微控制器都不带有专门的lcd控制器,对于不带有lcd控制器的系统,一般长常用in8080接口或者motorola的6800接口,本系统中采用stm32高速的io口模拟8080接口时序。综上所述,选用的tft液晶必须满足两个条件,*,带有独立的显存。第二,带有8080接口。设计中采用了中国台湾采用晶彩光电的am240320tft液晶屏,它的主控制芯片为ili9320,自带总大小为172820(24ox320x18/8)的显存,模块的16位数据线与显寸的对应关系为565方式,它支持包括8080接口在内多种控制输入信号。
stm32采用外部8mhz的晶振作为输入时钟,内部锁相环将时钟倍频到72mhz作为系统时钟,采用gpio口模拟8080时序并行驱动2.8寸tft屏,显示部分的处理器和液晶显示器的硬件电路接口电路如图2所示。
2.3spi接口flash存储叠的特点
由于在本系统中整个的汉字字库需要存储在外部flash中,所以需要选择一种flash存储芯片,flash芯片选择需要满足以下要求。*,尽量占用少的io口,因为液晶显示器已经采用了并行接口,如果继续选用并行接口的flash,对芯片的io消耗较大,这样势必要选用io更多的芯片,对于便携式设备来说,这是不合理的,所以本系统的设计过程中选用的flash为sst公司的sst25vf080b,它采用spi接口,spi是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为pcb的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,本文中的spiflash采用美国sst公司的sst25vf080b芯片,容量为8m位,它工作电压范围为2.7~3.6v,工作在spi模式0或者模式3,zui高工作在50mhz,zui小擦除单位为4k字节的扇区,可擦写10万次,数据保持100年以上。而stm32f103rbt6带有高速的硬件spi接口,可以很方便与sst25vf080b连接通信。所以我们采用spiflash来完成对汉字字库的存储,字库存储部分的硬件电路接口图如图3所示。
3、系统软件设计
系统软件包括字库的调用和tft液晶显示软件设计两个部分,字库调用主要是通过stm32f103rbt6的spi接口调用存储在sst25vf080b中的中文字库。tft液晶显示部分主要是通过stm32f103rbt6通用i/o口模拟16位的8080并口,实现对液晶显示器的驱动,在软件设计的过程中需要注意一个问题。就是不同字库编码的标准时不一样的,所以在解码时略有不同,常用的汉字字库有gb2312字库和gbk字库两种。
3.1gb2312字库和gbk字库
gb2312收录简化汉字及符号、字母、日文假名等共7445个图形字符,其中汉字占6763个。gb2312规定“对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示”,习惯上称*个字节为“高字节”,第二个字节为“低字节”。gb2312—80包含了大部分常用的一、二级汉字,和9区的符号。该字符集是几乎所有的中文系统和化的软件都支持的中文字符集,这也是zui基本的中文字符集。其编码范围是高位0xa1~0xfe,低位也是0xa1~0xfe;汉字从0xb0a1开始,结束于0xf7fe。gb2312将代码表分为94个区,对应*字节(0xa1~0xfe);每个区94个位(0xa1~0xfe),对应第二字节,两个字节的值分别为区号值和位号值加32(20h),因此也称为区位码。01~09区为符号、数字区,16~87区为汉字区(0xb0~0xf7),10~15区、88~94区是有待进一步标准化的空白区。gb2312将收录的汉字分成两级:*级是常用汉字计3755个,置于16~55区,按汉语拼音字母/笔形顺序排列:第二级汉字是次常用汉字计3008个,置于56~87区,按部首/笔画顺序排列。故而gb2312zui多能表示6763个汉字。
而gbk内码*兼容gb2312,同时支持繁体字,总汉字数有2万多个,编码格式如下,每个gbk码由2个字节组成,*个字节为0x81~0xfe,第二个字节分为两部分,一是0x40~0x7e,二是0x80~0xfe。其中与gb2312相同的区域,字*相同。把*个字节代表的意义称为区,那么gbk里面总共有126个区(0xfe~0x81+1),每个区内有190个汉字(0xfe~0x80+0x7e~0x40+2),总共就有126x190=23940个汉字。点阵库只要按照这个编码规则从0x8140开始,逐一建立,每个区的点阵大小为每个汉字所用的字节数乘以190。这样,就可以得到在这个字库里面定位汉字的方法:
当gbkl<0x7f时:hp=((gbkh-0x81)×190+gbkl-0x40)×(sizex2);
当gbkl>0x80时:hp=((gbkh-0x81)×190+gbkl-0x41)×(sizex2);
其中gbkh、gbkll分别代表gbk的*个字节和第二个字节(也就是高位和低位),size代表汉字字体的大小(比如16字体,12字体等),hp则为对应汉字点阵数据在字库里面的起始地址。
3.2系统软件流程
对于gbk字库和gb2312字库,他们的解码部分部分略有不同,这个区别主要是由于他们的编码方式不同引起的,对于gbk字库,解码的方式如下:
其中qh、ql分别代表gbk的*个字节和第二个字节(也就是高位和低位),size代表汉字字体的大小(比如16字体,12字体等),foffset则为对应汉字点阵数据在字库里面的起始地址。
系统启动以后,首先完成时钟的初始化,采用外部8mhz的晶振作为输入时钟,内部锁相环将时钟倍频到72mhz作为系统时钟,完成gpio的初始化,作为lcd驱动io的通用io口的时钟设置为50mhz的推挽模式,接着完成硬件spi1的初始化,spi时钟频率设置为18mhz,接着完成液晶的初始化,此过程是通过发送特定的命令序列来实现的,然后刷新显示背景颜色,设置字体颜色,通过上面的程序完成字库中汉字点阵序列的查询,将汉字点阵送液晶屏显示。
系统软件设计的流程图如图4所示。
采用方法还不但可以实现标准字体的显示,还可以根据系统要求,采用软件生
