《單片機(jī)原理與應(yīng)用》課件第7章_第1頁
《單片機(jī)原理與應(yīng)用》課件第7章_第2頁
《單片機(jī)原理與應(yīng)用》課件第7章_第3頁
《單片機(jī)原理與應(yīng)用》課件第7章_第4頁
《單片機(jī)原理與應(yīng)用》課件第7章_第5頁
已閱讀5頁,還剩184頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

項(xiàng)目七顯示與鍵盤接口技術(shù)

7.1項(xiàng)目基本技能

7.2項(xiàng)目基本知識7.3技能拓展7.4互動(dòng)環(huán)節(jié)7.5習(xí)題7.1項(xiàng)目基本技能

1.任務(wù)要求單片機(jī)控制1個(gè)LED數(shù)碼管,每隔1秒依次循環(huán)顯示0~9,實(shí)現(xiàn)一位數(shù)的簡易秒表。

2.硬件電路設(shè)計(jì)

1)電路圖電路圖如圖7-1所示?!救蝿?wù)目標(biāo)】

(1)能夠正確使用IE瀏覽器。

(2)能夠使用常用搜索引擎搜索資料。

(3)能夠保存網(wǎng)頁、文字和圖片等網(wǎng)絡(luò)資源。

(4)能夠從網(wǎng)上下載文件。

(5)了解互聯(lián)網(wǎng)的基本概念和原理。圖7-1簡易秒表原理圖

2)電路圖說明在圖7-1中,用單片機(jī)的P1口控制一個(gè)共陽LED數(shù)碼管,該數(shù)碼管內(nèi)部由8個(gè)發(fā)光二極管組合而成,其中陽極連接在一起作為公共端,通過510Ω限流電阻連接+5V,

P1.0~P1.7分別連接到數(shù)碼管的8個(gè)陰極(段控制端),向P1口輸出相應(yīng)字型碼即可顯示數(shù)字0~9。對于共陽極數(shù)碼管,當(dāng)連接段控制端的I/O引腳輸出低電平時(shí),相應(yīng)段的發(fā)光管點(diǎn)亮。

因?yàn)橹豢刂埔粋€(gè)數(shù)碼管,選擇采取一直點(diǎn)亮各段的靜態(tài)顯示方式。這種顯示方式可在較小的電流驅(qū)動(dòng)下獲得較高的顯示亮度,且占用CPU時(shí)間少,編程簡單,便于顯示和控制。數(shù)碼管的每段發(fā)光二極管管壓降約為1.5V,允許通過的電流一般在5~20mA。電流過低,則亮度不夠;電流過大,則導(dǎo)致數(shù)碼管損壞。將數(shù)碼管接入實(shí)際電路時(shí),應(yīng)串接一個(gè)限流電阻,這樣既保持合適亮度,又保證其安全。圖7-1中在公共端接了510Ω的限流電阻,數(shù)碼管字段導(dǎo)通電流約為6mA。

3.軟件設(shè)計(jì)

1)設(shè)計(jì)思路與方法按照任務(wù)要求,每隔1秒鐘,數(shù)碼管顯示數(shù)據(jù)增1??梢姳境绦蛞浴矮@取及送顯示數(shù)據(jù)”為核心,顯示數(shù)據(jù)依次為“0~9”,共10個(gè)數(shù)字的字型碼,可將其列表存放在程序存儲(chǔ)器的固定區(qū)域,需要顯示某數(shù)字時(shí),通過查表指令獲取該數(shù)字對應(yīng)的字型碼,送P1口控制數(shù)碼管顯示。為保證每隔一秒加1,還要有延時(shí)1秒的子程序,這里采用定時(shí)器1實(shí)現(xiàn)1秒延時(shí)。為保證在“0~9”之間循環(huán),要判定循環(huán)次數(shù),因此主程序采用循環(huán)結(jié)構(gòu)。

2)流程圖程序流程圖如圖7-2所示。圖7-2簡易秒表流程圖

3)指令代碼

(1)編寫匯編語言代碼。用匯編語言編寫的指令代碼如下:

MOVCA,@A+DPTR指令常用于查表程序的實(shí)現(xiàn)?!癅A+DPTR”中A為無符號整數(shù),實(shí)際操作源數(shù)據(jù)的地址為“A+DPTR”,可見DPTR為指針的基址,通常指向表的開頭,“A”相當(dāng)于偏移量。表頭DPTR存放的數(shù)據(jù)通常保持不變,當(dāng)“A”內(nèi)的數(shù)據(jù)改變時(shí),取出的數(shù)據(jù)將跟著“A”的值而發(fā)生改變,最終的目標(biāo)數(shù)據(jù)存放在“A”中。(2)編寫C語言代碼。用C語言編寫的指令代碼如下:

在程序中,首先定義led數(shù)組來存放數(shù)字0~9的顯示字型碼,再使用P1=led[i]將字型碼送到P1口控制LED顯示相應(yīng)數(shù)字。在C語言中,將數(shù)組元素的下標(biāo)作為循環(huán)控制變量是最常見的數(shù)組應(yīng)用方法。

4.電路板制作

1)元器件清單表7-1為簡易秒表元器件清單。表7-1簡易秒表元器件清單

2)簡易秒表電路的面包板制作簡易秒表電路的面包板實(shí)物如圖7-3所示。

3)調(diào)試運(yùn)行在Keil環(huán)境中,對源程序A7_1.ASM或C7_1.C進(jìn)行編輯、匯編或編譯,生成機(jī)器代碼并下載到芯片里。接通電路板電源,可觀察到一位簡易秒表按照“0~9”的順序循環(huán)顯示。圖7-3簡易秒表電路任務(wù)2基于LED點(diǎn)陣顯示的簡易秒表設(shè)計(jì)

1.任務(wù)要求單片機(jī)控制1個(gè)8?×?8LED點(diǎn)陣顯示模塊,每隔1秒依次循環(huán)顯示0~9,實(shí)現(xiàn)一位數(shù)的簡易秒表。

2.硬件電路設(shè)計(jì)

1)電路圖電路圖如圖7-4所示。圖7-4基于LED大屏幕顯示的簡易秒表原理圖

2)電路圖說明

LED點(diǎn)陣顯示是把很多LED按矩陣方式排列在一起,通過對各LED發(fā)光與不發(fā)光的控制完成各種字符或圖形的顯示,8?×?8LED點(diǎn)陣分別由8行和8列來控制。在圖7-4中,用單片機(jī)的P1口控制點(diǎn)陣屏的8行,用P0口控制點(diǎn)陣屏的8列。實(shí)際應(yīng)用中,P0口控制列線需串聯(lián)一個(gè)300Ω左右的限流電阻。同時(shí),為了提高單片機(jī)端口帶負(fù)載的能力,通常在端口和外接負(fù)載之間增加一個(gè)緩沖驅(qū)動(dòng)器,圖7-4中P1口通過74LS245與點(diǎn)陣連接,既保證了點(diǎn)陣的亮度,又能保護(hù)單片機(jī)的引腳。

3.軟件設(shè)計(jì)

1)設(shè)計(jì)思路與方法對于LED點(diǎn)陣顯示,通常采用動(dòng)態(tài)掃描顯示方式。動(dòng)態(tài)顯示方法的設(shè)計(jì)思路大致如下:首先選中8?×?8LED的某一行,然后用查表指令得到這一行要點(diǎn)亮的狀態(tài)所對應(yīng)的列型碼,并送到相應(yīng)端口,延時(shí)一定時(shí)間(1ms)后,再選中下一行,重復(fù)上述過程,如此循環(huán)直至8行均顯示一遍,運(yùn)行時(shí)間約為8ms,然后再從第一行開始循環(huán)若干次,利用人眼的視覺暫留作用,在8?×?8LED點(diǎn)陣屏上可看到穩(wěn)定的圖形。本設(shè)計(jì)的簡易秒表要求每隔1s顯示數(shù)字循環(huán)遞增,因此每個(gè)數(shù)字需要循環(huán)掃描大約125次,這樣每個(gè)數(shù)字顯示的時(shí)間約為1s。

2)流程圖程序流程圖如圖7-5所示。圖7-5基于LED點(diǎn)陣顯示的簡易秒表流程圖

3)指令代碼

(1)編寫匯編語言代碼。用匯編語言編寫的指令代碼如下:

要實(shí)現(xiàn)LED點(diǎn)陣穩(wěn)定顯示,必須遵循動(dòng)態(tài)掃描的規(guī)律。受50Hz閃爍頻率的限制,每行點(diǎn)亮后的延時(shí)時(shí)間不能太長,應(yīng)保證掃描所有8行(即一幀數(shù)據(jù))所用時(shí)間之和在20ms內(nèi)。在上面的程序中,后面給出了共陽極LED點(diǎn)陣顯示屏“0~9”的顯示字符表格。如果在實(shí)際電路中所接的LED點(diǎn)陣為共陰極,則只需要在MOVCA,@A+DPTR語句后的累加器A的取反指令CPLA去掉即可。

(2)編寫C語言代碼。用C語言編寫的指令代碼如下:

4.電路板制作

1)元器件清單基于LED點(diǎn)陣簡易秒表設(shè)計(jì)電路元器件清單如表7-2所示。表7-2基于LED點(diǎn)陣簡易秒表設(shè)計(jì)電路元器件清單

2)簡易秒表電路的面包板制作基于LED點(diǎn)陣的簡易秒表電路面包板實(shí)物如圖7-6所示。圖7-6基于LED點(diǎn)陣顯示的簡易秒表電路

3)調(diào)試運(yùn)行在Keil環(huán)境中,對源程序A7_2.ASM或C7_2.C進(jìn)行編輯、匯編或編譯,生成機(jī)器代碼并下載到芯片里。接通電路板電源,可觀察到LED點(diǎn)陣每隔1秒循環(huán)顯示“0~9”。任務(wù)3獨(dú)立式鍵盤的應(yīng)用—簡易計(jì)數(shù)器

1.任務(wù)要求單片機(jī)控制1個(gè)計(jì)數(shù)按鍵,通過LED數(shù)碼管顯示鍵按下的次數(shù)。在開始未有鍵按下時(shí),LED數(shù)碼管顯示為0,隨后每按下一次鍵使計(jì)數(shù)值加1,當(dāng)計(jì)滿15次后再從1開始重新計(jì)數(shù),計(jì)數(shù)值“10~15”用“A~F”來表示。

2.硬件電路設(shè)計(jì)

1)電路圖電路圖如圖7-7所示。圖7-7簡易計(jì)數(shù)器原理圖

2)電路圖說明單片機(jī)的P2.0口連接一個(gè)計(jì)數(shù)按鍵,未按下時(shí)P2.0口為高電平,按下后變?yōu)榈碗娖健1口驅(qū)動(dòng)一個(gè)共陽極LED數(shù)碼管,來顯示計(jì)數(shù)值。

3.軟件設(shè)計(jì)

1)設(shè)計(jì)方法本設(shè)計(jì)中涉及到的LED數(shù)碼管顯示已經(jīng)在本項(xiàng)目任務(wù)1中進(jìn)行了訓(xùn)練,此處不再贅述。本任務(wù)的重點(diǎn)是學(xué)習(xí)獨(dú)立式按鍵掃描程序的編寫,包括判斷有無按鍵按下,延時(shí)去抖動(dòng),判斷按鍵是否釋放等內(nèi)容。這里采用查詢方法,利用位判斷指令實(shí)現(xiàn)按鍵掃描功能。

2)流程圖程序流程圖如圖7-8所示。圖7-8簡易計(jì)數(shù)器流程圖

3)指令代碼

(1)編寫匯編語言代碼。用匯編語言編寫的指令代碼如下:

程序中的$代表當(dāng)前指令的地址,它是唯一一個(gè)不需要定義的地址標(biāo)號。

(2)編寫C語言代碼。用C語言編寫的指令代碼如下:

4.電路板制作

1)元器件清單簡易計(jì)數(shù)器元器件清單如表7-3所示。表7-3簡易計(jì)數(shù)器元器件清單

2)簡易計(jì)數(shù)器電路的面包板制作簡易計(jì)數(shù)器電路面包板實(shí)物如圖7-9所示。圖7-9簡易計(jì)數(shù)器電路

3)調(diào)試運(yùn)行在Keil環(huán)境中,對源程序A7_3.ASM或C7_3.C進(jìn)行編輯、匯編或編譯,生成機(jī)器代碼并下載到芯片里。接通電路板電源,當(dāng)按下按鍵后,LED數(shù)碼管會(huì)顯示按鍵按下的次數(shù)。任務(wù)4中斷掃描方式的矩陣式鍵盤設(shè)計(jì)

1.任務(wù)要求采用中斷掃描方式設(shè)計(jì)4×4矩陣鍵盤,當(dāng)某個(gè)鍵被按下時(shí),LED數(shù)碼管顯示相應(yīng)按鍵的鍵值。

2.硬件電路設(shè)計(jì)

1)電路圖電路圖如圖7-10所示。圖7-104?×?4矩陣鍵盤電路原理圖

2)電路圖說明

4?×?4矩陣鍵盤的4根行線連接到P0口的低四位,4根列線連接到P0口的高四位。按照矩陣式鍵盤的掃描方法可知,P0.0~P0.3為掃描輸入線,P0.4~P0.7為鍵輸出線。圖中的與門用于產(chǎn)生按鍵中斷,其輸入端與各行線相連,再通過上拉電阻接至+5V電源,輸出端接至外部中斷0的輸入端P3.2。LED數(shù)碼管通過單片機(jī)的P1口控制。

具體工作過程如下:當(dāng)鍵盤沒有鍵按下時(shí),與門各輸入端均為高電平,與門輸出端也保持高電平;當(dāng)有鍵被按下時(shí),與門輸入端有低電平,相應(yīng)地與門輸出端變?yōu)榈碗娖剑瑥亩刂芇3.2向CPU申請中斷,若CPU開放外部中斷,則會(huì)響應(yīng)中斷請求,轉(zhuǎn)去執(zhí)行鍵盤掃描程序并獲得對應(yīng)鍵值,最終通過LED數(shù)碼管顯示。

在單片機(jī)應(yīng)用系統(tǒng)中,若僅需要幾個(gè)按鍵時(shí),常采用獨(dú)立式按鍵結(jié)構(gòu)。獨(dú)立式按鍵方式每個(gè)按鍵占用一根I/O口線,當(dāng)按鍵較多時(shí),I/O口線浪費(fèi)較大,此時(shí)常采用矩陣式鍵盤結(jié)構(gòu)。在單片機(jī)應(yīng)用系統(tǒng)中,鍵盤掃描是CPU的主要工作之一。CPU對鍵盤的響應(yīng)取決于鍵盤的工作方式,常見的工作方式有三種,即編程掃描、定時(shí)掃描和中斷掃描。采用前兩種工作方式時(shí),無論是否有鍵按下,CPU都要掃描鍵盤,而實(shí)際應(yīng)用時(shí)操作人員使用按鍵的次數(shù)和時(shí)間是非常有限的,采用前兩種方式會(huì)大量占用單片機(jī)的運(yùn)行時(shí)間,使其他程序的運(yùn)行受限。因此,在實(shí)際工程中,單片機(jī)系統(tǒng)較多采用中斷掃描方式。

3.軟件設(shè)計(jì)

1)設(shè)計(jì)思路及方法本任務(wù)的重點(diǎn)是如何獲得被按鍵的鍵值,在這過程中需要解決如下幾個(gè)問題:

(1)保證有鍵按下時(shí)能觸發(fā)外部中斷0,產(chǎn)生中斷請求。這個(gè)可通過向P0口的高四位輸入0來實(shí)現(xiàn)。

(2)消除按鍵抖動(dòng)的影響。在鍵盤掃描中斷服務(wù)子程序中,用定時(shí)器T1延時(shí)10ms,然后再次判斷鍵盤狀態(tài),如果仍為有鍵按下狀態(tài),則認(rèn)為有一個(gè)鍵被按下,否則當(dāng)做按鍵抖動(dòng)處理,中斷服務(wù)子程序返回。

(3)獲得鍵值。為了能定位是哪一列的按鍵被按下,一次只能向某一列輸出0,并掃描檢測所有的行。當(dāng)4列循環(huán)掃描一遍后,所有16個(gè)鍵就都得到了檢測。確定了具體哪個(gè)按鍵按下后,可根據(jù)下面公式計(jì)算鍵值:鍵值=行首鍵號+列號。

(4)判斷閉合鍵是否釋放。按鍵閉合一次只能進(jìn)行一次功能操作。因此要等按鍵釋放后才能根據(jù)鍵值執(zhí)行相應(yīng)的操作。

2)流程圖根據(jù)上述思路,可分別畫出主程序及鍵盤掃描中斷服務(wù)子程序的流程圖如圖7-11和圖7-12所示。圖7-11主程序流程圖

圖7-12鍵盤掃描中斷服務(wù)子程序流程圖

3)指令代碼

(1)編寫匯編語言代碼。用匯編語言編寫的指令代碼如下:

在程序中,通過SETBIT0語句設(shè)置外部中斷0為邊沿觸發(fā)模式。采用此種模式的優(yōu)點(diǎn)是CPU在響應(yīng)中斷后,由硬件自動(dòng)清除其中斷標(biāo)志位IE0,無需采取其他措施。若外部中斷采用單片機(jī)復(fù)位后默認(rèn)的電平觸發(fā)模式,其中斷請求的撤銷方法比較復(fù)雜,既不能通過硬件自動(dòng)清除,也不能用軟件將其清除,而需要通過硬件再配合相應(yīng)軟件才能清除外部中斷的標(biāo)志位。

4×4矩陣鍵盤的行號、列號和鍵值如圖7-13所示。鍵值與行號和列號之間的關(guān)系為:鍵值=行號×4+列號。圖7-134?×?4矩陣鍵盤的行號、列號和鍵值(2)編寫C語言代碼。用C語言編寫的指令代碼如下:4.電路板制作1)元件清單4?×?4矩陣鍵盤元器件清單如表7-4所示。表7-44?×?4矩陣鍵盤元器件清單2)?4?×?4矩陣鍵盤電路的面包板制作矩陣鍵盤電路面包板實(shí)物如圖7-14所示。圖7-144?×?4矩陣鍵盤電路

3)調(diào)試運(yùn)行在Keil環(huán)境中,對源程序A7_4.ASM或C7_4.C進(jìn)行編輯、匯編或編譯,生成機(jī)器代碼并下載到芯片里。接通電路板電源,按下任意按鍵,LED數(shù)碼管可顯示相應(yīng)按鍵的鍵值。知識點(diǎn)1顯示接口技術(shù)

顯示器是人機(jī)對話不可或缺的部分,單片機(jī)應(yīng)用系統(tǒng)中,常采用LED顯示器(包括發(fā)光二極管、數(shù)碼管、大屏幕點(diǎn)陣等)、LCD液晶顯示器及VFD熒光顯示屏等。其中,LED顯示器亮度較高,使用最方便;LCD顯示器最為省電;VFD顯示美觀清晰。這里主要介紹LED顯示,LCD顯示將在后面綜合訓(xùn)練中介紹。7.2項(xiàng)目基本知識

1.LED數(shù)碼管

1)結(jié)構(gòu)及工作原理

LED數(shù)碼管是一種半導(dǎo)體發(fā)光器件,其基本單元是發(fā)光二極管,它被廣泛用于儀表、時(shí)鐘、家電等場合。數(shù)碼管按段數(shù)分為七段數(shù)碼管和八段數(shù)碼管,按能顯示的位數(shù)分為1位、2位、3位數(shù)碼管等,按顏色有紅,綠,藍(lán),黃等幾種,其外形如圖7-15所示。七段數(shù)碼管由七個(gè)發(fā)光二極管組成“8”字形構(gòu)成,八段數(shù)碼管比七段數(shù)碼管多一個(gè)小數(shù)點(diǎn)顯示,這些段分別由字母a、b、c、d、e、f、g、dp來表示,其外部引腳如圖7-16所示。當(dāng)數(shù)碼管特定的段加上電壓后,這些特定的段就會(huì)點(diǎn)亮,通過不同的發(fā)光字段組合可用來顯示數(shù)字0~9、字符A~F、H、L、P、R、U、Y、符號“-”及小數(shù)點(diǎn)“.”等。圖7-15LED數(shù)碼管

圖7-16LED數(shù)碼管外部引腳

依據(jù)內(nèi)部發(fā)光二極管單元連接方式的不同,LED數(shù)碼管可分為共陽極和共陰極兩種結(jié)構(gòu)。共陽數(shù)碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM)的數(shù)碼管,其陰極作為段控制端。共陽數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到?+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時(shí),相應(yīng)字段就點(diǎn)亮,反之則不亮。共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管,其陽極作為段控制端。共陰數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接地,當(dāng)某一字段發(fā)光二極管的陽極為高電平時(shí),相應(yīng)字段就點(diǎn)亮,反之則不亮。共陽極數(shù)碼管和共陰極數(shù)碼管的內(nèi)部結(jié)構(gòu)示意圖分別如圖7-17(a)和圖7-17(b)所示。圖7-17LED數(shù)碼管內(nèi)部結(jié)構(gòu)示意圖

2)字形編碼根據(jù)LED數(shù)碼管的結(jié)構(gòu)原理可知,當(dāng)提供給段控制端不同數(shù)據(jù)時(shí),數(shù)碼管就能顯示出不同的字符,我們把這個(gè)數(shù)據(jù)稱為“段碼”或“字形碼”。顯然,不同的字符需要不同的段碼。八段LED數(shù)碼管共計(jì)8段,正好一個(gè)字節(jié),習(xí)慣上將“a”段對應(yīng)段碼的最低位,數(shù)碼管各段與字節(jié)中各位對應(yīng)關(guān)系如表7-5所示。表7-6給出了LED數(shù)碼管的段碼表。表7-5段碼數(shù)據(jù)格式表7-6LED數(shù)碼管段碼表

3)顯示方式

LED顯示分為靜態(tài)顯示方式和動(dòng)態(tài)顯示方式兩種。靜態(tài)顯示方式是指數(shù)碼管的每一個(gè)段碼都由一個(gè)I/O口驅(qū)動(dòng),每一個(gè)發(fā)光二極管連續(xù)顯示直至CPU刷新輸出數(shù)據(jù)。圖7-18給出了四位LED數(shù)碼管靜態(tài)顯示的電路圖,可見要驅(qū)動(dòng)四個(gè)數(shù)碼管靜態(tài)顯示需要32個(gè)I/O端口。靜態(tài)顯示的優(yōu)點(diǎn)是編程簡單,顯示亮度高,缺點(diǎn)是占用I/O端口多。它一般適用于顯示位數(shù)較少的場合。為了克服靜態(tài)顯示方式的缺點(diǎn),節(jié)省I/O口線,人們常使用動(dòng)態(tài)顯示方式。圖7-18四位LED數(shù)碼管靜態(tài)顯示電路圖

動(dòng)態(tài)顯示方式是將所有數(shù)碼管的8個(gè)顯示筆劃“a、b、c、d、e、f、g、dp”的同名端連在一起,另外為每個(gè)數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出段碼時(shí),所有數(shù)碼管都接收到相同的段碼,但究竟是哪個(gè)數(shù)碼管會(huì)顯示出字形,取決于單片機(jī)對位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會(huì)亮。通過分時(shí)輪流控制各個(gè)數(shù)碼管的COM端,可使各個(gè)數(shù)碼管輪流顯示,這就是動(dòng)態(tài)顯示。在輪流顯示過程中,每位數(shù)碼管的點(diǎn)亮?xí)r間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位數(shù)碼管并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感。動(dòng)態(tài)顯示方式能夠節(jié)省大量的I/O端口,而且功耗更低。圖7-19所示為一個(gè)4位八段LED數(shù)碼管的動(dòng)態(tài)顯示電路,其中段碼線占用一個(gè)8位I/O口,位選線占用一個(gè)4位I/O口。圖7-19四位LED數(shù)碼管動(dòng)態(tài)顯示電路圖

為了更深刻地了解動(dòng)態(tài)顯示方式,圖7-20給出一個(gè)8位LED數(shù)碼管動(dòng)態(tài)顯示2012.12.12的過程。這里所用的數(shù)碼管均為共陰極數(shù)碼管,圖7-20(a)為顯示過程,8個(gè)數(shù)碼管從低到高依次被選通;圖7-20(b)為實(shí)際的顯示結(jié)果,人眼看到的是8位穩(wěn)定且同時(shí)顯示的字符。圖7-208位LED數(shù)碼管的動(dòng)態(tài)顯示過程及結(jié)果

2.LED點(diǎn)陣顯示器

LED點(diǎn)陣顯示器是把若干發(fā)光二極管按矩陣方式排列在一起,通過對每個(gè)發(fā)光二極管進(jìn)行發(fā)光控制以完成各種字符或圖形顯示。LED點(diǎn)陣顯示器具有亮度高、工作電壓低、功耗小、小型化、壽命長、耐沖擊和性能穩(wěn)定等優(yōu)點(diǎn),可以顯示變化的數(shù)字、文字、圖形圖像,廣泛用在車站、碼頭、商場、醫(yī)院等公共場所,圖7-21給出了LED點(diǎn)陣顯示器在實(shí)際生活中的應(yīng)用實(shí)例。圖7-21LED點(diǎn)陣顯示器的應(yīng)用實(shí)例常見的LED點(diǎn)陣顯示器有5?×?7(5列7行)、7?×?9、8?×?8等結(jié)構(gòu),按極性排列方式又可分為共陽極和共陰極。圖7-22為8?×?8LED點(diǎn)陣的外觀及內(nèi)部結(jié)構(gòu)示意圖,8?×?8點(diǎn)陣共由64個(gè)發(fā)光二極管組成,且每個(gè)發(fā)光二極管是放置在行線和列線的交叉點(diǎn)上,當(dāng)對應(yīng)的某一行置高電平,某一列置低電平,則相應(yīng)的發(fā)光二極管點(diǎn)亮。如行1=1,列1=0,則其對應(yīng)的左上角的發(fā)光二極管點(diǎn)亮。實(shí)際應(yīng)用中,各發(fā)光二極管需要接限流電阻,限流電阻既可接在行線上,也可接在列線上。圖7-228?×?8LED點(diǎn)陣的外觀及內(nèi)部結(jié)構(gòu)

要在LED點(diǎn)陣顯示器上顯示信息,通常需點(diǎn)亮位于不同行、不同列的多個(gè)發(fā)光二極管,其顯示方式與多位LED數(shù)碼管類似,不宜采用靜態(tài)顯示方式,而應(yīng)使用動(dòng)態(tài)顯示方式。下面通過介紹如何在8?×?8LED點(diǎn)陣上穩(wěn)定顯示一個(gè)字符,說明LED點(diǎn)陣顯示器的動(dòng)態(tài)顯示原理。對于共陽極的8?×?8點(diǎn)陣而言,若要顯示數(shù)字“3”,需要點(diǎn)亮的位置及每行對應(yīng)的列編碼如圖7-23所示。顯示數(shù)字“3”的過程如下:先給第1行送高電平,同時(shí)給8列送列編碼0FFH;然后給第2行送高電平,同時(shí)給8列送0E1H;……最后給第8行送高電平,同時(shí)給8列送0E1H。每行點(diǎn)亮后延時(shí)時(shí)間為1~2ms,第8行結(jié)束后再從第1行開始循環(huán)顯示,只要保證掃描所有8行所用時(shí)間在20ms內(nèi),利用人眼的視覺駐留現(xiàn)象,就可看到一個(gè)穩(wěn)定的“3”。圖7-23顯示數(shù)字“3”的列編碼知識點(diǎn)2鍵盤接口技術(shù)

1.鍵盤簡介在單片機(jī)應(yīng)用系統(tǒng)中,鍵盤是實(shí)現(xiàn)人機(jī)對話的主要手段之一。鍵盤由一組有序排列的按鍵組成,為了控制系統(tǒng)的工作狀態(tài),人們需要通過按鍵向系統(tǒng)輸入數(shù)據(jù)或發(fā)送命令。按鍵按照結(jié)構(gòu)原理可分為兩類:一類是觸點(diǎn)式開關(guān)按鍵,如機(jī)械開關(guān)、導(dǎo)電橡膠式開關(guān)等;另一類是無觸點(diǎn)式開關(guān)按鍵,如電氣式按鍵,磁感應(yīng)按鍵等。目前,單片機(jī)系統(tǒng)中最常見的是觸點(diǎn)式開關(guān)按鍵,如圖7-24所示。圖7-24觸點(diǎn)式開關(guān)按鍵

按照按鍵接口原理按鍵可分為編碼鍵盤和非編碼鍵盤。編碼鍵盤內(nèi)部含有處理芯片和相應(yīng)電路來實(shí)現(xiàn)鍵盤編碼,每按下一個(gè)鍵,自動(dòng)生成按鍵代碼,單片機(jī)只要接受數(shù)據(jù)就可以了,例如專用的鍵盤芯片、個(gè)人電腦所用的標(biāo)準(zhǔn)鍵盤。非編碼鍵盤僅提供按鍵開關(guān),鍵盤的掃描、去抖都由軟件完成。由于非編碼鍵盤硬件簡單,其在單片機(jī)應(yīng)用系統(tǒng)中得到了廣泛應(yīng)用。按照鍵盤與單片機(jī)連接方式,按鍵可分為獨(dú)立式按鍵和矩陣式鍵盤。

2.按鍵的去抖由于按鍵開關(guān)是機(jī)械彈性元件,在按鍵按下或釋放瞬間,通常伴隨有一定時(shí)間的觸點(diǎn)機(jī)械抖動(dòng),如圖7-25所示。圖中t1和t3分別為按鍵按下或釋放過程中的抖動(dòng)期,抖動(dòng)時(shí)間長短與按鍵的機(jī)械特性有關(guān),一般為5~10ms,t2為按鍵穩(wěn)定的閉合期,其時(shí)間由按鍵動(dòng)作確定,一般為十分之幾秒到幾秒,t0和t4為按鍵斷開期。在t1和t3期間檢測按鍵的通斷可能導(dǎo)致誤判,即一次按下或釋放被錯(cuò)誤地認(rèn)為是多次操作,這種情況是不允許出現(xiàn)的,因此必須消除抖動(dòng)。消除按鍵抖動(dòng)有軟件及硬件兩種方法,在鍵數(shù)較少時(shí),宜采用硬件去抖,而當(dāng)鍵數(shù)較多時(shí),宜采用軟件去抖。圖7-25機(jī)械按鍵抖動(dòng)現(xiàn)象

圖7-26給出了幾種常用的硬件去抖電路。其中RC濾波去抖電路簡單實(shí)用,具有吸收干擾脈沖的作用,效果較好。圖7-26硬件去抖電路

軟件去抖原理是根據(jù)機(jī)械按鍵抖動(dòng)的特性,在檢測到按鍵按下后,執(zhí)行延時(shí)10ms左右(具體時(shí)間應(yīng)視所使用的按鍵進(jìn)行調(diào)整)的子程序,等按鍵狀態(tài)穩(wěn)定后,再確認(rèn)按鍵是否按下,從而消除抖動(dòng)影響。同樣道理,在檢測到按鍵釋放后,也應(yīng)采用相同的步驟進(jìn)行確認(rèn)以消除抖動(dòng)的影響。軟件去抖流程如圖7-27所示。圖7-27軟件去抖流程圖

綜上可見,對于非編碼鍵盤,按鍵處理程序應(yīng)具有以下四個(gè)功能:

(1)判斷有無按鍵按下;

(2)消除按鍵的機(jī)械抖動(dòng);

(3)獲得按下鍵的鍵值;

(4)每閉合一次,僅執(zhí)行一次按鍵功能程序。

3.獨(dú)立式按鍵在單片機(jī)控制系統(tǒng)中,當(dāng)只需要幾個(gè)功能鍵時(shí),常采用獨(dú)立式按鍵結(jié)構(gòu)。獨(dú)立式按鍵相互獨(dú)立,每個(gè)按鍵占用一根I/O口,每個(gè)按鍵的工作不會(huì)影響其他I/O口線的狀態(tài)。獨(dú)立式按鍵的典型應(yīng)用如圖7-28所示。圖中的上拉電阻保證按鍵釋放時(shí),輸入檢測線上有穩(wěn)定的高電平。當(dāng)I/O口線內(nèi)部有上拉電阻時(shí),外電路也可不接上拉電阻。圖7-28獨(dú)立式按鍵電路

獨(dú)立式按鍵電路簡單,當(dāng)某一按鍵按下時(shí),對應(yīng)的檢測線就變成了低電平,與其他按鍵相連的檢測線仍為高電平,只需讀入I/O口的狀態(tài),通過判斷哪條I/O口線為低電平,就能很容易識別哪個(gè)鍵被按下。按鍵識別程序編寫簡單。

獨(dú)立式按鍵的軟件可采用查詢方式或中斷方式。在中斷方式下,按鍵通常連接到外部中斷或和T0、T1等幾個(gè)外部I/O口上。編寫程序時(shí),需要在主程序中將相應(yīng)的中斷允許打開;各個(gè)按鍵的功能應(yīng)在相應(yīng)的中斷服務(wù)子程序中編寫完成。查詢方式的具體做法是:先逐位查詢每根I/O口線的輸入狀態(tài),如某一根I/O口線的輸入為低電平,則可確認(rèn)該I/O口線所對應(yīng)的按鍵已按下,然后再轉(zhuǎn)向該鍵的功能處理程序。圖7-28所示的8個(gè)獨(dú)立式按鍵的鍵盤查詢子程序如下。

4.矩陣式按鍵

1)矩陣式鍵盤的結(jié)構(gòu)在單片機(jī)系統(tǒng)中,當(dāng)有多個(gè)功能鍵時(shí)(一般多余8個(gè)),常采用矩陣式鍵盤。矩陣式鍵盤也叫行列式鍵盤,其由行線和列線組成,按鍵位于行、列線的交叉點(diǎn)上。圖7-29給出了4?×?4的矩陣式鍵盤與單片機(jī)的接口電路??梢?,一個(gè)4?×?4的行、列結(jié)構(gòu)可構(gòu)成一個(gè)含有16個(gè)按鍵的鍵盤。顯然,在按鍵數(shù)量較多時(shí),矩陣式鍵盤較之獨(dú)立式按鍵要節(jié)省很多I/O口。圖7-29矩陣式鍵盤與單片機(jī)接口電路

2)矩陣式鍵盤按鍵的識別矩陣式鍵盤按鍵的識別方法很多,其中最常見的方法是掃描法。掃描法識別按鍵分為以下兩個(gè)步驟。

(1)判斷有無按鍵按下。向所有的列線上輸出低電平,再讀入所有行的信號。若有任意一個(gè)按鍵被按下,那么讀入的行電平則不全為高。如圖7-29,如果12#鍵被按下,則12#鍵所在的第4行與第1列導(dǎo)通,第4行被拉低,讀入的行信號為低電平,表明有鍵按下。通過判別行線的高低能判定有無按鍵按下,卻無法判定是該行上的哪個(gè)按鍵被按下,因?yàn)槊恳恍猩隙歼B接有多個(gè)按鍵,每個(gè)按鍵按下均能使行線拉低。因此,需要將行線和列線信號配合起來作適當(dāng)處理,才能確定閉合鍵的位置。

(2)判定具體的按鍵。方法是往列線上逐個(gè)送低電平,首先送第1列為低電平,第2、3、4列為高電平,讀入的行電平狀態(tài)就顯示了位于第1列的0#、4#、8#、12#四個(gè)按鍵的狀態(tài),若讀入的行信息為全高,則表示無鍵按下;再送第2列為低電平,第1、3、4列為高電平,讀入的行電平的狀態(tài)則顯示了1#、5#、9#、13#?四個(gè)按鍵的狀態(tài),依此類推,直到4列全部掃描完,再重新從第1列開始。

3)鍵盤的控制方式單片機(jī)對鍵盤的控制方式通常有三種:編程掃描方式、定時(shí)掃描方式和中斷方式。

(1)編程掃描方式。這種方式是指在單片機(jī)完成其他工作后的空余時(shí)間,調(diào)用鍵盤掃描子程序以響應(yīng)鍵盤輸入的要求。在執(zhí)行鍵功能程序時(shí),CPU不再響應(yīng)鍵盤輸入要求。編程掃描方式只有在CPU空閑時(shí)才調(diào)用鍵盤查詢子程序,對CPU工作影響小,但應(yīng)考慮鍵盤處理程序的運(yùn)行間隔周期不能太長,否則會(huì)影響對鍵輸入響應(yīng)的及時(shí)性和有效性。

(2)定時(shí)掃描方式。定時(shí)掃描方式是利用單片機(jī)內(nèi)部定時(shí)器產(chǎn)生定時(shí)中斷,CPU響應(yīng)中斷后對鍵盤進(jìn)行掃描,當(dāng)有鍵按下時(shí),轉(zhuǎn)入鍵功能的處理程序。定時(shí)掃描在本質(zhì)上是中斷方式,只不過是定時(shí)掃描鍵盤,以中斷的方式處理鍵盤,它的硬件電路與編程掃描方式相同。

(3)中斷方式。單片機(jī)控制系統(tǒng)在實(shí)際應(yīng)用時(shí),操作人員使用按鍵的次數(shù)和時(shí)間是非常有限的,因此無論是編程掃描方式還是定時(shí)掃描方式,CPU經(jīng)常處于空掃描狀態(tài)。為了進(jìn)一步提高CPU的運(yùn)行效率,可以采用中斷掃描工作方式,即當(dāng)鍵盤有鍵按下時(shí)向系統(tǒng)產(chǎn)生中斷請求,系統(tǒng)響應(yīng)中斷并轉(zhuǎn)去執(zhí)行鍵盤掃描子程序。中斷方式克服了前兩種控制方式可能產(chǎn)生的空掃描和不能及時(shí)響應(yīng)鍵輸入的缺點(diǎn),在實(shí)際的單片機(jī)應(yīng)用系統(tǒng)中被廣泛采用。任務(wù)5四路搶答器設(shè)計(jì)

1.任務(wù)要求使用單片機(jī)為控制核心,設(shè)計(jì)一個(gè)四路簡易搶答器。要求實(shí)現(xiàn)的功能如下:

(1)搶答器可同時(shí)供4位選手或4個(gè)代表隊(duì)比賽,分別用4個(gè)按鍵S1~S4進(jìn)行搶答;

7.3技能拓展

(2)主持人控制“開始”及“停止”鍵。在主持人未按“開始”鍵前,若有選手搶答則為非法搶答,此時(shí)四個(gè)數(shù)碼管依次顯示“犯規(guī)隊(duì)員編號+EEE”,其他隊(duì)員按鍵也將不能響應(yīng),直至主持人按“停止”鍵后系統(tǒng)重新進(jìn)入準(zhǔn)備狀態(tài)。

(3)主持人按下“開始”鍵,數(shù)碼管顯示“0000”表示開始搶答,若有選手進(jìn)行搶答,則第一個(gè)數(shù)碼管顯示搶答者的編號,后兩個(gè)數(shù)碼管顯示答題時(shí)間(30s)并倒計(jì)時(shí),若回答超時(shí)則顯示“FF”。倒計(jì)時(shí)期間,若選手回答完畢,主持人按下“停止”鍵,系統(tǒng)會(huì)自動(dòng)進(jìn)入準(zhǔn)備狀態(tài)。

2.硬件電路設(shè)計(jì)由于本設(shè)計(jì)所需要的按鍵較少,因此采用獨(dú)立式按鍵來處理;顯示部分采用四個(gè)共陽極數(shù)碼管,通過動(dòng)態(tài)顯示方式顯示。如圖7-30所示,P1.0~P1.3為四路搶答輸入端口。P1.4~P1.5分別為“開始”及“停止”輸入端口。P0口控制四個(gè)數(shù)碼管的段碼輸出,P2.0~P2.3通過限流電阻從左到右依次控制四個(gè)數(shù)碼管的位碼輸出,P2口線輸出“1”時(shí),選通相應(yīng)位的數(shù)碼管發(fā)光,8050四個(gè)三極管驅(qū)動(dòng)數(shù)碼管。圖7-30搶答器控制電路

3.軟件設(shè)計(jì)

1)設(shè)計(jì)思路及方法主程序的編程思路如下:搶答器在正常工作情況下,首先對控制系統(tǒng)進(jìn)行初始化(包括定時(shí)器初始化及設(shè)置顯示初值),然后進(jìn)行鍵盤掃描,判斷主持人是否按下了“開始”鍵,若沒有按下則執(zhí)行非法搶答查詢程序,判斷是否有選手發(fā)生搶答并作出相應(yīng)處理;如果主持人按下“開始”鍵則進(jìn)入正常搶答查詢程序,若有選手成功搶答則顯示其編號并進(jìn)入回答倒計(jì)時(shí)。在搶答過程中,如果出現(xiàn)非法搶答,或正常搶答并回答完畢,主持人均可通過按下“停止”鍵,控制系統(tǒng)重新進(jìn)入準(zhǔn)備狀態(tài)。

30H~33H為顯示緩沖區(qū),分別放置四位要顯示的數(shù)據(jù),這些數(shù)據(jù)按照不同操作狀態(tài)而變化,動(dòng)態(tài)顯示程序執(zhí)行4位LED的輪流位掃描,實(shí)現(xiàn)相應(yīng)數(shù)據(jù)的顯示。為保證穩(wěn)定可靠的顯示,通過定時(shí)器T0每50ms產(chǎn)生一次中斷,并執(zhí)行一次動(dòng)態(tài)顯示,因此動(dòng)態(tài)顯示程序處于T0的中斷服務(wù)子程序中。

2)流程圖主程序及定時(shí)器T0的中斷服務(wù)子程序的流程圖如圖7-31和圖7-32所示。圖7-31主程序流程圖

圖7-32定時(shí)器T0中斷服務(wù)子程序流程圖

3)指令代碼

(1)編寫匯編語言代碼。用匯編語言編寫的指令代碼如下:

在上面的程序中,沒有考慮按鍵的抖動(dòng)問題,在實(shí)際應(yīng)用中,請大家參考本項(xiàng)目任務(wù)3以及知識點(diǎn)2的按鍵去抖修改程序即可。在倒計(jì)時(shí)程序段中,時(shí)間的十位和個(gè)位需要分別用兩個(gè)數(shù)碼管來顯示,這里通過對其除以10從而將十位和個(gè)位時(shí)間分開。

在倒計(jì)時(shí)過程中,每隔1s顯示時(shí)間減1,但程序中為何僅延時(shí)160ms就減1?這是由于我們每隔50ms就動(dòng)態(tài)顯示一次,而每次動(dòng)態(tài)顯示大概需要40多ms的時(shí)間,在1s時(shí)間內(nèi)除了執(zhí)行中斷服務(wù)子程序外,大約只有160ms的時(shí)間可用于執(zhí)行其他程序,因此我們在主程序中只需要延時(shí)160ms就可實(shí)現(xiàn)延時(shí)1s的效果。(2)編寫C語言代碼。用C語言編寫的指令代碼如下:4.電路板制作1)元器件清單四路搶答器電路元器件清單如表7-7所示。表7-7四路搶答器電路元器件清單

2)四路搶答器電路的面包板制作四路搶答器電路面包板實(shí)物如圖7-33所示。圖7-33四路搶答器電路

3)調(diào)試運(yùn)行在Keil環(huán)境中,對源程序A7_5.ASM或C7_5.C進(jìn)行編輯、匯編或編譯,生成機(jī)器代碼并下載到芯片里。接通電路板電源,若無任何按鍵按下,則四個(gè)數(shù)碼管均無顯示。若“開始”鍵未按下前,有選手非法搶答則會(huì)顯示如圖7-34所示的內(nèi)容(以2號選手為例)。若主持人按下“開始”鍵,會(huì)有如圖7-35所示的顯示表示可以開始搶答。圖7-34選手非法搶答圖7-35開始搶答

若此時(shí)2號選手搶答成功,則顯示如圖7-36所示。若2號選手回答超時(shí),則會(huì)有如圖7-37所示的顯示。圖7-36搶答成功圖7-37回答超時(shí)

問:對于矩陣式鍵盤按鍵的識別,除了前面講的掃描法外,還有其他更簡便的方法嗎?答:有。對于矩陣鍵盤按鍵的識別,除了掃描法外,還有一種更簡便的方式——線反轉(zhuǎn)法。前面講的掃描法需要逐行或逐列掃描查詢,通常要多次掃描才可以確定按鍵位置。相比而言,線反轉(zhuǎn)法則要簡練很多,無論按鍵處于哪個(gè)位置,均只需經(jīng)過兩步就能獲得此按鍵所在的行列值。線反轉(zhuǎn)法在硬件上要求行線與列線均外接上拉電阻,如圖7-38所示。7.4互動(dòng)環(huán)節(jié)圖7-38采用線反轉(zhuǎn)法的矩陣式鍵盤

線反轉(zhuǎn)法識別按鍵的過程如下:先將行線作為輸出線,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論