<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32處理器的便攜式人機(jī)界面系統(tǒng)設(shè)計(jì)

          STM32處理器的便攜式人機(jī)界面系統(tǒng)設(shè)計(jì)

          作者: 時(shí)間:2014-07-18 來(lái)源:網(wǎng)絡(luò) 收藏

            3 系統(tǒng)軟件設(shè)計(jì)

          本文引用地址:http://www.ex-cimer.com/article/255770.htm

            系統(tǒng)軟件包括字庫(kù)的調(diào)用和TFT液晶顯示軟件設(shè)計(jì)兩個(gè)部分,字庫(kù)調(diào)用主要是通過(guò)F103RBT6的接口調(diào)用存儲(chǔ)在SST25VF080B中的中文字庫(kù)。TFT液晶顯示部分主要是通過(guò)F103RBT6通用I/O口模擬16位的8080并口,實(shí)現(xiàn)對(duì)液晶顯示器的驅(qū)動(dòng),在軟件設(shè)計(jì)的過(guò)程中需要注意一個(gè)問(wèn)題。就是不同字庫(kù)編碼的標(biāo)準(zhǔn)時(shí)不一樣的,所以在解碼時(shí)略有不同,常用的漢字字庫(kù)有GB2312字庫(kù)和GBK字庫(kù)兩種。

            3.1 GB2312字庫(kù)和GBK字庫(kù)

            GB2312收錄簡(jiǎn)化漢字及符號(hào)、字母、日文假名等共7 445個(gè)圖形字符,其中漢字占6 763個(gè)。GB2312規(guī)定“對(duì)任意一個(gè)圖形字符都采用兩個(gè)字節(jié)表示,每個(gè)字節(jié)均采用七位編碼表示”,習(xí)慣上稱(chēng)第一個(gè)字節(jié)為“高字節(jié)”,第二個(gè)字節(jié)為“低字節(jié)”。GB2312—80包含了大部分常用的一、二級(jí)漢字,和9區(qū)的符號(hào)。該字符集是幾乎所有的中文系統(tǒng)和國(guó)際化的軟件都支持的中文字符集,這也是最基本的中文字符集。其編碼范圍是高位0xa1~0xfe,低位也是0xa1~0xfe;漢字從0xb0a1開(kāi)始,結(jié)束于0xf7fe。GB2312將代碼表分為94個(gè)區(qū),對(duì)應(yīng)第一字節(jié)(0xa1~0xfe);每個(gè)區(qū)94個(gè)位(0xa1~0xfe),對(duì)應(yīng)第二字節(jié),兩個(gè)字節(jié)的值分別為區(qū)號(hào)值和位號(hào)值加32(20H),因此也稱(chēng)為區(qū)位碼。01~09區(qū)為符號(hào)、數(shù)字區(qū),16~87區(qū)為漢字區(qū)(0xb0~0xf7),10~15區(qū)、88~94區(qū)是有待進(jìn)一步標(biāo)準(zhǔn)化的空白區(qū)。GB2312將收錄的漢字分成兩級(jí):第一級(jí)是常用漢字計(jì)3755個(gè),置于16~55區(qū),按漢語(yǔ)拼音字母/筆形順序排列:第二級(jí)漢字是次常用漢字計(jì)3 008個(gè),置于56~87區(qū),按部首/筆畫(huà)順序排列。故而GB2312最多能表示6763個(gè)漢字。

            而GBK內(nèi)碼完全兼容GB2312,同時(shí)支持繁體字,總漢字?jǐn)?shù)有2萬(wàn)多個(gè),編碼格式如下,每個(gè)GBK碼由2個(gè)字節(jié)組成,第一個(gè)字節(jié)為0X81~0XFE,第二個(gè)字節(jié)分為兩部分,一是0X40~0X7E,二是0X80~0XFE。其中與GB2312相同的區(qū)域,字完全相同。把第一個(gè)字節(jié)代表的意義稱(chēng)為區(qū),那么GBK里面總共有126個(gè)區(qū)(0XFE~0X81+1),每個(gè)區(qū)內(nèi)有190個(gè)漢字(0XFE~0X80+0X7E~0X40+2),總共就有126x190=23 940個(gè)漢字。點(diǎn)陣庫(kù)只要按照這個(gè)編碼規(guī)則從0X8140開(kāi)始,逐一建立,每個(gè)區(qū)的點(diǎn)陣大小為每個(gè)漢字所用的字節(jié)數(shù)乘以190。這樣,就可以得到在這個(gè)字庫(kù)里面定位漢字的方法:

            當(dāng)GBKL<0X7F時(shí):Hp=((GBKH-0x81)×190+GBKL-0X40)×(sizex2);

            當(dāng)GBKL>0X80時(shí):Hp=((GBKH-0x81)×190+GBKL-0X41)×(sizex2);

            其中GBKH、GBKLL分別代表GBK的第一個(gè)字節(jié)和第二個(gè)字節(jié)(也就是高位和低位),size代表漢字字體的大小(比如16字體,12字體等),Hp則為對(duì)應(yīng)漢字點(diǎn)陣數(shù)據(jù)在字庫(kù)里面的起始地址。

            3.2 系統(tǒng)軟件流程

            對(duì)于GBK字庫(kù)和GB2312字庫(kù),他們的解碼部分部分略有不同,這個(gè)區(qū)別主要是由于他們的編碼方式不同引起的,對(duì)于GBK字庫(kù),解碼的方式如下:

            

          ?

            其中qh、ql分別代表GBK的第一個(gè)字節(jié)和第二個(gè)字節(jié)(也就是高位和低位),size代表漢字字體的大小(比如16字體,12字體等),foffset則為對(duì)應(yīng)漢字點(diǎn)陣數(shù)據(jù)在字庫(kù)里面的起始地址。

            系統(tǒng)啟動(dòng)以后,首先完成時(shí)鐘的初始化,采用外部8 MHz的晶振作為輸入時(shí)鐘,內(nèi)部鎖相環(huán)將時(shí)鐘倍頻到72 MHz作為系統(tǒng)時(shí)鐘,完成GPIO的初始化,作為L(zhǎng)CD驅(qū)動(dòng)IO的通用IO口的時(shí)鐘設(shè)置為50 MHz的推挽模式,接著完成硬件1的初始化,時(shí)鐘頻率設(shè)置為18 MHz,接著完成液晶的初始化,此過(guò)程是通過(guò)發(fā)送特定的命令序列來(lái)實(shí)現(xiàn)的,然后刷新顯示背景顏色,設(shè)置字體顏色,通過(guò)上面的程序完成字庫(kù)中漢字點(diǎn)陣序列的查詢,將漢字點(diǎn)陣送液晶屏顯示。

            系統(tǒng)軟件設(shè)計(jì)的流程圖如圖4所示。

            

          ?

            采用方法還不但可以實(shí)現(xiàn)標(biāo)準(zhǔn)字體的顯示,還可以根據(jù)系統(tǒng)要求,采用專(zhuān)用軟件生成各種需要的字體,為設(shè)計(jì)多樣性的人機(jī)界面系統(tǒng)提供了一種可行的方案。

            4 結(jié)論

            本文根據(jù)在全站儀應(yīng)用于飛機(jī)的測(cè)量過(guò)程中的實(shí)際需要,設(shè)計(jì)了用于測(cè)量計(jì)算的人機(jī)界面系統(tǒng),在該系統(tǒng)中,采用的處理器內(nèi)核為最新的Cortex—M3,它基于最新v7架構(gòu),采用了至今為止最小的內(nèi)核,有效地降低了系統(tǒng)功耗。采用SPI Flash來(lái)存儲(chǔ)漢字字庫(kù),通過(guò)彩色TFT液晶屏顯示,有效地?cái)U(kuò)展了應(yīng)用的范圍,經(jīng)過(guò)實(shí)驗(yàn)驗(yàn)證,本系統(tǒng)的設(shè)計(jì)方法完全達(dá)到設(shè)計(jì)要求。

          晶振相關(guān)文章:晶振原理
          鎖相環(huán)相關(guān)文章:鎖相環(huán)原理

          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: ARM STM32 SPI

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();