




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、嵌入式系統(tǒng) 碩士研究生課程,第 9 章 南京郵電大學(xué)計算機學(xué)院,2,第9章 嵌入式軟件組件,本章主要介紹以下內(nèi)容: 概述 鍵盤 LED顯示器 LCD顯示器 日歷時鐘 模擬量輸入 模擬量輸出 數(shù)字量/開關(guān)量輸入輸出 異步串行通信UART,3,9.1 概述,使用軟件組件的優(yōu)點: 提高開發(fā)效率 提高開發(fā)的可靠性 提高軟件的可移植性 適合于并行開發(fā),4,9.2 鍵盤,鍵盤模塊可用來輸入數(shù)據(jù)或者選擇控制設(shè)備的操作模式。 鍵盤有兩種方案:第一種是采用鍵盤接口芯片實現(xiàn)鍵盤掃描(如8279);第二種是用軟件實現(xiàn)鍵盤掃描。 鍵盤的基本電路是一個接觸開關(guān),通、斷兩種狀態(tài)分別表示0和1。,圖1 一位鍵盤開關(guān),圖2
2、按鍵抖動示意圖,5,矩陣鍵盤 每個按鍵放置在每一行與每一列的交叉點。矩陣所需的鍵的數(shù)目根據(jù)應(yīng)用程序而不同。每一行由一根輸出端口線驅(qū)動,而每一列由一個電阻上拉且與一根輸入端口線連接。,6,矩陣鍵盤掃描算法 完成鍵的識別、消抖動、給每個鍵分配一個稱為掃描碼的唯一標識符、處理組合鍵等功能。 接口函數(shù) 清除鍵盤緩沖區(qū)KeyClear() 讀取掃描碼KeyGet() 檢查鍵是否被按下KeyHit() 鍵盤模塊初始化KeyInit(),7,應(yīng)用舉例 (1) void UserTask(void *pdata) . for (; ;) . KeyClear ( ); /*清除鍵盤緩沖區(qū)*/ . ,8,(2)
3、讀取鍵盤掃描碼 函數(shù)原型:unsigned16 KeyGet(unsigned16 timeout) 輸入?yún)?shù):timeout:用時鐘脈沖個數(shù)規(guī)定的超時時間 void UserTask (void *pdata) unsigned16 scankey; . while(1) . scankey=KeyGet(10) ;/*超時時間為10 ticks */ ,9,(3)檢查鍵是否按下 函數(shù)原型: BOOLEAN KeyHit(void) 輸入/輸出參數(shù)無 返回參數(shù):TRUE 表示鍵盤緩沖區(qū)中有可以使用的鍵 FALSE表示沒有鍵被按下 void UserTask (void *pdata) uns
4、igned16 scankey; . while (1) . if (KeyHit () /*檢查是否有鍵被按下 */ scankey= KeyGet(); /* 是,讀取掃描碼 */ ,10,9.3 LED顯示器,LED基本電路,11,I/O端口直接驅(qū)動LED,12,7段數(shù)碼管(分共陰極、共陽極兩種),13,共陰極7段編碼表,14,數(shù)碼管動態(tài)顯示電路,15,數(shù)碼管動態(tài)顯示方法,使用兩個輸出端口,一個鎖存段碼(顯示的字符所對應(yīng)的編碼),一個鎖存位碼(控制哪一個數(shù)碼管顯示) 將全部數(shù)碼管的段碼引腳同名相連,然后分別連接到輸出端口P7-P0之一的引腳;每個數(shù)碼管的公共端引腳分別連接到另一個輸出端口
5、P7-P0之一的引腳(中間經(jīng)過反向驅(qū)動器)。 輪流讓每一個數(shù)碼管分別顯示不同字型,如果每個數(shù)碼管顯示時間足夠快(大約20ms),則由于人的視覺效應(yīng),看到的則是穩(wěn)定的顯示效果。 優(yōu)點是硬件簡單,缺點是數(shù)碼管必須不斷地刷新顯示,占用了CPU較多的時間。,16,接口函數(shù),LedInit() 初始化I/O端口、變量、顯示定時器、緩沖區(qū)等。 LedCear() 清除所有LED的顯示 LedDispChar(unsigned16 position,unsigned8 c,unsigned8 color,unsigned blink) 輸入?yún)?shù): (1)unsigned16 position:數(shù)碼管的位置碼
6、,最大支持65536個 (2)unsigned8 c:顯示的字符代碼,ASCII碼表示,最高位表示小數(shù)點。 (3)unsigned8 color:數(shù)碼管的顏色,單色定義為0。 (4)unsigned8 blink:閃爍參數(shù),0:不閃爍;其他:閃爍,數(shù)值的大小表示閃爍的頻率。 Ledoff() 關(guān)閉顯示,但顯示緩沖區(qū)的內(nèi)容保持不變。 Ledon() 打開顯示,與Ledoff()功能相反。,17,9.4 LCD顯示器,液晶顯示是一種被動的顯示,它不能發(fā)光,只能使用周圍環(huán)境的光。它顯示圖案或字符只需很小能量。液晶顯示所用的液晶材料是一種兼有液態(tài)和固體雙重性質(zhì)的有機物,它的棒狀結(jié)構(gòu)在液晶盒內(nèi)一般平行排
7、列,但在電場作用下能改變其排列方向。 LCD的背光: EL(場致發(fā)光):2000-3000小時,電流很低,但電壓較高(20V) LED光源:光源嵌在LCD后邊,功耗較大。 LCD類型 字符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)閉和打開顯示 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:顯示位置的橫坐標,取值0水平最大分辨率1; (2)col:顯示位置的縱坐標,取值0垂直最大分辨率1 (3)*pStr:顯示字符串的指針 (4)color:顯示字符串的顏色,用R、G、B表示,每個顏色8位,最高字節(jié)保留; (5)font:顯示的字體; (6)size:顯示的字號大小,21,顯示像素點 在
9、LCD指定位置顯示一個像素點。 函數(shù)原型: void LcdPixel(unsigned16 row,unsigned16 col,unsigned32 color) 輸入?yún)?shù): (1)row:顯示位置的橫坐標,取值范圍0橫向最大分辨率1 (2)col:顯示位置的縱坐標,取值范圍0縱向最大分辨率1 (3)color:像素點的顏色:RGB表示方式,最高字節(jié)保留為0 畫線函數(shù)(略) 畫矩形函數(shù)(略) 畫弧線函數(shù)(略),22,9.5 日歷時鐘,日歷時鐘包括日歷數(shù)據(jù)(年、月、日)和時鐘數(shù)據(jù)(時、分、秒) 日歷時鐘實現(xiàn)方法 使用通用的定時器/計數(shù)器,不具有實時種功能 使用專用日歷時鐘芯片,可配外接電池,
10、具有實時鐘功能,23,日歷時鐘接口函數(shù),ClockInit() 初始化日歷時鐘模塊 ClockSetDate() 設(shè)置當(dāng)前日期 ClockSetTime() 設(shè)置當(dāng)前時間 ColckSetDateTime() 設(shè)置當(dāng)前日期和時間 ColckGetDate() 讀取當(dāng)前日期 ColockGetTime() 讀取當(dāng)前時間,ClockGetDateTime() 讀取當(dāng)前日期和時間 ClockFormatDate() 轉(zhuǎn)換當(dāng)前的時間為字符串格式 以上函數(shù)的有關(guān)參數(shù)要求見書中P411415,24,9.6模擬量輸入,模擬量輸入硬件結(jié)構(gòu),25,接口函數(shù),功能是讀取ADC的值 unsigned16 Analo
11、gInput(unsigned8 channel) 輸入?yún)?shù):模擬輸入的通道號,0255 返回參數(shù):模擬轉(zhuǎn)換的結(jié)果,26,讀取模數(shù)轉(zhuǎn)換的方法,延遲方法 選擇模擬 啟動ADC轉(zhuǎn)換 延遲一段時間 讀取模擬轉(zhuǎn)換的值 將讀取的值提交給應(yīng)用程序,27,查詢方法 選擇模擬通道 啟動ADC轉(zhuǎn)換 判斷轉(zhuǎn)換是否完成,沒有完成等待,否則進入下一步 轉(zhuǎn)換完成,讀取轉(zhuǎn)換的值 將讀取的值提交給應(yīng)用程序,28,中斷方法 需兩個程序模塊,一個是模數(shù)轉(zhuǎn)換的驅(qū)動程序,一個 是模數(shù)轉(zhuǎn)換結(jié)束的ISR,29,驅(qū)動程序偽代碼: unsigned16 AnalogInput(unsigned channel) /*選擇要讀取的輸入通道
12、*/ /*延遲,等待模擬多路開關(guān)輸入信號穩(wěn)定*/ /*啟動模數(shù)轉(zhuǎn)換*/ /*等待信號量SemaAD or 超時*/ if (超時) /* 模數(shù)轉(zhuǎn)換出錯處理*/ else /*讀取轉(zhuǎn)換的結(jié)果并返回調(diào)用者 */ ,30,中斷服務(wù)例程如下: void IsrAD() /* 發(fā)出SemaAD(模數(shù)轉(zhuǎn)換結(jié)束信號)*/ 以上方法要求中斷服務(wù)例程的執(zhí)行時間小于模數(shù)轉(zhuǎn)換的時間,31,9.7模擬量輸出,數(shù)/模轉(zhuǎn)換通道,32,接口函數(shù),void AnalogOutput(unsigned8 channel,unsigned32 value) 輸入?yún)?shù) (1)channel:通道號,0255可表示256個通道 (2
13、)value:需要轉(zhuǎn)換的二進制的數(shù)字量。,33,9.8數(shù)字量/開關(guān)量輸入輸出,開關(guān)量輸入/輸出接口,34,接口函數(shù),直接以字節(jié)為單位處理開關(guān)量 IOWrite() /*完成開關(guān)量的輸出*/ 原型:void IOWrite(unsigned address,unsigned8 value) 輸入?yún)?shù)(1)address:開關(guān)量組的地址,一個開關(guān)量組有8 個開關(guān)量組成; (2)value:開關(guān)量的值。 IORead() /*讀取開關(guān)量 */ 原型:unsigned8 IORead(unsigned address) 輸入?yún)?shù):address:開關(guān)量組的地址 返回參數(shù):讀取的開關(guān)量組的值。 注意:讀
14、取的開關(guān)量位于字節(jié)中的一位,應(yīng)用程序需要分離出所需的開關(guān)量。,35,9.9異步串行通信UART,通信模式 單工,數(shù)據(jù)沿一個信道的單一方向傳送 半雙工,數(shù)據(jù)可以在一個信道的兩個方向傳送,但不能在同一時刻進行傳送 全雙工,有兩條信道,數(shù)據(jù)可以同一時刻在兩個方向傳送。 串行通信模塊可以工作在查詢或中斷方式。為了提高處理器效率,通常采用中斷方式工作。,36,模塊實現(xiàn),接收數(shù)據(jù),37,接收中斷服務(wù)例程 ISR IsrUartRx(void) unsigned c; /*從通信控制器讀取收到的字符 */ if (接收隊列不滿) 把收到的字節(jié)放在環(huán)形隊列的對尾 . /* to do :中斷返回 */ els
15、e /*環(huán)形隊列滿 */ /*指出覆蓋錯誤*/ /* 中斷返回*/ . ,38,應(yīng)用程序偽代碼 unsigned8 UartGetChar(void)/*從接收隊列中接收一個字節(jié),返回收到的字節(jié),如果環(huán)形隊列中沒有字節(jié),則返回NULL字符 */ unsigned8 c; c=NULL; /* to do:禁止中斷 */ . if (環(huán)形隊列不空) c=從環(huán)形隊列中讀取的字節(jié); /*to do 使能中斷 */ return c; ,39,發(fā)送數(shù)據(jù),40,發(fā)送應(yīng)用程序偽代碼 void UartPutChar(unsigned8 c) /*to do:禁止CPU中斷*/ if (發(fā)送環(huán)形隊列不滿)
16、/*把要發(fā)送的字符放到環(huán)形隊列尾部*/ if(此字符是隊列中的第一個字符) 使能發(fā)送中斷; else /*返回隊列溢出錯誤 */ ,41,發(fā)送中斷服務(wù)例程 ISR UartCharSend(void) unsigned8 c; if(Uart的發(fā)送環(huán)形隊列不空 c=從環(huán)形隊列頭部取一個字符; 把字符輸出到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個數(shù)據(jù)位,16個數(shù)據(jù)位,27個數(shù)據(jù)位,38個數(shù)據(jù)位 (4)parity:檢驗位,0=無校驗、1奇校驗、2偶校驗 (5)stops:停止位數(shù)。,43,發(fā)送一個字符 void UartPutChar(unsigned8 ch,unsigned8 c) 輸入?yún)?shù):ch:通道號 c:發(fā)送的字符 接收一個字符 unsigned8 UartGetChar(unsigned8 ch,unsigned8 *pStr) 輸入?yún)?shù):ch:通道號 輸出參數(shù):*pStr:指向接收字符的指
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報書 周以華
- 初中課題立項申報書
- 廠房委托招商合同范本
- 省級高校教改課題申報書
- 醫(yī)療維修托管合同范本
- 咨詢產(chǎn)品服務(wù)合同范本
- 美學(xué)課題申報書格式要求
- 研究生課題申報書分工
- 出境加工合同范例
- 關(guān)于郵寄合同范本
- 部編版小學(xué)(2024版)小學(xué)道德與法治一年級下冊《有個新目標》-第一課時教學(xué)課件
- 2024年湖南汽車工程職業(yè)學(xué)院單招職業(yè)技能測試題庫標準卷
- 20S515 鋼筋混凝土及磚砌排水檢查井
- (正式版)HGT 6313-2024 化工園區(qū)智慧化評價導(dǎo)則
- 地球上的大氣知識結(jié)構(gòu)圖
- 線束加工工時對照表
- 一年級古詩新唱社團計劃
- 新加坡SM1向性測試模擬試卷
- 美國小企業(yè)投資公司計劃(SBIC)
- 商務(wù)演示模版
- 美國簽證在職證明中英文模板.doc
評論
0/150
提交評論