版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
一、學習目標1.掌握LED數碼管結構。2.掌握數碼管字形編碼。3.掌握數碼管靜態(tài)顯示。4.掌握數碼管動態(tài)顯示。二、學習任務本項目任務分解為具體3個學習任務:任務1獨立按鍵識別檢測任務2一位數碼顯示任務3兩位數碼顯示任務4手動計數器實現三、任務分解任務一獨立按鍵識別檢測【任務描述】
單片機系統(tǒng)運行時,通常需要應用輸入設備實現人工參與控制。鍵盤是由若干個按鍵組成的,是單片機最簡單也是最常用的輸入設備。操作人員通過鍵盤輸入數據或命令,實現簡單的人機對話。本任務要求設計1個獨立按鍵,單按下改鍵時,對應的LED亮,再一次按下,LED熄滅,如此重復?!救蝿辗治觥?/p>
當按鍵被按下時,電平被拉成低電平,此電平作為作為單片機的輸入,單片機接收到低電平時,認為產生了按鍵動作,執(zhí)行相應的程序?!鞠嚓P知識】一、按鍵識別當單片機檢測到與按鍵相連的IO口被拉低就證明此按鍵被按下,那門我們將此功能上一個層次來說呢,按鍵就是一個人機接口。那么按鍵的操作并沒有我們想象的“按下松開”那么簡單,在實際應用中,手動操作需要消抖。按下并抬起按鍵的過程可以分為5個階段:(5)有效釋放階段(4)釋放抖動階段(3)有效閉合階段(2)閉合抖動階段(1)等待階段(4)釋放抖動階段(3)有效閉合階段(4)釋放抖動階段常用的去抖動的方法--硬件方法和軟件方法: (1)硬件去抖動的方法很多,也可以通過硬件防抖動來解決,這樣成本會高一些。 (2)軟件去抖動法,通常用延時程序去抖動。
延時讀鍵法:在單片機獲得端口為低電平的信息后,不是立即認定按鍵已被按下,而是延時10毫秒或更長的時間后再次檢測該端口,如果仍為低,說明此鍵的確被按下了,這實際上是避開了按鍵按下時的抖動時間。如左上圖所示,當電源很穩(wěn)定,沒有干擾的情況下,這種方法是可靠的。如右上圖所示,當電源不穩(wěn)定,存在很大干擾時,則有可能存在誤判。
多次讀鍵法:在單片機獲得端口為低電平的信息后,在一段時間內如20毫秒,多次檢測按鍵的狀態(tài),只有當每次讀到的狀態(tài)都是低電平時才認為有按鍵按下,如上圖所示。用這種方法,不會存在誤判的情況。有一點必須注意,多次檢測持續(xù)的時間應該比閉合抖動的時間長。
本項目任務中,主要用軟件方法去抖,即檢測出鍵閉合后執(zhí)行一個延時程序,產生10ms的延時,讓前沿抖動消失后再一次檢測鍵的狀態(tài),如果仍保持閉合狀態(tài)電平,則確認為真正有鍵按下。當檢測到按鍵釋放后,也要給10ms的延時,待后沿抖動消失后才能轉入該鍵的處理程序?!救蝿諏嵤吭趐roteus中繪制如圖電路:任務2一位數碼顯示【任務描述】P2口驅動一位共陰數碼管,如圖所示,顯示出一個數字‘5’?!救蝿辗治觥啃枰獑纹瑱C驅動數碼管,那么需要掌握數碼管的硬件知識,數碼管的驅動方法。【相關知識】一、LED數碼管原理簡述
單片機應用系統(tǒng)常用的是8段LED,如下圖2-8所示,它有其陰極和共陽極兩種。共陰極數碼管是將所有發(fā)光二極管的陰極接在一起作為公共端COM,當公共端接低電平時,某一段陽極上的電平為“1”時,該段點亮,電平為“0”時,該段熄滅。共陰極數碼管是將所有發(fā)光二極管的陰極接在一起作為公共端COM,當公共端接低電平時,某一段陽極上的電平為“1”時,該段點亮,電平為“0”時,該段熄滅。例:共陰極數碼管顯示數字“2”:17第七章單片機外部擴展資源及應用abcdefghGND+-共陰極數碼管abcdefgh11011010a段碼:01011011(5BH)+5Vabcdefgh+-共陽極數碼管00100101段碼:10100100(A4H)LED數碼顯示器的顯示字符及碼表18第七章單片機外部擴展資源及應用
數碼管要正常顯示,就要用驅動電路來驅動數碼管的各個段碼,從而顯示出我們要的數字,因此根據數碼管的驅動方式的不同,可以分為靜態(tài)式和動態(tài)式兩類。本任務介紹靜態(tài)顯示示驅動。靜態(tài)驅動也稱直流驅動。靜態(tài)驅動是指每個數碼管的每一個段碼都由一個單片機的I/O端口進行驅動,或者使用如BCD碼二-十進制譯碼器譯碼進行驅動。靜態(tài)驅動的優(yōu)點是編程簡單,顯示亮度高,缺點是占用I/O端口多,如驅動5個數碼管靜態(tài)顯示則需要5×8=40根I/O端口來驅動,要知道一個89C51單片機可用的I/O端口才32個,實際應用時必須增加譯碼驅動器進行驅動,增加了硬件電路的復雜性。這里給出了單片機實際中驅動數碼管的電路,是加了三極管的。由于單片機I/O口驅動能力不夠,不能直接將段選端接單片機I/O口,因此在電路中增加三級管用作驅動,以增加IO口的電流驅動能力。LED數碼顯示器的結構與原理1位LED數碼顯示器的引腳結構市售的LED數碼管尺寸、顏色多樣,常見1位LED數碼管有10個引腳,排列如下:21第七章單片機外部擴展資源及應用其中3腳、8腳為公共端(位選端),根據內部發(fā)光二極管的接線形式可分為共陰極(CommonCathode,CC)和共陽極(CommonAnode,CA)兩種類型。LED數碼顯示器的結構與原理1位共陰LED數碼顯示器的接口電路22第七章單片機外部擴展資源及應用若直接用單片機I/O口驅動LED,則LED的電流由單片機I/O口提供,由于80C51單片機I/O口(P1、P2和P3口)輸出場效應管的內部上拉電阻很大,約有幾百K,因此輸出電流很小,一般不超過1mA,基本無法驅動LED發(fā)光。LED數碼顯示器的結構與原理1位共陰LED數碼顯示器的接口電路23第七章單片機外部擴展資源及應用I/O口輸出高電平時,LED發(fā)光,其電流由VCC提供,R為限流電阻,阻值一般為幾百歐;I/O口輸出低電平時,LED熄滅,R上通過的電流大于LED發(fā)光時的電流,且該電流流入單片機引腳。單片機允許向全部引腳灌入的最大總電流為有限的,一般為幾十毫安,一旦單片機的I/O口通過上拉電阻驅動較多的LED(如數碼管),當單片機I/O口都輸出低電平時,向引腳灌入的總電流可能超過上限值,導致單片機工作不穩(wěn)定。LED數碼顯示器的結構與原理1位共陰LED數碼顯示器的接口電路24第七章單片機外部擴展資源及應用11三極管導通0LED滅LED數碼顯示器的結構與原理1位共陰LED數碼顯示器的接口電路25第七章單片機外部擴展資源及應用00三極管截止1LED亮這種接口電路在單片機輸出低電平時,利用三極管的截止,防止電流灌入單片機I/O引腳。同時,也增強了對LED的驅動能力。【任務實施】在proteus按下圖繪制電路。#include<reg51.h>voiddelay1s();//采用實現1秒延時子函數voidmain() //主函數
{while(1){P2=0x6d;//5的共陰極段碼
delay1s();}}voiddelay1s(void){ unsignedcharh,i,j,k;for(h=5;h>0;h--)for(i=4;i>0;i--)for(j=116;j>0;j--)for(k=214;k>0;k--);}【進階提高】使用AT89C51單片機,驅動一位數碼管。如圖,P1口驅動共陽數碼管,讓該數碼管輪流顯示‘H’、‘E’、‘L’、‘L’、‘O’。#include<reg51.h>voiddelay1s(unsignedintms);//采用定時器1實現1秒延時子函數voiddisp1();//順序顯示字符‘H’、‘E’、‘L’、‘L’、‘O’一次的子函數voidmain() //主函數{while(1){disp1();}}//函數名:disp1//函數功能:順序顯示字符‘H’、‘E’、‘L’、‘L’、‘O’一次//形式參數:無//返回值:無voiddisp1(){unsignedcharled[]={0x89,0x86,0xc7,0xc7,0xc0};//定義數組led存放字符‘H’、‘E’、‘L’、‘L’、‘O’的字型碼unsignedchari;for(i=0;i<5;i++){P1=led[i];//字型顯示碼送段控制口P1delay1s(1000); //延時1秒}}voiddelay1s(unsignedintms)//若ms=1,延時時間就為1ms{unsignedinta,b;for(a=ms;a>0;a--)for(b=123;b>0;b--);}
任務36位數碼顯示【任務描述】用單片機驅動數碼管動態(tài)顯示方法,在數碼管上同時顯示出1~6?!救蝿辗治觥?/p>
動態(tài)顯示的特點是將所有位數碼管的段選線并聯在一起,由位選線控制是哪一位數碼管有效。選亮數碼管采用動態(tài)掃描顯示。所謂動態(tài)掃描顯示即輪流向各位數碼管送出字形碼和相應的位選,利用發(fā)光管的余輝和人眼視覺暫留作用,使人的感覺好像各位數碼管同時都在顯示。動態(tài)顯示的亮度比靜態(tài)顯示要差一些,所以在選擇限流電阻時應略小于靜態(tài)顯示電路中的。
下面借用下,前面數字電路BCD數碼管顯示原理。4位數碼管共用一個譯碼器。當CP脈沖的頻率f=1HZ時,在CP脈沖的控制下,4位數碼管將逐個輪流分時顯示。但是,當CP脈沖的頻率f=100HZ時,則每個數碼管依次一次顯示1/25S,由于人眼的滯留特性,實際的視覺效果是4個數碼管同時顯示4個數據。顯示原理f=1HZf=100HZ(人眼的滯留特性)顯示原理工作原理①4位數碼管共用一個7448BCD譯碼器。②74139為兩輸入4輸出譯碼器。③74139的輸出信號Y0、Y1、Y2、Y3,分別作為4位數碼管的位線。工作原理下面通過單片機驅動兩位數碼管進一步說明:某系統(tǒng)用單片機的I/O口控制兩個共陰極接法的LED顯示器。試編寫應用程序使得在LED顯示器上顯示“HP”兩個字符。#include"reg51.h"#defineucharunsignedchar#defineuintunsignedintvoiddelayms(uintt)//延時程序{uinti,j;for(i=0;i<t;i++)for(j=0;j<120;j++);}main(){while(1) { P0=0x89;//H的段碼
P2=0x01;//第一個數碼管顯示
delayms(10);P2=0X00;//清消隱
P0=0x8c;//P的段碼
P2=0x02;//第二個數碼管顯示
delayms(10);P2=0x00;//清消隱
}}【任務實施】74LS245是什么器件?它是8路同相三態(tài)雙向總線收發(fā)器或驅動器當片選端/CE=0,AB/BA=“1”,信號由A向B傳輸
程序代碼:#include<reg51.h>#defineuintunsignedintvoiddelayms(unsignedintxms){ uinti,j; for(i=xms;i>0;i--) for(j=120;j>0;j--);}voiddisp2(){unsignedcharled[]={0xf9,0Xa4,0xb0,0x99,0x92,0x82};//設置數字“123456”的字unsignedchari,w;w=0x01; //位選碼初值為01Hfor(i=0;i<6;i++){P2=~w;//位選碼取反后送位控制口P2口
w<<=1; //位選碼左移一位,選中下一位LEDP1=led[i];//顯示字型碼送P1口
delayms(9); //延時10ms P1=0XFF;//必須加這句,清消隱
}}main() //主函數{while(1){disp2();}}【進階提高】使用移位函數實現6位數碼管的動態(tài)顯示。單片機驅動8位數碼管顯示電路對應的程序代碼如下:#include<reg52.h>#include<intrins.h>#defineucharunsignedchar//宏定義uchar替換unsignedchar型ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,//定義0,1,2……9,a,b,c,d,e,f字符編碼數組0x82,0xd8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};voiddelay(intz);//延時函數聲明
voidmain(){inti;P2=0xfe;//開段選,打開第一位數碼管
while(1)//進入大循環(huán),開始動態(tài)掃描
{for(i=0;i<8;i++)//依次掃描8位數碼管
{P1=table[i+1];//給段選端P0送字型碼
delay(5000);P2=_crol_(P2,1);//循環(huán)右移
}}}/*定義延時函數*/voiddelay(intz){intx,y;for(x=z;x>0;x--)for(y=50;y>0;y--);}任務四手動計數器實現【任務描述】單片機P3.2引腳接一按鍵,最開始顯示全0,按下一次按鍵加1,把加的和用8位數碼管顯示出來?!救蝿辗治觥堪存I按下后,執(zhí)行加1操作,把該和送數碼管顯示之前,分離出個位、十位、百位......等。假若這個和是n,可以用下面代碼分離出個位、十位、百位。
i=n/100;/*分解出百位*/;
j=n/10%10;/*分解出十位*/;
k=n%10;/*分解出個位*/?!鞠嚓P知識】狀態(tài)機是軟件編程中的一個重要概念。比這個概念更重要的是對它的靈活應用。在一個思路清晰而且高效的程序中,必然有狀態(tài)機的身影浮現。比如說一個按鍵命令解析程序,就可以被看做狀態(tài)機:本來在A狀態(tài)下,觸發(fā)一個按鍵后切換到了B狀態(tài);再觸發(fā)另一個鍵后切換到C狀態(tài),或者返回到A狀態(tài)。這就是最簡單的按鍵狀態(tài)機例子。實際的按鍵解析程序會比這更復雜些,但這不影響我們對狀態(tài)機的認識。1.狀態(tài)機的要素狀態(tài)機可歸納為4個要素,即現態(tài)、條件、動作、次態(tài)。這樣的歸納,主要是出于對狀態(tài)機的內在因果關系的考慮?!艾F態(tài)”和“條件”是因,“動作”和“次態(tài)”是果。詳解如下:(1)現態(tài):是指當前所處的狀態(tài)。(2)條件:又稱為“事件”。當一個條件被滿足,將會觸發(fā)一個動作,或者執(zhí)行一次狀態(tài)的遷移。(3)動作:條件滿足后執(zhí)行的動作。動作執(zhí)行完畢后,可以遷移到新的狀態(tài),也可以仍舊保持原狀態(tài)。動作不是必需的,當條件滿足后,也可以不執(zhí)行任何動作,直接遷移到新狀態(tài)。(4)次態(tài):條件滿足后要遷往的新狀態(tài)?!按螒B(tài)”是相對于“現態(tài)”而言的,“次態(tài)”一旦被激活,就轉變成新的“現態(tài)”了。如果我們進一步歸納,把“現態(tài)”和“次態(tài)”統(tǒng)一起來,而把“動作”忽略(降格處理),則只剩下兩個最關鍵的要素,即:狀態(tài)、遷移條件?!救蝿諏嵤渴謩佑嫈灯魅蝿諏某绦虼a如下:#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitkeyport=P3^2;#definekeystate00 //按鍵第一次按下狀態(tài)#definekeystate11 //按鍵按下確認狀態(tài)#definekeystate22charkeystate=2; //按鍵狀態(tài)初始化為按鍵無動作狀態(tài)uintnum1=0,num2=0;ucharweixuan[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位選代碼uchartemp[8]=0; //從高位到低位對應數碼管從左到右voiddelayms(uintx) //1ms{ uinty,z; for(y=x;y>0;y--) for(z=111;z>0;z--);}ucharcodetable[]={ //共陽數碼管0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};voidsmg(){uchari;for(i=0;i<8;i++){P2=weixuan[i];P1=table[temp[i]];delayms(1);P2=0xff;}}voidproc()//分離出萬位、千位、百位、十位以及個位等待顯示{ temp[0]=num1%10; temp[1]=num1%100/10; temp[2]=num1%1000/100; temp[3]=num1/1000; temp[4]=num2%10; temp[5]=num2%100/10; temp[6]=num2%1000/100; temp[7]=num2/1000;}charkeyscan(){ switch(keystate) { casekeystate0: //keystate0,第一次檢測到按鍵按下狀態(tài),下一狀態(tài)為keystate1(按鍵按下確認狀態(tài)) keystate=keystate1; return0; casekeystate1: //keystate1,按鍵按下確認狀態(tài),下一狀態(tài)為keystate2(按鍵無動作狀態(tài))if(!keyport)
{ keystate=keystate2; while(!keyport); return1; } else keystate=keystate2; return0; casekeystate2: //keystate2,按鍵無動作狀態(tài),下一狀態(tài)為keystate0(第一次檢測到按鍵按下狀態(tài))if(!keyport) { keystate=keystate0; } else keystate=keystate2; return0; }}voidmain(){while(1) { if(keyscan())
{ num1++; if(num1>=10000) { num1=0; num2++; if(num2>=10000) { num2=0; } } proc(); } smg();
}}【進階提高】單片機P3.2引腳接一按鍵,功能為加1按鍵,點一下加1;單片機P3.3引腳接一按鍵,功能為減一按鍵,點一下減1,在前面任務基礎上,請用狀態(tài)機編程的方法實現點加1按鍵實現加1,點減1按鈕實現減1。
狀態(tài)機實現手動計數器電路對應的程序代碼如下:#include<reg52.h>#defineucharunsignedchar#defineuintunsignedint#defineKEYP3#definekeystate00 //按鍵無動作狀態(tài) #definekeystate11 //按鍵按下狀態(tài) #definekeystate22 //按鍵釋放狀態(tài)charucKeyStatus=0; //按鍵狀態(tài)初始化為按鍵無動作狀態(tài)unsignedcharkeyvalue;uintnum1=0,num2=0;ucharweixuan[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};uchartemp[8]=0; //從高位到低位對應數碼管從左到右voiddelayms(uintx) //1ms{ uinty,z; for(y=x;y>0;y--) for(z=111;z>0;z--);}ucharcodetable[]={ //共陽數碼管0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};voidsmg(){uchari;for(i=0;i<8;i++){P2=weixuan[i]; //位選
P1=table[temp[i]]; //送段碼
delayms(1);P2=0xff;//消隱
}}voidproc()//待顯示數據的分離{ temp[0]=num1%10; temp[1]=num1%100/10; temp[2]=num1%1000/100; temp[3]=num1/1000; temp[4]=num2%10;temp[5]=num2%100/10; temp[6]=num2%1000/100; temp[7]=num2/1000;}ucharkeyscan() //按鍵掃描程序{switch(ucKeyStatus)//
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年消防給水工程智能化施工及維護服務合同3篇
- 2025變頻器代理商銷售合同:產品價格調整與結算協(xié)議3篇
- 2025年度紡織行業(yè)新材料研發(fā)與應用采購合同2篇
- 2025年度工業(yè)倉儲租賃及倉儲設施維護保養(yǎng)合同范本3篇
- 二零二五年房地產項目工程造價咨詢合同模板3篇
- 二零二四年員工自愿放棄社保及轉移待遇合同3篇
- 2025年度藝術展布展藝術品保護與搬運合同3篇
- 二零二五版二手房交易中介服務合同模板2篇
- 2024虛擬現實內容開發(fā)制作合同
- 2025年消防噴淋系統(tǒng)安裝及消防設施檢測與維保服務合同3篇
- 《FANUC-Oi數控銑床加工中心編程技巧與實例》教學課件(全)
- 微信小程序運營方案課件
- 抖音品牌視覺識別手冊
- 陳皮水溶性總生物堿的升血壓作用量-效關系及藥動學研究
- 安全施工專項方案報審表
- 學習解讀2022年新制定的《市場主體登記管理條例實施細則》PPT匯報演示
- 好氧廢水系統(tǒng)調試、驗收、運行、維護手冊
- 中石化ERP系統(tǒng)操作手冊
- 五年級上冊口算+脫式計算+豎式計算+方程
- 氣體管道安全管理規(guī)程
- 《眼科學》題庫
評論
0/150
提交評論