![嵌入式系統(tǒng)常用外設(shè)驅(qū)動編程實例_第1頁](http://file4.renrendoc.com/view/5f8ea62fd26019349a427fe5a1c3e1a2/5f8ea62fd26019349a427fe5a1c3e1a21.gif)
![嵌入式系統(tǒng)常用外設(shè)驅(qū)動編程實例_第2頁](http://file4.renrendoc.com/view/5f8ea62fd26019349a427fe5a1c3e1a2/5f8ea62fd26019349a427fe5a1c3e1a22.gif)
![嵌入式系統(tǒng)常用外設(shè)驅(qū)動編程實例_第3頁](http://file4.renrendoc.com/view/5f8ea62fd26019349a427fe5a1c3e1a2/5f8ea62fd26019349a427fe5a1c3e1a23.gif)
![嵌入式系統(tǒng)常用外設(shè)驅(qū)動編程實例_第4頁](http://file4.renrendoc.com/view/5f8ea62fd26019349a427fe5a1c3e1a2/5f8ea62fd26019349a427fe5a1c3e1a24.gif)
![嵌入式系統(tǒng)常用外設(shè)驅(qū)動編程實例_第5頁](http://file4.renrendoc.com/view/5f8ea62fd26019349a427fe5a1c3e1a2/5f8ea62fd26019349a427fe5a1c3e1a25.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
嵌入式系統(tǒng)常用外設(shè)驅(qū)動編程實例嵌入式系統(tǒng)常用外設(shè)除了存儲設(shè)備以外還包括:通信總線及接口(如UART、USB、I2C、SPI等)、人機(jī)交互設(shè)備(如LCD、鍵盤、觸摸屏等)、其他輸入輸出設(shè)備(如A/D、D/A、PWM等)。本章提要132546觸摸屏模塊設(shè)計實例UART異步串口模塊實例A/D轉(zhuǎn)換器應(yīng)用實例LCD模塊設(shè)計
LPC1768簡介
7PWM控制實例GPIO與鍵盤實例5.1.1LPC1768概述LPC1768是NXP公司推出的基于ARMCortex-M3內(nèi)核的微控制器LPC17XX系列中的一員。LPC17XX系列Cortex-M3微處理器用于處理要求高度集成和低功耗的嵌入式應(yīng)用。LPC1700系列微控制器的操作頻率可達(dá)100MHz(新推出的LPC1769和LPC1759可達(dá)120MHz)。ARMCortex-M3CPU具有3級流水線和哈佛結(jié)構(gòu)。LPC17XX系列微控制器的外設(shè)組件包含高達(dá)512KB的flash存儲器、64KB的數(shù)據(jù)存儲器、以太網(wǎng)MAC、USB主機(jī)/從機(jī)/OTG接口、8通道DMA控制器、4個UART、2條CAN通道、2個SSP控制器、SPI接口、3個IIC接口、2輸入和2輸出的IIS接口、8通道的12位ADC、10位DAC、電機(jī)控制PWM、正交編碼器接口、4個通用定時器、6輸出的通用PWM、帶有獨立電池供電的超低功耗RTC和多達(dá)70個的通用IO管腳。
引腳連接模塊寄存器映射引腳功能選擇寄存器0(PINSEL0)PINSEL0寄存器控制端口0低半部分的位功能。僅當(dāng)引腳選擇使用GPIO功能時,F(xiàn)IO0DIR寄存器中的方向控制位才有效。引腳功能選擇寄存器1(PINSEL1)PINSEL1寄存器控制端口0高半部分的位功能。僅當(dāng)引腳選擇使用GPIO功能時,F(xiàn)IO0DIR寄存器中的方向控制位才有效。LPC1768的引腳功能選擇寄存器1的位功能描述如表3-7所列。引腳功能選擇寄存器2(PINSEL2)PINSEL2寄存器控制端口1低半部分的位功能,包含以太網(wǎng)相關(guān)功能引腳。僅當(dāng)引腳選擇使用GPIO功能時,F(xiàn)IO1DIR寄存器中的方向控制位才有效。引腳功能選擇寄存器3(PINSEL3)PINSEL3寄存器控制端口1高半部分的位功能。僅當(dāng)引腳選擇使用GPIO功能時,F(xiàn)IO1DIR寄存器中的方向控制位才有效。引腳連接模塊寄存器映射引腳功能選擇寄存器4(PINSEL4)PINSEL4寄存器控制端口2低半部分的位功能。僅當(dāng)引腳選擇使用GPIO功能時,F(xiàn)IO2DIR寄存器中的方向控制位才有效。引腳功能選擇寄存器7(PINSEL7)PINSEL7寄存器控制端口3高半部分的位功能。僅當(dāng)引腳選擇使用GPIO功能時,F(xiàn)IO3DIR寄存器中的方向控制位才有效。引腳功能選擇寄存器9(PINSEL9)PINSEL9寄存器控制端口4高半部分的位功能。僅當(dāng)引腳選擇使用GPIO功能時,F(xiàn)IO4DIR寄存器中的方向控制位才有效。引腳功能選擇寄存器(PINSEL10)PINSEL10寄存器用于控制P2.2~P2.6的跟蹤功能。本章提要132546觸摸屏模塊設(shè)計實例UART異步串口模塊實例A/D轉(zhuǎn)換器應(yīng)用實例LCD模塊設(shè)計
LPC1768簡介
7PWM控制實例GPIO與鍵盤實例5.2.1LPC1768的GPIO概述LPC1768GPIO簡介LPC1768其引腳數(shù)為100,其中用做GPIO功能的引腳達(dá)70個。具體分配如下:P0端口28個:P0.0~P0.11,P0.15~P0.30。P1端口24個:P1.0~P1.1,P1.4,P1.8~P1.10,P1.14~P1.31。P2端口14個:P2.0~P2.13。P3端口2個:P3.25,P3.26。P4端口2個:P4.27,P4.28。5.2.1LPC1768的GPIO概述LPC1768的GPIO特性如下:加速GPIO功能:GPIO寄存器被轉(zhuǎn)移到外設(shè)AHB總線上,以實現(xiàn)高速的I/O時序;屏蔽寄存器允許將某些端口位作為一組進(jìn)行操作,而其他位不變;所以GPIO寄存器可以以字節(jié)、半字和字的方式進(jìn)行讀/寫操作;GPIO寄存器可由GPDMA進(jìn)行訪問。置位和清零寄存器允許用一條指令置位和清零操作一個端口的任意位。所有GPIO寄存器支持位帶操作功能。單個端口的方向可控制。所有I/O端口在復(fù)位后默認(rèn)為上拉輸入端。P0和P2端口的每個引腳提供了中斷功能。每個端口的中斷可被編程為上升沿、下降沿或邊沿產(chǎn)生中斷。邊沿檢測支持異步操作。P0和P2端口的每個引腳支持掉電喚醒功能。5.2.1LPC1768的GPIO概述2.GPIO寄存器描述通用名稱描述訪問復(fù)位值PORTn寄存器名稱和地址FIODIR高速GPIO端口方向控制寄存器。該寄存器可單獨控制每個端口引腳的方向R/W0FIO0DIR:0x2009C000FIO1DIR:0x2009C020FIO2DIR:0x2009C040FIO3DIR:0x2009C060FIO4DIR:0x2009C080FIOPIN高速GPIO端口引腳狀態(tài)寄存器。該寄存器真實反映數(shù)字端口引腳的當(dāng)前狀態(tài)R/W0FIO0PIN:0x2009C014FIO1PIN:0x2009C034FIO2PIN:0x2009C054FIO3PIN:0x2009C074FIO4PIN:0x2009C094FIOSET高速GPIO端口輸出置位寄存器。寫1使相應(yīng)的端口引腳輸出高電平;寫0沒有影響R/W0FIO0SET:0x2009C018FIO1SET:0x2009C038FIO2SET:0x2009C058FIO3SET:0x2009C078FIO4SET:0x2009C098FIOCLR高速GPIO端口輸出清零寄存器。寫1使相應(yīng)的端口引腳輸出低電平;寫0沒有影響R/W0FIO0CLR:0x2009C01CFIO1CLR:0x2009C03CFIO2CLR:0x2009C05CFIO3CLR:0x2009C07CFIO4CLR:0x2009C09CFIOMASK高速GPIO端口屏蔽寄存器R/W0FIO0MASK:0x2009C010FIO1MASK:0x2009C030FIO2MASK:0x2009C050FIO3MASK:0x2009C070FIO4MASK:0x2009C0905.2.2基于GPIO的矩陣鍵盤設(shè)計常用鍵盤工作原理(1)獨立式按鍵接口優(yōu)點:電路配置靈活,軟件實現(xiàn)簡單。缺點:每個按鍵需要占用一根口線,若按鍵數(shù)量較多.資源浪費將比較嚴(yán)重應(yīng)用:主要用于按鍵較少或?qū)Σ僮魉俣纫筝^高的場合,軟件實現(xiàn)時,可以采用中斷方式,也可采用查詢方式(2)行列式按鍵接口優(yōu)點:相對于獨立接口方式可以節(jié)省很多I/O資源,相對于專用芯片鍵盤可以節(jié)省成本,且更為靈活;缺點:需要用軟件處理消抖、重鍵等應(yīng)用:行列式按鍵接口適應(yīng)于按鍵數(shù)量較多,又不想使用專用鍵盤芯片的場合。鍵盤掃描陣列:一個瞬時接觸開關(guān)(按鈕)放置在每一行與線一列的交叉點。矩陣所需的鍵的數(shù)目顯然根據(jù)應(yīng)用程序而不同。每一行由一個輸出端口的一位驅(qū)動,而每一列由一個電阻器上拉且供給輸入端口一位。掃描次數(shù)輸出(行)輸入(列)鍵剛按下時000110第一次掃描011111第二次掃描101111第三次掃描110110鍵9按下時掃描過程3.專用芯片式設(shè)計專用鍵盤處理芯片一般功能比較完善.芯片本身能完成對按鍵的編碼、掃描、消抖和重鍵等問題的處理,甚至還集成了顯示接口功能。專用鍵盤處理芯片的優(yōu)點很明顯,可靠性高,接口簡單,使用方便,適合處理按鍵較多的情況。但在很多應(yīng)用場合,考慮成本因素.可能并不是最佳選擇。2.3×3矩陣鍵盤電路設(shè)計(1)功能要求利用LPC1768的P1.24~P1.29引腳外接3×3矩陣鍵盤,將鍵盤的值通過連接在P2.0~P2.5引腳上的LED按照鍵盤按鍵的編號順序點亮顯示。(2)硬件電路3×3矩陣鍵盤識別實例的硬件電路如圖5-5所示。K1~K9的9個輕觸式按鍵以3行3列的形式分別連接到P1.24~P1.29引腳上,其中P1.24~P1.26引腳用于連接矩陣鍵盤的行,P1.27~P1.29引腳用于連接矩陣鍵盤的列。8個LED發(fā)光二極管連接到LPC1768的P2.0~P2.7引腳上顯示按鍵編號。2.3×3矩陣鍵盤電路設(shè)計5.2.3鍵盤驅(qū)動程序設(shè)計
在圖5-3中,KR0~KR2連接到P1.24~P1.26作為輸出,KL3~KL5連接到P1.27~P1.29作為輸入。如果采用了中斷,還要初始化中斷寄存器。3×3矩陣鍵盤的識別過程是由以下幾個步驟構(gòu)成:判斷按鍵是否按下。若有鍵按下,則延時5~10ms,消除按鍵抖動。再判斷按鍵是否真的按下。若確實有鍵按下,則執(zhí)行該按鍵的功能事件。判斷按鍵是否釋放,若沒有釋放則等待按鍵釋放。鍵號二進(jìn)制代碼十六進(jìn)制代碼鍵號二進(jìn)制代碼十六進(jìn)制代碼K1XX1101100x36K6XX0111010x1DK2XX1011100x2EK7XX1100110x33K3XX0111100x1EK8XX1110110x3BK4XX1101010x35K9XX0110110x1BK5XX1011010x2D
3×3矩陣鍵盤鍵值代碼表5.2.3鍵盤驅(qū)動程序設(shè)計1.寄存器宏定義將32位GPIO寄存器分成4個8位的子寄存器進(jìn)行訪問,其他例子則采用開發(fā)板自帶寄存器定義方式來訪問。#definerFIO1DIR3(*(volatileunsignedchar*)0x2009C023)//P1.24~P1.31口方向控制寄存器#definerFIO1PIN3(*(volatileunsignedchar*)0x2009C037)//P1.24~P1.31口狀態(tài)寄存器#definerFIO1SET3(*(volatileunsignedchar*)0x2009C03B)//P1.24~P1.31口輸出置位寄存器#definerFIO1CLR3(*(volatileunsignedchar*)0x2009C03F)//P1.24~
P1.31口輸出清零寄存器#definerFIO2DIR0(*(volatileunsignedchar*)0x2009C020)//P2.0~P2.7口方向控制寄存器#definerFIO2SET0(*(volatileunsignedchar*)0x2009C058)//P2.0~P2.7口輸出置位寄存器#definerFIO2CLR0(*(volatileunsignedchar*)0x2009C058)//P2.0~P2.7口輸出清零寄存器5.2.3鍵盤驅(qū)動程序設(shè)計2.鍵盤初始化函數(shù)
鍵盤初始化函數(shù)主要針對鍵盤所用的端口屬性進(jìn)行初始化。在鍵盤工作之前,根據(jù)行列鍵盤電路設(shè)計原理將P1.24~P1.26配置為輸出,P1.27~P1.29配置為輸入。如果采用了中斷,還要初始化中斷寄存器。voidKeyInit()//該函數(shù)對鍵盤使用的端口進(jìn)行初始化{rFIO1DIR3|=0x07;//設(shè)置P1.24~P1.26配置為輸出,P1.27~P1.29//配置為輸入;其中1為輸出。rFIO1CLR3|=0x07;//設(shè)置P1.24~P1.26輸出為0。}3.鍵盤掃描程序
根據(jù)掃描原理,設(shè)置的P1.24~P1.26按如表5-5所示的順序輸出,比較每次掃描P1.27~P1.29的輸入值是否等于鍵剛被按下的輸入值,如果相等,找出輸出為零的行,則該行即為被按下的行。掃描次數(shù)輸出(行)第一次掃描110第二次掃描101第三次掃描011是否等于第一次列輸入值將行值放入臨時變量低4位,返回讀取結(jié)果是否獲取鍵盤列輸入值,放入臨時變量高4位按表5-5依次改變行輸出值讀取鍵盤列輸入值BYTEGetKey()//鍵盤掃描子程序{ BYTEi,keytemp; keytemp=rFIO0PIN0&0x38;//將列的值存入keytemp的3~6位 for(i=1;i<=4;i<<=1) { rFIO1CLR3|=0x3F; rFIO1SET3=~i&0x3F; if((rFIO0PIN0&0x38)==keytemp)//比較是否有低電平輸入 { keytemp=(~keytemp&0x38)|i;//將行的值存入keytemp的0~2位 break; } } returnkeytemp;}4.按鍵判斷函數(shù)該函數(shù)主要通過對輸入端口是否有低電平產(chǎn)生來判斷是否有鍵被按下。用于在輪詢方式查詢鍵盤時檢測是否有鍵按下。采用中斷方式時不需要該函數(shù)。BYTEIsKeyPressed()//是否處于按下狀態(tài){ if(rFIO1PIN3&0x38==0x38)//輸入端口是否出現(xiàn)0 returnFALSE; else returnTRUE;}5.鍵盤去抖函數(shù)由于在鍵盤掃描過程中有可能出現(xiàn)外界因素引起的鍵盤抖動造成按鍵瞬間接觸的情況,如果不進(jìn)行去抖可能造成按鍵的誤輸入。通常是采用程序延時來消抖BYTEScanKey(){BYTEkey;key=GetScanKey();OSTimeDly(50);//延時50毫秒
if(key!=GetScanKey())//延時50毫秒
return0;//返回錯誤代碼}6.鍵盤掃描與LED燈顯示控制主程序?qū)⒃阪I盤按鍵編號顯示到對應(yīng)的LED燈上,其他燈熄滅。LED燈顯示值送到P2.0~P2.7引腳上即可驅(qū)動點亮相應(yīng)LED燈。按鍵編號二進(jìn)制代碼十六進(jìn)制代碼0000000010110000001002200000100043000010000840001000010500100000206010000004071000000080811111111FFintmain(void){ inti; unsignedchartemp; rFIO2DIR0=0xFF; //配置P2.0~P2.7為輸出方向 rFIO2CLR0=0xFF; //使P2.0~P2.7輸出全為低電平 KeyInit() while(1) { if(IsKeyPressed()) //檢測是否有鍵按下 { temp=ScanKey() for(i=0;i<sizeof(KEYTAB);i++) //查KEYTAB表 if(temp==KEYTAB[i]) { rFIO2CLR0=0xFF;//先清零 rFIO2SET0=LED[i];//若找到顯示鍵值 } } }}本章提要132546觸摸屏模塊設(shè)計實例UART異步串口模塊實例A/D轉(zhuǎn)換器應(yīng)用實例LCD模塊設(shè)計
LPC1768簡介
7PWM控制實例GPIO與鍵盤實例5.3.1異步串行通信概述UART(UniversalAsynchronousReceiverandTransmitter,通用異步收發(fā)器)接口。而RS232、RS499、RS423、RS422和RS485等,是物理接口標(biāo)準(zhǔn)規(guī)范和總線標(biāo)準(zhǔn)規(guī)范,對應(yīng)各種異步串行通信口的接口標(biāo)準(zhǔn)和總線標(biāo)準(zhǔn),它規(guī)定了通信口的電氣特性、傳輸速率、連接特性和接口的機(jī)械特性等內(nèi)容。1.異步串行通信協(xié)議
異步串行方式是將傳輸數(shù)據(jù)的每個字符一位接一位(例如先低位、后高位)地傳送。數(shù)據(jù)的各不同位可以分時使用同一傳輸通道,因此串行I/O可以減少信號連線,最少用一對線即可進(jìn)行。1111/01/01/01/01/01/01/01/01100D0D0D0D3D4D5D6第n個字符空閑位空閑位空閑位停止位奇偶位起始位數(shù)據(jù)位微機(jī)異步串行通信中,常用的波特率為50,95,110,150,300,600,1200,2400,4800,9600,115200等。接收方按約定的格式接收數(shù)據(jù),并進(jìn)行檢查,一般可以查出以下三種錯誤:1)奇偶錯:在約定奇偶檢查的情況下,接收到的字符奇偶狀態(tài)和約定不符。2)幀格式錯:一個字符從起始位到停止位的總位數(shù)不對。3)溢出錯:若先接收的字符尚未被微機(jī)讀取,后面的字符又傳送過來,則產(chǎn)生溢出錯。2.異步串行通信接口定義一般UART接口定義四根引腳,分別如下:1)RxD(TransmitData)——數(shù)據(jù)接收引腳,用于串行通信數(shù)據(jù)接收;2)TxD(ReceiveData)——數(shù)據(jù)發(fā)送引腳,用于串行通信數(shù)據(jù)發(fā)送;3)RTS(RequesttoSend)——請求數(shù)據(jù)發(fā)送引腳,用于標(biāo)明接收設(shè)備有沒有準(zhǔn)備好接收數(shù)據(jù),即當(dāng)終端要發(fā)送數(shù)據(jù)時,使該信號有效;4)CTS(CleartoSend)——允許數(shù)據(jù)發(fā)送引腳,用于CTS來起動和暫停來自計算機(jī)的數(shù)據(jù)流,用來表示從設(shè)備準(zhǔn)備好接收主設(shè)備發(fā)來的數(shù)據(jù),是對請求發(fā)送信號RTS的響應(yīng)信號。UARTAUARTBTxDRxDCTSRTSTxDRxDCTSRTS3、RS-232-C
目前RS-232是PC機(jī)與通信工業(yè)中應(yīng)用最廣泛的種串行接口。RS-232被定義為一種在低速率串行通信中增加通信距離的單端標(biāo)準(zhǔn)。RS-232遵循RS-232-C標(biāo)準(zhǔn),美國電子工業(yè)協(xié)會(ElectronicIndustriesAssociation,EIA)把RS-232-C定義為:“在數(shù)據(jù)終端設(shè)備和數(shù)據(jù)通俏設(shè)備之間使用串行二進(jìn)制數(shù)據(jù)交換的接口”。RS-232-C標(biāo)準(zhǔn)是一種硬件協(xié)議,用于連接DIE(DataTerminalEquipment,數(shù)據(jù)終端設(shè)備)和DCE(DataCommunicationsEquipment,數(shù)據(jù)通信設(shè)備)兩種設(shè)備。
RS-232-C定義包括以下幾個方面:接口的機(jī)械特性;電氣信號特征;交換功能特性。RS-232-C采用25針連接器,陽極(插頭)接DTE,陰極(插座)接DCE。雖然本標(biāo)準(zhǔn)沒有規(guī)定連接器的實際類型,但工業(yè)上對D-25類型的連接器實行了標(biāo)準(zhǔn)化。在電氣方向,RS-232-C作了以下規(guī)定:驅(qū)動器上的負(fù)載電容不超過2500pF。驅(qū)動器上的負(fù)載電阻在3000歐-7000歐之間。在指定負(fù)載下,數(shù)據(jù)信號傳輸率(或波特率)低于2000bps。相對于信號地線,RS-232-C線的最高電壓不超過15v驅(qū)動器能產(chǎn)生+5-+15v(邏輯0)和-5--15v(邏輯1)的電壓。輸入端能接收+5-+15v(邏輯0)和-5--15v(邏輯1)的信號。
在RS-232-C標(biāo)準(zhǔn)建議信號的傳輸速度控制在20kbps內(nèi),在高速傳輸時,建議電纜長度不超過50英尺。簡單的計算公式為:25英尺(半負(fù)載量)時數(shù)據(jù)信號傳輸率增加到40kbps、12.5英尺時數(shù)據(jù)信號傳輸率增加到80kbps、6英尺時數(shù)據(jù)信號傳輸率增加到160kbps。事實上,許多通信包能使兩臺計算機(jī)之間的數(shù)據(jù)信號傳輸率達(dá)到115.2kbps。注意,RS-232-C標(biāo)準(zhǔn)并沒有定義“標(biāo)推”波特率。RS-232-C標(biāo)準(zhǔn)允許數(shù)據(jù)在同一時刻收發(fā),也就是全雙工通信方式。
RS-232-C標(biāo)準(zhǔn)定義的25針實際上僅用了其中9針。RS-232-C通信所保留的9針見表6-7。注意,PC機(jī)上的通信端口一般是作為DTE連接(即陽性連接器)。在實際的應(yīng)用中,利用RS-232-C的通信通常只使用其中的3根線,即Rd、TxD和GND。說明編寫詞DTEDB-25M針腳號DTEDB-9M針腳號方向DTEDB-9F針腳號DTEDB-25F針腳號發(fā)送TxD2333接收RxD3222發(fā)送請求RTS4785清除發(fā)送CTS5874數(shù)據(jù)設(shè)置準(zhǔn)備好DSR66420數(shù)據(jù)載波準(zhǔn)備好DCD8118數(shù)據(jù)終端準(zhǔn)備好DTR20466振鈴檢測IndicatorTL2299信號地GroundSG7554.RS-422RS-422由RS-232發(fā)展而來。為改進(jìn)RS-232通信距離短、速度低的缺點,RS-422定義了一種平衡通信接口,將傳輸速率提高到10Mbps,允許在一條平衡總線上連接最多10個接收器。RS-422是一種單機(jī)發(fā)送、多機(jī)接收的單向、平衡傳輸規(guī)范。RS-422的數(shù)據(jù)信號采用差分傳輸方式,也稱做平衡傳輸。它使用一對雙絞線進(jìn)行數(shù)據(jù)傳輸。驅(qū)動器能產(chǎn)生+2-+6v(邏輯0)和-2--6v(邏輯1)RS-422標(biāo)準(zhǔn)全稱是“平衡電壓數(shù)字接口電路的電氣特性”。由于接收器采用高輸入阻抗并且發(fā)送驅(qū)動器具有比RS-232更強(qiáng)的驅(qū)動能力,故允許在相同傳輸線上連接多個接收節(jié)點,最多可接10個節(jié)點,即一個主設(shè)備(Master),其余為從設(shè)備(Slave),從設(shè)備之間不能通信,所以RS-422支持點對多的雙向通信。RS-422四線接口由于采用單獨的發(fā)送和接收通道,因此不必控制數(shù)據(jù)方向,備裝置之間任何必須的信號交換均可以按軟件方式(XON/XOFF握手)或硬件方式(一對單獨的雙絞線)實現(xiàn)。RS-422的最大傳輸距離為4000英尺(約1219米),最大傳輸速率為1Mbps。其平衡雙絞線的長度與傳輸速率成反比,在100Kbps速率以下,才可能達(dá)到最大傳輸距離。只有在很短的距離廠才能獲得最高傳輸速率。一般100米長的雙絞線上所能獲得的最大傳輸速率僅為1Mbps。
RS-422需要一終接電阻,要求其阻值約等于傳輸電纜的特性阻抗。在短距離傳輸時可不需終接電阻,即一般在300米以下不需終接電阻。終接電阻接在傳輸電纜的最遠(yuǎn)端。5.RS-485串行總線接口為擴(kuò)展應(yīng)用范圍,EIA在RS-422的基礎(chǔ)上制定了RS-485標(biāo)準(zhǔn),增加了多點、雙向通信能力,通常在要求通信距離為幾十米至上千米時,廣泛采用R5-485收發(fā)器。
RS-485收發(fā)器采用平衡發(fā)送和差分接收,即在發(fā)送端,驅(qū)動器將TTL電平信號轉(zhuǎn)換成差分信號輸出;在接收端,接收器將差分信號變成TTL電平,因此具有抑制共模干擾的能力,加上接收器具有高的靈敏度,能檢測低達(dá)200mV的電壓,故數(shù)據(jù)傳輸可達(dá)千米以外。RS-485許多電氣規(guī)定與RS-422相仿,如都采用平衡傳輸方式、都需要在傳輸線上接終接電阻等。RS-485可以采用二線與四線方式,二線制可實現(xiàn)真正的多點雙向通信。而采用四線連接時,與RS-422一樣只能實現(xiàn)點對多的通信,即只能有一個主(Master)設(shè)備,其余為從設(shè)備,但它比RS-422有所改進(jìn)。無論四線還是二線連接方式總線上都可連接多達(dá)32個設(shè)備。RS-485與RS-422的共模輸出電壓是不同的。RS-485共模輸出電壓在-7V至+12V之間,而RS-422在-7V至+7V之間,RS-485接收器最小輸入阻抗為12千歐;RS-422是4千歐;RS-485滿足所有RS-422的規(guī)范,所以RS-485的驅(qū)動器可以在RS-422網(wǎng)絡(luò)中應(yīng)用,但RS-422的驅(qū)動器并不完全適用于RS-485網(wǎng)絡(luò)。
RS-485與RS-422一樣,最大傳輸速率為10Mb/s。當(dāng)波特率為1.2kbps時,最大傳輸距離理論上可達(dá)15千米。平衡雙絞線的長度與傳輸速率成反比,在100kbps速率以下,才可能使用規(guī)定最長的電纜長度。
RS-485需要2個終接電阻,接在傳輸總線的兩端,其阻值要求等于傳輸電纜的特性阻抗。在矩距離傳輸時可不需終接電阻,即一般在300米以下不需終接電阻。5.3.2LPC1768UART串口簡介及接口電路設(shè)計LRC1768微控制器內(nèi)置為4路異步串口通信收發(fā)器(UART):UART0、UART1、UART2和UART3。它們的主要特征如下:支持5、6、7和8位的數(shù)據(jù)長度;支持4種類型的奇偶校驗;支持1位和2位的停止位;16字節(jié)收發(fā)FIFO;內(nèi)置波特率發(fā)生器;支持MDA的發(fā)送和接受;用于精確控制波特率的小數(shù)分頻器,并擁有實現(xiàn)軟件流控制的自動波特率檢測能力和機(jī)制;多處理器地址模式;UART3還包含一種支持紅外通信的IRDA模式;UART1還具有Modem接口信號和RS-485/EIA-485模式。接收器接收器緩沖寄存器接收器FIFO接收器移位寄存器接收器DMA接口波特率發(fā)送器小數(shù)因子分頻器主分頻器(DLM,DLL)FIFO控制和狀態(tài)線控制和狀態(tài)IrDA和自動波特檢測中斷控制和狀態(tài)發(fā)送器發(fā)送器保持寄存器發(fā)送器FIFO發(fā)送器移位寄存器發(fā)送器DMA接口TX_DMA_REQTX_DMA_CLRPCLKUARTninterruptRX_DMA_REQRX_DMA_CLRUn_RXDUn_OEUn_TXD····3.寄存器描述(1)UART接收器緩沖寄存器(UnRBR)
接收器緩沖寄存器(UnRBR)是UART接收FIFO的最高字節(jié),包含了最早接收到的字符,并且可通過總線接口進(jìn)行讀取。LSB(位0)表示最早接收的數(shù)據(jù)位。要正確的成對讀出有效的接收字節(jié)及其狀態(tài)位,應(yīng)先讀取線狀態(tài)寄存器(LSR)的內(nèi)容,然后再讀取接收器緩沖寄存器(RBR)中的字節(jié)。(2)UART發(fā)送保持寄存器(UnTHR)
發(fā)送保持寄存器(UnTHR)是UART發(fā)送FIFO單元的最高字節(jié),是發(fā)送FIFO單元中的最新字符,可通過總線接口進(jìn)行寫入。LSB代表第一個要發(fā)送出去的位。
如果要訪問發(fā)送保持寄存器(THR),線控制寄存器(LCR)中的除數(shù)鎖存器訪問位(DLAB)必須為0。發(fā)送保持寄存器(THR)為只寫寄存器。(3)UART除數(shù)鎖存器(UxDLL/UxDLM)UART除數(shù)鎖存器由DLL和DLM構(gòu)成,是UART波特率發(fā)生器的一部分,它與小數(shù)分頻器一同使用,保持產(chǎn)生波特率時鐘的APB時鐘(PCLK)分頻值,波特率時鐘必須使波特率的16倍。(4)UART中斷使能寄存器(UnIER)UART中斷使能寄存器(UnIER)用于使能UARTN的中斷源,包含的UART中斷使能有接收數(shù)據(jù)有效中斷使能、發(fā)送中斷使能、線狀態(tài)中斷使能、自動波特率的結(jié)束和超時中斷使能等。(5)UART中斷標(biāo)識寄存器(UnIIR)UART中斷標(biāo)識寄存器(UnIIR)提供狀態(tài)代碼,用于指示一個掛起處理中斷的優(yōu)先級別和中斷源。在訪問UART中斷標(biāo)識寄存器(UnIIR)過程中,中斷被凍結(jié)。如果在訪問UART中斷標(biāo)識寄存器(UnIIR)過程中產(chǎn)生了中斷,該中斷會被記錄,下次訪問UnIIR時可讀出該中斷。
(6)UARTFIFO控制寄存器(UnFCR)UARTFIFO控制寄存器用于配置FIFO單元的操作,主要有FIFO使能、FIFO復(fù)位、DMA模式選擇和接收觸發(fā)點選擇。(7)UART線控制寄存器(U0LCR~U3LCR)UART線控制寄存器用于設(shè)置發(fā)送或數(shù)據(jù)字符的格式。(8)UART線狀態(tài)寄存器(UnLSR)UART線狀態(tài)寄存器是一個只讀寄存器,提供了UARTn的發(fā)送和接收模塊的狀態(tài)信息。(9)UART小數(shù)分頻器寄存器(UnFDR)UART的小數(shù)分頻器寄存器控制產(chǎn)生波特率的時鐘預(yù)分頻器,并且用戶可自由對該寄存器進(jìn)行讀/寫操作。波特率計算公式如下:5.3.3串口硬件電路設(shè)計5.3.4串口驅(qū)動程序設(shè)計與PC機(jī)通信的軟件編程涉及的內(nèi)容如下:初始化程序。主要包括系統(tǒng)時鐘配置初始化和UART0初始化。在UART0初始化中主要包括引腳的配置、FIFO緩沖器的使用、波特率的配置和數(shù)據(jù)幀格式的設(shè)置。串口的收發(fā)程序。主要包括字節(jié)接收與發(fā)送,字符串發(fā)送函數(shù)。Main()主程序。除了實現(xiàn)初始化函數(shù)的調(diào)用之外,在while(1)無限循環(huán)程序?qū)崿F(xiàn)字符串的定時輸出。1.常量宏聲明#defineFOSC12000000/*振蕩器頻率*/#defineFCCLK(FOSC*8)/*主時鐘頻率<=100Mhz,
FOSC的整數(shù)倍*/#defineFCCO(FCCLK*3)/*PLL頻率(275Mhz~550Mhz)*//*與FCCLK相同,或是其的偶數(shù)倍*/#defineFPCLK(FCCLK/4)/*外設(shè)時鐘頻率,FCCLK的1/2、1/4、或與FCCLK相同*/#defineUART0_BPS115200/*串口0通信波特率*/#include<LPC17xx.H>//該文件中包含寄存器的聲明2.串口0的初始化
按默認(rèn)值初始化串口0的引腳和通訊參數(shù)。設(shè)置為8位數(shù)據(jù)位,1位停止位,無奇偶校驗。voidUART0_Init(void){unsignedintusFdiv;LPC_PINCON->PINSEL0|=(1<<20)|(1<<22);/*配置P0.2為TXD0(Com0)功能*/LPC_PINCON->PINSEL0|=(1<<22);/*配置P0.3為RXD0(Com0)功能*/LPC_SC->PCONP=LPC_SC->PCONP|(1<<24);/*打開UART2電源控制*/LPC_UART2->LCR=0x83;/*允許設(shè)置波特率*/usFdiv=(FPCLK/16)/UART2_BPS;/*設(shè)置波特率*/LPC_UART2->DLM=usFdiv/256;LPC_UART2->DLL=usFdiv%256;LPC_UART2->LCR=0x03;/*鎖定波特率*/LPC_UART2->FCR=0x06;}3.接收一個字符
通過判斷U0LSR寄存器對應(yīng)的接收狀態(tài)標(biāo)志位值,確定是否存在有效的數(shù)據(jù)可以接收,如果存在則通過讀取寄存器U0RBR的值返回。unsignedcharUART0_GetByte(void){ while(!(LPC_UART2->LSR&0x01));
return(LPC_UART2->RBR);}接收數(shù)據(jù)開始接收隊列是否為滿延時接收數(shù)據(jù)否是4.發(fā)送一個字節(jié)
通過判斷U0LSR寄存器對應(yīng)的發(fā)送狀態(tài)標(biāo)志位值,確定發(fā)送緩沖寄存器是否為空,如果為空則可以將需要發(fā)送的值寫入發(fā)送數(shù)據(jù)寄存器U0THR,由串口移位發(fā)送。unsignedcharUART0_SendByte(unsignedcharucData){ while(!(LPC_UART2->LSR&0x20));return(LPC_UART2->THR=ucData);}發(fā)送數(shù)據(jù)開始發(fā)送隊列是否為空延時發(fā)送數(shù)據(jù)否是5.向串口發(fā)送字符串為了快速地發(fā)送字符串?dāng)?shù)據(jù),編寫一個字符串發(fā)送函數(shù)。通過該函數(shù)重復(fù)調(diào)用UART0_SendByte將一個字符串快速發(fā)送出去。voidUART0_SendString(unsignedchar*s){while(*s!=0)//判斷字符串是否結(jié)束{ UART0_SendByte(*s++);}}intmain(void){ intdata='0'; SystemInit(); UART0_Init();while(1) { UART0_SendString("http://www.PowerAVR.com\n"); UART0_SendString("http://www.PowerMCU.com\n");Delay(3000);}}本章提要132546觸摸屏模塊設(shè)計實例UART異步串口模塊實例A/D轉(zhuǎn)換器應(yīng)用實例LCD模塊設(shè)計
LPC1768簡介
7PWM控制實例GPIO與鍵盤實例5.4A/D轉(zhuǎn)換器
A/D轉(zhuǎn)換器有以下類型:逐位比較型、積分型、計數(shù)型、并行比較型、電壓-頻率型,主要應(yīng)根據(jù)使用場合的具體要求,按照轉(zhuǎn)換速度、精度、價格、功能以及接口條件等因素來決定選擇何種類型。常用的有以下兩種:1)雙積分型的A/D轉(zhuǎn)換器雙積分式也稱二重積分式,其實質(zhì)是測量和比較兩個積分的時間,一個是對模擬輸入電壓積分的時間T0,此時間往往是固定的;另一個是以充電后的電壓為初值,對參考電源VRef反向積分,積分電容被放電至零所需的時間T1。模擬輸入電壓Vi
與參考電壓VRef
之比,等于上述兩個時間之比。由于VRef
、T0
固定,而放電時間T1
可以測出,因而可計算出模擬輸入電壓的大小(VRef
與Vi
符號相反)。
由于T0、VRef
為已知的固定常數(shù),因此反向積分時間T1
與輸入模擬電壓Vi
在T0
時間內(nèi)的平均值成正比。輸入電壓Vi
愈高,VA
愈大,T1
就愈長。在T1
開始時刻,控制邏輯同時打開計數(shù)器的控制門開始計數(shù),直到積分器恢復(fù)到零電平時,計數(shù)停止。則計數(shù)器所計出的數(shù)字即正比于輸入電壓Vi
在T0
時間內(nèi)的平均值,于是完成了一次A/D轉(zhuǎn)換。由于雙積分型A/D轉(zhuǎn)換是測量輸入電壓Vi
在T。時間內(nèi)的平均值,所以對常態(tài)干擾(串模干擾)有很強(qiáng)的抑制作用,尤其對正負(fù)波形對稱的干擾信號,抑制效果更好。2)逐次逼近型的A/D轉(zhuǎn)換器逐次逼近型(也稱逐位比較式)的A/D轉(zhuǎn)換器,應(yīng)用比積分型更為廣泛,其原理框圖如圖所示,主要由逐次逼近寄存器SAR、D/A轉(zhuǎn)換器、比較器以及時序和控制邏輯等部分組成。它的實質(zhì)是逐次把設(shè)定的SAR寄存器中的數(shù)字量經(jīng)D/A轉(zhuǎn)換后得到電壓Vc與待轉(zhuǎn)換模擬電壓V。進(jìn)行比較。比較時,先從SAR的最高位開始,逐次確定各位的數(shù)碼應(yīng)是“1”還是“0”,其工作過程如下:逐次逼近式的A/D轉(zhuǎn)換器的主要特點是:轉(zhuǎn)換速度較快,在1—100/μs以內(nèi),分辨率可以達(dá)18位,特別適用于工業(yè)控制系統(tǒng)。轉(zhuǎn)換時間固定,不隨輸入信號的變化而變化??垢蓴_能力相對積分型的差。例如,對模擬輸入信號采樣過程中,若在采樣時刻有一個干擾脈沖迭加在模擬信號上,則采樣時,包括干擾信號在內(nèi),都被采樣和轉(zhuǎn)換為數(shù)字量,這就會造成較大的誤差,所以有必要采取適當(dāng)?shù)臑V波措施。2.A/D轉(zhuǎn)換的重要指標(biāo)1)分辨率(Resolution)
分辨率反映A/D轉(zhuǎn)換器對輸入微小變化響應(yīng)的能力,通常用數(shù)字輸出最低位(LSB)所對應(yīng)的模擬輸入的電平值表示。n位A/D能反應(yīng)1/2n滿量程的模擬輸入電平。由于分辨率直接與轉(zhuǎn)換器的位數(shù)有關(guān),所以一般也可簡單地用數(shù)字量的位數(shù)來表示分辨率,即n位二進(jìn)制數(shù),最低位所具有的權(quán)值,就是它的分辨率。2)精度(Accuracy)
精度有絕對精度(AbsoluteAccuracy)和相對精度(RelativeAccuracy)兩種表示方法。①絕對誤差在一個轉(zhuǎn)換器中,對應(yīng)于一個數(shù)字量的實際模擬輸入電壓和理想的模擬輸入電壓之差并非是一個常數(shù)。我們把它們之間的差的最大值,定義為“絕對誤差”。通常以數(shù)字量的最小有效位(LSB)的分?jǐn)?shù)值來表示絕對誤差,例如:±1LSB等。絕對誤差包括量化誤差和其它所有誤差。②相對誤差
是指整個轉(zhuǎn)換范圍內(nèi),任一數(shù)字量所對應(yīng)的模擬輸入量的實際值與理論值之差,用模擬電壓滿量程的百分比表示。例如,滿量程為10V,10位A/D芯片,若其絕對精度為±1/2LSB,則其最小有效位的量化單位:9.77mV,其絕對精度為=4.88mV,其相對精度為4.88/104=0.048%。3)轉(zhuǎn)換時間(ConversionTime)
轉(zhuǎn)換時間是指完成一次A/D轉(zhuǎn)換所需的時間,即由發(fā)出啟動轉(zhuǎn)換命令信號到轉(zhuǎn)換結(jié)束信號開始有效的時間間隔。轉(zhuǎn)換時間的倒數(shù)稱為轉(zhuǎn)換速率。例如AD570的轉(zhuǎn)換時間為25us,其轉(zhuǎn)換速率為40KHz。4)電源靈敏度(powersupplysensitivity)
電源靈敏度是指A/D轉(zhuǎn)換芯片的供電電源的電壓發(fā)生變化時,產(chǎn)生的轉(zhuǎn)換誤差。一般用電源電壓變化1%時相當(dāng)?shù)哪M量變化的百分?jǐn)?shù)來表示。5)量程量程是指所能轉(zhuǎn)換的模擬輸入電壓范圍,分單極性、雙極性兩種類型。例如,單極性量程為0~+5V,0~+10V,0~+20V;雙極性量程為-5~+5V,-10~+10V。6)輸出邏輯電平多數(shù)A/D轉(zhuǎn)換器的輸出邏輯電平與TTL電平兼容。在考慮數(shù)字量輸出與微處理的數(shù)據(jù)總線接口時,應(yīng)注意是否要三態(tài)邏輯輸出,是否要對數(shù)據(jù)進(jìn)行鎖存等。7)工作溫度范圍由于溫度會對比較器、運算放大器、電阻網(wǎng)絡(luò)等產(chǎn)生影響,故只在一定的溫度范圍內(nèi)才能保證額定精度指標(biāo)。一般A/D轉(zhuǎn)換器的工作溫度范圍為(0~70℃),軍用品的工作溫度范圍為(-55~+125℃)。3.A/D轉(zhuǎn)換過程
A/D轉(zhuǎn)換過程分為4個階段:即采樣、保持、量化和編碼。采樣是將一個時間上連續(xù)變化的信號轉(zhuǎn)換成時間上離散的信號,根據(jù)奈奎斯特采樣定理fs≥2fh,考慮到模數(shù)轉(zhuǎn)換器件的非線性失真、量化噪聲積極手機(jī)噪聲等因素的影響,采樣頻率一般取2.5~3倍的最高頻率成分。要把一個采樣信號準(zhǔn)確地數(shù)字化,就需要將采樣所得的瞬時模擬信號保持一段時間,這就是保持過程。保持實將時間離散、數(shù)值連續(xù)的信號變成時間連續(xù)、數(shù)值離散信號,雖然邏輯上保持器是一個獨立單元,但是,實際上保持其總是和采樣器集成到一起,兩者合稱采樣保持器。5.4.2LPC1768A/D轉(zhuǎn)換器介紹LPC1768A/D轉(zhuǎn)換器特點LPC1768微控制器內(nèi)置一個8通道的12位A/D轉(zhuǎn)換器。該12位A/D轉(zhuǎn)換器采用逐次逼近式原理實現(xiàn)模擬量的轉(zhuǎn)換。其主要特征如下:12位逐次逼近式模/數(shù)轉(zhuǎn)換器;8個引腳復(fù)用為A/D輸入腳;具有掉電模式;測量范圍:0~VREEP(通常為3V,不超過VDDA);12位轉(zhuǎn)換頻率:200kHz;具有一個或多個輸入的BURST轉(zhuǎn)換模式;可選擇由輸入跳變或定時器匹配信號觸發(fā)轉(zhuǎn)換。5.4.2LPC1768A/D轉(zhuǎn)換器介紹3.寄存器描述(1)A/D轉(zhuǎn)換器控制寄存器(AD0CR)A/D轉(zhuǎn)換器控制寄存器主要用于配置A/D轉(zhuǎn)換器的通道選擇、設(shè)置A/D時鐘源以及控制A/D轉(zhuǎn)換等操作。(2)A/D轉(zhuǎn)換器全局?jǐn)?shù)據(jù)寄存器(AD0GDR)A/D轉(zhuǎn)換器全局?jǐn)?shù)據(jù)寄存器(包含最近一次A/D轉(zhuǎn)換的結(jié)果,還包含轉(zhuǎn)換過程中出現(xiàn)的狀態(tài)標(biāo)志的復(fù)件。
有兩種方法可以讀取ADC的轉(zhuǎn)換結(jié)果:一種是利用A/D轉(zhuǎn)換器全局?jǐn)?shù)據(jù)寄存器來讀取ADC的全部數(shù)據(jù);另一種是讀取A/D通道數(shù)據(jù)寄存器。(3)A/D轉(zhuǎn)換器狀態(tài)寄存器(AD0STAT)A/D轉(zhuǎn)換器狀態(tài)寄存器允許同時檢查所有A/D通道的狀態(tài)。每個A/D通道的ADDRn寄存器的DONE和OVERRUN標(biāo)志都反映在ADSTAT中,在ADSTAT中同樣可以找到中斷標(biāo)記。5.4.2LPC1768A/D轉(zhuǎn)換器介紹(4)A/D轉(zhuǎn)換基本操作
一旦ADC轉(zhuǎn)換開始就不能被中斷。若前一個轉(zhuǎn)換未結(jié)束,軟件新寫入就不能發(fā)起新的轉(zhuǎn)換,新的邊沿觸發(fā)事件也會被忽略。硬件觸發(fā)的轉(zhuǎn)換:如果ADCR的BURST位為0且STAR字段的值包含在010~111之內(nèi),則當(dāng)所選引腳或定時器匹配的信號發(fā)生跳變時,A/D轉(zhuǎn)換器就啟動一次轉(zhuǎn)換。中斷:DONE標(biāo)志位為1時,中斷請求會被提交到NVIC,軟件通過NVIC中的A/D中斷使能位來控制是否產(chǎn)生中斷。當(dāng)ADDR被讀取時,DONE標(biāo)志被否決。DMA控制:DMA傳輸請求產(chǎn)生于ADC中斷請求線。發(fā)起DMA傳輸?shù)那闆r與產(chǎn)生中斷的情況相同。5.4.3LPC1768A/D程序設(shè)計ADC驅(qū)動程序設(shè)計主要包括初始化程序、獲取ADC轉(zhuǎn)換結(jié)果函數(shù)以及啟動和停止ADC轉(zhuǎn)換函數(shù)。1.常量宏聲明 #defineADC_VALUE_MAX0xFFF//AD轉(zhuǎn)換的最大值2.ADC初始化函數(shù)
該函數(shù)主要完成ADC相關(guān)的GPIO屬性設(shè)置,實現(xiàn)系統(tǒng)時鐘源的配置、設(shè)置ADC工作參數(shù)等工作。voidADC_Init(void){LPC_PINCON->PINSEL3&=~(3UL<<30);/*P1.31isGPIO*/LPC_PINCON->PINSEL3|=(3UL<<30);/*P1.31設(shè)置為AD0.5*/LPC_SC->PCONP|=(1<<12);/*給ADC模塊供電*/LPC_ADC->ADCR=(1<<5)|/*選擇AD0.5引腳*/(4<<8)|/*設(shè)置ADC時鐘為25MHz/5*/(1<<21);/*使能ADC*/}5.4.3LPC1768A/D程序設(shè)計3.ADC啟動轉(zhuǎn)換函數(shù)該函數(shù)主要設(shè)置ADCR寄存器,啟動ADC開始轉(zhuǎn)換。voidADC_StartCnv(void){LPC_ADC->ADCR&=~(7<<24);/*先停止轉(zhuǎn)換*/LPC_ADC->ADCR|=(1<<24);/*啟動轉(zhuǎn)換*/}4.ADC停止轉(zhuǎn)換函數(shù)該函數(shù)主要設(shè)置ADCR寄存器,停止ADC轉(zhuǎn)換。voidADC_StopCnv(void){LPC_ADC->ADCR&=~(7<<24);/*停止轉(zhuǎn)換*/}5.4.3LPC1768A/D程序設(shè)計5.獲取ADC轉(zhuǎn)換結(jié)果值函數(shù)
該函數(shù)負(fù)責(zé)讀取ADC轉(zhuǎn)換結(jié)果值。通過比較ADC寄存器ADGDR中的狀態(tài)位,判斷ADC是否轉(zhuǎn)換結(jié)束,如果轉(zhuǎn)換結(jié)束則從對應(yīng)的ADGDR寄存器中讀取數(shù)據(jù)。該函數(shù)只有在啟動ADC后才能調(diào)用。uint32_tADC_GetCnv(void){
uint32_tadGdr;while(!(LPC_ADC->ADSTAT&0x01));/*等待轉(zhuǎn)換結(jié)束*/adGdr=LPC_ADC->ADGDR;return((adGdr>>4)&ADC_VALUE_MAX);/*讀取轉(zhuǎn)換結(jié)果值*/}本章提要132546觸摸屏模塊設(shè)計實例UART異步串口模塊實例A/D轉(zhuǎn)換器應(yīng)用實例LCD模塊設(shè)計
LPC1768簡介
7PWM控制實例GPIO與鍵盤實例5.5.1觸摸屏原理及有關(guān)技術(shù)觸摸屏按其工作原理的不同分為表面聲波屏、電容屏、電阻屏和紅外屏幾種。常見的又?jǐn)?shù)電阻觸摸屏。如圖5-21所示,電阻觸摸屏的屏體部分是一塊與顯示器表面非常配合的多層復(fù)合薄膜,由一層玻璃或有機(jī)玻璃作為基層,表面涂有一層透明的導(dǎo)電層,上面再蓋有一層外表面硬化處理、光滑防刮的塑料層,它的內(nèi)表面也涂有一層透明導(dǎo)電層,在兩層導(dǎo)電層之間有許多細(xì)小(小于千分之一英寸)的透明隔離點把它們隔開絕緣。觸摸屏結(jié)構(gòu)示意圖觸摸屏分壓原理
如圖所示,當(dāng)手指或筆觸摸屏幕時(圖c),平常相互絕緣的兩層導(dǎo)電層就在觸摸點位置有了一個接觸,因其中一面導(dǎo)電層(頂層)接通X軸方向的5V均勻電壓場(圖a),而Y方向電極對上不加電壓時,在X平行電壓場中,觸點處的電壓值可以在Y+(或Y-)電極上反映出來,使得檢測層(底層)的電壓由零變?yōu)榉橇悖刂破鱾蓽y到這個接通后,進(jìn)行A/D轉(zhuǎn)換,并將得到的電壓值與5V相比即可得觸摸點的X軸坐標(biāo)為(原點在靠近接地點的那端):
Xi=Lx*Vi/V(即分壓原理)同理得出Y軸的坐標(biāo),這就是所有電阻觸摸屏共同的最基本原理。5.6.2電阻觸摸屏的有關(guān)技術(shù)透明的導(dǎo)電涂層材料有兩種:1)ITO,氧化鋼,弱導(dǎo)電體,特性是當(dāng)厚度降到1800埃以下時會突然變得透明,透光度為80%,再薄下去透光率反而下降,到300埃厚度時又上升到80%。
2)鎳金涂層,五線電阻觸摸屏的外層導(dǎo)電層使用的是延展性極好的鎳金涂層材料,外導(dǎo)電層由于頻繁觸摸,使用延展性好的鎳金材料目的是為了延長使用壽命,但是成本較高,鎳金導(dǎo)電層雖然延展性好,但是只能作透明導(dǎo)體,不適合作為電阻觸摸屏的工作面,因為它導(dǎo)電性太好,不宜作精密電阻測量,而且金屬不易做到厚度非常均勻。電阻式觸摸屏分為四線電阻和五線電阻觸摸屏電阻技術(shù)觸摸屏是一種對外界完全隔離的工作環(huán)境,故不怕灰塵、水汽和油污,可以用任何物體來觸摸,比較適合工業(yè)控制領(lǐng)域及辦公室內(nèi)有限人的使用。四線電阻觸摸屏原理測量原理在觸摸點X、Y坐標(biāo)的測量過程中,測量電壓與測量點的等效電路圖所示,圖中P為測量點XVYY電容屏電容屏結(jié)構(gòu)電容屏主要有自電容屏與互電容屏兩種,以現(xiàn)在較常見的互電容屏為例,內(nèi)部由驅(qū)動電極與接收電極組成,驅(qū)動電極發(fā)出低電壓高頻信號投射到接收電極形成穩(wěn)定的電流,當(dāng)人體接觸到電容屏?xí)r,由于人體接地,手指與電容屏就形成一個等效電容,而高頻信號可以通過這一等效電容流入地線,這樣,接收端所接收的電荷量減小,而當(dāng)手指越靠近發(fā)射端時,電荷減小越明顯,最后根據(jù)接收端所接收的電流強(qiáng)度來確定所觸碰的點。電容屏要實現(xiàn)多點觸控,靠的就是增加互電容的電極,簡單地說,就是將屏幕分塊,在每一個區(qū)域里設(shè)置一組互電容模塊都是獨立工作,所以電容屏就可以獨立檢測到各區(qū)域的觸控情況,進(jìn)行處理后,簡單地實現(xiàn)多點觸控。電容屏較電阻屏的優(yōu)勢在于,電容屏是人體靜電驅(qū)動原理,電阻屏是作用力驅(qū)動原理,而電容屏在惡劣條件下都可以使用(高溫,高濕,低溫),不過電阻屏的使用就會受到氣候環(huán)境的影響。
5.5.2觸摸屏驅(qū)動芯片F(xiàn)M7843簡介及接口電路設(shè)計本系統(tǒng)觸摸屏的控制是使用的FM7843芯片,它是4線電阻觸摸屏轉(zhuǎn)換接口芯片。該芯片具有同步串行接口的12位取樣模數(shù)轉(zhuǎn)換器,在125kHz吞吐速率和2.7V電壓下的功耗為750μW,而在關(guān)閉模式下的功耗僅為0.5μW??刂谱止δ苊枋觯築ITNAME功能描述7S啟動位。一個新的控制字在12位轉(zhuǎn)換時需要15個時鐘周期,在8位轉(zhuǎn)換模式下12個時鐘周期。6-4A2-A0通道選擇位。和ER/DFR位一起設(shè)置,這些位控制多路輸入設(shè)置、開關(guān)和參考輸入。3MODE12/8位轉(zhuǎn)換選擇位。這位控制轉(zhuǎn)換模式選擇:0為12位轉(zhuǎn)換,1為8位轉(zhuǎn)換。2SER/DFR單端/差分參考輸入選擇位。和A2-A0一起配置,該位控制多路輸入設(shè)置、開關(guān)和參考輸入。1-0PD1-PD0省電模式選擇位。FM(ADS)7843的特點實現(xiàn)觸摸屏的驅(qū)動選擇控制(X、Y通道)對于輸入電壓或附加電壓進(jìn)行AD轉(zhuǎn)換同步串行接口最大轉(zhuǎn)換速率125KHz可編程控制8位或者12位轉(zhuǎn)換模式工作電壓2.7V-5.0V兩個附加的輸入端口FM7843與LPC1768的連接5.5.3觸摸屏驅(qū)動程序設(shè)計觸摸屏控制命令宏定義#include“LPC17xx.h”#define CHX 0x90 /*通道Y+的選擇控制字*/ #define CHY 0xd0 /*通道X+的選擇控制字*/
#defineSSPSR_RNE2#defineSSPSR_BSY4/*SPI傳輸速率bit-frequency=PCLK/CPSR*/#defineSPI_SPEED_4MHz18 /*4MHz*/#defineSPI_SPEED_2MHz36 /*2MHz*/#define SPI_SPEED_1MHz 72 /*1MHz*/#define SPI_SPEED_500kHz144 /*500kHz*/#defineSPI_SPEED_400kHz180 /*400kHz*/
#defineTP_CS(a) if(a) \ LPC_GPIO0->FIOSET=(1<<6);\ else \ LPC_GPIO0->FIOCLR=(1<<6)#defineTP_INT_IN(LPC_GPIO2->FIOPIN&(1<<13))觸摸屏初始化函數(shù)2.觸摸屏初始化函數(shù)
觸摸屏初始化函數(shù)主要對與FM7843項連接的端口屬性進(jìn)行配置。包括初始化端口P0.6、P2.13,P0.7、P0.8、P0.9配置為SSP端口,GPF6配置為輸出屬性,P2.13配置為EXINT5。觸摸屏初始化函數(shù)voidTchScr_init(){LPC_GPIO0->FIODIR|=(1<<6);/*設(shè)置P0.6為TP_CS輸出*/LPC_GPIO2->FIODIR|=(0<<13);/*設(shè)置P2.13為TP_INT輸入*/TP_CS(1);LPC_SC->PCONP|=(1<<10);/*打開SSPI1模塊電源*//*P0.7設(shè)置為SCK1,P0.8設(shè)置為MISO1,P0.9設(shè)置為MOSI1*/LPC_PINCON->PINSEL0&=~((3UL<<14)|(3UL<<16)|(3UL<<18));//P0.7~P0.9清零LPC_PINCON->PINSEL0|=(2UL<<14)|(2UL<<16)|(2UL<<18);LPC_SC->PCLKSEL0&=~(3<<20);/*PCLKSP0=CCLK/4(18MHz)*/LPC_SC->PCLKSEL0|=(1<<20);/*PCLKSP0=CCLK(72MHz)*/LPC_SSP1->CR0=0x0007;/*8Bit,CPOL=0,CPHA=0*/LPC_SSP1->CR1=0x0002;/*SSP1使能,主設(shè)備模式*/LPC17xx_SPI_SetSpeed(SPI_SPEED_500kHz);while(LPC_SSP1->SR&(1<<SSPSR_BSY));/*等待忙結(jié)束*/while(LPC_SSP1->SR&(1<<SSPSR_RNE))/*清除SPIRXFIFO*/ dummy=LPC_SSP1->DR;}3.觸摸屏坐標(biāo)獲取函數(shù)
讀取觸摸屏坐標(biāo)值的程序流程圖如圖5-23所示。主要通過INT_TC中斷來判斷是否有觸摸屏按下,如果有,則啟動ADC轉(zhuǎn)換,依次將X和Y坐標(biāo)值轉(zhuǎn)換完成,然后保存到相應(yīng)的變量中。
從觸摸屏控制器獲得的X與Y值僅是對當(dāng)前觸摸點的電壓值的A/D轉(zhuǎn)換值,它不具有實用價值。這個值的大小不但與觸摸屏的分辨率有關(guān),而且也與觸摸屏與LCD貼合的情況有關(guān)。而且,LCD分辨率與觸摸屏的分辨率一般來說是不一樣,坐標(biāo)也不一樣,因此,如果想得到體現(xiàn)LCD坐標(biāo)的觸摸屏位置,還需要在程序中進(jìn)行轉(zhuǎn)換。轉(zhuǎn)換公式如下:x=(x-TchScr_Xmin)*LCDWIDTH/(TchScr_Xmax-TchScr_Xmin)y=(y-TchScr_Ymin)*LCDHEIGHT/(TchScr_Ymax-TchScr_Ymin)
其中,TchScr_Xmax、TchScr_Xmin、TchScr_Ymax和TchScr_Ymin是觸摸屏返回電壓值x、y軸的范圍,LCDWIDTH、LCDHEIGHT是液晶屏的寬度與高度。初始化函數(shù)4.寫入轉(zhuǎn)換命令函數(shù)由于訪問ADS7843是通過SPI總線進(jìn)行訪問的,需要通過SSP1向ADS7843寫數(shù)據(jù),將命令和其他相關(guān)的配置參數(shù)寫入ADS7843。staticunsignedcharWR_CMD(unsignedcharcmd){unsignedcharbyte_r;
while(LPC_SSP1->SR&(1<<SSPSR_BSY)); /*等待轉(zhuǎn)換完成*/LPC_SSP1->DR=cmd;while(LPC_SSP1->SR&(1<<SSPSR_BSY)); /*等待轉(zhuǎn)換完成*/while(!(LPC_SSP1->SR&(1<<SSPSR_RNE))); /*等待直到RxFIFO不為空*/byte_r=LPC_SSP1->DR;returnbyte_r;/*返回接收值*/}
ADS7843送回控制器的X與Y值僅是對當(dāng)前觸摸點的電壓值的A/D轉(zhuǎn)換值,它不具有使用價值。這個值得大小不但與觸摸屏的分辨率有關(guān),而且也與觸摸屏與LCD貼合的情況有關(guān)。而且,LCD分辨率與觸摸屏的分辨率一般不一樣,坐標(biāo)也不一樣,因此,如果想得到體現(xiàn)LCD坐標(biāo)的觸摸屏位置,還需要在程序中進(jìn)行轉(zhuǎn)換。假設(shè)LCD分辨率是320X240,坐標(biāo)原點在左上角;觸摸屏分辨率為900X900,坐標(biāo)原點在左上角,則轉(zhuǎn)換公式如下:
xLCD=[320×(x-x2)/(x1-x2)];yLCD=[320×(y-y2)/(y1-y2)];其中,(x,y)為觸點位置,(x1,y1)為觸摸屏最大坐標(biāo)點,,(x2,y2)為觸摸屏原點初始化函數(shù)5.ADS7843轉(zhuǎn)換結(jié)果讀取函數(shù)
該函數(shù)主要實現(xiàn)通過SSP1將ADS7843轉(zhuǎn)換結(jié)果值讀出,返回兩個字節(jié)轉(zhuǎn)換數(shù)據(jù)。在該函數(shù)中將讀取的數(shù)據(jù)進(jìn)行移位處理得到有效數(shù)據(jù)。觸摸屏坐標(biāo)獲取函數(shù)觸摸屏坐標(biāo)獲取是根據(jù)觸摸屏被按下產(chǎn)生的中斷或通過輪詢方式檢測導(dǎo)游觸摸動作時從FM7843讀出對應(yīng)坐標(biāo)值。ADS7843轉(zhuǎn)換結(jié)果讀取函數(shù)staticintRD_AD(void){unsignedshortbuf,temp;
temp=WR_CMD(0x00);buf=temp<<8;DelayUS(1);temp=WR_CMD(0x00);;buf|=temp;buf>>=3;buf&=0xfff;returnbuf;}讀取ADS7843通道X+或Y+的ADC值函數(shù)intRead_XY_Position(unsignedcharxy_cmd){inti;TP_CS(0);DelayUS(1);WR_CMD(xy_cmd);DelayUS(1);i=RD_AD();TP_CS(1);returni;}讀取ADS7843通道X+或Y+的ADC值函數(shù)將X坐標(biāo)和Y坐標(biāo)讀出后映射到LCD的坐標(biāo)系上,得到LCD上的坐標(biāo)值。voidTP_GetAdXY(int*x,int*y){intadx,ady;adx=Read_XY_Position(CHX);DelayUS(1);ady=Read_XY_Position(CHY);*x=adx;*y=ady;*x=(*x-TchScr_Xmin)*LCDWIDTH/(TchScr_Xmax-TchScr_Xmin); *y=(*y-TchScr_Ymin)*LCDHEIGHT/(TchScr_Ymax-TchScr_Ymin);}8.觸摸動作判斷函數(shù)除了基本的觸摸動作以外,觸摸屏動作還包括雙擊、移動等動作。觸摸屏的單擊和雙擊動作的區(qū)分是在規(guī)定時間內(nèi)同一范圍坐標(biāo)內(nèi)的觸摸次數(shù);觸摸屏的移動動作的判斷是通過觸摸屏按下的時間和觸摸屏抬起時的不同坐標(biāo)值來實現(xiàn)的。觸摸屏動作判斷流程圖如圖6.18所示。本章提要132546觸摸屏模塊設(shè)計實例UART異步串口模塊實例A/D轉(zhuǎn)換器應(yīng)用實例LCD模塊設(shè)計
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 部編版道德與法治九年級下冊第二單元第三課《與世界緊相連第2框與世界深度互動》聽課評課記錄
- 2022版新課標(biāo)七年級上冊道德與法治第五課交友的智慧2課時聽課評課記錄
- 人教版數(shù)學(xué)九年級上冊《直接開平方法解方程》聽評課記錄3
- 人教版地理八年級下冊7.1《自然特征與農(nóng)業(yè)》聽課評課記錄
- 環(huán)境評估服務(wù)合同(2篇)
- 湘教版數(shù)學(xué)八年級上冊2.2《命題的證明》聽評課記錄2
- 北師大版道德與法治九年級上冊6.2《弘揚法治精神》聽課評課記錄
- 北京課改版歷史八年級上冊第10課《辛亥革命與中華民國建立》聽課評課記錄
- 湘教版數(shù)學(xué)七年級上冊《2.5整式的加法和減法(1)》聽評課記錄2
- 部編版八年級歷史上冊《第1課 鴉片戰(zhàn)爭》聽課評課記錄
- 2024年臨床醫(yī)師定期考核試題中醫(yī)知識題庫及答案(共330題) (二)
- 2025-2030年中國反滲透膜行業(yè)市場發(fā)展趨勢展望與投資策略分析報告
- 湖北省十堰市城區(qū)2024-2025學(xué)年九年級上學(xué)期期末質(zhì)量檢測道德與法治試題 (含答案)
- 山東省濰坊市2024-2025學(xué)年高三上學(xué)期1月期末 英語試題
- 春節(jié)節(jié)后收心會
- 《榜樣9》觀后感心得體會四
- 七年級下冊英語單詞表(人教版)-418個
- 2025年山東省濟(jì)寧高新區(qū)管委會“優(yōu)才”招聘20人歷年高頻重點提升(共500題)附帶答案詳解
- 2025年中國社會科學(xué)評價研究院第一批專業(yè)技術(shù)人員招聘2人歷年高頻重點提升(共500題)附帶答案詳解
- 交警安全進(jìn)校園課件
- (2024年高考真題)2024年普通高等學(xué)校招生全國統(tǒng)一考試數(shù)學(xué)試卷-新課標(biāo)Ⅰ卷(含部分解析)
評論
0/150
提交評論