任務(wù)四鍵控流水燈和數(shù)碼管顯示_第1頁
任務(wù)四鍵控流水燈和數(shù)碼管顯示_第2頁
任務(wù)四鍵控流水燈和數(shù)碼管顯示_第3頁
任務(wù)四鍵控流水燈和數(shù)碼管顯示_第4頁
任務(wù)四鍵控流水燈和數(shù)碼管顯示_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

任務(wù)四鍵控流水燈和數(shù)碼管顯示第一頁,共四十九頁,編輯于2023年,星期二LED顯示的原理

數(shù)碼管的每段筆畫其實(shí)就是一個(gè)單獨(dú)的發(fā)光二極管,內(nèi)部有兩種不同的連接方式,若將各二極管的陽極都連在一起引出個(gè)公共端——稱共陽數(shù)碼管,如圖(a);若將各二極管的陰極都連在一起引出個(gè)公共端——稱共陰數(shù)碼管如圖(b);使用時(shí)將共陰數(shù)碼管公共端接低電平,若某筆畫端接高電平則對(duì)應(yīng)筆畫點(diǎn)亮,共陽反之。所以購買和使用時(shí)必須高清是共陽還是共陰的。4.1LED顯示第二頁,共四十九頁,編輯于2023年,星期二

LED的顯示可分靜態(tài)和動(dòng)態(tài)顯示。靜態(tài)顯示是各只數(shù)碼管單獨(dú)用一只顯示譯碼器,單片機(jī)與顯示器的連接如下圖如示:當(dāng)某只數(shù)碼管要顯示某一數(shù)或字符時(shí)單片機(jī)向該管的鎖存端發(fā)允許寫入電平,并向P1口發(fā)出顯示的十六進(jìn)制數(shù),其余管不允許寫入,接著發(fā)鎖存信號(hào)。第三頁,共四十九頁,編輯于2023年,星期二共陽數(shù)碼管組成的動(dòng)態(tài)掃描電路第四頁,共四十九頁,編輯于2023年,星期二LED顯示動(dòng)態(tài)顯示的原理

靜態(tài)顯示的優(yōu)點(diǎn)顯示穩(wěn)定,不存在閃爍。與CPU并行工作。但從靜態(tài)顯示的硬件可以看出,當(dāng)選用的數(shù)碼管越多,譯碼器的數(shù)量也隨之增多,這樣會(huì)增加硬件的開銷。為此人們采用動(dòng)態(tài)顯示。如圖所示位選口字型口第五頁,共四十九頁,編輯于2023年,星期二動(dòng)態(tài)顯示的原理

某一時(shí)刻位選先選通其中一位,如對(duì)圖中的共陽數(shù)碼管,要使最左邊位能點(diǎn)亮,則令P2.0為0,其余位選位均為1;這時(shí)在字型口輸出該位要顯示的數(shù)字(或字符)的字型,亮1ms左右;接著位選選通另一位,其余位選關(guān)閉,字型口輸出該位要顯示的數(shù)字(或字符)的字型,雖然這時(shí)前一位位選已關(guān)閉,但基于眼睛的惰性,前一位顯示的數(shù)字或字型還留在眼中,依次一位位循環(huán)顯示下去,直至最后一位顯示完畢,一個(gè)動(dòng)態(tài)掃描顯示過程結(jié)束??梢妱?dòng)態(tài)掃描顯示是在執(zhí)行動(dòng)態(tài)掃描顯示程序的。要連續(xù)顯示必須反復(fù)的去執(zhí)行動(dòng)態(tài)掃描顯示程序。一般可把動(dòng)態(tài)掃描顯示編成個(gè)子函數(shù),主函數(shù)反復(fù)去調(diào)用它。人眼的惰性有一定時(shí)間,一般10ms左右,

超過這一時(shí)間再去執(zhí)行顯示程序,它就會(huì)閃爍,所以LED的位數(shù)不能太多。第六頁,共四十九頁,編輯于2023年,星期二動(dòng)態(tài)掃描具體實(shí)現(xiàn)方法:顯示緩沖區(qū)首先在內(nèi)部數(shù)據(jù)存儲(chǔ)器的若干連續(xù)單元中開辟一個(gè)顯示緩沖區(qū)數(shù)組,每個(gè)單元順序?qū)?yīng)一個(gè)數(shù)碼管,在調(diào)用動(dòng)態(tài)掃描子函數(shù)以前,先在數(shù)組中寫入各數(shù)碼管要顯示的數(shù)字和字符在字型表中離開表頭位置的值,這樣當(dāng)動(dòng)態(tài)掃描顯示程序要向字型口輸出字型時(shí),只要讀得該對(duì)應(yīng)緩沖區(qū)內(nèi)的值,通過查字型表獲得輸出字型。注意不是把緩沖單元的值直接輸出。待顯示信息數(shù)組第七頁,共四十九頁,編輯于2023年,星期二動(dòng)態(tài)掃描子程序流程圖:P1←TAB[a1]P3←ri←0r←01a1←dt[i]r=0x20?或i=6i←i+1r←r<<1

調(diào)用延時(shí)1MS子函數(shù)TAB[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67。。。0x71};第八頁,共四十九頁,編輯于2023年,星期二#include<reg51.h>unsignedcharcodedt[]={0x01,0x02,0x03,0x04,0x05,0x06};//待顯示的信息在顯示緩沖區(qū)數(shù)組;unsignedcharcodeTAB_Font[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x83,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x8C,0xFF,0x89};//共陽字型表數(shù)組unsignedr=1;//位輸出口初值,選中最左位LEDvoiddelay1(unsignedint);//延時(shí)1ms子函數(shù)原型說明main()//主函數(shù){unsignedchaari=0,a;//定義變量i—顯示緩沖區(qū)數(shù)組元素第九頁,共四十九頁,編輯于2023年,星期二 指針,a—某位待輸出信息while(1){P2=r;//選中某一位a=dt[i];//從顯示緩沖區(qū)數(shù)組取出該位顯示信息P0=TAB_Font[a];//查字型表,輸出字型delay1(1);//延時(shí)1msr<<=1;//掃描位左移(在實(shí)際圖中即右移)i++;//指針加1if(r==0x40){r=1;//6位掃描結(jié)束判斷i=0;}//結(jié)束后指針復(fù)位}}第十頁,共四十九頁,編輯于2023年,星期二//延時(shí)程序1voiddelay1(unsignedintms){unsignedinti,j;for(i=0;i<ms;i++)for(j=0;j<60;j++);}第十一頁,共四十九頁,編輯于2023年,星期二動(dòng)態(tài)顯示作為子函數(shù)的程序設(shè)計(jì)#include<reg51.h>unsignedcharcodedt[]={0x01,0x02,0x03,0x04,0x05,0x06};unsignedcharcodeTAB_Font[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x83,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x8C,0xFF,0x89};unsignedr=1;unsignedi=0,a;voiddelay1(unsignedint);display();第十二頁,共四十九頁,編輯于2023年,星期二main(){while(1)display();}display()//LED動(dòng)態(tài)掃描顯示子函數(shù){r=1;//1位選通,要根據(jù)數(shù)碼管類型和硬件電路決 定,若0選通應(yīng)該為r=0xfe;i=0;while(r!=0x40)//6個(gè)數(shù)碼管沒全掃完,繼續(xù)掃描{P3=r;//選通某位a=dt[i];//顯示緩沖區(qū)去該位要顯示的內(nèi)容P0=TAB_Font[a];//查字型表向字型口輸出字型delay1(1);//延時(shí)1msr<<=1;i++;//移位選中下一數(shù)碼管,指針修正}P0=0xff;//字型口送熄滅符}第十三頁,共四十九頁,編輯于2023年,星期二Proteus演示——硬件圖第十四頁,共四十九頁,編輯于2023年,星期二4位數(shù)碼管動(dòng)態(tài)顯示實(shí)例第十五頁,共四十九頁,編輯于2023年,星期二

筆畫1點(diǎn)亮的LED字型TAB[]={0x3FH,0x06,0x5B,0x4F,0x66.0x6D,

(顯示:0123450x7D,0x07,0x7F,0x67,0x77,0x7C,0x39,0x5E,0x79,0X71,6789ABCDEF0X73,0X76,0X00,0X6E};(顯示:PH熄滅Y)第十六頁,共四十九頁,編輯于2023年,星期二

筆畫0點(diǎn)亮的LED字型表TAB[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x83,(顯示:01234560xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,789ABCDEF

0x8C,0x89,0xFF,0x91};(顯示:PH熄滅Y)第十七頁,共四十九頁,編輯于2023年,星期二Proteus演示——硬件圖第十八頁,共四十九頁,編輯于2023年,星期二練習(xí):1、畫出單片機(jī)控制6共陽LED數(shù)碼管顯示的電路圖1,P0和P3口分別為字型口和位選口。2、用主子函數(shù)結(jié)構(gòu)調(diào)試6管LED動(dòng)態(tài)掃描程序3、在圖1的基礎(chǔ)上,將其改為6位共陰數(shù)碼管,P2和P3分別為位選和字型口。編程調(diào)試。第十九頁,共四十九頁,編輯于2023年,星期二練習(xí)2將顯示"年月日“(140416)、”班級(jí)學(xué)號(hào)”(A3--05)、“P”(P后面5個(gè)空格)和“H-----”四種不同的顯示方式,在同一程序中以2S輪流循環(huán)顯示。練習(xí)3編程將unsignedchara=567892的值在6位LED中顯示出來。

第二十頁,共四十九頁,編輯于2023年,星期二第二十一頁,共四十九頁,編輯于2023年,星期二第二十二頁,共四十九頁,編輯于2023年,星期二

unsignedcharcodedt[]={1,4,0,4,1,6,10,3,0x14,0x14,0,2, 0x10,0x12,0x12,0x12,0x12,0x12, 0x11,0x14,0x14,0x14,0x14,0x14};unsignedcharcodeTAB_Font[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67,0x77,0x3D,0x39,0x5E,0x79,0X71,0X73,0X76,0X00,0X6E,0x40};voiddelay1(unsignedint);display();unsignedchari;//unsignedcharcount=200;//第二十三頁,共四十九頁,編輯于2023年,星期二main(){ET0=1;//T0允許中斷EA=1;//CPU允許中斷TMOD=0x11;//T0定時(shí)方式1TH0=-10000>>8;//定時(shí)時(shí)間10msTL0=-10000;TR0=1;//定時(shí)器啟動(dòng)開始定時(shí) P0=0x00;//字型熄滅 P3=0xff;//位選關(guān)閉 i=0;//顯示緩沖區(qū)取數(shù)指針復(fù)零 while(1){ if(count==0)//如果定時(shí)2S時(shí)間到{count=200;//外部定時(shí)計(jì)數(shù)器置初值 i=i+6;//顯示緩沖區(qū)調(diào)整到下一顯示區(qū)第二十四頁,共四十九頁,編輯于2023年,星期二 if(i==24)//四種顯示內(nèi)容都顯示完畢,指針重新調(diào)整到第 i=0;}//一顯視區(qū)display();//調(diào)用顯示子函數(shù) }}display()//LED動(dòng)態(tài)掃描顯示子函數(shù){unsignedcharr=0xfe;unsignedchara,j=0;r=0xfe;//1位選通,要根據(jù)數(shù)碼管類型和硬件電路決定,若0選通應(yīng)該為 r=0xfe;while(j<6)//6個(gè)數(shù)碼管沒全掃完,繼續(xù)掃描{P3=r;//選通某位a=dt[i+j];//顯示緩沖區(qū)去該位要顯示的內(nèi)容P0=TAB_Font[a];//查字型表向字型口輸出字型delay1(1);//延時(shí)1msr<<=1;r|=1;//移位選中下一數(shù)碼管,指針修正j++;}P0=0x00;//6個(gè)數(shù)碼管沒全完,輸出熄滅字型。}第二十五頁,共四十九頁,編輯于2023年,星期二/*延時(shí)程序*/voiddelay1(unsignedintms){unsignedinti,j;for(i=0;i<ms;i++)for(j=0;j<114;j++);}/*定時(shí)計(jì)數(shù)器0中斷服務(wù)程序*/voidisr_t0(void)interrupt1{TH0=-10000>>8;TL0=-10000;count--;}第二十六頁,共四十九頁,編輯于2023年,星期二4.2查鍵程序

鍵盤作為單片機(jī)應(yīng)用系統(tǒng)最常見的輸入設(shè)備,在一般的應(yīng)用系統(tǒng)中都是必須的。鍵個(gè)數(shù)比較少時(shí),可采用獨(dú)立式鍵盤,即每個(gè)鍵單獨(dú)與單片機(jī)的一個(gè)I/O口相連,如圖所示

第二十七頁,共四十九頁,編輯于2023年,星期二

當(dāng)鍵的個(gè)數(shù)較多時(shí),可采用非獨(dú)立式鍵盤(行列矩陣式),如圖所示。第二十八頁,共四十九頁,編輯于2023年,星期二鍵盤的抖動(dòng)和消抖第二十九頁,共四十九頁,編輯于2023年,星期二獨(dú)立式鍵盤鍵判斷和處理流程第三十頁,共四十九頁,編輯于2023年,星期二案例1、P1口分別接K0、K1、K2和K3四個(gè)按鍵,P2.0、P2.1、P2.2和P2.3分別接著LDE0、LED1、LED2、LED3四個(gè)發(fā)光二極管,試編程要求四個(gè)按鍵按下后使對(duì)應(yīng)的LED點(diǎn)亮(其余不亮,按鍵釋放后一直亮著)。第三十一頁,共四十九頁,編輯于2023年,星期二P1=0xff;key=P1|0xf0;if(key!=0xff){delay1(10);key=P1|0xf0;if(key!=0xff){根據(jù)不同鍵值轉(zhuǎn)各自處理while((P1|0xf0)!=0xff)

delay1(10);}}第三十二頁,共四十九頁,編輯于2023年,星期二//輸出接口用位輸出編程#include<reg51.h>unsignedkey;sbitp2_0=P2^0;sbitp2_1=P2^1;sbitp2_2=P2^2;sbitp2_3=P2^3;//定義各位輸出接口voiddelay1(unsignedint);//延時(shí)子函數(shù)原型說明display();//動(dòng)態(tài)掃描子函數(shù)原型說明main(){while(1){key=P1|0xf0;//讀入鍵狀態(tài)if(key!=0xff){delay1(10);第三十三頁,共四十九頁,編輯于2023年,星期二key=P1|0xf0;//再次讀入鍵狀態(tài)if(key!=0xff)//確有鍵輸入{if(key==0xfe)//K0鍵按下,處理{p2_0=0;p2_1=1;p2_2=1;p2_3=1;}elseif(key==0xfd)//K1鍵按下,處理{p2_0=1;p2_1=0;p2_2=1;p2_3=1;}if(key==0xfe)//K2鍵按下,處理{p2_0=1;p2_1=1;p2_2=0;p2_3=1;}elseif//K3鍵按下,處理{p2_0=1;p2_1=1;p2_2=1;p2_3=0;}while((P1|0xf0)!=0xff); //等待按鍵釋放delay1(10);//延時(shí)10ms消抖}}}第三十四頁,共四十九頁,編輯于2023年,星期二//輸出接口用字節(jié)輸出編程,分支語句用switch_case#include<reg51.h>unsignedkey_value;voiddelay1(unsignedint);//延時(shí)子函數(shù)原型說明display();//動(dòng)態(tài)掃描子函數(shù)原型說明main(){while(1){key_value=P1|0xf0;//讀入鍵狀態(tài)if(key!=0xff){delay1(10);第三十五頁,共四十九頁,編輯于2023年,星期二key=P1|0xf0;//再次讀入鍵狀態(tài)if(key!=0xff)//確有鍵輸入{swictch(key){case0xfe:P2=0xfe;break;//K0鍵按下,處理case0xfd:P2=0xfd;break;//K1鍵按下,處理case0xfb:P2=0xfb;break;//K2鍵按下,處理case0xf7:P2=0xf7;break;//K3鍵按下,處理default:P2=0xff;}while((P1|0xf0)!=0xff); //等待按鍵釋放delay1(10);//延時(shí)10ms消抖}}}本例中鍵值key與P2輸出值剛好一致,不必判斷可直接輸出。第三十六頁,共四十九頁,編輯于2023年,星期二練習(xí)1、P1口分別接K0、K1、K2和K3四個(gè)按鍵,P0口接著8盞流水燈。試編程要求四個(gè)按鍵按下后使對(duì)應(yīng):1、使流水燈循環(huán)左移一位(只亮一盞燈)2、使流水燈循環(huán)右移一位(只亮一盞燈)3、使流水燈循環(huán)左移一位(逐點(diǎn)點(diǎn)亮)4、使流水燈循環(huán)左移一位(逐點(diǎn)點(diǎn)亮)第三十七頁,共四十九頁,編輯于2023年,星期二#include<reg51.h>bitflage=0;voiddelay1(unsignedint);display();main(){unsignedkey; P0=0x00; j1=0; P3=0xff;while(1){P1=0xff; //輸入端口先寫1key=P1|0xf0; //讀入開關(guān)狀態(tài)(使高4位為1)if(key!=0xff)//有鍵按下第三十八頁,共四十九頁,編輯于2023年,星期二

key=P1|0xf0;if(key!=0xff)//{switch(key){case0xfe:{P0<<=1;P0|=1;if(P0==0xff)P0=0xfe;};break;case0xfd:{P0>>=1;P0|=0x80;if(P0==0xff)P0=0x7f;};break;case0xfb:{P0<<=1;if(P0==0x00){flage=!flage;if(flage==1){P0=0xfe;flage=1;}}};break;case0xf7:{P0>>=1;if(P0==0x00){flage=!flage;if(flage==1){P0=0x7f;flage=1;}}};break;第三十九頁,共四十九頁,編輯于2023年,星期二

default:P0=0xff;}while((P1|0xf0)!=0xff); //等待按鍵釋放delay1(10);}}}}/*--------------------延時(shí)程序1---------------------*/voiddelay1(unsignedintms){unsignedinti,j;for(i=0;i<ms;i++)for(j=0;j<60;j++);}第四十頁,共四十九頁,編輯于2023年,星期二案例2、P1口分別接K0、K1、K2和K3四個(gè)按鍵,P0口和P3口分別為6位數(shù)碼管的字型和位選口,試編程要求K0、K1、K2和K3四個(gè)按鍵按下后,分別顯示年月日(14xxxx)、時(shí)間(xx::xx,時(shí)和分)、班級(jí)和學(xué)號(hào)(A3--06)、和(P,最左邊P其余熄滅符),鍵沒按過顯示(123456)。第四十一頁,共四十九頁,編輯于2023年,星期二案例2的源程序#include<reg51.h>unsignedcharcodedt[]={1,4,0,4,1,6,10,3,0x14,0,0,2, 0x10,0x12,0x12,0x12,0x12,0x12, 0x11,0x14,0x14,0x14,0x14,0x14};unsignedcharcodeTAB_Font[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67,0x77,0x3D,0x39,0x5E,0x79,0X71,0X73,0X76,0X00,0X6E,0x40};unsignedcharcodeTAB_bit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};unsignedcharcount=100;unsignedcharj1;//四種顯示形式的取數(shù)指針bitflage=0;//為使沒鍵按下過不顯示任何信息設(shè)位標(biāo)志第四十二頁,共四十九頁,編輯于2023年,星期二main(){unsignedkey; P0=0x00; j1=0; P3=0xff;while(1){P1=0xff; //輸入端口先寫1key=P1|0xf0; //讀入開關(guān)狀態(tài)(使高4位為1)if(key!=0xff)//有鍵按下{ flage=1;display();display();//用調(diào)用顯示子函數(shù)來軟件延時(shí)key=P1|0xf0;if(key!=0xff)//再次讀入鍵值

第四十三頁,共四十九頁,編輯于2023年,星期二

{switch(key) {case0xfe:j1=0;break; case0xfd:j1=6;break; case0xfb:j1=12;break; case0xf7:j1=18;break; default:j1=0; }while((P1|0xf0)!=0xff)display();//等待按鍵釋放display();}}display();}}voiddelay1(unsignedintms){unsignedinti,j;for(i=0;i<ms;i++)for(j=0;j<60;j++);}第四十四頁,共四十九頁,編輯于2023年,星期二display()//LED動(dòng)態(tài)掃描顯示子函數(shù)

{unsignedi=0,a;while(i<6)//

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論