微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 基于手写辨识芯片的汉字手写输入技术

基于手写辨识芯片的汉字手写输入技术

时间:11-03 来源:单片机与嵌入式系统应用/作者:谭海燕 崔如春 点击:

3.2 手写笔迹坐标数据包的接收

  在手写输入过程中,ePH1200几乎同步地输出手写笔迹坐标数据包。系统的微控制器须不停地接收这些数据包,通过提取坐标值,将其在屏幕上显示出来。但由于系统的微控制器具有多个任务,处理速度不一定足够快,因此为了防止手写笔
迹坐标数据包发生丢失,需要建立坐标数据包接收缓冲区。根据实际应用情况,缓冲区定义为环形,可存放10个数据包。缓冲区的管理采用双指针:数据包接收存放位置指针与数据包提取位置指针。数据包被提取后,相应的存储单元即被清除,以免被重复提取使用;数据包提取位置指针也调整为指向下一个数据包的存放位置,若没有新的数据包可提取则等待。数据包的接收存放管理相对简单,每接收存放一个数据包后,将数据包接收存放位置指针调整指向下一个存放位置即可,无须考虑缓冲区的溢出问题。

  3.3 手写笔迹的显示

  在触摸屏上进行书写,虽然手写的笔划是连续的,但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);//在显示屏上显示一个点
    }
  }
}

  3.4 字符辨识结果的处理

  在触摸屏上书写完一个字符后,ePH1200会将辨识结果以数据包的形式输出,数据包的内容为若干个备选字符的Unicode/GB2312编码。根据这些编码,通过索引显示字模库,可将各备选字符在显示屏上依次显示出来;随后就可以根据需要,利用触摸屏或按键选取相应的字符。这样就完成了汉字的手写输入。

  结语

  汉字的手写输入解决方案多种多样,ePH1200作为一款手写体的辨识芯片,为小型嵌入式系统应用增加手写汉字输入功能带来了方便。本文介绍的只是针对特定微控制器MSP430的一种典型硬件接口和软件设计方法,但由于ePH1200接口简单,因此采用其他微控制器的应用,设计方法大同小异。

  参考文献

  [1] Elan MicroeLectronics Corp.ePH1200 DATA SHEET,2005.

  [2] 崔如春,谭海燕. 电阻式触摸屏的坐标定位与笔画处理技术[J].仪表技术与传感器,2004(8).

  [3] 陈元琰,张晓竞. 计算机图形学实用技术[M].北京:科学出版社,2000:5258.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top