在計算機迅速發(fā)展和普及的今天,用計算機對漢字進(jìn)行輸入、編輯和處理已經(jīng)非常普遍了。在醫療電子產(chǎn)品中,越來(lái)越多的場(chǎng)合需要顯示漢字。 在使用高性能CPU時(shí),可采用嵌入式操作系統(如Linux、WinCE)所支持的GUI程序來(lái)實(shí)現友好的人機界面。在很多情況下,需要使用相對簡(jiǎn)單的MCU控制整個(gè)系統,如采用單片機STC89C516RD+實(shí)現系統控制和人機界面,此時(shí)必須尋求占用較少資源的低成本解決方案。本文對中文輸入法在B超系統中的實(shí)現進(jìn)行了介紹。 字庫設計 通常的漢字顯示方式是:先用字模軟件提取所需要的漢字點(diǎn)陣,取得的數據可放入ASM匯編文件中,接著(zhù)在單片機集成開(kāi)發(fā)環(huán)境中對匯編文件進(jìn)行編譯——生成BIN文件,然后用編程器將BIN文件燒錄到芯片。在使用時(shí)是讀取芯片中的漢字點(diǎn)陣數據,將其寫(xiě)到字符存儲器中。 如果需要顯示的字少,點(diǎn)陣數據就少,將數據燒錄到程序存儲器即可。實(shí)現中文輸入法,顯示的字比較多,數據量比較大,需要專(zhuān)門(mén)生成字庫數據,放入擴展的數據存儲器中。 構造漢字庫,通常有如下方法:使用程序空間做小字庫;使用大容量的ROM芯片專(zhuān)門(mén)做漢字庫,這種方法在小型便攜式設備中一般不采用;為了降低成本和減小體積,對于速度要求不是很高的場(chǎng)合可采用大容量的串行數據存儲器,如AT45DB041B。 UCDOS軟件中的文件HZK16和文件ASC16分別為16×16的國標漢字點(diǎn)陣文件和8×16的ASCII碼點(diǎn)陣文件,以二進(jìn)制格式存儲。最常用的ASCII碼點(diǎn)陣為5×7(橫向5個(gè)點(diǎn),豎向7個(gè)點(diǎn))或7×9。對于給定字體的字符,字形的點(diǎn)數越多,字形的質(zhì)量越好,而所需的數據量越大,占用存儲空間越多。對于不同的顯示系統,要顯示同一圖形,所需的數據排列順序各不相同,現有的HZK16和ASC16文件不一定能直接應用到自己的系統中,常用的方法是用排列方式可自由定義的字模軟件取數據再放入程序或數據存儲區。 通過(guò)比較,發(fā)現選用12×12的點(diǎn)陣形式表示漢字、采用8×12的點(diǎn)陣形式表示ASCII碼可以兼顧美觀(guān)和減少硬件開(kāi)支,而且有部分程序模塊可共用,也為后期中英文顯示界面、菜單操作界面奠定了基礎。字模軟件取數據時(shí)必須一個(gè)方向是8的倍數,因此12×12將自動(dòng)調整為16×12或12×16,點(diǎn)陣字符如圖1所示。 圖1 點(diǎn)陣字符 不難發(fā)現,表示一個(gè)漢字需要24B,其中12B有一半是空白的,如果將由字模取得的數據壓縮一下,18B就足以存儲一個(gè)漢字的點(diǎn)陣數據。 硬件框圖 如圖2所示,單片機STC89C516RD+的內部集成了64KB閃存和1280B SRAM,利用其內部資源不需要再擴展外部程序存儲器,譯碼器、屏幕地址產(chǎn)生器、多路地址/數據切換、電視信號產(chǎn)生器、電視信號合成大都采用FPGA編程實(shí)現,信號合成后經(jīng)D/A轉換送監視器屏幕顯示。 圖2 硬件框圖 軟件實(shí)現 據調查,漢字輸入方案中,拼音輸入方式占80%以上,形碼用戶(hù)則少于20%。漢字輸入法的實(shí)質(zhì)是建立一種按鍵組合到漢字編碼的映射關(guān)系,使用全鍵盤(pán)的B超系統與使用標準鍵盤(pán)的PC的輸入法本質(zhì)上是相同的。建立索引表就可實(shí)現從按鍵組合到漢字編碼的映射,如圖3所示。 圖3 按鍵組合索引表示意圖 在Keil C編譯環(huán)境下,“拼音輸入法模塊”可以從網(wǎng)上下載到,醫療系統常要用到醫院名稱(chēng)和患者姓名,為此在該模塊基礎上,增加了一些常見(jiàn)的地名、姓名用字,共收錄漢字4120個(gè),用字模軟件提取點(diǎn)陣,并進(jìn)行壓縮形成漢字點(diǎn)陣數據庫,放入數據存儲區,接著(zhù)建立字模組合索引表,連同一些參數和表格數據共用一片EEPROM 39VF010就可以了。51系列單片機最大可尋址64KB存儲空間,可用P1口作頁(yè)地址實(shí)現對64KB以上數據空間的訪(fǎng)問(wèn)。 相對有限鍵的中文輸入法(如手機),全鍵盤(pán)的中文輸入法利用按鍵比較容易完成26個(gè)字母以及其他功能的操作。 字庫準備好之后,接下來(lái)的軟件設計關(guān)鍵在于構建拼音組合樹(shù)(如圖4所示)的遍歷算法、同音字的查找算法。這里要占用51單片機的一些內部RAM資源,存放拼音代碼、當前拼音組合映射的字庫地址ADDR0、下一拼音組合映射的字庫地址ADDR1和當前顯示漢字的首地址ADDR等。根據拼音組合用遍歷算法查得該拼音組合的第一個(gè)漢字的點(diǎn)陣地址,用向上、向下鍵實(shí)現翻頁(yè),通過(guò)ADDR與ADDR0或ADDR1的比較,來(lái)保證在同一拼音組合內查找漢字。 圖4 拼音組合樹(shù)示例 結論 本方案已在某B超系統上成功實(shí)施,目前已經(jīng)實(shí)現病歷號的中文拼音輸入及存儲,借助于該漢字庫實(shí)現了中文界面顯示。 |