【正点原子STM32连载】 第五十一章 T9拼音输入法实验 摘自【正点原子】APM32E103最小系统板使用指南

1)实验平台:正点原子APM32E103最小系统板
2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban

第五十一章 T9拼音输入法实验

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

51.1 硬件设计
51.1.1 例程功能

  1. 程序运行后,在LCD上显示T9拼音输入法的键盘及相关信息
  2. 触摸键盘上的按键,可进行拼音输入
  3. 按下KEY0按键或KEY_UP按键,可分别进行匹配结果翻页或清除输入的操作
  4. 可使用USMART对输入法进行调试
  5. LED0闪烁,指示程序正在运行
    51.1.2 硬件资源
  6. LED
    LED0 - PB5
  7. 按键
    KEY0 - PE4
    KEY_UP - PA0
  8. 正点原子 2.8/3.5/4.3/7/10寸TFTLCD模块(仅限MCU屏,16位8080并口驱动)
  9. TFTLCD模块上的触摸屏(电阻式、电容式)
  10. SD卡(SDIO驱动)
  11. NOR Flash(SPI驱动)
    51.1.3 原理图
    本章实验使用的T9拼音输入法库为软件库,因此没有对应的连接原理图。
    51.2 程序设计
    51.2.1 T9拼音输入法库的使用
    正点原子提供的T9拼音输入法库包含三个文件,分别为:pyinput.c、pyinput.h和pymb .h,本章实验配套的实验例程中已经提供了这三个文件,并且针对正点原子APM32E103最小系统板进行了移植适配,在使用时,仅需将这三个文件添加到自己的工程即可,如下图所示:
    在这里插入图片描述

图51.2.1.1 正点原子T9拼音输入法库文件
T9拼音输入法库提供了匹配码表的函数,使用非常方便。
匹配码表函数的使用示例,如下所示:

#include " apm32e10x.h"
#include "./T9INPUT/pyinput.h"void example_fun(void)
{uint8_t inputstr[5];uint8_t res;uint8_t index;/* 拼音输入 */// inputstr[0] = 9; // wxyz// inputstr[1] = 4; // ghi// inputstr[2] = 3; // def// inputstr[3] = 6; // mno// inputstr[4] = 4; // ghi/* 匹配码表 */res = t9.getpymb(inputstr);/* 有匹配结果 */if (res != 0){/* 展示所有匹配结果 */for (index=0; index<(res&0x7F); index++){// printf("拼音: %s\r\n", t9.pymb[index]->py);// printf("结果: %s\r\n", t9.pymb[index]->pymb);}}/* 无匹配结果 */else{/* Do something */}
}

51.2.2 实验应用代码
本章实验的应用代码,如下所示:

int main(void)
{uint8_t inputstr[7];uint8_t inputlen;uint8_t result_num;uint8_t cur_index;uint8_t t = 0;uint8_t key;uint8_t pykey;NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_4);  /* 设置中断优先级分组为组4 */sys_apm32_clock_init(15);                         /* 配置系统时钟 */delay_init(120);                                  /* 初始化延时功能 */usart_init(115200);                               /* 初始化串口 */led_init();                                       /* 初始化LED */key_init();                                       /* 初始化按键 */lcd_init();                                       /* 初始化LCD */tp_dev.init();                                    /* 初始化触摸屏 */my_mem_init(SRAMIN);                              /* 初始化内部SRAM内存池 */exfuns_init();                                    /* 为exfuns申请内存 */f_mount(fs[0], "0:", 1);                          /* 挂载SD卡 */f_mount(fs[1], "1:", 1);                          /* 挂载NOR Flash */while (fonts_init() != 0)                         /* 检查字库 */{lcd_show_string(30, 50, 200, 16, 16, "Font error!", RED);delay_ms(200);lcd_fill(30, 50, 240, 66, WHITE);delay_ms(200);}RESTART:text_show_string(30, 5, 200, 16, "正点原子APM32开发板", 16, 0, RED);text_show_string(30, 25, 200, 16, "拼音输入法实验", 16, 0, RED);text_show_string(30, 45, 200, 16, "ATOM@ALIENTEK", 16, 0, RED);text_show_string(30, 65, 200, 16, "KEY0:翻页", 16, 0, RED);text_show_string(30, 85, 200, 16, "KEY_UP:清除", 16, 0, RED);text_show_string(30, 105, 200, 16, "输入:        匹配:  ", 16, 0, RED);text_show_string(30, 125, 200, 16, "拼音:        当前:  ", 16, 0, RED);text_show_string(30, 145, 210, 32, "结果:", 16, 0, RED);/* 根据LCD分辨率设置按键大小 */if (lcddev.id == 0x5310){kbdxsize = 86;kbdysize = 43;}else if (lcddev.id == 0x5510){kbdxsize = 140;kbdysize = 70;}else{kbdxsize = 60;kbdysize = 40;}py_load_ui(30, 195);my_mem_set(inputstr, 0, 7);inputlen = 0;result_num = 0;cur_index = 0;while (1){t++;pykey = py_get_keynum(30, 195);               /* 得到触摸屏的输入 */if (pykey != 0)                               /* 有按键按下 */{if (pykey == 1)                           /* 删除键 */{if (inputlen != 0){inputlen--;}inputstr[inputlen] = '\0';}else                                      /* 添加字符 */{inputstr[inputlen] = pykey + '0';if (inputlen < 7){inputlen++;}}if (inputstr[0] != '\0')                  /* 有字符,需要进行匹配 */{pykey = t9.getpymb(inputstr);         /* 获取匹配结果 */if (pykey != 0)                       /* 有匹配结果 */{result_num = pykey & 0x7F;cur_index = 1;if ((pykey & 0x80) != 0){inputlen = pykey & 0x7F;inputstr[inputlen] = '\0';if (inputlen > 1){result_num = t9.getpymb(inputstr);}}}else                                  /* 无匹配结果 */{inputlen--;inputstr[inputlen] = '\0';}}else{cur_index = 0;result_num = 0;}
/* 清除之前的显示 */lcd_fill(30 + 40, 105, 30 + 40 + 48, 110 + 16, WHITE);
/* 显示匹配结果 */lcd_show_num(30 + 144, 105, result_num, 1, 16, BLUE);
/* 显示有效的字符串 */text_show_string(30 + 40, 105, 200, 16, 
(char *)inputstr, 16, 0, BLUE);py_show_result(cur_index);                /* 根据索引显示匹配结果 */}if (result_num != 0)                          /* 有匹配结果 */{key = key_scan(0);switch (key){case KEY0_PRES:                       /* 匹配结果翻页 */{if (cur_index < result_num){cur_index++;}else{cur_index = 1;}py_show_result(cur_index);break;}case WKUP_PRES:                       /* 清除输入 */{lcd_fill(30 + 40, 145, lcddev.width - 1, 145 + 48, WHITE);goto RESTART;}}}if (t == 20){LED0_TOGGLE();t = 0;}delay_ms(10);}
}

从上面的代码中可以看出,本实验实验的应用中,通过触摸屏获取拼音的键值,然后调用函数t9. getpymb()进行码表匹配,有匹配结果时,则在LCD上显示匹配结果,若有多个匹配结果,则可通过KEY0按键进行翻页,通过也可通过KEY_UP按键清除输入。
51.3 下载验证
在完成编译和烧录操作后,可以看到LCD上显示了本实验的相关实验信息,通过也显示了T9拼音的输入键盘,此时便可通过键盘输入拼音,随即便可在LCD上看到输入拼音对应的汉字匹配结果,若有多个匹配结果,例如输入“64”,则会匹配到拼音“mi”和“ni”,此时按下KEY0按键,可对多个匹配结果进行翻页,若按下KEY_UP按键则会清除所有输入。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/689240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像识别之ResNet(结构详解以及代码实现)

前言 在人工智能的浪潮中&#xff0c;深度学习已经成为了推动计算机视觉、自然语言处理等领域突破的关键技术。在这众多技术中&#xff0c;ResNet&#xff08;残差网络&#xff09;无疑是一个闪耀的名字。自从2015年Kaiming He等人提出ResNet架构以来&#xff0c;它不仅在图像…

安全防御-第五次

新建NAT策略 新建NAT策略 双机热备 FW1 FW3 新建带宽策略 办公区限流

百度百家号旋转验证码识别研究

最近研究了一下图像识别&#xff0c;一直找到很好的应用场景&#xff0c;今天我就发现可以用百度的旋转验证码来做一个实验。没想到效果还挺好&#xff0c;下面就是实际的识别效果。 1、效果演示 2、如何识别 2.1准备数据集 首先需要使用爬虫&#xff0c;对验证码图片进行采…

引入成熟的Pytest自动化测试框架

虽然我们能使用脚本编写自动化测试框架&#xff0c;但没有必要重复找车轮子&#xff0c;引入成熟的自动化测试框架即可&#xff0c; Pytest是目前最成熟、功能最全面的Python测试框架之一&#xff0c;简单灵活、易于上手&#xff0c;可完全兼容其他测试框架如unitest&#xff…

Unittest+Selenium模块驱动自动化测试实战

UnittestSelenium自动化测试框架使用模块驱动测试模型将冗余的代码封装成类&#xff0c;且基于PageObject的自动化设计模式&#xff0c;通过分层的方式将页面对象、操作、业务分开处理。 1、首先创建自动化测试框架的文件模块架构&#xff0c;创建common、base、testcase、rep…

The Captainz NFT 概览与数据分析

作者&#xff1a;stellafootprint.network 编译&#xff1a;cicifootprint.network 数据源&#xff1a;The Captainz NFT Collection Dashboard The Captainz 是 Memeland 的旗舰系列&#xff0c;由 9,999 个实用性极强的 PFP 组成。持有者在 Memeland 宇宙中展开了一场神…

SG-9101CB(可编程+105℃晶体振荡器)

SG-9101CB 系列是一款高精度可编程性的晶体振荡器&#xff0c;能够在0.67 MHz至170 MHz的频率范围内以1ppm的步长精确调整频率。这款振荡器支持宽范围的电源电压&#xff08;1.62 V至3.63V&#xff09;&#xff0c;并提供使能&#xff08;OE&#xff09;或待机&#xff08;ST&a…

App启动优化笔记 1

app大致的启动流程。有Launcher进程,system_server进程,zygote进程,APP进程。 Launcher进程:启动activity来启动应用 system_server进程:(ams是其中的一个binder):发送一个socket消息给Zygote。 zygote进程:收到消息后,fork新的进程,---》app进程启动 APP进程:…

【复现】Panalog大数据日志审计系统 RCE漏洞_51

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 Panalog大数据日志审计系统定位于将大数据产品应用于高校、 公安、 政企、 医疗、 金融、 能源等行业之中&#xff0c;针对网络流…

【AGI视频】Sora的奇幻之旅:未来影视创作的无限可能

在五年后的未来&#xff0c;科技的发展为影视创作带来了翻天覆地的变化。其中&#xff0c;Sora视频生成软件成为了行业的翘楚&#xff0c;引领着全新的创作潮流。Sora基于先进的Transformer架构&#xff0c;将AI与人类的创造力完美结合&#xff0c;为观众带来了前所未有的视听盛…

【ArcGIS微课1000例】0103:导出点、线、面要素的折点坐标值

点要素对应的是一个或者若干个坐标,线要素对应的是对个坐标值对应的点连起来,面要素是多个坐标值对应的点连起来构成的封闭多边形。本文讲述导出点的坐标值。 文章目录 一、点要素坐标导出1. 计算点坐标2. 导出点坐标二、线要素坐标导出1. 生成线要素折点2. 计算折点坐标3. 导…

海外媒体发稿:8个提升影响力的日韩地区媒体发稿推广策略-华媒舍

在今天的数字化时代&#xff0c;媒体发稿推广成为企业和个人增加影响力的重要方式。特别是在日韩地区&#xff0c;这个拥有庞大媒体市场和活跃社交媒体用户的地区&#xff0c;正确的推广策略将对影响力的提升起到关键作用。我们将介绍8个提升影响力的日韩地区媒体发稿推广策略。…

Python面向对象:什么是面向对象程序设计

编程范式 编程即写程序or代码&#xff0c;具体是指程序猿用特定的语法数据结构算法编写代码&#xff0c;目的是用来告诉计算机如何执行任务。 如果把编程的过程比喻为练习武功&#xff0c;那么编程范式指的就是武林中的各种流派&#xff0c;而在编程的世界里最常见的两大流派就…

微信小程序:实现微信小程序应用首页开发 (本地生活首页)

文章目录 小程序应用页面开发1、创建项目并配置项目目录结构配置导航栏效果三、配置 tabBar 效果四、轮播图实现4.1 创建轮播图数据容器4.2 定义一个请求轮播图数据的接口4.3 页面加载调用 数据请求接口 五、九宫格实现5.1 获取九宫格数据5.2 结构和样式的完善六、图片布局实现…

基于 Amazon EC2 和 Amazon Systems Manager Session Manager 的堡垒机的设计和自动化实现

1. 背景 在很多企业的技术实现中&#xff0c;由于数据安全和合规性要求&#xff0c;大部分的应用服务都部署在私有云环境或专用网络中。为了满足开发人员和运维团队从本地数据中心安全访问云上资源的需求&#xff0c;采用堡垒机作为一种有效的解决方案变得尤为重要。 堡垒机的…

【漏洞复现】H3C SecParh堡垒机任意用户登录漏洞

Nx01 产品简介 H3C SecParh堡垒机是一款专业用于安全管理的堡垒机产品&#xff0c;它通过强大的访问控制功能和安全审计功能&#xff0c;实现对网络服务器的远程安全管理和监控。 Nx02 漏洞描述 H3C SecParh堡垒机的get_detail_view.php中存在任意用户登录漏洞。攻击者可以构建…

Robotframework 的简介及其工作原理~

下面通过官网和网上资料来简单介绍下Robotframework及其工作原理。 官方说明&#xff1a; Robot Framework is a generic test automation framework for acceptance testing and acceptance test-driven development (ATDD). It has easy-to-use tabular test data syntax a…

CentOS 7.9如何禁止内核自动更新升级

要在 CentOS 7.9 系统中禁止内核自动更新&#xff0c;你可以通过配置 YUM&#xff08;Yellowdog Updater, Modified&#xff09;来实现。这里有几种方法可以阻止内核自动更新&#xff1a; 方法 1: 使用 exclude 选项在 YUM 配置中 编辑 YUM 的配置文件 /etc/yum.conf&#xff…

IO 流分类

一、File File 类&#xff08;磁盘操作&#xff09;可以用于表示文件和目录的信息&#xff0c;但是它不表示文件的内容。递归地列出一个目录下所有文件&#xff1a; public static void listAllFiles(File dir) {if (dir null || !dir.exists()) {return;}if (dir.isFile())…

普源(RIGOL) DHO914S示波器 简单开箱评测

普源精电(RIGOL) DHO914S 12bit数字示波器 简单开箱评测。 旧的示波器感觉不好用&#xff0c;所以换个新的&#xff0c;看中了普源的这款&#xff0c;主要看中它便携支持PD供电&#xff0c;还有伯德图功能&#xff0c;以及12bit的垂直分辨率。如果你对我上面说的点没需求&…