利用SPCE061A实现中文输入

2019-04-15 15:49发布

利用SPCE061A实现中文输入

摘  要:SPCE061A是凌阳公司设计的一款16位单片机,该单片机资源丰富,具有较高的性价比。本方案在SPCE061A单片机平台上构造了简易的拼音输入法,并以SPLC701B液晶显示模组为输入输出设备,实现了汉字、英文字母、数字符号等文本信息的输入。 关键词: 单片机 SPCE061A 输入法 1 引言   中文输入是手机、PDA等手持终端的基本功能,研究基于单片机的中文输入方法,对于手持电子产品的开发具有一定的现实意义。SPCE061A是 凌阳科技研发生产的性价比很高的一款十六位单片机,具有易学易用的指令系统和集成开发环境,为软件开发提供了方便的条件。本方案利用凌阳大学计划推出的 SPLC701B液晶显示模组作为输入输出设备,在SPCE061A单片机上实现了拼音输入法,可实现汉字、英文字母、数字符号等文本信息的输入。本方案 可以为基于单片机的产品开发、中文输入法研究等提供辅助和参考。 2 系统硬件设计   对于文本输入系统,除了主控制器外,至少还要包括输入设备和显示设备。系统采用SPCE061A单片机作为主控制器,而输入和显示都通过SPLC701B液晶显示模组(集成了4×4键盘)实现,系统的硬件结构框图如图 2-1所示。 图 2-1 系统硬件结构图
  SPCE061A单片机作为主控芯片,负责构建拼音输入法的数据结构,并在单片机内部Flash中保存汉字的拼音编码。SPCE061A接收4×4按键输入,并通过LCD显示交互内容,从而实现用户操作界面。 2.1 SPCE061A芯片特性 2.1.1 SPCE061A简介   SPCE061A是一款基于u'nSP内核的16位单片机,其芯片特性如下:
  ● 工作电压:内核工作电压VDD为3.0~3.6V(CPU),I/O口工作电压VDDH为VDD~5.5V(I/O);
  ● CPU时钟:0.32MHz~49.152MHz;
  ● 内置2K字SRAM和32K闪存ROM;
  ● 系统处于备用状态下(时钟处于停止状态),耗电小于2μA@3.6V
  ● 具备触键唤醒的功能;
  ● 32位通用可编程输入/输出端口;
  ● 2个16位可编程定时器/计数器(可自动预置初始计数值);
  ● 7通道10位电压模-数转换器(ADC)和单通道声音模-数转换器;
  ● 2个10位DAC(数-模转换)输出通道;
  ● 14个中断源可来自定时器A / B,时基,2个外部时钟源输入,键唤醒;
  ● 具备串行设备接口;
  ● 低电压复位(LVR)功和低电压监测(LVD)功能;
  ● 内置在线仿真(ICE,In- Circuit Emulator)接口。
  SPCE061A的内部结构框图如图 2-2所示。
图 2-2 SPCE061A内部结构图 2.2 SPLC701B液晶显示模组特性   SPLC701B液晶显示模组采用基于凌阳SPLC701B芯片的点阵液晶显示器,具有120×52显示分辨率,内置汉字字库和半角字符库,可软件调节对比度(32级),支持串行和并行控制方式。模组同时配备4×4键盘供用户使用。液晶显示器的基本特性见下表:
表 2.1 液晶显示器特性参数 显示模式 1. 4行10列全角字符(11×12点阵字符),同时支持半角字符(5×12点阵字符)显示。
2. 120×52点阵图形显示。
3. 14段图标显示。
上述三种模式可同时显示。 显示器尺寸 34.5 (宽)× 33.3 (高)× 1.91 (厚) mm 可视区尺寸 30.5 (宽)× 23.4 (高) mm 点大小 0.2 (宽)× 0.303 (高) mm 像素尺寸 0.22 (宽)× 0.323 (高) mm   模组包括LCD显示器和4×4键盘两个部分,LCD与键盘可以各自独立使用,互不影响。 2.3 硬件电路 2.3.1 SPCE061A最小系统   本方案使用SPCE061A精简开发板(61板)作为单片机最小系统。61板包括SPCE061A芯片外围的基本模块,有:晶振输入模块(OSC)、锁相环外围电路(PLL)、复位电路(RESET)、指示灯(LED)等,如下图所示。
图 2-3 SPCE061A最小系统 2.3.2 LCD显示器   SPLC701B液晶显示模组提供的LCD显示器采用凌阳SPLC701B液晶驱动芯片,点阵分辨率为120*52,内置中文字库,可显示汉 字、字符、图形等。该LCD显示器支持串行、8位并行、4位并行等多种接口方式,为简化电路连接,这里使用串行接口方式,如图 2-4所示。
图 2-4  SPCE061A与LCD显示器的硬件连接 2.3.3 4×4键盘   SPLC701B液晶显示模组附带4×4键盘,可直接与SPCE061A的I/O端口连接。其电路原理图如下:
图 2-5  4×4键盘 3 系统软件设计   本方案的软件系统主要包含下列模块:
  按键扫描:扫描4×4键盘,获取键值。包括Key.asm程序文件和Key.inc、Key.h头文件。
   LCD显示:LCD显示驱动程序,实现文本、图形显示等功能。该模块包括LCD701_Drv.asm、LCD701_Functions.c程序文 件,以及LCD701_Cfg.inc、LCD701_Defs.h、LCD701_Drv.h、LCD701_Functions.h等头文件。
   文字输入:通过4×4键盘输入汉字(拼音输入法)、字符、数字等,并在LCD上显示出来,以便于用户编辑通讯录条目。该模块包括PY_IME.c、 PY_Interface.c程序文件,以及PY_Index.h、PY_MB.h、PY_IME.h、PY.h等头文件。 3.1 各模块程序说明 3.1.1 按键扫描模块   按键扫描是在TMB_128Hz中断服务程序中进的,采用逐行扫描方式获取键值。4×4键盘的左面3列采取手机按键排布方式,最右一列的4个按键分别被定义为"向上"、"向下"、"确定"和"取消",如图 3-1所示。
图 3-1  4*4按键定义 3.1.2 LCD显示模块   LCD显示部分采用SPLC701B液晶显示模组附带的驱动程序。该驱动程序的架构如图 3-2所示。
图 3-2  LCD驱动程序架构
  程序中用到的LCD驱动函数主要有:
  void LCD701_Init(void);        // LCD显示初始化
  void LCD701_ClrScr(unsigned Part);     // 清除屏幕显示内容
  void LCD701_SetTextPos(unsigned Row, unsigned Col); // 设置文本显示位置
  void LCD701_SetTextMode(unsigned TextMode);   // 设置文本显示模式
  void LCD701_Print(const unsigned char *String);   // 在屏幕上打印字符串 3.1.3 文字输入模块   拼音输入法是本方案的核心内容,它负责将键盘输入的数字序列转换为汉字。拼音输入法大体可以分为两个步骤:首先将键盘输入的数字序列转换为拼音编码,然后搜索到该拼音编码对应的汉字编码。
  拼音编码以索引表的形式保存在PY_Index.h中,每个拼音编码的数据结构为:
  typedef struct
  {
     const char *T9;   // 按键数字序列
     const char *PY;   // 拼音编码字符串
     const char *MB;   // 该拼音对应的汉字码表地址
  }T9PY_IDX;
  所有的拼音编码组成一个数组常量T9PY_index[],每个拼音编码作为数组中的一个元素存在,下面是该数组的片段:
  const T9PY_IDX  T9PY_index[] ={     
   {"2","a",PY_mb_a},
   {"3","e",PY_mb_e},
   …… ……
   {"224","bai",PY_mb_bai},
  {"224","cai",PY_mb_cai},
   …… ……
  }
   当用户通过键盘输入一个数字序列后,程序将遍历拼音编码数组中的每个元素,找到与这个数字序列对应的所有拼音编码。例如输入数字"224",遍历 T9PY_index数组将获得"bai"和"cai"两组拼音编码,程序将这些匹配的拼音通过LCD显示出来,供用户选择。
  在用户选定了拼音之后,程序就可以获得该拼音编码对应的汉字码表地址。例如选择了拼音"cai",那么程序将获得该拼音拼音编码对应的汉字码表地址PY_mb_cai。汉字码表是具有相同读音的汉字组成的编码数组,例如PY_mb_cai数组的定义如下:
  const unsigned char PY_mb_cai []={"@猜才材财裁采彩睬踩菜蔡"};
  程序将汉字码表数组中的所有汉字显示在LCD上,这样用户就可以通过键盘选取所需的汉字了。由于LCD可显示的字数有限,这里采用分页显示的办法,每页显示8个汉字供用户选择,并可利用键盘中的"Up"和"Dn"键上下翻页。
  用户在录入文本时,除需要输入中文外,也可能需要输入英文、数字以及符号等。因此,将4×4键盘的一些特定按键定义为英文、数字等输入键,从而构成了完整的文本输入模块。文字输入模块的程序流程如下:
图 3-3 文字输入模块程序流程 4 操作说明   本系统实现的输入法可以方便地实现中文、英文字母、数字、符号的混合输入。与手机键盘类似,英文字母a~z分配在2~9这几个数字键上,如下图所示:
图 4-1 按键与字母映射关系 4.1 输入汉字   当输入汉字时,连续按拼音字母对应的数字键,LCD将显示所有匹配的拼音。按Up或Dn键选中所需的拼音,再按确定键即可进入汉字选择状态。 LCD将分页显示该拼音对应的所有汉字,每个汉字上方有一个数字,按相应的数字键可以选中所需的汉字,按Up和Dn可上下翻页。例如,输入汉字"书",需 要进行如下操作:
  "书"字的拼音编码为"shu",因此依次按数字键"748",LCD将显示与之对应的所有拼音编码:
图 4-2 输入拼音
  按Up或Dn键,将光标切换到"shu"的位置,再按"确定"键,LCD将显示拼音"shu"对应的汉字列表:
图 4-3 选择汉字
  直接按数字键"1"即可选定汉字"书"。如果需要的汉字没有出现在当前页,则可利用Up和Dn键上下翻页。 4.2 输入英文字母   以输入英文字母"r"为例,首先按"r"对应的数字键"7",LCD将显示该数字键对应的所有字母:
图 4-4 选择英文字母
  按Up或Dn键,将光标移动到"r"的位置,再按"0"键即可选定字母"r"。 4.3 输入数字和符号   当输入数字时,需要先按数字键,再按"#"键。例如输入数字3,则依次按"3#"即可。
此外,输入法还支持一些常用符号输入。按"1"键,LCD将显示符号列表:
图 4-5 输入符号
  每个符号上方有一个数字,按0~8数字键可输入对应的符号,按"#"键则输入数字"1"。例如输入符号"@",需要依次键入"03"。 5 参考文献 [1]  罗亚非.凌阳16位单片机应用基础[M]. 北京:北京航空航天大学出版社,2003
[2]  薛钧义 张彦斌 虞鹤松 樊波   凌阳十六位单片机原理及应用[M]  北京航空航天出版社 2003年2月第1版
[3]  谭浩强    C程序设计[M]   清华大学出版社   1999年12月第2版
[4]  沈美明 温冬蝉  IBM-PC汇编语言程序设计[M]    清华大学出版社 2001年8月第二版
[5]  实验指导书     凌阳大学计划资料
[6]  凌阳大学计划网站www.unsp.com.cn
相关源代码下载:     [ 源码下载]