新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于51单片机和FPGA 的人机交互系统的设计

基于51单片机和FPGA 的人机交互系统的设计

作者: 时间:2011-11-18 来源:网络 收藏

  2.2 T6963C 及其接口设计:

  T6963C 液晶显示控制器多用于小规模的液晶显示器件,常被装配在图形液晶显示模块上,以内藏控制器型图形液晶显示模块的形式出现。

  单片机对T6963C 有2 种访问方式: 直接访问与间接访问。直接访问利用三总线以I/O 设备访问形式进行控制;间接访问则由单片机提供并行接口,以程序控制时序的方式进行控制。为简化程序,这里采用直接访问方式。

  该LCM 的FS1 引脚用于控制显示字符的字体。FS1 为高时,LCD 显示6×8 字符;FS1 为低时,LCD 显示8×8 字符。经实践,在显示英文与数字时,6×8 字符更为美观;在显示中文字符时,8×8 字符更为方便。一般系统采用将FS1 接地或接高的方式来固定字体,而本系统采用P2.1 对FS 进行控制,通过改变地址实现改变字体的功能,使得界面的显示更灵活。

  2.3 键盘电路设计:

  键盘是常用的单片机输入设备,分为编码键盘和非编码键盘。键盘上闭合键的识别由专用硬件译码器实现,并产生键编号或键值的称为编码键盘;靠软件识别的称为非编码键盘。在单片机组成的测控系统及智能化仪器中使用最多的是非编码键盘,本系统设计在 中编程实现3×6 键盘的行扫描。

  由于按键的机械特性,在闭合和断开的瞬间会伴随着一连串的抖动,键抖动会引起一次按键被误读多次,所以必须进行去抖处理,常用的方法为延时去抖动。 产生键值之后向单片机发送中断,并等待单片机读取键值。由于人脑反应时间相对较长, 键盘中断可以处于相对较低的优先级,因此本文将键盘中断接于外部中断7。

  3 软件设计:

  软件设计遵循结构化和层次化的设计原则。底层函数直接与硬件沟通,而上层函数直接通过调用底层函数来实现相应功能,从而使上层函数与硬件环境彻底分开。当硬件环境发生变化时,仅修改底层函数便能实现程序的移植。

  3.1 液晶驱动模块的编程设计:

  本模块的底层函数需要实现写控制字、写参数、查忙等功能。由于采用直接访问,写控制字与写参数的函数只需向控制口或数据口的地址送数即可。由于LCD 是慢速器件,因此在每次写控制字及写参数之前都需要进行查忙。T6963C的状态字共有7 位有效的状态位,如表1 所示。其中STA1~STA3 最为常用,一般情况下可以不需要对STA5~STA7 进行查忙的程序。

基于51单片机和FPGA 的人机交互系统的设计


  3.1.1 液晶驱动模块的初始化:

  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 语言中字符串无法支持中文,因此必须人工计算中文字串的长度并将其作为函数传递给此显示函数。



评论


相关推荐

技术专区

关闭