




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、嵌入式系統(tǒng) 碩士研究生課程,第 9 章 南京郵電大學(xué)計(jì)算機(jī)學(xué)院,2,第9章 嵌入式軟件組件,本章主要介紹以下內(nèi)容: 概述 鍵盤(pán) LED顯示器 LCD顯示器 日歷時(shí)鐘 模擬量輸入 模擬量輸出 數(shù)字量/開(kāi)關(guān)量輸入輸出 異步串行通信UART,3,9.1 概述,使用軟件組件的優(yōu)點(diǎn): 提高開(kāi)發(fā)效率 提高開(kāi)發(fā)的可靠性 提高軟件的可移植性 適合于并行開(kāi)發(fā),4,9.2 鍵盤(pán),鍵盤(pán)模塊可用來(lái)輸入數(shù)據(jù)或者選擇控制設(shè)備的操作模式。 鍵盤(pán)有兩種方案:第一種是采用鍵盤(pán)接口芯片實(shí)現(xiàn)鍵盤(pán)掃描(如8279);第二種是用軟件實(shí)現(xiàn)鍵盤(pán)掃描。 鍵盤(pán)的基本電路是一個(gè)接觸開(kāi)關(guān),通、斷兩種狀態(tài)分別表示0和1。,圖1 一位鍵盤(pán)開(kāi)關(guān),圖2
2、按鍵抖動(dòng)示意圖,5,矩陣鍵盤(pán) 每個(gè)按鍵放置在每一行與每一列的交叉點(diǎn)。矩陣所需的鍵的數(shù)目根據(jù)應(yīng)用程序而不同。每一行由一根輸出端口線驅(qū)動(dòng),而每一列由一個(gè)電阻上拉且與一根輸入端口線連接。,6,矩陣鍵盤(pán)掃描算法 完成鍵的識(shí)別、消抖動(dòng)、給每個(gè)鍵分配一個(gè)稱(chēng)為掃描碼的唯一標(biāo)識(shí)符、處理組合鍵等功能。 接口函數(shù) 清除鍵盤(pán)緩沖區(qū)KeyClear() 讀取掃描碼KeyGet() 檢查鍵是否被按下KeyHit() 鍵盤(pán)模塊初始化KeyInit(),7,應(yīng)用舉例 (1) void UserTask(void *pdata) . for (; ;) . KeyClear ( ); /*清除鍵盤(pán)緩沖區(qū)*/ . ,8,(2)
3、讀取鍵盤(pán)掃描碼 函數(shù)原型:unsigned16 KeyGet(unsigned16 timeout) 輸入?yún)?shù):timeout:用時(shí)鐘脈沖個(gè)數(shù)規(guī)定的超時(shí)時(shí)間 void UserTask (void *pdata) unsigned16 scankey; . while(1) . scankey=KeyGet(10) ;/*超時(shí)時(shí)間為10 ticks */ ,9,(3)檢查鍵是否按下 函數(shù)原型: BOOLEAN KeyHit(void) 輸入/輸出參數(shù)無(wú) 返回參數(shù):TRUE 表示鍵盤(pán)緩沖區(qū)中有可以使用的鍵 FALSE表示沒(méi)有鍵被按下 void UserTask (void *pdata) uns
4、igned16 scankey; . while (1) . if (KeyHit () /*檢查是否有鍵被按下 */ scankey= KeyGet(); /* 是,讀取掃描碼 */ ,10,9.3 LED顯示器,LED基本電路,11,I/O端口直接驅(qū)動(dòng)LED,12,7段數(shù)碼管(分共陰極、共陽(yáng)極兩種),13,共陰極7段編碼表,14,數(shù)碼管動(dòng)態(tài)顯示電路,15,數(shù)碼管動(dòng)態(tài)顯示方法,使用兩個(gè)輸出端口,一個(gè)鎖存段碼(顯示的字符所對(duì)應(yīng)的編碼),一個(gè)鎖存位碼(控制哪一個(gè)數(shù)碼管顯示) 將全部數(shù)碼管的段碼引腳同名相連,然后分別連接到輸出端口P7-P0之一的引腳;每個(gè)數(shù)碼管的公共端引腳分別連接到另一個(gè)輸出端口
5、P7-P0之一的引腳(中間經(jīng)過(guò)反向驅(qū)動(dòng)器)。 輪流讓每一個(gè)數(shù)碼管分別顯示不同字型,如果每個(gè)數(shù)碼管顯示時(shí)間足夠快(大約20ms),則由于人的視覺(jué)效應(yīng),看到的則是穩(wěn)定的顯示效果。 優(yōu)點(diǎn)是硬件簡(jiǎn)單,缺點(diǎn)是數(shù)碼管必須不斷地刷新顯示,占用了CPU較多的時(shí)間。,16,接口函數(shù),LedInit() 初始化I/O端口、變量、顯示定時(shí)器、緩沖區(qū)等。 LedCear() 清除所有LED的顯示 LedDispChar(unsigned16 position,unsigned8 c,unsigned8 color,unsigned blink) 輸入?yún)?shù): (1)unsigned16 position:數(shù)碼管的位置碼
6、,最大支持65536個(gè) (2)unsigned8 c:顯示的字符代碼,ASCII碼表示,最高位表示小數(shù)點(diǎn)。 (3)unsigned8 color:數(shù)碼管的顏色,單色定義為0。 (4)unsigned8 blink:閃爍參數(shù),0:不閃爍;其他:閃爍,數(shù)值的大小表示閃爍的頻率。 Ledoff() 關(guān)閉顯示,但顯示緩沖區(qū)的內(nèi)容保持不變。 Ledon() 打開(kāi)顯示,與Ledoff()功能相反。,17,9.4 LCD顯示器,液晶顯示是一種被動(dòng)的顯示,它不能發(fā)光,只能使用周?chē)h(huán)境的光。它顯示圖案或字符只需很小能量。液晶顯示所用的液晶材料是一種兼有液態(tài)和固體雙重性質(zhì)的有機(jī)物,它的棒狀結(jié)構(gòu)在液晶盒內(nèi)一般平行排
7、列,但在電場(chǎng)作用下能改變其排列方向。 LCD的背光: EL(場(chǎng)致發(fā)光):2000-3000小時(shí),電流很低,但電壓較高(20V) LED光源:光源嵌在LCD后邊,功耗較大。 LCD類(lèi)型 字符LCD,屬于7段顯示器件,但功耗低 圖形LCD,可顯示圖形 定制LCD,如電子日歷等,18,LCD在系統(tǒng)中的連接,19,LCD接口函數(shù),LCD初始化 unsigned8 LcdInit(struct *LcdInitPara) 輸入?yún)?shù):LCD參數(shù)表,用結(jié)構(gòu)定義 返回參數(shù):0成功;其他,失敗 關(guān)閉和打開(kāi)顯示 void Lcdoff() void LcdOn() 清除LCD顯示屏 LcdClear(),20,顯
8、示字符串 用于在LCD指定位置顯示字符串 函數(shù)原型: void LcdDispStr(unsigned16 row,unsigned16 col,unsigned8 *pStr,unsigned32 color,unsigned8 font,unsigned8 size) 輸入?yún)?shù) (1)row:顯示位置的橫坐標(biāo),取值0水平最大分辨率1; (2)col:顯示位置的縱坐標(biāo),取值0垂直最大分辨率1 (3)*pStr:顯示字符串的指針 (4)color:顯示字符串的顏色,用R、G、B表示,每個(gè)顏色8位,最高字節(jié)保留; (5)font:顯示的字體; (6)size:顯示的字號(hào)大小,21,顯示像素點(diǎn) 在
9、LCD指定位置顯示一個(gè)像素點(diǎn)。 函數(shù)原型: void LcdPixel(unsigned16 row,unsigned16 col,unsigned32 color) 輸入?yún)?shù): (1)row:顯示位置的橫坐標(biāo),取值范圍0橫向最大分辨率1 (2)col:顯示位置的縱坐標(biāo),取值范圍0縱向最大分辨率1 (3)color:像素點(diǎn)的顏色:RGB表示方式,最高字節(jié)保留為0 畫(huà)線函數(shù)(略) 畫(huà)矩形函數(shù)(略) 畫(huà)弧線函數(shù)(略),22,9.5 日歷時(shí)鐘,日歷時(shí)鐘包括日歷數(shù)據(jù)(年、月、日)和時(shí)鐘數(shù)據(jù)(時(shí)、分、秒) 日歷時(shí)鐘實(shí)現(xiàn)方法 使用通用的定時(shí)器/計(jì)數(shù)器,不具有實(shí)時(shí)種功能 使用專(zhuān)用日歷時(shí)鐘芯片,可配外接電池,
10、具有實(shí)時(shí)鐘功能,23,日歷時(shí)鐘接口函數(shù),ClockInit() 初始化日歷時(shí)鐘模塊 ClockSetDate() 設(shè)置當(dāng)前日期 ClockSetTime() 設(shè)置當(dāng)前時(shí)間 ColckSetDateTime() 設(shè)置當(dāng)前日期和時(shí)間 ColckGetDate() 讀取當(dāng)前日期 ColockGetTime() 讀取當(dāng)前時(shí)間,ClockGetDateTime() 讀取當(dāng)前日期和時(shí)間 ClockFormatDate() 轉(zhuǎn)換當(dāng)前的時(shí)間為字符串格式 以上函數(shù)的有關(guān)參數(shù)要求見(jiàn)書(shū)中P411415,24,9.6模擬量輸入,模擬量輸入硬件結(jié)構(gòu),25,接口函數(shù),功能是讀取ADC的值 unsigned16 Analo
11、gInput(unsigned8 channel) 輸入?yún)?shù):模擬輸入的通道號(hào),0255 返回參數(shù):模擬轉(zhuǎn)換的結(jié)果,26,讀取模數(shù)轉(zhuǎn)換的方法,延遲方法 選擇模擬 啟動(dòng)ADC轉(zhuǎn)換 延遲一段時(shí)間 讀取模擬轉(zhuǎn)換的值 將讀取的值提交給應(yīng)用程序,27,查詢(xún)方法 選擇模擬通道 啟動(dòng)ADC轉(zhuǎn)換 判斷轉(zhuǎn)換是否完成,沒(méi)有完成等待,否則進(jìn)入下一步 轉(zhuǎn)換完成,讀取轉(zhuǎn)換的值 將讀取的值提交給應(yīng)用程序,28,中斷方法 需兩個(gè)程序模塊,一個(gè)是模數(shù)轉(zhuǎn)換的驅(qū)動(dòng)程序,一個(gè) 是模數(shù)轉(zhuǎn)換結(jié)束的ISR,29,驅(qū)動(dòng)程序偽代碼: unsigned16 AnalogInput(unsigned channel) /*選擇要讀取的輸入通道
12、*/ /*延遲,等待模擬多路開(kāi)關(guān)輸入信號(hào)穩(wěn)定*/ /*啟動(dòng)模數(shù)轉(zhuǎn)換*/ /*等待信號(hào)量SemaAD or 超時(shí)*/ if (超時(shí)) /* 模數(shù)轉(zhuǎn)換出錯(cuò)處理*/ else /*讀取轉(zhuǎn)換的結(jié)果并返回調(diào)用者 */ ,30,中斷服務(wù)例程如下: void IsrAD() /* 發(fā)出SemaAD(模數(shù)轉(zhuǎn)換結(jié)束信號(hào))*/ 以上方法要求中斷服務(wù)例程的執(zhí)行時(shí)間小于模數(shù)轉(zhuǎn)換的時(shí)間,31,9.7模擬量輸出,數(shù)/模轉(zhuǎn)換通道,32,接口函數(shù),void AnalogOutput(unsigned8 channel,unsigned32 value) 輸入?yún)?shù) (1)channel:通道號(hào),0255可表示256個(gè)通道 (2
13、)value:需要轉(zhuǎn)換的二進(jìn)制的數(shù)字量。,33,9.8數(shù)字量/開(kāi)關(guān)量輸入輸出,開(kāi)關(guān)量輸入/輸出接口,34,接口函數(shù),直接以字節(jié)為單位處理開(kāi)關(guān)量 IOWrite() /*完成開(kāi)關(guān)量的輸出*/ 原型:void IOWrite(unsigned address,unsigned8 value) 輸入?yún)?shù)(1)address:開(kāi)關(guān)量組的地址,一個(gè)開(kāi)關(guān)量組有8 個(gè)開(kāi)關(guān)量組成; (2)value:開(kāi)關(guān)量的值。 IORead() /*讀取開(kāi)關(guān)量 */ 原型:unsigned8 IORead(unsigned address) 輸入?yún)?shù):address:開(kāi)關(guān)量組的地址 返回參數(shù):讀取的開(kāi)關(guān)量組的值。 注意:讀
14、取的開(kāi)關(guān)量位于字節(jié)中的一位,應(yīng)用程序需要分離出所需的開(kāi)關(guān)量。,35,9.9異步串行通信UART,通信模式 單工,數(shù)據(jù)沿一個(gè)信道的單一方向傳送 半雙工,數(shù)據(jù)可以在一個(gè)信道的兩個(gè)方向傳送,但不能在同一時(shí)刻進(jìn)行傳送 全雙工,有兩條信道,數(shù)據(jù)可以同一時(shí)刻在兩個(gè)方向傳送。 串行通信模塊可以工作在查詢(xún)或中斷方式。為了提高處理器效率,通常采用中斷方式工作。,36,模塊實(shí)現(xiàn),接收數(shù)據(jù),37,接收中斷服務(wù)例程 ISR IsrUartRx(void) unsigned c; /*從通信控制器讀取收到的字符 */ if (接收隊(duì)列不滿) 把收到的字節(jié)放在環(huán)形隊(duì)列的對(duì)尾 . /* to do :中斷返回 */ els
15、e /*環(huán)形隊(duì)列滿 */ /*指出覆蓋錯(cuò)誤*/ /* 中斷返回*/ . ,38,應(yīng)用程序偽代碼 unsigned8 UartGetChar(void)/*從接收隊(duì)列中接收一個(gè)字節(jié),返回收到的字節(jié),如果環(huán)形隊(duì)列中沒(méi)有字節(jié),則返回NULL字符 */ unsigned8 c; c=NULL; /* to do:禁止中斷 */ . if (環(huán)形隊(duì)列不空) c=從環(huán)形隊(duì)列中讀取的字節(jié); /*to do 使能中斷 */ return c; ,39,發(fā)送數(shù)據(jù),40,發(fā)送應(yīng)用程序偽代碼 void UartPutChar(unsigned8 c) /*to do:禁止CPU中斷*/ if (發(fā)送環(huán)形隊(duì)列不滿)
16、/*把要發(fā)送的字符放到環(huán)形隊(duì)列尾部*/ if(此字符是隊(duì)列中的第一個(gè)字符) 使能發(fā)送中斷; else /*返回隊(duì)列溢出錯(cuò)誤 */ ,41,發(fā)送中斷服務(wù)例程 ISR UartCharSend(void) unsigned8 c; if(Uart的發(fā)送環(huán)形隊(duì)列不空 c=從環(huán)形隊(duì)列頭部取一個(gè)字符; 把字符輸出到Uart的發(fā)送端口; else 禁止發(fā)送中斷; 中斷返回; ,42,接口函數(shù),初始化 void UartInit(unsigned8 ch,unsigned8 baud,unsigned8 bits,unsigned8 parity,unsigned8 stops) 輸入?yún)?shù): (1)ch:UART通道,01 (2)baud:通信波特率,075bits,1=110bits, (3)bits:數(shù)據(jù)位數(shù),05個(gè)數(shù)據(jù)位,16個(gè)數(shù)據(jù)位,27個(gè)數(shù)據(jù)位,38個(gè)數(shù)據(jù)位 (4)parity:檢驗(yàn)位,0=無(wú)校驗(yàn)、1奇校驗(yàn)、2偶校驗(yàn) (5)stops:停止位數(shù)。,43,發(fā)送一個(gè)字符 void UartPutChar(unsigned8 ch,unsigned8 c) 輸入?yún)?shù):ch:通道號(hào) c:發(fā)送的字符 接收一個(gè)字符 unsigned8 UartGetChar(unsigned8 ch,unsigned8 *pStr) 輸入?yún)?shù):ch:通道號(hào) 輸出參數(shù):*pStr:指向接收字符的指
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 證券資產(chǎn)投資管理辦法
- 福田外賣(mài)區(qū)域管理辦法
- 外地項(xiàng)目安全管理辦法
- 科技培訓(xùn)機(jī)構(gòu)管理辦法
- 育兒護(hù)理培訓(xùn)課件
- 肩頸護(hù)理課件教學(xué)
- 肝硬化護(hù)理課件
- 肝癌的護(hù)理課件
- 如何有效培訓(xùn)課件
- 高考一檢數(shù)學(xué)試卷
- QCC品管圈活動(dòng)表格匯編
- 2023年貴州省社區(qū)工作者公開(kāi)招聘考試《公共基礎(chǔ)知識(shí)》專(zhuān)項(xiàng)題庫(kù)【真題精選+章節(jié)題庫(kù)+模擬試題】
- 出租車(chē)大包車(chē)合同
- 銀行副行長(zhǎng)個(gè)人簡(jiǎn)歷表格
- 第四講 堅(jiān)持以人民為中心PPT習(xí)概論2023優(yōu)化版教學(xué)課件
- 麻精藥品培訓(xùn)課件
- 醫(yī)院全員聘用制度和崗位聘任管理制度
- 粗紗機(jī)任務(wù)與工藝流程
- 探究食育課程對(duì)小班幼兒良好飲食習(xí)慣形成的作用 論文
- 湖北武漢洪山區(qū)招考聘用社區(qū)干事235人模擬檢測(cè)試卷【共1000題含答案解析】
- 12J4-2 《專(zhuān)用門(mén)窗》標(biāo)準(zhǔn)圖集
評(píng)論
0/150
提交評(píng)論