OpenEdv-开源电子网

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

《M144Z-M3最小系统板使用指南——STM32F103版》第五十三章 T9拼音输入法实验

[复制链接]

1117

主题

1128

帖子

2

精华

超级版主

Rank: 8Rank: 8

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

第五十三章 T9拼音输入法实验
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

本章将介绍正点原子提供的T9拼音输入法库的使用,用其实现一个简单的T9拼音输入法应用。通过本章的学习,读者将学习到正点原子T9拼音输入法库的使用。
本章分为如下几个小节:
53.1 硬件设计
53.2 程序设计
53.3 下载验证

53.1 硬件设计
53.1.1 例程功能
1. 输入拼音后,LCD和串口显示匹配结果
2. 按下WKUP按键可清除输入
3. 按下KEY0按键可换页匹配结果
4. LED0闪烁,提示程序正在运行

53.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

53.1.3原理图
本章实验使用的T9拼音输入法库为软件库,因此没有对应的连接原理图。

53.2 程序设计
53.2.1 T9拼音输入法库的使用
正点原子提供的T9拼音输入法库包含三个文件,分别为:pyinput.c、pyinput.h和pymb .h,本章实验配套的实验例程中已经提供了这三个文件,并且针对正点原子M144Z-M3最小系统板STM32F103版进行了移植适配,在使用时,仅需将这三个文件添加到自己的工程即可,如下图所示:                                 
QQ截图20240524181226.png
图53.2.1.1 正点原子T9拼音输入法库文件
T9拼音输入法库提供了匹配码表的函数,使用非常方便。
匹配码表函数的使用示例,如下所示:
  1. #include "./T9INPUT/pyinput.h"
  2. void example_fun(void)
  3. {
  4.     uint8_t inputstr[5];
  5.     uint8_t res;
  6.     uint8_t index;
  7.    
  8.     /* 拼音输入 */
  9.     // inputstr[0] = 9; // wxyz
  10.     // inputstr[1] = 4; // ghi
  11.     // inputstr[2] = 3; // def
  12.     // inputstr[3] = 6; // mno
  13.     // inputstr[4] = 4; // ghi
  14.    
  15.     /* 匹配码表 */
  16.     res= t9.getpymb(inputstr);
  17.     /* 有匹配结果 */
  18.     if (res != 0)
  19.     {
  20.          /* 展示所有匹配结果 */
  21.          for (index=0; index<(res&0x7F); index++)
  22.          {
  23.              // printf("拼音: %s\r\n", t9.pymb[index]->py);
  24.              // printf("结果: %s\r\n", t9.pymb[index]->pymb);
  25.          }
  26.     }
  27.     /* 无匹配结果 */
  28.     else
  29.     {
  30.          /* Dosomething */
  31.     }
  32. }
复制代码
53.2.2 实验应用代码
本章实验的应用代码,如下所示:
  1. int main(void)
  2. {
  3.     /* 仅保留关键代码,其余代码省略 */
  4.    
  5. RESTART:
  6.     while (1)
  7.     {
  8.          /* 获取触摸点对应的键值 */
  9.          pykey = py_get_keynum(30, 195);
  10.          /* 有有效键值 */
  11.          if (pykey != 0)
  12.          {
  13.              /* 退格键 */
  14.              if (pykey == 1)
  15.              {
  16.                  if (inputlen != 0)
  17.                  {
  18.                      inputlen--;
  19.                  }
  20.                  inputstr[inputlen] = '\0';
  21.              }
  22.              /* 其他有效键值 */
  23.              else
  24.              {
  25.                  inputstr[inputlen] = pykey + '0';
  26.                  if (inputlen < 7)
  27.                  {
  28.                      inputlen++;
  29.                  }
  30.              }
  31.             
  32.              /* 有输入 */
  33.              if (inputstr[0] != '\0')
  34.              {
  35.                  /* 匹配码表 */
  36.                  pykey = t9.getpymb(inputstr);
  37.                  /* 有匹配结果 */
  38.                  if (pykey != 0)
  39.                  {
  40.                      result_num = pykey & 0x7F;
  41.                      cur_index = 1;
  42.                  }
  43.                  /* 无匹配结果 */
  44.                  else
  45.                  {
  46.                      inputlen--;
  47.                      inputstr[inputlen] = '\0';
  48.                  }
  49.              }
  50.              /* 无输入 */
  51.              else
  52.              {
  53.                  cur_index = 0;
  54.                  result_num = 0;
  55.              }
  56.             
  57.              /* 显示输入和匹配结果 */
  58.              lcd_fill(30 + 40, 105, 30 + 40 + 48, 110 + 16, WHITE);
  59.              lcd_show_num(30 + 144, 105, result_num, 1, 16, BLUE);
  60.              text_show_string(30 + 40, 105, 200, 16, (char *)inputstr,16,0,BLUE);
  61.              py_show_result(cur_index);
  62.          }
  63.          
  64.          /* 有匹配结果 */
  65.          if (result_num != 0)
  66.          {
  67.              key = key_scan(0);
  68.              switch (key)
  69.              {
  70.                  /* 匹配翻页 */
  71.                  case KEY0_PRES:
  72.                  {
  73.                      if (cur_index < result_num)
  74.                      {
  75.                          cur_index++;
  76.                      }
  77.                      else
  78.                      {
  79.                          cur_index = 1;
  80.                      }
  81.                      py_show_result(cur_index);
  82.                      break;
  83.                  }
  84.                  /* 清除 */
  85.                  case WKUP_PRES:
  86.                  {
  87.                      lcd_fill(30 + 40, 145, lcddev.width - 1, 145 + 48, WHITE);
  88.                      goto RESTART;
  89.                  }
  90.              }
  91.          }
  92.     }
  93. }
复制代码
由于本实验的应用代码过于冗长,因此上面代码仅保留了部分关键代码,完成代码请读者自行查看本实验的配套实验例程。从上面的代码中可以看出,本实验实验的应用中,通过触摸屏获取拼音的键值,然后调用函数t9. getpymb()进行码表匹配,有匹配结果时,则在LCD上显示匹配结果,若有多个匹配结果,则可通过KEY0按键进行翻页,通过也可通过WKUP按键清除输入。

53.3 下载验证
在完成编译和烧录操作后,可以看到LCD上显示了本实验的相关实验信息,通过也显示了T9拼音的输入键盘,此时便可通过键盘输入拼音,随即便可在LCD上看到输入拼音对应的汉字匹配结果,若有多个匹配结果,例如输入“64”,则会匹配到拼音“mi”和“ni”,此时按下KEY0按键,可对多个匹配结果进行翻页,若按下WKUP按键则会清除所有输入。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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