【正点原子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按键则会清除所有输入。

你可能感兴趣的:(stm32,julia,嵌入式硬件)