基于51单片机和FPGA 的人机交互系统的设计
T6963C 的最大特点是具有独特的硬件初始值设置功能,显示驱动所需的参数如占空比系数。驱动传输的字节数/行及字符的字体选择等均由引脚电平设置, 这样T6963C 的初始化在上电时就已经基本设置完成,软件操作的重心就可以全部用于显示画面的设计上。因此,初始化时仅需根据实际情况设置文本区域和图形区域的首地址和宽度, 以及CGRAM 偏置地址、合成方式、光标形状等即可正常使用。
液晶驱动模块的初始化函数如下:
void LcdInitial(void)
{
LcdWriteDataD(0x00,0x00,0x40); //设置文本区域首地址为0000H
LcdWriteDataD(0x20,0x00,0x41); //设置文本区域宽度为20H 字节
LcdWriteDataD(0x00,0x04,0x42); //设置图形区域首地址为0400H
LcdWriteDataD(0x20,0x00,0x43); //设置图形区域宽度为20H 字节
LcdWriteDataD(0x03,0x00,0x22); //设置CGRAM 偏置地址,显示存储器的首地址为1800H
LcdWriteDataN(0xa7); //光标形状设置为8×7
LcdWriteDataN (0x80); //启用内部字符发生器,逻辑“或”合成
LcdWriteDataN(0x9c); //开文本和图形显示,禁用光标
LcdClear(3); //清屏
}
3.1.2 英文及汉字的文本显示:
由于英文及数字等常用字符的字模已经固化在CGROM中,因此进行英文的显示时,只需指定显示的地址,再输入该字符对应的标号即可。汉字的显示与英文的显示类似。然而出于其复杂性,一个汉字需要使用4 组点阵才能完整显示。在初始化后将汉字的4 部分字模顺序输入CGRAM 中, 在使用时仅需计算好每一部分的显示地址即可对汉字进行完美显示。
对于一串英文字符的输入, 可以利用字符串的特性进行操作。通过检测‘’字符来判断英文字符串的结尾,从而避免了在调用此显示函数时人工计算句子长度的工作。英文字符的ASCII码值与其在CGROM 中对应的标号恰相差0x20,因此仅需简单的减法即可实现标号的转换。此外,在进行英文的连续显示时,使用了T6963C 的数据自动写指令,从而提高了显示效率。
对于一串中文的显示,则仅需通过循环调用单个中文的显示程序进行实现。注意由于C51 语言中字符串无法支持中文,因此必须人工计算中文字串的长度并将其作为函数传递给此显示函数。
字符发生器CGRAM 中总共可存储32 个汉字,对于需显示较多汉字的应用, 可从需显示的汉字中选出16 个最常用的汉字,固定存放于CGRAM 中,其余汉字仅在需要使用时动态写入CGRAM。这样, 既提高了显示效率, 又解决了CGRAM 过小的问题。
3.1.3 图形显示:
除使用文本显示汉字外,还可采用图形显示的方式。具体方式是将字模以数组的方式保存于单片机的代码段,在需要显示时将数据送入图形区即可。此外,利用图形显示,还可以编写描点程序显示相应波形或者编写绘图程序绘制简易表格,使系统显示结果更加直观,便于分析。
3.1.4 文本特效:
T6963C 可以设置文本属性区,并对文本实现反白、正向闪烁、反向闪烁等特效。使用时仅需将图形显示设置为文本属性区即可。此时图形区的内容将无法显示,若图形区与文本属性区划分在CGRAM 的不同区域,则图形区的内容可以得到保存。利用文本特效,可通过反白或闪烁等效果指示可选选项以及当前选项,从而使界面更易于操作。
3.2 人机交互界面设计:
除基本的10 个数字键以外,还设定了上、下、左、右、确定、取消等按键。此外,按键位置的设计,更符合人们的按键习惯。在界面中采用分级的菜单, 在一级菜单中选定功能之后将进入下一级菜单对功能进行更详细的设定。在人机交互界面中可以使用方向键进行功能的选择,数字键仅用于数据的输入。
界面充分利用了文本特效,对选项采用反向显示表示该选项已选定;对选项采用反向闪烁表示用户可通过方向键改变选项。在需要进行数字输入的界面中打开光标,即可向用户标示数字输入的地方。此外,必要的警告和出错界面的设计将为用户提供更多信息,使人机交互界面更为友好。
4 结束语:
本系统采用键盘+LCD 的输入输出设备, 并且可以通过FPGA 实现各种其他外设的接口电路的设计, 减少了对单片机资源的占用,使得设计灵活、方便。同时FPGA 还可以为单片机提供存储器和I/O 口等资源。本文设计的电路可扩展性强, 在此基础上可将其扩展成各种拥有友好界面的系统,如可控增益放大器、音频信号分析仪、集成运放分析仪等。经实践,该系统稳定易用,实用性强。
- 关于RTX51 TINY的分析与探讨(05-30)
- 浅析8051模块化编程技巧(05-28)
- 基于DSP和单片机通信的液晶显示设计方案(07-20)
- 锁相环控制及初始化简析(08-27)
- 基于MSP430自动胀管控制器的研究(09-07)
- 嵌入式C实现延时程序的不同变量的区别(03-01)