利用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
相关源代码下载:
[
源码下载]