摘 要:SPCE061A是凌陽公司設計的一款16位單片機,該單片機資源豐富,具有較高的性價比。本方案在SPCE061A單片機平臺上構造了簡易的拼音輸入法,并以SPLC701B液晶顯示模組為輸入輸出設備,實現了漢字、英文字母、數字符號等文本信息的輸入。
關鍵詞: 單片機 SPCE061A 輸入法
1 引言
中文輸入是手機、PDA等手持終端的基本功能,研究基于單片機的中文輸入方法,對于手持電子產品的開發具有一定的現實意義。SPCE061A是凌陽科技研發生產的性價比很高的一款十六位單片機,具有易學易用的指令系統和集成開發環境,為軟件開發提供了方便的條件。本方案利用凌陽大學計劃推出的SPLC701B液晶顯示模組作為輸入輸出設備,在SPCE061A單片機上實現了拼音輸入法,可實現漢字、英文字母、數字符號等文本信息的輸入。本方案可以為基于單片機的產品開發、中文輸入法研究等提供輔助和參考。
2 系統硬件設計
對于文本輸入系統,除了主控制器外,至少還要包括輸入設備和顯示設備。系統采用SPCE061A單片機作為主控制器,而輸入和顯示都通過SPLC701B液晶顯示模組(集成了4×4鍵盤)實現,系統的硬件結構框圖如圖 2-1所示。

圖 2-1 系統硬件結構圖
SPCE061A單片機作為主控芯片,負責構建拼音輸入法的數據結構,并在單片機內部Flash中保存漢字的拼音編碼。SPCE061A接收4×4按鍵輸入,并通過LCD顯示交互內容,從而實現用戶操作界面。
2.1 SPCE061A芯片特性
2.1.1 SPCE061A簡介
SPCE061A是一款基于u'nSP內核的16位單片機,其芯片特性如下:
● 工作電壓:內核工作電壓VDD為3.0~3.6V(CPU),I/O口工作電壓VDDH為VDD~5.5V(I/O);
● CPU時鐘:0.32MHz~49.152MHz;
● 內置2K字SRAM和32K閃存ROM;
● 系統處于備用狀態下(時鐘處于停止狀態),耗電小于2μA@3.6V;
● 具備觸鍵喚醒的功能;
● 32位通用可編程輸入/輸出端口;
● 2個16位可編程定時器/計數器(可自動預置初始計數值);
● 7通道10位電壓模-數轉換器(ADC)和單通道聲音模-數轉換器;
● 2個10位DAC(數-模轉換)輸出通道;
● 14個中斷源可來自定時器A / B,時基,2個外部時鐘源輸入,鍵喚醒;
● 具備串行設備接口;
● 低電壓復位(LVR)功和低電壓監測(LVD)功能;
● 內置在線仿真(ICE,In- Circuit Emulator)接口。
SPCE061A的內部結構框圖如圖 2-2所示。

圖 2-2 SPCE061A內部結構圖
2.2 SPLC701B液晶顯示模組特性
SPLC701B液晶顯示模組采用基于凌陽SPLC701B芯片的點陣液晶顯示器,具有120×52顯示分辨率,內置漢字字庫和半角字符庫,可軟件調節對比度(32級),支持串行和并行控制方式。模組同時配備4×4鍵盤供用戶使用。液晶顯示器的基本特性見下表:
表 2.1 液晶顯示器特性參數
| 顯示模式 | 1. 4行10列全角字符(11×12點陣字符),同時支持半角字符(5×12點陣字符)顯示。 2. 120×52點陣圖形顯示。 3. 14段圖標顯示。 上述三種模式可同時顯示。 |
|
| 顯示器尺寸 | 34.5 (寬)× 33.3 (高)× 1.91 (厚) mm |
| 可視區尺寸 | 30.5 (寬)× 23.4 (高) mm |
| 點大小 | 0.2 (寬)× 0.303 (高) mm |
| 像素尺寸 | 0.22 (寬)× 0.323 (高) mm |
模組包括LCD顯示器和4×4鍵盤兩個部分,LCD與鍵盤可以各自獨立使用,互不影響。
2.3 硬件電路
2.3.1 SPCE061A最小系統
本方案使用SPCE061A精簡開發板(61板)作為單片機最小系統。61板包括SPCE061A芯片外圍的基本模塊,有:晶振輸入模塊(OSC)、鎖相環外圍電路(PLL)、復位電路(RESET)、指示燈(LED)等,如下圖所示。

圖 2-3 SPCE061A最小系統
2.3.2 LCD顯示器
SPLC701B液晶顯示模組提供的LCD顯示器采用凌陽SPLC701B液晶驅動芯片,點陣分辨率為120*52,內置中文字庫,可顯示漢字、字符、圖形等。該LCD顯示器支持串行、8位并行、4位并行等多種接口方式,為簡化電路連接,這里使用串行接口方式,如圖 2-4所示。

圖 2-4 SPCE061A與LCD顯示器的硬件連接
2.3.3 4×4鍵盤
SPLC701B液晶顯示模組附帶4×4鍵盤,可直接與SPCE061A的I/O端口連接。其電路原理圖如下:

圖 2-5 4×4鍵盤
3 系統軟件設計
本方案的軟件系統主要包含下列模塊:
按鍵掃描:掃描4×4鍵盤,獲取鍵值。包括Key.asm程序文件和Key.inc、Key.h頭文件。
LCD顯示:LCD顯示驅動程序,實現文本、圖形顯示等功能。該模塊包括LCD701_Drv.asm、LCD701_Functions.c程序文件,以及LCD701_Cfg.inc、LCD701_Defs.h、LCD701_Drv.h、LCD701_Functions.h等頭文件。
文字輸入:通過4×4鍵盤輸入漢字(拼音輸入法)、字符、數字等,并在LCD上顯示出來,以便于用戶編輯通訊錄條目。該模塊包括PY_IME.c、PY_Interface.c程序文件,以及PY_Index.h、PY_MB.h、PY_IME.h、PY.h等頭文件。
3.1 各模塊程序說明
3.1.1 按鍵掃描模塊
按鍵掃描是在TMB_128Hz中斷服務程序中進的,采用逐行掃描方式獲取鍵值。4×4鍵盤的左面3列采取手機按鍵排布方式,最右一列的4個按鍵分別被定義為"向上"、"向下"、"確定"和"取消",如圖 3-1所示。

圖 3-1 4*4按鍵定義
3.1.2 LCD顯示模塊
LCD顯示部分采用SPLC701B液晶顯示模組附帶的驅動程序。該驅動程序的架構如圖 3-2所示。

圖 3-2 LCD驅動程序架構
程序中用到的LCD驅動函數主要有:
void LCD701_Init(void); // LCD顯示初始化
void LCD701_ClrScr(unsigned Part); // 清除屏幕顯示內容
void LCD701_SetTextPos(unsigned Row, unsigned Col); // 設置文本顯示位置
void LCD701_SetTextMode(unsigned TextMode); // 設置文本顯示模式
void LCD701_Print(const unsigned char *String); // 在屏幕上打印字符串
3.1.3 文字輸入模塊
拼音輸入法是本方案的核心內容,它負責將鍵盤輸入的數字序列轉換為漢字。拼音輸入法大體可以分為兩個步驟:首先將鍵盤輸入的數字序列轉換為拼音編碼,然后搜索到該拼音編碼對應的漢字編碼。
拼音編碼以索引表的形式保存在PY_Index.h中,每個拼音編碼的數據結構為:
typedef struct
{
const char *T9; // 按鍵數字序列
const char *PY; // 拼音編碼字符串
const char *MB; // 該拼音對應的漢字碼表地址
}T9PY_IDX;
所有的拼音編碼組成一個數組常量T9PY_index[],每個拼音編碼作為數組中的一個元素存在,下面是該數組的片段:
const T9PY_IDX T9PY_index[] ={
{"2","a",PY_mb_a},
{"3","e",PY_mb_e},
…… ……
{"224","bai",PY_mb_bai},
{"224","cai",PY_mb_cai},
…… ……
}
當用戶通過鍵盤輸入一個數字序列后,程序將遍歷拼音編碼數組中的每個元素,找到與這個數字序列對應的所有拼音編碼。例如輸入數字"224",遍歷T9PY_index數組將獲得"bai"和"cai"兩組拼音編碼,程序將這些匹配的拼音通過LCD顯示出來,供用戶選擇。
在用戶選定了拼音之后,程序就可以獲得該拼音編碼對應的漢字碼表地址。例如選擇了拼音"cai",那么程序將獲得該拼音拼音編碼對應的漢字碼表地址PY_mb_cai。漢字碼表是具有相同讀音的漢字組成的編碼數組,例如PY_mb_cai數組的定義如下:
const unsigned char PY_mb_cai []={"@猜才材財裁采彩睬踩菜蔡"};
程序將漢字碼表數組中的所有漢字顯示在LCD上,這樣用戶就可以通過鍵盤選取所需的漢字了。由于LCD可顯示的字數有限,這里采用分頁顯示的辦法,每頁顯示8個漢字供用戶選擇,并可利用鍵盤中的"Up"和"Dn"鍵上下翻頁。
用戶在錄入文本時,除需要輸入中文外,也可能需要輸入英文、數字以及符號等。因此,將4×4鍵盤的一些特定按鍵定義為英文、數字等輸入鍵,從而構成了完整的文本輸入模塊。文字輸入模塊的程序流程如下:

圖 3-3 文字輸入模塊程序流程
4 操作說明
本系統實現的輸入法可以方便地實現中文、英文字母、數字、符號的混合輸入。與手機鍵盤類似,英文字母a~z分配在2~9這幾個數字鍵上,如下圖所示:

圖 4-1 按鍵與字母映射關系
4.1 輸入漢字
當輸入漢字時,連續按拼音字母對應的數字鍵,LCD將顯示所有匹配的拼音。按Up或Dn鍵選中所需的拼音,再按確定鍵即可進入漢字選擇狀態。LCD將分頁顯示該拼音對應的所有漢字,每個漢字上方有一個數字,按相應的數字鍵可以選中所需的漢字,按Up和Dn可上下翻頁。例如,輸入漢字"書",需要進行如下操作:
"書"字的拼音編碼為"shu",因此依次按數字鍵"748",LCD將顯示與之對應的所有拼音編碼:

圖 4-2 輸入拼音
按Up或Dn鍵,將光標切換到"shu"的位置,再按"確定"鍵,LCD將顯示拼音"shu"對應的漢字列表:

圖 4-3 選擇漢字
直接按數字鍵"1"即可選定漢字"書"。如果需要的漢字沒有出現在當前頁,則可利用Up和Dn鍵上下翻頁。
4.2 輸入英文字母
以輸入英文字母"r"為例,首先按"r"對應的數字鍵"7",LCD將顯示該數字鍵對應的所有字母:

圖 4-4 選擇英文字母
按Up或Dn鍵,將光標移動到"r"的位置,再按"0"鍵即可選定字母"r"。
4.3 輸入數字和符號
當輸入數字時,需要先按數字鍵,再按"#"鍵。例如輸入數字3,則依次按"3#"即可。
此外,輸入法還支持一些常用符號輸入。按"1"鍵,LCD將顯示符號列表:

圖 4-5 輸入符號
每個符號上方有一個數字,按0~8數字鍵可輸入對應的符號,按"#"鍵則輸入數字"1"。例如輸入符號"@",需要依次鍵入"03"。
5 參考文獻
[1] 羅亞非.凌陽16位單片機應用基礎[M]. 北京:北京航空航天大學出版社,2003
[2] 薛鈞義 張彥斌 虞鶴松 樊波 凌陽十六位單片機原理及應用[M] 北京航空航天出版社 2003年2月第1版
[3] 譚浩強 C程序設計[M] 清華大學出版社 1999年12月第2版
[4] 沈美明 溫冬蟬 IBM-PC匯編語言程序設計[M] 清華大學出版社 2001年8月第二版
[5] 實驗指導書 凌陽大學計劃資料
[6] 凌陽大學計劃網站www.unsp.com.cn