OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 538|回复: 0

《M144Z-M3最小系统板使用指南——STM32F103版》第五十二章 手写识别实验

[复制链接]

1117

主题

1128

帖子

2

精华

超级版主

Rank: 8Rank: 8

积分
4667
金钱
4667
注册时间
2019-5-8
在线时间
1224 小时
发表于 2024-5-24 18:04:54 | 显示全部楼层 |阅读模式
本帖最后由 正点原子运营 于 2024-5-23 18:13 编辑

第五十二章 手写识别实验
1)实验平台:正点原子 M144Z-M3 STM32F103最小系统板

2) 章节摘自【正点原子】M144Z-M3最小系统板使用指南——STM32F103版


4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boar ... _mini_sysboard.html

5)正点原子官方B站:https://space.bilibili.com/394620890

6)正点原子STM32技术交流QQ群:725095144

155537c2odj87vz1z9vj6l.jpg

155537nfqovl2gg9faaol9.png

本章将介绍正点原子提供的手写识别库的使用,通过使用手写识别库可以实现一些简单的数字字母手写识别的应用。通过本章的学习,读者将学习到正点原子手写识别库的使用。
本章分为如下几个小节:
52.1 硬件设计
52.2 程序设计
52.3 下载验证

52.1 硬件设计
52.1.1 例程功能
1. LCD上显示手写触摸轨迹,并自动识别手写输入
2. 按下WKUP按键可进行电容触摸屏触摸校准
3. 按下KEY0按键可切换手写识别模式
4. LED0闪烁,提示程序正在运行

52.1.2硬件资源
1. LED
       LED0 - PB5
2. 正点原子 2.8/3.5/4.3/7/10寸TFTLCD模块
3. USART1
       USART1_TX - PA9
       USART1_RX - PA10
4. NOR Flash
       SPI2_SCK - PB13
       SPI2_MISO - PB14
       SPI2_MOSI - PB15
       SPI2_CS - PB12
5. SD
       SDIO_D0 - PC8
       SDIO_D1 - PC9
       SDIO_D2 - PC10
       SDIO_D3 - PC11
       SDIO_SCK - PC12
       SDIO_CMD - PD2
6. 24C02
       IIC_SCL - PB10
       IIC_SDA - PB11

52.1.3原理图
本章实验使用的手写识别库为软件库,因此没有对应的连接原理图。

52.2 程序设计
52.2.1 手写识别库的使用
正点原子提供的手写识别库包含四个文件,分别为:ATKNCR_M_Vx.x.lib、ATKNCR_N_Vx.x.lib、atk_ncr.x和atk_ncr.h,本章实验配套的实验例程中已经提供了这四个文件,并且针对正点原子M144Z-M3最小系统板STM32F103版进行了移植适配,在使用时,仅需将atk_ncr.c和atk_ncr.h这两个文件添加到自己的工程中,并根据是否使用内存管理动态管理手写识别库运行时所需的内存,添加ATKNCR_M_Vx.x.lib(使用内存管理)或ATKNCR_N_Vx.x.lib(不使用内存管理)即可,如下图所示:      

QQ截图20240523181340.png
图52.2.1.1 正点原子手写识别库文件
手写识别库中提供了手写识别初始化、识别和停止等函数,使用非常方便。
在进行手写识别前,需要使用手写识别初始化函数对其进行初始化,手写识别初始化的使用示例,如下所示:
  1. #include "./ATKNCR/atk_ncr.h"
  2. void example_fun(void)
  3. {
  4.     /* 初始化手写识别 */
  5.    alientek_ncr_init();
  6. }
复制代码
手写识别初始化后,便可开始进行手写识别,手写识别函数的使用示例,如下所示:
  1. #include "./ATKNCR/atk_ncr.h"
  2. void example_fun(void)
  3. {
  4.     /* 定义点阵数据缓存 */
  5.    atk_ncr_point input_buf[200];
  6.     int input_cnt;
  7.     char output_buf[2];
  8.    
  9.     /* 初始化手写识别 */
  10.    alientek_ncr_init();
  11.    
  12.     /* 从触摸屏或其他方式获取输入的点阵数据 */
  13.    input_cnt = get_data(input_buf);
  14.    
  15.     /* 进行手写识别 */
  16.    alientek_ncr(input_buf, cnt, 1, 1, output_buf);
  17.    
  18.     /* 处理识别结果 */
  19.     /* printf("Detect result: %s\r\n", output_buf);*/
  20. }
复制代码
在进行手写识别后,若不再需要进行手写识别,可以调用结束手写识别函数,结束手写识别,该函数的使用示例,如下所示:
  1. #include "./ATKNCR/atk_ncr.h"
  2. void example_fun(void)
  3. {
  4.     /* 定义点阵数据缓存 */
  5.    atk_ncr_point input_buf[200];
  6.     int input_cnt;
  7.     char output_buf[2];
  8.    
  9.     /* 初始化手写识别 */
  10.    alientek_ncr_init();
  11.    
  12.     /* 从触摸屏或其他方式获取输入的点阵数据 */
  13.    input_cnt = get_data(input_buf);
  14.    
  15.     /* 进行手写识别 */
  16.    alientek_ncr(input_buf, cnt, 1, 1, output_buf);
  17.    
  18.     /* 处理识别结果 */
  19.     /* printf("Detect result: %s\r\n", output_buf);*/
  20.    
  21.     /* 停止手写识别 */
  22.    alientek_ncr_stop();
  23. }
复制代码
52.2.2 实验应用代码
本章实验的应用代码,如下所示:
  1. int main(void)
  2. {
  3.     /* 仅保留关键代码,其余代码省略 */
  4.     /* 初始化手写识别 */
  5.    alientek_ncr_init();
  6.    
  7. RESTART:
  8.     while (1)
  9.     {
  10.          key = key_scan(0);
  11.          
  12.          switch (key)
  13.          {
  14.              /* 切换识别模式 */
  15.              case KEY0_PRES:
  16.              {
  17.                  mode++;
  18.                  if (mode > 4)
  19.                  {
  20.                      mode = 1;
  21.                  }
  22.                  break;
  23.              }
  24.              /* 进行触摸校准 */
  25.              case WKUP_PRES:
  26.              {
  27.                  if ((tp_dev.touchtype & 0x80) == 0)
  28.                  {
  29.                      tp_adjust();
  30.                      goto RESTART;
  31.                  }
  32.                  break;
  33.              }
  34.          }
  35.          
  36.          tp_dev.scan(0);
  37.          /* 有触摸按下,记录触摸点阵数据 */
  38.          if (tp_dev.sta & TP_PRES_DOWN)
  39.          {
  40.              ncr_input_buf[pcnt].x = tp_dev.x[0];
  41.              ncr_input_buf[pcnt].y = tp_dev.y[0];
  42.          }
  43.          /* 触摸松开,进行手写识别 */
  44.          else
  45.          {
  46.              alientek_ncr(ncr_input_buf, pcnt, 6, mode, sbuf);
  47.              printf("识别结果:%s\r\n", sbuf);
  48.          }
  49.     }
  50. }
复制代码
由于本实验的应用代码过于冗长,因此上面代码仅保留了部分关键代码,完整代码请读者自行查看本实验的配套实验例程。从上面的代码中可以看出,本实验实现的应用中,通过触摸屏获取点阵数据,将点阵数据传入手写识别函数后,获取手写识别结果,然后将手写识别结果通过串口等方式输出,并且可通过KEY0按键修改手写识别的模式,也可通过WKUP按键随时进行电阻屏的触摸校准。

52.3 下载验证
在完成编译和烧录操作后,可以看到LCD上显示了本实验的相关实验信息,此时便可以在LCD上提示的“手写区”进行手写操作,完后手写操作后,可以看到LCD上提示了手写识别的结果,此时也可以按下KEY0按键修改手写识别的模式,也可以按下WKUP按键进行电阻屏的触摸校准。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 18:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表