许多的掌上装置与移动设备采用小型嵌入式系统,而这些装置很多都需要具有输入汉字的功能。计算机系统中实现汉字输入的方法有多种,但根据实现的技术路线区分,不外乎是编码输入(如拼音、五笔字型输入等)、语音输入(如语音识别)、字型辨识输入(如扫描输入、手写体输入)等几种。由于语音输入技术尚未成熟,手写汉字输入方法颇受人们青睐。然而由于受
微控制器本身处理能力及系统内存空间的限制,要在其中嵌入手写体汉字识别软内核难度非常大,且软内核必须针对不同的嵌入式应用系统进行移植才能使用。这无疑增加了这类产品开发的成本与风险。ePH1200是义隆电子公司将
手写体辨识软内核硬化的一款专用芯片,它通过与电阻式
触摸屏、微控制器相连,有效地实现汉字的手写输入。这为掌上装置以及各种移动设备等嵌入应用系统实现汉字的手写输入功能提供了一个很好的解决方案。
1 ePH1200的特点与手写体辨识过程
ePH1200手写体辨识芯片内嵌蒙恬手写识别软内核,能对国标汉字(共6 763个)、ASCII码字符以及其他一些特殊字符的手写体进行辨识,支持笔划连写,识别正确率高达99.9%;提供备选字输出,输出结果为 Unicode编码或者GB2312国标码,单字辨识时间约为0.34 s。ePH1200具有CSP24和LQFP44两种封装型式;功耗低,工作电压为2.8~3.6 V,工作电流约为2 mA,待机模式时的静态耗电小于20 μA;工作温度范围为-20~+80 ℃。ePH1200具有UART接口,方便与各种微控制器配合使用;UART接口的数据传输速率固定为9 600 bps,一帧数据为10位(1个起始位、8个数据位、1个停止位),数据位由低位到高位依次传送。ePH1200内嵌电阻式触摸屏控制接口电路,可直接与四线电阻式触摸屏相连。电阻式触摸屏控制接口电路包括电子开关切换电路和A/D转换器(转换精度8位/10位可选)[1]。图1为ePH1200的原理框图。
图1 ePH1200原理框图
2 ePH1200硬件接口电路的设计
图2为实现手写输入的硬件接口电路。ePH1200通过XP、XN、YP、YN四个引脚端与四线电阻式触摸屏直接相连,通过串口与系统微控制器 MSP430交换信息。当ePH1200处在待机模式时,可通过WKI端输入外部中断唤醒信号(如微控制器通过检测触摸屏工作状态所产生的输出信号),使其恢复到正常工作模式。
图2 ePH1200硬件接口电路图
0x50 0x14 0x04 0x01 0xFF 0xFF 0xFF 0x3A
ePH1200工作状态被正确设置后便会作出应答,应答包的数据如下:
0x50 0x14 0x04 0xFD 0xFF 0xFF 0xFF 0xFD
ePH1200应答输出包的格式有多种,包括命令确认应答包、命令错误应答包、单字辨识结果数据包和笔迹坐标数据包等。限于篇幅不在此介绍。
在手写输入过程中,ePH1200几乎同步地输出手写笔迹坐标数据包。系统的微控制器须不停地接收这些数据包,通过提取坐标值,将其在屏幕上显示出来。但由于系统的微控制器具有多个任务,处理速度不一定足够快,因此为了防止手写笔迹坐标数据包发生丢失,需要建立坐标数据包接收缓冲区。根据实际应用情况,缓冲区定义为环形,可存放10个数据包。缓冲区的管理采用双指针:数据包接收存放位置指针与数据包提取位置指针。数据包被提取后,相应的存储单元即被清除,以免被重复提取使用;数据包提取位置指针也调整为指向下一个数据包的存放位置,若没有新的数据包可提取则等待。数据包的接收存放管理相对简单,每接收存放一个数据包后,将数据包接收存放位置指针调整指向下一个存放位置即可,无须考虑缓冲区的溢出问题。
在触摸屏上进行书写,虽然手写的笔划是连续的,但ePH1200输出的笔迹坐标数据包只是笔迹曲线上采样点的坐标值,因而是不连续的。如果要将手写的笔迹在显示屏上映射显示[2]出来,则必须利用软件进行处理。采用Bresenham画线算法[3]和利用ePH1200输出的坐标值,可在显示屏上绘出与手写笔迹基本一致的连续曲线。下面是绘线示例程序:
//绘线函数,起点坐标为(x_start,y_start),终点坐标为(x_end,y_end),scnum为显示缓冲区号
void lcd_line(unsigned char y_start,unsigned int x_start,unsigned char y_end,unsigned int x_end,unsigned char scnum) {
unsigned int add_x,add_y,dx,dy;
unsigned int l_long;//线段包含的点数
int sign_x,sign_y;//线段的走向
int x,y;
int nx,ny;
nx=x_start;ny=y_start;
if(x_end>=x_start){ dx="x"_end-x_start;sign_x=1;}
else {dx=x_start-x_end;sign_x=-1;}
if(y_end>=y_start) {dy=y_end-y_start;sign_y=1;}
else {dy=y_start-y_end;sign_y=-1;}
l_long=dx+dy;
if(l_long==0) return;
add_x=l_long/2;
add_y=add_x;
while(x !=x_end||y !=y_end) {add_x+=dx;
add_y+=dy;
if(x !=x_end)
x=x_start+(add_x/l_long)*sign_x;
if(y !=y_end)
y=y_start+(add_y/l_long)*sign_y;
if(nx !=x||ny !=y) {
nx=x;ny=y;
lcd_pt(y,x,1,scnum);//在显示屏上显示一个点
}
}
}
在触摸屏上书写完一个字符后,ePH1200会将辨识结果以数据包的形式输出,数据包的内容为若干个备选字符的Unicode/GB2312编码。根据这些编码,通过索引显示字模库,可将各备选字符在显示屏上依次显示出来;随后就可以根据需要,利用触摸屏或按键选取相应的字符。这样就完成了汉字的手写输入。
结语
汉字的手写输入解决方案多种多样,ePH1200作为一款手写体的辨识芯片,为小型嵌入式系统应用增加手写汉字输入功能带来了方便。本文介绍的只是针对特定微控制器MSP430的一种典型硬件接口和软件设计方法,但由于ePH1200接口简单,因此采用其他微控制器的应用,设计方法大同小异。
一周热门 更多>