版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 畢業(yè)設計(論文)說明書題 目: 基于單片機的lcd中文 輸入系統(tǒng)設計 院 (系): 電子工程學院 專 業(yè): 學生姓名: 學 號: 指導教師單位: 姓 名: 職 稱: 題目類型: 理論研究 實驗研究 工程設計 工程技術研究 軟件開發(fā) 年 5 月 25日摘 要隨著我國嵌入式技術的迅猛發(fā)展,中文漢字的輸入與顯示在高端電子產(chǎn)品以及智能終端中的應用越來越廣泛。目前廣泛應用于數(shù)字終端的中文輸入法是nokia的t9輸入法、motorola的itap輸入法和erics-son的字能輸入法。目前,以lcd和數(shù)字鍵盤實現(xiàn)的人機交互式界面在智能終端中廣泛采用,在不同的應用場合,對人機界面的要求也不同,一些情況下只
2、要求簡單參數(shù)的顯示和選擇,而在一些信息終端中,還要求文字的輸入。本設計方案在at89c55wd單片機平臺上構造簡易的拼音輸入法,輸入形式是用戶通過數(shù)字鍵盤輸入一個數(shù)字串,lcd顯示出該數(shù)字串對應的各種拼音讓用戶進行選擇, 拼音數(shù)組中的每一個元素都指向一個同音漢字串。用戶在同音漢字串中選擇一個漢字就可以得到該漢字的gb2312編碼。通過這個gb2312碼可以在漢字點陣字模庫中檢索到該漢字字模的起始位置,最后用帶字庫的12864點陣式lcd模塊為輸出顯示設備,實現(xiàn)漢字、英文字母、數(shù)字,標點符號等文本信息的輸入。關鍵字:at89c55wd;拼音輸入法;ts12864a-3液晶;中文字庫原理abstr
3、actwith the rapid development of embedding technology, the inputting and displaying of the chinese character in high-end electronic products, as well as the application of intelligent terminals are widely used more and more. at present, the number of terminals are widely used in the inputting method
4、 of chinese character which are nokias t9 inputting method, motorolas itap inputting method and erics-sons words inputting method. at present, lcd and digital keyboard to achieving the man-machine interactive interface are widely used in intelligent terminals. in different applications, the requirem
5、ents of human-computer interface is different, some cases require only some simple showing and choosing of parameters, and some information terminals, as well as require the inputting about text. the design in at89c55wd single-chip platform makes up simple phonetic inputting method, the inputting fo
6、rm is to enter a number string through the numeric keypad by users, the system shows the number of strings which corresponds to the alphabet ,choosing by users, the array of a homonym elements point to a string of chinese characters. when users choose r a chinese character can be encoded in the gb23
7、12 chinese characters. it can retrieve the starting position of the character matrix through the gb2312 chinese character dot-matrix code matrix in the database . finaly the 128 64 dot matrix lcd module is used for the output showing device, to realize the inputting about the chinese characters, eng
8、lish letters, numbers, punctuation marks, text input and so on. key words: at89c55wd; pinyin input method; ts12864a-3 lcd; chinese font principle目 錄引言11 設計任務及要求21.1 設計任務21.2 設計要求21.3 設計思路21.4 方案選擇與論證21.4.1 人機接口模塊的選擇21.4.2 拼音輸入法方案31.4.3 12864液晶31.5 工作原理簡介31.6 系統(tǒng)原理框圖42 硬件設計42.1 44按鍵42.2 at89c55wd單片機52
9、.3 12864液晶63 軟件設計83.1 按鍵掃描模塊93.2 lcd顯示模塊93.3 文字輸入模塊104 系統(tǒng)制作過程164.1 硬件制作和調試164.2 軟件調試174.2.1 按鍵部分調試174.2.2 12864lcd部分174.2.3 中文全拼輸入法調試185 操作說明195.1 輸入漢字205.2 輸入英文字母215.3 輸入數(shù)字215.4 輸入符號225.5 退格鍵225.6 總效果圖226 結論22謝 辭24參考文獻25附錄一 電路原理圖26附錄二 電路pcb26附錄三 顯示過程圖27附錄四 實物圖28引言隨著3c的融合和3g牌照的發(fā)放,智能終端設備,如手機,小靈通,機頂盒,
10、pda,手持終端,智能電話,嵌入設備,工業(yè)控制設備,信息家電,將進入尋常百姓家中,中文人機交互界面是這類智能終端設備所必須具備的功能,越來越多的用戶還要求嵌入式系統(tǒng)支持中文文本輸入。目前嵌入式系統(tǒng)中比較典型的中文輸入法有諾基亞的t9、摩托羅拉的itap、愛立信的字能等,這些輸入法的輸入設備一般是數(shù)字鍵09和一些功能鍵組成。除了支持中文的拼音和筆畫外還支持諸如日文、韓文等其他國家的語言。中文輸入一直是中文語言處理中的重要課題。中文語言模型對中文輸入能起到非常大的指導作用。但是長久以來,中文語言模型由于規(guī)模巨大,占用資源多,很難在嵌入式設備上得到應用。傳統(tǒng)的搜索算法由于消耗內存較多,也不適合于在嵌
11、入式設備上實現(xiàn)。本文提出了一種將統(tǒng)計語言模型應用到嵌入式設備上的方案。在實際手機平臺上開發(fā)出了相應的輸入法。伴隨著3g時代的來臨,用戶對各種只能終端設備人機交互方式提出了更高的要求。評測表明,該輸入法比傳統(tǒng)的輸入法能顯著減少按鍵次數(shù),提高了輸入的效率。 1 設計任務及要求1.1 設計任務(1)用單片機作為主控制器;(2)用lcd顯示出來;(3)具有全拼輸入法功能;(4)具有英文、數(shù)字和標點符號的輸入功能;(5)具有模糊音輸入功能;(6)具有五筆、筆畫或區(qū)位碼輸入法功能(選做)。1.2 設計要求(1)掌握單片機電路的設計和使用方法;(2)學習掌握中文字庫原理及使用; (3)確定電路原理圖及系統(tǒng)工
12、作原理;(4)制作pcb板,硬件安裝;(5)拼音輸入法的設計;(6)偉福軟件仿真運行:仿真器與目標板聯(lián)調;(7)程序燒寫:仿真運行正常后用編程器將可執(zhí)行文件寫入at89c55wd;(8)脫機運行。1.3 設計思路本課題的預期設計構思是采用s52單片機作為主控制器,輸入通過自制44鍵盤采取逐行掃描方式獲取鍵值,將鍵盤輸入的數(shù)字序列轉換為拼音編碼,然后搜索到該拼音編碼對應的漢字編碼,最后采用lcd12864液晶顯示模組附帶的驅動程序輸出來。為實現(xiàn)以上設計思想,整個系統(tǒng)分為按鍵掃描、拼音輸入法,液晶顯示三部分。1.4 方案選擇與論證1.4.1 人機接口模塊的選擇 方案一:采用44按鍵采用自制的44按
13、鍵,電路配置靈活,線路簡單明了,資源使用少,使用方便,不需要對按鍵進行太多的控制,直接采用查詢的方式獲取鍵值。 方案二:采用pc機鍵盤與單片機連接單片機應用系統(tǒng)通過鍵盤接口與pc機通信必須嚴格按照鍵盤與pc機通信的時序要求并且按照命令字進行應答。當系統(tǒng)上電復位時,單片機應用系統(tǒng)通過鍵盤接口發(fā)送0aah,模擬鍵盤自檢完成信息。鍵盤接口的電氣標準能滿足ttl電平的傳送要求,不需電平轉換,pc機的操作系統(tǒng)內核能夠解釋單片機應用系統(tǒng)通過鍵盤接口傳送來的數(shù)據(jù),免除了編寫串行數(shù)據(jù)接收程序的工作,pc機能夠提供+5v電源。雖然采用pc機鍵盤與單片機連接,使得通過鍵盤可以實現(xiàn)多種符號、數(shù)字的輸入,還可以輸入中
14、文漢字,可以任意輸入大批量的漢字,還有很多其它諸多優(yōu)點,但因為系統(tǒng)采用的是12864顯示,只能顯示4行8列,采用這種方式的優(yōu)勢并不明顯,在硬件上也比較龐大,為了使之簡化和節(jié)約資源,因此選擇了方案一。1.4.2 拼音輸入法方案方案一:采用傳統(tǒng)輸入法傳統(tǒng)輸入法用數(shù)字按鍵29分別代表26個英文字母,如數(shù)字鍵2代表“abc”三個字母,在輸入時,按一下選擇a,按兩下選擇b,按三下選擇c。在輸入拼音的時候需要一一選擇需要的字母來組成拼音,然后根據(jù)拼音來查找到相應碼表,從而找到需要的漢字。方案二:采用t9拼音輸入法這是現(xiàn)代手機比較常用的輸入法,在輸入時,用戶只需按拼音字母所在的按鍵,而不必重復按鍵來選擇具體
15、的字母,程序按算法自動組合成拼音,在輸入完拼音后,此時屏幕會顯示拼音供選擇,可以使用上下鍵選擇需要的拼音,按確定鍵確定所選的拼音,再把選中的拼音對應漢字顯示出來。 方案二大大減少了輸入時按鍵的次數(shù),能夠大大提高輸入效率,因此,本系統(tǒng)選擇了方案二。1.4.3 12864液晶 方案一:采用不帶字庫的液晶采用不帶字庫的液晶,需要從放字庫字模的地方(如內部flash,外部flash)取到一個漢字的字模,字模為16*16點陣,需要lcd_wdata(字模)32次,才能顯示一個漢字。由于每個漢字機內的點陣碼要占32個字節(jié),8912個常用漢字的點陣碼要占約256kb的空間,所以將點陣信息直接存儲在小容量ro
16、m單片機(如52單片機)中不太現(xiàn)實。方案二:采用帶字庫的液晶采用帶字庫的液晶,在寫入液晶時需要lcd_wdata (國標碼1),lcd_wdata (國標碼2),這樣就能顯示一個漢字,對于字符,只需要寫一次。只要傳入所要顯示的英文字符的ascii碼和漢字的區(qū)位編碼,液晶顯示模塊會自動計算國標碼和機內碼,根據(jù)命令立即將字符在指定位置顯示出來。因為題目要求做的是中文輸入,中文基本漢字有五千多,把所有的漢字的字模形式取出來,在理論是可取,在制作上比較累贅,因為點陣太多,所有漢字以點陣形式存儲所需內存大約為256k,較占內存,而在方案二則比較節(jié)省內存空間,也比較簡單明了,所以采取了方案二。1.5 工作
17、原理簡介本系統(tǒng)采用的是全拼輸入法實現(xiàn)漢字的輸入。按下某一個按鍵,首先在查詢程序中讀取鍵值,然后將該鍵值添加到字符末尾,將字符串數(shù)字序列與結構體中的拼音碼表進行遍歷,把所有該數(shù)字序列匹配的拼音都放到結果結構體中,在lcd上顯示所有拼音。根據(jù)選中拼音在拼音碼表中查找對應的漢字串,把漢字的區(qū)位編碼和英文,標點的ascii碼,液晶顯示模塊會自動計算國標碼和機內碼,根據(jù)命令立即將字符在指定位置在lcd上顯示出來。1.6 系統(tǒng)原理框圖at89c55wd單片機作為主控芯片,負責構建拼音輸入法的數(shù)據(jù)結構,并在單片機內部flash中保存漢字的拼音編碼和碼表。at89c55wd接收44按鍵輸入,并通過lcd顯示交
18、互內容,從而實現(xiàn)用戶操作界面。系統(tǒng)原理框圖如圖1.1所示:ts12864a-3lcdat89c55wd單片機 44鍵盤 圖1.1 系統(tǒng)原理框圖2 硬件設計 2.1 44按鍵(1)當按鍵斷開時,由于單片機的端口的輸入內阻很大,在上拉電阻的作用下,此時的單片機輸入端口的電平為5v;當按鍵按下時,上拉電阻的5v電源經(jīng)上拉電阻流向電阻地,此時單片機的輸入端口電平為0v。下圖為按鍵電路原理圖: 圖2.1 按鍵電路(2)一個按鍵開關在閉合與斷開時,由于按鍵的機械特性,其機械觸點不能夠立刻完全閉合或斷開,因此會產(chǎn)生一系列的電平抖動信號。如果沒有對按鍵進行消抖處理,很可能將一次按鍵操作識別成多次按鍵操作,造成
19、系統(tǒng)的不確定性和不可靠性。(3)單片機系統(tǒng)常用的清除抖動的方法有三種:使用r-s觸發(fā)器構成消除抖動開關;使用電阻和電容構成積分器;使用軟件延時消除抖動。前兩種方法屬于硬件消抖,在嵌入式系統(tǒng)通常要求硬件元器件盡可能的少,因此在實際的設計系統(tǒng)中通常采用“軟件消除抖動”。下圖為按鍵按下的整個過程: 10ms 穩(wěn)定期 10ms 圖2.2 按鍵按下過程圖2.2 at89c55wd單片機at89c55wd 是一個低電壓,高性能cmos 8 位單片機,片內含有20kb的可重寫快速閃存存儲器和只讀程序和256 bytes的隨機存取數(shù)據(jù)存儲器(ram),器件采用atmel公司的高密度、非易失性存儲技術生產(chǎn),兼容
20、標準mcs-51指令系統(tǒng),引腳兼容工業(yè)標準89c51和89c52芯片,采用通用編程方式,片內置通用8位中央處理器和flash存儲單元。內置功能強大的微處理器的at89c52可提供許多高性價比的解決方案,適用于多數(shù)嵌入式應用系統(tǒng)。 at89c55wd有40個引腳,32個外部雙向輸入/輸出(i/o)端口,同時內含2個外中斷口,2個16位可編程定時計數(shù)器,2個全雙工串行通信口,2個讀寫口線,片內時鐘電路,at89c55wd采用兩種軟件控制其進入省電睡眠模式的靜態(tài)邏輯工作閑置方式設計,可以用ram、定時/計數(shù)器、串行口和外部中斷喚醒睡眠狀態(tài)而繼續(xù)工作,在睡眠模式下,ram被凍結,其他功能全部停止,直至
21、下個外中斷觸發(fā)或硬件復位方可開始運行。特別是可反復擦寫的flash存儲器可有效地降低開發(fā)成本。它的主要功能如下表所示表2.1 at89c55wd單片機主要功能兼容mcs51指令系統(tǒng)20k可反復擦寫(1000次)flash rom32個雙向i/o口256x8bit內部ram3個16位可編程定時/計數(shù)器中斷時鐘頻率0-33mhz2個串行中斷硬件看門狗(wdt)2個外部中斷源可編程串行通道2個讀寫中斷口線3級加密位片內時鐘電路低功耗睡眠功能4-5.5v工作電壓范圍軟件設置睡眠外中斷喚醒功能 at89c55wd完全兼容mcs51系列指令,因為本設計方案中碼表漢字為四千多,占rom為8k多,平常所用的5
22、1,52系列單片機根本容納不了,所以選擇了rom 20k的at89c55wd單片機,其周圍電路與s52的基本電路一樣。下圖為單片機及其周圍電路: 圖2.3 單片機及其周圍電路2.3 12864液晶 帶中文字庫的128x64是一種具有4位/8位并行、2線或3線串行多種接口方式,內部含有國標一級、二級簡體中文字庫的點陣圖形液晶顯示模塊;其顯示分辨率為12864,內置8192個16*16點漢字,和128個16*8點ascii字符集??梢燥@示84行1616點陣的漢字,也可完成圖形顯示,低電壓低功耗是其又一顯著特點。12864與單片機有并行和串行兩種連接方法,并行接口較串行復雜,但是并行接口可以大大提高
23、液晶顯示模塊顯示字符和漢字的速度,所以所介紹的系統(tǒng)與單片機采用并行接口連接方式。當采用并行傳送方式時,12864的db0db7接單片機at89c55wd的p0口,此時4引腳為rs腳,即并行傳送的數(shù)據(jù)/指令選擇信號,5引腳為rw引腳,即并行的讀寫選擇信號,6引腳為e引腳,即并行傳送的使能信號。如圖2.4所示是單片機與液晶顯示模塊的連接。欲在某一個位置顯示中文字符時,應先設定顯示字符位置,即先設定顯示地址,再寫入中文字符編碼。顯示ascii字符過程與顯示中文字符過程相同。不過在顯示連續(xù)字符時,只須設定一次顯示地址,由模塊自動對地址加1指向下一個字符位置,否則,顯示的字符中將會有一個空ascii字符
24、位置。當字符編碼為2字節(jié)時,應先寫入高位字節(jié),再寫入低位字節(jié)。模塊在接收指令前,向處理器必須先確認模塊內部處于非忙狀態(tài),即讀取bf標志時bf需為“0”,方可接受新的指令。如果在送出一個指令前不檢查bf標志,則在前一個指令和這個指令中間必須延遲一段較長的時間,即等待前一個指令確定執(zhí)行完成。指令執(zhí)行的時間請參考指令表中的指令執(zhí)行時間說明。在此設計中采用的是并口通訊模式,所以直接將psb接固定高電平,數(shù)據(jù)由單片機的p0口傳送進來,使能端e,讀寫rw,寄存器選擇rs 用單片機進行控制。 圖2.4 單片機與液晶顯示接口電路液晶顯示模塊的漢字顯示通過專用接口命令來控制,下面是液晶顯示模塊12864清除顯示
25、和位址歸位命令的組成結構,其中清除顯示命令的組成結構和功能如下:功能:清除顯示屏幕,把ddram位址計數(shù)器調整為“00h”。位址歸位命令的組成結構和功能如下:功能:把ddram位址計數(shù)器調整為“00h”,游標回原點,該功能不影響顯示ddram。對于帶有中文字庫的12864液晶模塊,只要傳入所要顯示的英文字符的ascii碼和漢字的區(qū)位編碼,液晶顯示模塊會自動計算國標碼和機內碼,根據(jù)命令立即將字符在指定位置顯示出來。圖2.5和圖2.6是單片機對液晶顯示模塊的讀寫時序: 圖2.5 單片機寫資料到模塊時序圖圖2.6 單片機從模塊讀出資料時序圖3 軟件設計 由鍵盤傳來一個鍵值,單片機據(jù)此確定是否是合法的
26、預定義的字母(az)鍵,若是,由鍵值(已轉換為asc碼)經(jīng)過換算得到對應西文字模在存儲器中的起始位置,然后從存儲器中提取與該鍵匹配的西文字模并放入到lcd中顯示,再查找與該字母(注:如果不是首次輸入則應當與以前輸入的字母組合成一個字符串,即一個音節(jié))發(fā)音相同的第一個漢字內碼在存儲器中的位置,得到該內碼并經(jīng)過換算得出該內碼對應漢字字模在存儲器中的起始位置,然后依次查找下一個漢字的內碼在存儲器中的位置,再換算找到漢字字模在存儲器中的位置,最后將它們分別提取出來并送至lcd上顯示。本中文拼音輸入法的軟件系統(tǒng)主要包含下列模塊:按鍵掃描:掃描44鍵盤,獲取鍵值,進行鍵值處理。lcd顯示:lcd顯示驅動程
27、序,實現(xiàn)中文,數(shù)字,英文,符號輸出等功能。文字輸入:通過44鍵盤輸入漢字(拼音輸入法)、英文、字符、數(shù)字等,并在lcd上顯示出來,以便于用戶編輯通訊錄條目。3.1 按鍵掃描模塊按鍵掃描是采用查詢方式獲得按鍵,單片機不斷的查詢是否有按鍵按下,如果有按鍵按下,就執(zhí)行相應的語句,跳出查詢函數(shù)進行數(shù)字序列到拼音碼表轉換運算,否則繼續(xù)查詢。44鍵盤的按鍵與字母組合采取手機按鍵排布方式。下圖是根據(jù)實物圖列出來的,1到9為數(shù)字鍵, “數(shù)”表示按下該鍵轉入數(shù)字輸入狀態(tài),“英” 表示按下該鍵轉入英文輸入狀態(tài),“標” 表示按下該鍵轉入標點符號輸入狀態(tài),“取”表示取消,“up”表示選擇下一個,“dn”表示選擇上一個
28、,“確”表示確定。取消updn確定 9數(shù)字英文 標123456781234 圖 3.1 44按鍵定義按鍵掃描程序中根據(jù)按鍵的機械特性,用延時進行了消抖,按鍵消抖延時取10ms20ms為適宜,同時釋放按鍵時也應該進行判斷,否則,很可能將一次按鍵操作識別成多次按鍵操作。3.2 lcd顯示模塊lcd在使用時,要先把欲存放的數(shù)據(jù)的地址寫入ir,再把欲顯示的數(shù)據(jù)寫入dr,在寫入前還需要先檢查忙碌標志bf,只有當bf為0才可以寫入。因此,在程序中會反復出現(xiàn)調用命令模塊lcd_wcode(char c)和寫數(shù)據(jù)模塊lcd_wdata(char d),在寫數(shù)據(jù)模塊中,又需要調用判斷l(xiāng)cd是否忙碌模塊 lcd_
29、rbusy(),但這些模塊都是相對固定的,在需要顯示不同字符時,只需要注意改變顯示字符模塊中的有關數(shù)據(jù)。漢字顯示模塊是整個系統(tǒng)的核心模塊之一,通過調用顯示子程序將漢字和英文字符通過并行傳送方式傳送到lcd顯示。調用lcd_wcode ()函數(shù)寫入命令到液晶顯示模塊中,可以確定顯示的位置,調用lcd_wdata ()函數(shù)可以將要顯示的漢字或字符的國標碼傳送到液晶顯示器中,調用delay(int t)函數(shù)可以通過參數(shù)控制延時若干ms,調用lcd_rbusy ()函數(shù)可以判斷液晶顯示模塊是否處于忙狀態(tài)。若要顯示英文字符串,可以調用display_pinyin(struct t9py_list *pt
30、r)函數(shù),其中ptr為t9數(shù)字字母索引結果的指針。若要顯示漢字串,調用display_hanzi(struct t9py_list *ptr),顯示最后選中的漢字調用函數(shù) display_output_hanzi(struct t9py_list *ptr)。程序中用到的lcd驅動函數(shù)主要有:void lcd_rest(); /復位函數(shù)void lcd_clear(); /清除屏幕顯示內容void lcd_init(); / lcd顯示初始化void lcd_wdata(char d); /寫數(shù)據(jù)void lcd_wcode(char c); /寫命令void lcd_rbusy(); /讀忙
31、碌狀態(tài)程序中用到的顯示模塊函數(shù)為:display_pinyin(struct t9py_list *ptr);display_hanzi(struct t9py_list *ptr);display_output_hanzi(struct t9py_list *ptr);3.3 文字輸入模塊拼音輸入法是本方案的核心內容,它負責將鍵盤輸入的數(shù)字序列轉換為漢字。拼音輸入法大體可以分為兩個步驟:首先將鍵盤輸入的數(shù)字序列轉換為拼音編碼,然后搜索到該拼音編碼對應的漢字編碼。整個過程采用查表方法查找拼音及其對應漢字串。拼音輸入法設計框架如下: 圖 3.2 拼音輸入法設計框架(1)每個拼音編碼的數(shù)據(jù)結構為:
32、 struct t9py_index char code *t9_str; /按鍵數(shù)字序列 char code *py_str; /拼音編碼字符串 char code *py_mb; /該拼音對應的漢字碼表地址; 所有的拼音編碼組成一個數(shù)組常量t9py_table,每個拼音編碼作為數(shù)組中的一個元素存在,下面是該數(shù)組的片段:struct t9py_index code t9py_table = 24,ai,py_mb_ai, 24,bi,py_mb_bi, 2,a,py_mb_a, 3,e,py_mb_e, , /作為查找結束標志(2)當用戶通過按鍵輸入一個數(shù)字序列后,首先將鍵值轉化為字符,然后
33、把字符添加到字符串末尾,將字符串與數(shù)字字母索引表中的t9_str;數(shù)字串從地址為0處開始依次比較,當比較結果為相等時則把指向該數(shù)組的指針放到t9數(shù)字字母索引結果的結構體中,指針繼續(xù)往下指,繼續(xù)比較,直到遇到結束標志(“”),查找結束。 以下為按鍵數(shù)字序列查找到拼音的過程: uint t9_table_search() int success; char *str; struct t9py_index *idx; success = 0; idx = &(t9py_table0); str = idx-t9_str; t9py_result_clear(); / 清空原來的結果 for (;st
34、rcmp(str,);) if (!strcmp(str, key_str) success=1; t9py_result_add(idx); idx+; str = idx-t9_str; return success;(3)每次查詢t9索引表得到的所有匹配拼音結果,都放在 struct t9py_list t9py_result中,當要顯示結果時,可以通過取這里的變量,進行顯示。每個t9數(shù)字字母索引結果(多重表項)為:struct t9py_list struct t9py_index * entry8; int ele_num; / 拼音個數(shù) char ele_idx;/ 當前選中的拼音
35、(index) int hanzi_num;/ 當前選中拼音中的漢字個數(shù) char hanzi_idx;/ 當前選中拼音中的選中的漢字(index) char code *hanzi_ptr;/ 當前讀音候選漢字字符串指針;(4)例如輸入數(shù)字224,比較t9py_table數(shù)組所有數(shù)字串元素,將獲得bai和cai兩組拼音編碼,程序將這些匹配的拼音通過lcd顯示出來,供用戶選擇。 拼音顯示程序如下: void display_pinyin(struct t9py_list *ptr) char *dizhi; int j; lcd_wcode(0x88); for(j=0;jele_num;j+
36、) dizhi=ptr-entryj-py_str; lcd_showstring(dizhi); (5)在用戶選定了拼音之后,程序同時也知道了拼音編碼對應的漢字碼表地址。例如選擇了拼音bai,那么程序將獲得該拼音編碼對應的漢字碼表地址py_mb_bai。程序將漢字碼表數(shù)組中的所有漢字顯示在lcd上,漢字碼表是具有相同讀音的漢字組成的編碼數(shù)組,例如py_mb_bai數(shù)組的定義如下:code char py_mb_bai =白百佰柏擺敗拜稗; 同音漢字串顯示函數(shù):display_hanzi(struct t9py_list *ptr) int i, char_num; char *hanzi;
37、hanzi=ptr-hanzi_ptr; char_num=ptr-hanzi_num*2; lcd_wcode(0x98); for(i=0;ichar_num;i+) lcd_wdata(*hanzi+);(6)所有相同讀音的漢字顯示出來后,這樣用戶就可以通過上下鍵選取所需的漢字了,選中字會有顯示光標和閃動。在本設計中由于按鍵已全部用完,所以沒有設置上下翻頁鍵。 選擇漢字顯示函數(shù): display_output_hanzi(struct t9py_list *ptr) char *hanzi; int i; char xx=0; if(weizhihanzi_idx)*2; hanzi=p
38、tr-entryptr-ele_idx-py_mb+xx; for(i=0;i2;i+) lcd_wdata( *hanzi+); delay(5); weizhi+;(7)用戶在錄入文本時,除需要輸入中文外,也可能需要輸入英文、數(shù)字以及符號等。因此,將44鍵盤的一些特定按鍵定義為英文、數(shù)字等輸入鍵,從而構成了完整的文本輸入模塊。文字輸入模塊的總的程序流程如下: 圖3.3 文字輸入模塊程序流程拼音輸入法流程圖:進入主函數(shù) 獲得鍵值n按鍵為1y獲取鍵值把鍵值轉化為字符n鍵值為2到9y把字符鍵值添加到字符串末尾清空結果中的值將數(shù)字字符串與拼音數(shù)組數(shù)字序列比較n字符串與數(shù)組匹配y把指向該地址的指針添
39、加到t9數(shù)字字母索引結果中拼音碼表地址加1,并重新指向拼音碼表是否為“”ny如果有匹配的則刷新結果 如果沒有匹配的則把最后的字符鍵值刪去把所有匹配的拼音送到液晶顯示出來nkey=上鍵y把拼音ele_idx減1,表示選上一個拼音nkey=下鍵y把拼音ele_idx加1,表示選下一個拼音nkey=確定y輸出選中拼音的所有漢字同時切換為顯示狀態(tài)nkey=上鍵y把漢字hanzi_idx減1,表示選上一個漢字nkey=下鍵y把漢字hanzi_idx加1,表示選下一個漢字key=確定定ny輸出漢字、同時把液晶的三四行字清掉、把key_str清空圖3.4 文字輸入模塊程序流程 英文輸入流程圖:進入主函數(shù) 獲
40、取鍵值n鍵值=11獲取鍵值y鍵值為2到9取相應按鍵對應字母串的地址輸出該按鍵對應所有字母的大小寫通過上下按鍵選擇所要的字母按下確定鍵輸出選中字母清除三四行,同時切換到拼音輸入狀態(tài) 圖3.6 文字輸入模塊程序流程標點符號的輸入是用12鍵直接進行控制,按下12鍵,把所有標點直接在lcd的第四行顯示出來,用戶可以通過上下按鍵選擇自己想要的標點符號。數(shù)字的輸入首先需要按下轉換狀態(tài)鍵10鍵,再按下相應數(shù)字鍵值直接寫命令寫數(shù)據(jù)輸出,每次輸出一個數(shù)字必須先按10鍵,再按對應數(shù)字鍵。退格鍵由13鍵控制,按下該鍵,把全局變量weizhi減1,然后在該位置寫數(shù)據(jù)為空即可刪去前一個位置的顯示值。4 系統(tǒng)制作過程4.
41、1 硬件制作和調試(1)畫好原理圖和pcb圖,打印pcb圖,用紗布打磨板子,然后用電熨斗把圖壓到板子上,而后腐蝕板子、打孔、插元件,最后焊接。(2)初步觀察整個板子是否有虛焊、脫焊、短路、斷路情況,觀察元件是否安裝正確,特別是芯片及一些有極性元件是否裝反。(3)通上5v電壓,觀察液晶是否亮,及其背光程度,在電壓低于5v時,會發(fā)現(xiàn)lcd比較暗,電壓不穩(wěn)定時會出現(xiàn)雪花屏。(4)用萬用表測試是否所有的線已連通,通上電壓,測量按鍵的電壓值,沒按下時,理論上其中一組為5v電壓,另一組為0v電壓,按下之后觀察萬用表是否接近于0。(5)在檢測按鍵中,14鍵按下和不按下電壓都正常,與電路連通也正常,但在測試中
42、一直不能正常工作,后來換了一個按鍵才可以工作,猜測為是產(chǎn)品質量問題。(6)在測試中,每次按下8鍵都得不到正確的值。比如要輸出數(shù)字,按下8鍵得到的數(shù)字是1,有時候也會出現(xiàn)其它隨機值。先是檢測了線路,發(fā)現(xiàn)電路連線全部導通的,然后對按鍵定義進行檢查,按鍵定義也是正確的。后來在同學的指教下,才知道是排阻插反了,其中一個按鍵接到了vcc端,導致得不到正確值。4.2 軟件調試4.2.1 按鍵部分調試按鍵的獲取關系到后邊是否能查找到拼音,如何把按鍵按下對應取得按鍵值,并且沒有誤操作,這是關鍵。首先確定按鍵按下是高電平還是低電平,在本系統(tǒng)中按下為低電平,然后在軟件上對按鍵進行消抖處理,消抖時間一般取10ms2
43、0ms為好,因為按鍵按下由于其機械特性,按下時需要一個過程。當按鍵釋放時,必須要對按鍵進行釋放判斷,否則當按下鍵之后,按一下可能誤為幾個動作,產(chǎn)生錯誤的結果。4.2.2 12864lcd部分12864作為顯示部分,要把字符顯示出來,必須要對液晶進行驅動。驅動程序一般要包含幾個方面:液晶初始化,忙碌狀態(tài)判斷,寫數(shù)據(jù),寫命令。這些要根據(jù)液晶的命令和時序來寫。12864有寫操作和讀操作兩種,在本系統(tǒng)只使用寫操作,其中比較重要的是寫數(shù)據(jù)和寫命令,寫數(shù)據(jù)和寫命令要依據(jù)液晶的時序圖來寫。在寫命令時,先要檢查忙碌標志bf是否為0,讓rs等于0,選擇指令寄存器,r/w寫入低電平,表示寫信號,把數(shù)據(jù)送到液晶的r
44、am緩存,當下降沿到來時把數(shù)據(jù)送入液晶內部。寫數(shù)據(jù)是在rs等于1的時候選擇數(shù)據(jù)寄存器,雷同于寫命令。psb采用硬件置高電平,表示采用并行方式,所以軟件上不用再進行設置。另外由于要對選中的漢字進行區(qū)別顯示,所以游標加閃動的指令0x0f也是一個要點,當寫完之后還必須執(zhí)行關操作,要不會繼續(xù)閃動另外的操作中。在整個過程中,lcd在使用時,要先把欲存放的數(shù)據(jù)的地址寫入ir,再把欲顯示的數(shù)據(jù)寫入dr,在寫入前還需要先檢查忙碌標志bf,只有當bf為0才可以寫入。因此,在程序中會反復出現(xiàn)調用命令模塊lcd_wcode(char c)和寫數(shù)據(jù)模塊cd_wdata(char d),在寫數(shù)據(jù)模塊中,又需要調用判斷l(xiāng)
45、cd是否忙碌模塊 lcd_rbusy(),但這些模塊都是相對固定的,在需要顯示不同字符時,只需要注意改變顯示字符模塊中的有關數(shù)據(jù)。4.2.3 中文全拼輸入法調試在對全拼輸入法編程調試時,由于c語言學得不是很好,所以經(jīng)常會遇到一些問題,例如內存的分配,指針、數(shù)組、結構體的使用,定義錯誤,語法結構錯誤等等,這些錯誤都會影響程序的編譯。所以把錯誤一個個都解決,程序編譯通過后,再生成十六進制文件燒錄到單片機中,通過檢測硬件是否能正常工作來查看程序的編寫有無錯誤。由于剛開始對液晶了解不夠,先從液晶的初始化開始進行調試,調試成功之后,再結合按鍵進行調試,最后再考慮算法和實現(xiàn)。剛開始液晶沒有顯示,而在硬件調
46、試時已經(jīng)檢測過了硬件電路,lcd12864的硬件電路也是正常的,剩下的只是程序的原因了,于是按步驟檢查程序:(1)先測試液晶初始化部分正確與否。在執(zhí)行完液晶初始化函數(shù)之后,直接寫lcd_wdata(“大家好”),觀察液晶上是否有顯示。如果沒有顯示則需要對照液晶的時序,看程序與時序圖是否對應,一般這是容易出錯的地方,在初始化函數(shù)中,各個指令之間最好加一個延時,讓液晶有個緩沖的時間。如果能夠正常顯示則需要往下檢查。(2)結合按鍵進行測試,測試中采用的是當按下2鍵,直接寫lcd_wdata(“大家好”),觀察顯示結果,如果沒有顯示,那么產(chǎn)生的原因必定是按鍵部分,這時就需要對按鍵部分程序進行修改。可以
47、從理論觀察是否有錯,按下是低電平還是高電平,對按鍵進行消抖和按鍵釋放判斷。本系統(tǒng)按鍵程序采用的是查詢方式,一直對按鍵進行查詢,一旦有鍵按下則跳出while循環(huán),執(zhí)行相應模塊程序。如果這一步?jīng)]有問題之后,可以進行下一步測試。(3)按鍵部分測試完成之后可以進入核心部分,拼音輸入法是整個算法的核心,特別是從數(shù)字到拼音轉換的過程。在上面的測試結果都正確后,可以從以下幾個步驟進行檢測: 按下鍵之后,把按鍵數(shù)字值添加到key_str字符串的末尾,這可以在單步調試中查看結果。斷點與單步執(zhí)行,在編譯單片機程序的時候,為了查找程序中的邏輯錯誤,使用了單步執(zhí)行和設置斷點的手段。使用斷點工具時,點擊需要設置或者清除
48、斷點的地方。斷點的顯示為一條紅線框。當單片機程序運行到斷點被設置處,程序被暫停。按下單步執(zhí)行按鈕或者直接按f7、f8鍵,斷點處的程序被執(zhí)行,這樣程序將連續(xù)執(zhí)行直到下一個斷點。單步調試,把光標放到變量的位置就可以觀察變量的值。例如按下2鍵,調用str_cat_char (key_str, key)后,可以看到變量值為key:02h(32),key_str:(02h(32),00h(0),說明按鍵按下已有值傳進來,因為比較的數(shù)字串為字符串,所以必須要保證key_str中存放的是字符而不是整數(shù)。 在字符添加成功之后,這樣就可以將key_str與拼音碼表中的數(shù)字序列進行比較,數(shù)字序列從數(shù)組地址為0處開
49、始依次比較,當比較結果為相等時則把指向該數(shù)組的指針放到t9數(shù)字字母索引結果的結構體中,指針繼續(xù)往下指,繼續(xù)比較,直到遇到結束標志(“”),查找結束。這個過程比較重要的是每次比較完之后還必須讓指針下移,繼續(xù)指向,否則無法進行查找,另外要外加結束標志“”,否則很難判斷查找結束。 在查找完成之后,則通過拼音顯示來觀察是否成功查找匹配拼音。每個拼音字母只占一個字節(jié),在顯示中必須保證每個拼音依次顯示完成,通過不斷的調用寫命令寫數(shù)據(jù)函數(shù)達到目的。 漢字串的顯示在測試中比較明顯的錯誤的是沒有意識到一個漢字占兩個字節(jié),只調用lcd_wdata一次,這導致漢字數(shù)只能顯示一半。如果在后面輸出顯示漢字時,只寫一個字
50、節(jié)就不能輸出漢字了。在測試中用了“a” 這個拼音,a對應碼表為:code char py_mb_a =阿啊;正常顯示情況lcd應該為“阿啊”,但顯示結果中卻只出現(xiàn)一個“阿”,考慮有可能字符串的第一個字符為空,所以才只顯示一個漢字。再采用“ai”這個拼音測試時,ai碼表為: code char py_mb_ai =哎哀唉埃挨皚癌愛;顯示結果為:哎哀唉埃,并不是:哎哀唉埃挨皚癌。這就說明字符串的第一個字符并不是為空字符,排除了這種可能性。同時測試中發(fā)現(xiàn)輸出的漢字都只有碼表中的一半。經(jīng)過分析,知道了原因,因為漢字是兩個字節(jié),每個漢字需要寫兩次。 當數(shù)字到漢字的查找過程結束之后,還必須要對key_str進行清空,否則影響下一次輸入,還有必須對lcd的三四行清除顯示,12864沒有自動覆蓋顯示輸出功能。(4)英文,數(shù)字,標點占的是一個字節(jié),占半個ram字節(jié),而每個漢字占的是兩個字節(jié),一個ram位置,但在混合輸入時,考慮到如果字母、數(shù)字等顯示只用一個字節(jié)位置,下一個輸
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 寵物寄養(yǎng)中心2025年度會員制寄養(yǎng)服務協(xié)議3篇
- 2025年度大米產(chǎn)業(yè)鏈上下游資源整合及供應鏈管理服務合同3篇
- 2025年度航空運輸租賃合同范本:全新合作協(xié)議3篇
- 二零二五年度新型木工次結構建筑構件加工與施工合同3篇
- 2025貨物采購合同樣書
- 二零二五年度企業(yè)數(shù)字化轉型與客戶關系管理服務合同3篇
- 2025年度一手新房全款合同簡易版(含智能家居)3篇
- 2025年度農(nóng)村土地置換項目合作協(xié)議書
- 二零二五年度熱處理設備生產(chǎn)與市場分析合同3篇
- 二零二五年度農(nóng)村危房改造回遷房買賣合同
- 英語-湖南省天一大聯(lián)考暨郴州市2025屆高考高三第二次教學質量檢測(郴州二檢懷化統(tǒng)考)試題和答案
- 【MOOC期末】《形勢與政策》(北京科技大學)期末慕課答案
- 營銷專業(yè)安全培訓
- 2024年度五星級酒店廚師團隊管理與服務合同3篇
- 廣東省廣州市花都區(qū)2024年七年級上學期期末數(shù)學試題【附答案】
- 期末測試模擬練習 (含答案) 江蘇省蘇州市2024-2025學年統(tǒng)編版語文七年級上冊
- 上海市徐匯區(qū)2024-2025學年高一語文下學期期末試題含解析
- 線性代數(shù)知到智慧樹章節(jié)測試課后答案2024年秋貴州理工學院
- 安防主管崗位招聘面試題及回答建議(某大型集團公司)2025年
- 2023年全國職業(yè)院校技能大賽賽項-ZZ019 智能財稅基本技能賽題 - 模塊三
- 冠心病中西醫(yī)診療課件
評論
0/150
提交評論