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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > LPC2132在嵌入式系統(tǒng)中的應(yīng)用技術(shù)

          LPC2132在嵌入式系統(tǒng)中的應(yīng)用技術(shù)

          作者: 時(shí)間:2012-05-21 來源:網(wǎng)絡(luò) 收藏

          1. 引言

          SoC在醫(yī)療器械中應(yīng)用前景廣闊[1],LPC2131/2132/2138是基于一個(gè)支持實(shí)時(shí)仿真和嵌入式跟蹤的32/16位ARM7TDMI-STM CPU的微控制器,帶有32kB/64kB/512 kB的嵌入的高速Flash存儲(chǔ)器和8/16/32kB片內(nèi)靜態(tài)RAM。多達(dá)47個(gè)5V的通用I/O口,1個(gè)(/2132)或2個(gè)(LPC2138)8路10位A/D轉(zhuǎn)換器共包含16個(gè)模擬輸入,1個(gè)10位D/A轉(zhuǎn)換器,可提供不同的模擬輸出(/2138)。多個(gè)串行接口,包括2個(gè)16C550工業(yè)標(biāo)準(zhǔn)UART、2個(gè)高速I2C接口(400kbit/s)、SPITM 和SSP。內(nèi)部集成實(shí)時(shí)時(shí)鐘等,資源比較豐富,使它們特別適用于工業(yè)控制和醫(yī)療等。本文以為例,介紹LPC2132的設(shè)計(jì)經(jīng)驗(yàn)與設(shè)計(jì)技術(shù)。

          2. 顯示設(shè)計(jì)

          顯示設(shè)計(jì)是所有的重要組成部分之一。顯示器件包括LED、字符LCM、圖形LCM、VFD等,其中圖形LCM(如128x64、 192x64等點(diǎn)陣)可顯示ASCII字符、漢字和圖形,且性價(jià)比較高,在中的應(yīng)用日趨廣泛,雖在MCS-51系列中的設(shè)計(jì)已非常成熟。但由于 ARM與MCS-51有許多不同之處,其設(shè)計(jì)方法當(dāng)然也有差別,下面以LPC2132和192x64點(diǎn)陣LCM為例進(jìn)行說明。

          2.1 與液晶顯示模塊(LCM)的硬件接口設(shè)計(jì)

          1) 電平匹配:LPC2132系列操作電壓范圍:3.0~3.6 V,選擇3V的LCM當(dāng)然沒有問題,但市場(chǎng)上3V的LCM價(jià)格常常比5V貴,而LPC2132的I/O口可承受5V的最大電壓,所以可采用5V的LCM,但需在LCM與LPC2132相連的I/O口上接5V上拉電阻。

          2) I/O連接:LPC2132沒有外部總線,所有I/O口都需要進(jìn)行配置,由內(nèi)部寄存器決定是輸入還是輸出。其中P0口共有31個(gè)I/O口,P1口有16個(gè) I/O口,而且I/O口的編號(hào)不連續(xù)(如P0.28與P1.25相鄰),由于編程時(shí)對(duì)I/O口采用位操作,所以具體連接時(shí),可根據(jù)硬件電路板布線需求進(jìn)行連接。為提高顯示刷新速度,需檢測(cè)LCM內(nèi)部的忙標(biāo)志,每次向LCM寫數(shù)據(jù)前,先讀取LCM的狀態(tài),當(dāng)狀態(tài)為非忙時(shí)才能寫入顯示數(shù)據(jù),這樣,要注意動(dòng)態(tài)設(shè)置與LCM數(shù)據(jù)線相連的LPC2132的I/O口方向,而且8個(gè)數(shù)據(jù)位要用IOSET和IOCLR逐一控制。

          3) 液晶背光控制:由于液晶的背光電流需要100多毫安,電壓一般在5V左右,而LPC2132的I/O口驅(qū)動(dòng)能力較弱,采用圖1的驅(qū)動(dòng)電路,LPC2132能可靠控制背光LED的亮與滅,且對(duì)系統(tǒng)無(wú)干擾。

          圖1液晶背光控制電路

          2.2 液晶顯示的軟件設(shè)計(jì)

          LPC2132可采用CodeWarrior進(jìn)行軟件開發(fā),由于用C語(yǔ)言進(jìn)行編程,開發(fā)速度比較快。在編寫LCM程序時(shí),先編寫硬件驅(qū)動(dòng)程序,包括 LCM初始化函數(shù),寫LCM數(shù)據(jù)函數(shù),寫LCM命令函數(shù),讀LCM數(shù)據(jù)函數(shù),讀LCM命令函數(shù),在這些函數(shù)的基礎(chǔ)上,編寫顯示16x16點(diǎn)陣漢字的函數(shù),設(shè)置顯示位置函數(shù)等,鑒于篇幅限制,就不在此贅述,下面重點(diǎn)向讀者介紹如何顯示漢字的技巧和提高液晶顯示刷新速度。

          在顯示漢字信息時(shí),需要先用工具軟件提取待顯示漢字的點(diǎn)陣,并將這些點(diǎn)陣信息保存在程序中,如果單純采用C語(yǔ)言,則只能定義數(shù)組變量,然后在顯示時(shí)調(diào)用所定義的數(shù)組變量。但采用這種方法有以下缺點(diǎn)。1)采用數(shù)組變量定義字符點(diǎn)陣,將浪費(fèi)寶貴的RAM資源。2)當(dāng)顯示內(nèi)容豐富,需定義的大量的點(diǎn)陣數(shù)據(jù)時(shí),造成RAM容量不足。如果采用匯編語(yǔ)言文件與C語(yǔ)言文件混合編程,將字符點(diǎn)陣信息以程序代碼的形式保存,不占用RAM,則可克服上述問題。下面以顯示漢字“上海”(16x16點(diǎn)陣)為例,介紹具體方法:

          1) 點(diǎn)陣信息的定義。

          建立一個(gè)以s為擴(kuò)展名的匯編語(yǔ)言文件,文件內(nèi)容具體如下。

          EXPORT shang16x16

          EXPORT hai16x16

          AREA TTTT,CODE,READONLY

          ENTRY;

          shang16x16

          DCB 0,0,0,0,0,0,255,32

          DCB 32,32,32,48,32,0,0,0

          DCB 6,16,16,16,16,16,31,16

          DCB 16,16,16,16,24,16,0,0

          hai16x16

          DCB 16,33,198,144,136,247,148,180

          DCB 212,148,148,246,132,128,0,0

          DCB 2,62,1,0,12,11,8,9

          DCB 10,40,56,15,8,0,0,0

          END

          上面的文件中定義了“上?!钡臐h字點(diǎn)陣信息,將此文件添加到項(xiàng)目文件中,編譯后點(diǎn)陣信息以程序代碼的方式存儲(chǔ)在FLASH中。

          2) 點(diǎn)陣信息的申明。

          建立一個(gè)以h為擴(kuò)展名的頭文件,對(duì)匯編語(yǔ)言文件中定義的字符點(diǎn)陣信息進(jìn)行申明,以便項(xiàng)目中其他程序可使用定義的點(diǎn)陣信息,例如lattice.h,文件具體內(nèi)容如下:

          extern unsigned char shang16x16[];

          extern unsigned char hai16x16[];


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

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(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); })();