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 例程功能
- 程序運行后,在LCD上顯示T9拼音輸入法的鍵盤及相關信息
- 觸摸鍵盤上的按鍵,可進行拼音輸入
- 按下KEY0按鍵或KEY_UP按鍵,可分別進行匹配結果翻頁或清除輸入的操作
- 可使用USMART對輸入法進行調試
- LED0閃爍,指示程序正在運行
59.1.2 硬件資源 - LED
LED0 - PF9 - 按鍵
KEY0 - PE4
KEY_UP - PA0 - 正點原子 2.8/3.5/4.3/7/10寸TFTLCD模塊(僅限MCU屏,16位8080并口驅動)
- TFTLCD模塊上的觸摸屏(電阻式、電容式)
- SD卡(SDIO驅動)
- 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按鍵則會清除所有輸入。