|
摘 要: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
|