注意:訪問本站需要Cookie和JavaScript支持!請設置您的瀏覽器! • 打開購物車 • 查看留言 • 付款方式 • 聯系我們 |
首頁 | 電子入門 | 學單片機 | 免費資源 | 下載中心 | 商品列表 | 象棋在線 | 在線繪圖 | 加盟五一 | 加入收藏 | 設為首頁 |
選擇分類:當前分類——學單片機 相關聯或者相類似的文章: 三十分鐘一個小時學會單片機(9045) 什么是單片機?單片機有什么用? (8723) 如何用STC板將代碼燒錄進IC(8681) 怎樣安裝AT51編程板的USB轉串口軟件?(8206) 送給單片機愛好者——LED在線編碼器(1814) 送給單片機愛好者——LED點陣在線編碼器(1544) 單片機系統中的漢字顯示(1492) 帶語音報數功能的搶答器(1489) 用VB進行串口實時數據采集(1347) 用AT89C2051設計超聲波測距儀(1171) 小小電子鬧鐘 生活學習良伴(1165) DS1820測溫原理(1129) 幾句代碼實現控制攝像頭(轉)(1117) STC單片機選型指南(1111) 自制PIC單片機編程器(1105) USB轉串口芯片CH340(1010) 快速學習單片機之黃金機會!(1010) 告戒購單片機開發實驗板初學者(970) 新款實用旋轉LED顯示屏A(890) 使用市售 USB轉RS232串口與PLC通信的測試報告 (881) 首頁 前頁 后頁 尾頁 本站推薦: | 單片機系統中的漢字顯示 摘要:需要顯示的漢字較多時,單片機系統中的漢字編碼非常繁瑣。本文介紹一種直接利用PC機的漢字內碼作為單片機系統的漢字編碼,以簡化系統的設計。 關鍵詞:單片機 液晶顯示器 29F040 漢字顯示 引言 在現代工業控制和一些智能化儀器儀表中,越來越多的場所需要用點陣圖形顯示器顯示漢字。通常的漢字顯示方式是先根據所需要的漢字提取漢字點陣(如16×16點陣),將點陣文件存入ROM,形成新的漢字編碼;而在使用時剛需要先根據新的漢字編碼組成語句,再由MCU根據新編碼提取相應的點陣進行漢字顯示。在這種顯示方式中,如果使用的流字數量較大或語句較多時,利用漢字的新編碼組成語句將是一件十分繁瑣而枯燥的工作。針對這種情況,本文提出了一種十分簡單的方式——直接利用PC機的漢字內碼作為單片機系統的編碼。下面以8031單片機系統為例闡述如下: 一、硬件組成 本系統中采用香港精電公司的內置T6963控制器[1]的240128T點陣圖形液晶顯示器。該顯示器1行為240點,能容納16×16點陣的漢字15個,總列數為128點,能顯示8行漢字。為了使用MCU操作可使用1片512KB的存儲器(如本系統中的29F040)用來存儲全部的國標16×16點陣漢遼、8×16的ASCII碼點陣數據以及漢字語句編碼數據。為了降低成本和減小體積,對于速度要求不是很高的場合也可采用大容量的串行數據存儲器,如AT45DB041B。具體的硬件控制電路如圖1所示(與漢字顯示無關的電路略)。 由于29F040的容量為512KB,而5031微控制器只能管理64KB的數據間,所以可將29F040分成16頁,每頁32KB,占單片機系統數據空間的8000H~0FFFFH(剩余32KB為單片機系統的其他存儲器和外設)。頁碼由單片機的P1.0~P1.3選擇。液晶顯示器的地址為7FF8H~7FF9H。 二、漢字顯示原理及軟件設計 UCDOS軟件中的文件HZK16和文件ASC16分別為16×16的國標漢字點陣文件和8×16的ASCII碼點陣文件,以二進制格式存儲。在文件HZK16中,按漢字區位碼從小到大依次存有國標區位碼表中的所有漢字,每個漢字占用32個字節,每個區為94個漢字。在文件ASC16中按ASCII碼從小到大依次存有8×16的ASCII碼點陣,每個ASCII碼占用16個字節。 在PC機的文本文件中,漢字是以機內碼的形式存儲的,每個漢字占用兩個字節:第一個字節為區碼,為了與ASCII碼區別,范圍從十六進制的0A1H開始(小于80H的為ASCII碼字符),對應區位碼中區碼的第一區;第二個字節為位碼,范圍也是從0A1H開始,對應某區中的第一個位碼。這樣,將漢字機內碼減去0A0AH就得該漢字的區位碼。 例如漢字“房”的機內碼為十六進制的“B7BF”,其中“B7”表示區碼,“BF”表示位碼。所以“房”的區位碼為0B7BFH-0A0A0H=171FH。將區碼和位碼分別轉換為十進制得漢字“房”的區位碼為“2331”,即“房”的點陣位于第23區的第31個字的位置,相當于在文件HZK16中的位置為第32×[(23-1) ×94+(31-1)]=67136B以后的32個字節為“房”的顯示點陣。 在本單片機系統中,起始地址的高4位為頁號,送P1口,低15位為數據區地址,送指針DPTR。利用“MOVX”指令連續取32個字節送LCD的相應位置,就能實現正確的漢字顯示。 ASCII碼的顯示與漢字的顯示基本原理相同。在文件ASC16中不存在機內碼的問題,其顯示點陣直接按ASCII碼從小到大依次排列,只是每個ASCII碼在文本文件中只占1個字節且小于80H,而且ASCII碼為8×16點陣,所以在ASCII16文件中,每個ASCII碼的點陣也只占16個字節。 首先提取16×16的國標漢字點陣和8×16的ASCII碼點陣(如UCDOS軟件中的HZK16和ASC16)并將其直接寫入29F040。其中HZK16(共256KB)點0~7頁。為了便于編程,ASC16雖然只有4KB,也單獨占用第8頁。其余剩下的空間用來存儲漢字語句的編碼。 由于240×128點陣的LED顯示器每個只能顯示15個漢字(16×16點陣漢字),即30個字節。所以可將需要顯示的語句按30個字節為1行進行編寫,不足30個字符的則補空格。在PC機上進行錄入時,每行30個字符再加上回車鍵和換行符,實占32個字符。所錄入的語句以純文本形式存盤,再將該文本文件以二進制的形式寫入29F040的第9頁。那么,以后根據需要顯示的語句行號便可以進行正確的顯示。此,作者推出薦使用DOS版本的WPS軟件的“編輯非文收文件”功能,它能清楚地顯示每行是否有30個字符。 根據以上原則,顯示1行漢字的具體程序框圖如圖2所示。 為方便讀者,將已經在實際應用中中通過的匯編子程序列出如下(關于LCD控制器T6963的用戶法請見參考文獻1)。 LCDCOM EQU 7FF9H LCDDAT EQU 7FF8H ;顯示1行漢字子程序 ;漢字語句位置編號DPTR;行號:R6 PRHZ:MOV 24H,DPH MOV 25H,DPL PUSH DPH PUSH DPL MOV A,DPH ;計算頁號 RR A RR A ADD A,#9;從第9區開始存放每行字符的機內碼 ORL A,#0F0H MOV P1,A LCALL RL245 ;行號乘以32(每行32個字符) SETB 24H,7 ;數據地址位于8000H~0FFFFH MOV DPH,24H MOV DPL,25H MOV R0,#0E0H MOV R7,#30 ;連續取出30個字符至0E0H內部數據存儲器 PRHZ3:MOVX A,@DPTR MOV @R0,A INC R0 INC DPTR DJNZ R7,PRHZ3 MOV 1DH,#30 ;顯示0E0H后的一行字符(共30個) MOV R5,#0 ;當前列R5 MOV R0,#0E0H MOV A,#7FH ;是否為ASCII碼? CLR C SUBB A,@R0 JC DPHZ1 MOV 26H,@R0 INC R0 MOV 24H,R6 ;ASCII碼顯示 MOV 25H,R5 LCALL PRASCII SJMP PRHZ4 DPHZ1:MOV 24H,@R0 ;是漢字則將機內碼送24H25H INC R0 MOV 25H,@R0 INC R0 MOV A,25H CLR C SUBB A,#0A1H ;機內碼轉換為二進制的區碼和位碼 MOV 25H,A MOV A,24H CLR C SUBB A,#0A1H LCALLDPONHZ ;顯示1個漢字 DEC 1DH INC R5 PRHZ4:INC R5 DJNZ 1DH,PRHZ5 POP DPL POP DPH RET PR0:MOV DPTR,#LCDCOM ;讀狀態 MOVX A,@DPTR RET PR01:LCALLPR0 ;讀、寫一數據前 JNB ACC.0,PR01 JNB ACC.1,PR01 RET PR02:LCALL PR0 ;連續讀前 JNB ACC.2,PR02 RET PR03:LCALL PR0 ;連續寫前 JNB ACC.3,PR02 RET PR1:LCALL PR01 ;雙字節參數R2,R3 MOV A,R2 LCALL PR14 PR11:LCALL PR01 ;單字節參數R3 MOV A,R3 LCALL PR14 PR12:LCALL PR01 ;無參數指令R4 MOV A,R4 SJMP PR15 PR14:MOV DPTR,#LCDDAT PR15:MOVX @DPTR,A RET RL245:MOV R7,#5 ;24H25H左移5 RLL1:CLR C MOV A,25H RLC A MOV 25H,A MOV A,24H RLC A MOV 24H,A DJNZ R7,RLL1 RET ;行位置R6(0~7),列位置R5(0~29),漢字區別24H,位碼25H DPONHZ:MOV A,24H ;顯示1個漢字 MOV B,#94 ;每區94個漢字 MUL AB ADD A,25H MOV 25H,A CLR A ADDC A,B MOV 24H,A RR A ;獲得32KB為1頁的頁號 RR A ORL A,#0F0H MOV P1,A ;頁號送P1口 LCALL RL245 ;漢字序號乘以32 SETB 24H,7 ;因為存儲器位于單片機系統的7FFFH~0FFFFH MOV DPH,24H MOV DPL,25H MOV R2,#32 ;在該位置連續取出32個字節 MOV R1,#0C0H DPHZ2:MOVX A,@DPTR INC DPTR MOV @R1,A INC R1 DJNZ R2,DPHZ2 MOV R1,#0C0H MOV A,R6 ;根據行列位置計算LCD指針 MOV B,#16 MUL AB MUL B,#30 MUL AB ADD A,R5 MOV 25H,A MOV R2,A CLR A ADDC A,B MOV 24H,A MOV R3,A MOV 26H,#16 ;將取出的點陣送LCD顯示 PRHZ6:MOV R4,#24H LCALL PR1 ;雙字節參數R2,R3 MOV A,@R1 MOV R3,A INC R1 MOV R4,#0C0H LCALL PR11 ;單字節參數R3 MOV A,@R1 MOV R3,A INC R1 MOV R4,#0C0H LCALL PR11 MOV A,#30 ADD A,25H MOV R2,A CLR A ADDC A,24H MOV R3,A MOV 24H,A DJNZ 26H,PRHZ6 RET 注:由于以上程序直接引自下面的應用實例,調用以上程序時請讓寄存器組位于第2區,即R0對應10H。 三、應用實例 我們應用本文介紹的方法成功地進行了某醫療儀器的設計。該設計要求具有完整的中、英文字符提示和漢字處方顯示,并盡可能地為今后的功能擴展和處方修改留有余地。目前儀器中用到的漢字約1200個,語句行為1300行左右,而且用戶認為利用工控PC機設計成本過高,要求盡可能地降低成本。顯然,對于該系統利用傳統的漢字處理方式進行設計雖然能節省一定的存儲空間,但龐大的漢字和語句重新編碼工作卻讓人望而生畏,而且當處方修改須要用到新的漢字時相當麻煩。我們利用8031單片機系統和本文介紹的方法進行設計,整個硬件電路和底層程序設計只用了1周的時間,大大地縮短了開周期。而且由于本系統可調用所有的ASCII碼和全部漢字庫,所以對于功能的擴展和處方的修改十分方便。 1、 本站不保證以上觀點正確,就算是本站原創作品,本站也不保證內容正確。 2、如果您擁有本文版權,并且不想在本站轉載,請書面通知本站立即刪除并且向您公開道歉! |
本站協議。
版權信息。
關于我們。
本站地圖。
營業執照。
發票說明。
付款方式。
聯系方式
深圳市寶安區西鄉五壹電子商行——粵ICP備16073394號-1;地址:深圳西鄉河西四坊183號;郵編:518102 E-mail:51dz$163.com($改為@);Tel:(0755)27947428 工作時間:9:30-12:00和13:30-17:30和18:30-20:30,無人接聽時可以再打手機13537585389 |