【正点原子STM32连载】第五十九章 T9拼音输入法实验(Julia分形)实验 摘自【正点原子】APM32F407最小系统板使用指南

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

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

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

59.1 硬件设计
59.1.1 例程功能

  1. 程序运行后,在LCD上显示T9拼音输入法的键盘及相关信息
  2. 触摸键盘上的按键,可进行拼音输入
  3. 按下KEY0按键或KEY_UP按键,可分别进行匹配结果翻页或清除输入的操作
  4. 可使用USMART对输入法进行调试
  5. LED0闪烁,指示程序正在运行
    59.1.2 硬件资源
  6. LED
    LED0 - PF9
  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驱动)
    59.1.3 原理图
    本章实验使用的T9拼音输入法库为软件库,因此没有对应的连接原理图。
    59.2 程序设计
    59.2.1 T9拼音输入法库的使用
    正点原子提供的T9拼音输入法库包含三个文件,分别为:pyinput.c、pyinput.h和pymb .h,本章实验配套的实验例程中已经提供了这三个文件,并且针对正点原子APM32F407最小系统板进行了移植适配,在使用时,仅需将这三个文件添加到自己的工程即可,如下图所示:
    在这里插入图片描述

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

#include "apm32f4xx.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 */
    }
}

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

int main(void)
{
    /* 仅保留关键代码,其余代码省略 */
    
RESTART:
    while (1)
    {
    		/* 获取触摸点对应的键值 */
    		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;
    				}
    				/* 无匹配结果 */
    				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;
    				}
    			}
    		}
    }
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Oracle中文显示???????解决办法

项目场景&#xff1a; Oracleoracle中文显示???解决办法 问题描述 原因分析&#xff1a; Oracle中文显示???通常是由于字符集不匹配或者编码问题导致的。当数据库中的数据使用的是某种字符集&#xff0c;而客户端或者应用程序使用的是另一种字符集时&#xff0c;就会出…

网站监控有什么用,什么是网站监控?

网站内容监控是指采用数据采集、人工智能、云计算、机器学习、语义分析等技术&#xff0c;结合网站内容监管指标&#xff0c;针对网站内容安全、信息发布、办事服务、互动交流、功能设计、创新发展等指标进行实时监测&#xff0c;以防止网站页面内容被篡改&#xff0c;出现黄、…

tp8 使用rabbitMQ(4)路由模式

路由模式 在第三节中我们使用的 交换机的 fanout 把生产者的消息广播到了所有与它绑定的队列中处理&#xff0c;但是我们能不能把特定的消息&#xff0c;发送给指定的队列&#xff0c;而不是广播给所有队列呢&#xff1f; 如图&#xff0c;交换机把 orange 类型的消息发送给了…

医保线上购药系统:代码驱动的医疗创新

医保线上购药系统&#xff0c;这是一个融合技术和医疗的创新典范。本文将通过简单的技术代码示例&#xff0c;为您揭示这一系统是如何通过技术驱动医疗创新&#xff0c;为用户提供更智能、便捷的健康管理体验的。 1. 前端界面开发 使用React框架&#xff0c;我们可以轻松构建…

node-red - 节点实战总结1

node-red - 节点实战总结1 二、功能2.1 循环(for\while) 三、网络四、序列五、解析六、存储七、协议7.1 modbus协议7.2 opcua 八、formats8.1 时间格式化与时区转换 二、功能 2.1 循环(for\while) 安装节点node-red-contrib-loop-processing,该节点支持三种方式的循环&#xf…

Table和HashBasedTable的使用案例

------------------- 1.普通使用 package org.example.testhashbasedtable;import com.google.common.collect.HashBasedTable; import com.google.common.collect.Table;import java.util.Map;public class TestHashBasedTable {public static void main(String[] args) {Ta…

贵金属交易指南:如何在市场中获利?

贵金属市场一直以来都是投资者追逐利润的热门选择&#xff0c;然而&#xff0c;贵金属市场波动较大&#xff0c;在市场中获利并非易事。想要成功&#xff0c;需要理解市场动态和采取适当的策略。万洲金业将为您提供一些实用的贵金属交易指南&#xff0c;帮助您在市场中获利。 …

2023年 TOP5 知识库软件大盘点

在当今信息爆炸的时代&#xff0c;企业需要有效管理和组织海量的知识和信息。知识库软件成为了企业获取、存储和共享知识的重要工具。随着技术的不断进步和市场竞争的加剧&#xff0c;2023年很多知识库软件突破重围&#xff0c;在SaaS行业有很高的知名度。接下来就盘点一下2023…

希宝猫罐头怎么样?专业人士告诉你什么牌子的猫罐头口碑好

嗨&#xff0c;大家好&#xff01;我是一家猫咖店的店长&#xff0c;已经和猫咪们打交道6年了。在这段时间里&#xff0c;我尝试过不下30种不同的猫罐头&#xff0c;所以我在猫罐头方面还是有一些经验的。今天&#xff0c;我想和大家分享一些值得购买的猫罐头&#xff0c;以及一…

2023年APMCM亚太杯数学建模竞赛A题思路解析

2023年APMCM亚太赛 A 题&#xff1a; 果实采摘机器人的图像识别 Image Recognition for Fruit-Picking Robots 【请电脑打开本文链接&#xff0c;扫描下方名片中二维码&#xff0c;获取更多资料】 翻译 中国是世界上最大的苹果生产国&#xff0c;年产量约为3500万吨。与此同…

悦榕集团以养修概念持续引领健康出行

诚邀宾客共赴身、心、灵的回归之旅 【2023年11月22日&#xff0c;中国&#xff0c;上海】作为全球领先的独立酒店集团&#xff0c;悦榕集团一直以来始终秉承可持续发展理念&#xff0c;为宾客打造多层次的身、心、灵平衡之旅。出于对当代人生活方式变化和旅行需求的敏锐洞察&am…

林业无人机如何提升巡山护林效率?

在郁郁森林之上&#xff0c;一架无人机正盘旋在上空时刻观察着林区的情况。凭借复亚智能的全自动巡检系统&#xff0c;无人机巡山护林的巡视范围和反馈实时性得到了显著提升。 一、林业无人机&#xff1a;科技赋能森林防火 秋季林区时常发生火灾&#xff0c;林业无人机在森林防…

Netty 模型理解

参考文章 1 参考文章 2 官网API文档 Reactor模型 Netty模型 Netty主要基于主从Reactor多线程模型进行了一定的修改&#xff0c;该模型包括以下几个组件&#xff1a; MainReactor&#xff08;主Reactor&#xff09;&#xff1a;负责处理客户端的连接请求。它监听服务器上的端口…

【学习笔记】GameFramework的非官方实例TowerDefense-GameFramework-Demo的流程

一、从游戏开始到打开一个Menu GameStart.unity GameEntry.Builtin.cs ProcedureComponent.cs GameStart.unity->GameFramework->Builtin->Procedure ProcedureLaunch.cs ProcedureSplash.cs ProcedurePreload.cs ProcedureLoadingScene.cs DataTables/Scene.txt Pro…

【日常总结】如何禁止浏览器 http自动跳转成https

一、场景 二、问题 三、解决方案 3.1 chrome 浏览器 3.2 edge 浏览器&#xff1a; 3.3 Safari 浏览器 3.4 Firefox 浏览器 3.5 Microsoft Edge 一、场景 公司网站 http:// 谷歌浏览器中自动转换成 https:// 导致无法访问 二、问题 nginx配置ssl 443接口&#xff0c; ht…

MFC设置单选按钮点击自己可以可选和不可选

mfc是c的一个框架&#xff0c;可谓是经久不衰。最近博主遇到一个问题&#xff0c;就是单选按钮点击自己可以设置可选和不可选&#xff0c;貌似类似复选框一样&#xff0c;但领导分发的任务上要求的是用单选按钮实现复选框这种类似功能&#xff0c;实现效果类似如下图&#xff1…

葡萄采收时节分类,其中大有学问

葡萄在酿造葡萄酒的时候有一个关键的因素那就是葡萄的采收期&#xff0c;符合采收时节的葡萄大部分属于成熟好的葡萄&#xff0c;那么&#xff0c;云仓酒庄的品牌雷盛红酒分享这样的葡萄酿出来的酒自然优质。正是因为采收时分不同&#xff0c;根据采摘的不同&#xff0c;给不同…

浅谈国内智能制造现状和未来发展趋势

进人二十一世纪&#xff0c;互联网、新能源、大数据等技术的迅猛发展&#xff0c;从而使得社会发生巨大的改变&#xff0c;人类生产工业发生变革。为应对全球挑战&#xff0c;我国根据发展的实际情况&#xff0c;提出《中国制造2025》的国家战略规划。毋庸置疑的是&#xff0c;…

Redis Cluster主从模式详解

在软件的架构中&#xff0c;主从模式&#xff08;Master-Slave&#xff09;是使用较多的一种架构。主&#xff08;Master&#xff09;和从&#xff08;Slave&#xff09;分别部署在不同的服务器上&#xff0c;当主节点服务器写入数据时&#xff0c;同时也会将数据同步至从节点服…

无人机巡检如何做到实时识别,从数据到模型全流程解读

在数字化和自动化飞速发展的今天&#xff0c;AI识别算法正在加速进入行业生产系统。 基于巡检数据的智能开发&#xff0c;识别算法突破性进展的核心驱动力在于需求——从全天候巡视的平安城市&#xff0c;到潮汐变化的交通网络&#xff0c;从广阔的水域&#xff0c;到繁忙的街道…