




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)及接口技術(shù)項(xiàng)目教程項(xiàng)目5
鍵盤接口技術(shù)獨(dú)立式鍵盤矩陣式鍵盤訓(xùn)練項(xiàng)目鍵盤由一組規(guī)則排列的按鍵組成,一個(gè)按鍵實(shí)際上是一個(gè)開關(guān)元件。在單片機(jī)外圍電路中,通常用到的按鍵是機(jī)械觸點(diǎn)式彈性開關(guān),其主要功能是把機(jī)械上的通斷轉(zhuǎn)換為電氣上的邏輯關(guān)系
(1和0),當(dāng)開關(guān)閉合(0)時(shí),線路導(dǎo)通,開關(guān)斷開(1)時(shí),線路斷開。常見的鍵盤種類有獨(dú)立式鍵盤和矩陣式鍵盤。一、獨(dú)立式鍵盤1、獨(dú)立式鍵盤結(jié)構(gòu)鍵盤實(shí)際上是一組按鍵開關(guān)的集合,平時(shí)按
鍵開關(guān)總是處于斷開狀態(tài),當(dāng)按下鍵時(shí)它才閉合。每個(gè)按鍵單獨(dú)
占用一根I/O口線,每個(gè)按鍵工作不會(huì)影響其他I/O口線
的狀態(tài)。多用于所需鍵盤不多的場(chǎng)合。2、按鍵觸點(diǎn)的機(jī)械抖動(dòng)機(jī)械式按鍵在按下或釋放時(shí),由于機(jī)械彈性作用的影響,通常伴隨有一定時(shí)間的觸點(diǎn)機(jī)械抖動(dòng),然后其觸點(diǎn)才穩(wěn)定下來(lái)。抖動(dòng)時(shí)間的長(zhǎng)短與開關(guān)的機(jī)械特性有關(guān),一般為5—10ms。3、消抖方法為了克服按鍵觸點(diǎn)機(jī)械抖動(dòng)所致的檢測(cè)誤判,必
須采取去抖動(dòng)措施,可從硬件、軟件兩方面予以考慮。在鍵數(shù)較少時(shí),可采用硬件消抖;而當(dāng)鍵數(shù)較多時(shí),
采用軟件消抖。①
硬件消抖②
軟件消抖軟件上采取的措施是在檢測(cè)到有按鍵按下時(shí),
執(zhí)行一個(gè)10—20ms左右(具體時(shí)間應(yīng)視所使用的按
鍵進(jìn)行調(diào)整)的延時(shí)程序,再確認(rèn)該鍵電平是否仍
保持閉合狀態(tài)電平,若仍保持閉合狀態(tài)電平,則確
認(rèn)該鍵處于閉合狀態(tài);同理,在檢測(cè)到該鍵釋放后,也應(yīng)采用相同的步驟進(jìn)行確認(rèn),從而消除抖動(dòng)的影
響。二、矩陣式鍵盤1、矩陣式鍵盤結(jié)構(gòu)2、鍵碼識(shí)別矩陣式鍵盤結(jié)構(gòu)比獨(dú)立式鍵盤要復(fù)雜,識(shí)別也要復(fù)雜一些。最常用的識(shí)別方法是鍵盤掃描法。它的控制方式是先判斷是否有鍵按下。如有,再判斷哪一鍵按下,并得到鍵碼值,然后根據(jù)鍵碼值轉(zhuǎn)向不同的功能程序。①判別鍵盤上有無(wú)鍵閉合②去除鍵的機(jī)械抖動(dòng)③判別閉合鍵的鍵號(hào)④等待按鍵釋放三、訓(xùn)練項(xiàng)目1、簡(jiǎn)易數(shù)字調(diào)節(jié)器(1)訓(xùn)練目的①了解獨(dú)立式鍵盤的結(jié)構(gòu)與工作原理。②掌握按鍵的檢測(cè)與軟件消抖方法。③學(xué)會(huì)通過(guò)獨(dú)立式按鍵操作設(shè)置參數(shù)的編程方法。訓(xùn)練任務(wù)本項(xiàng)目要完成的任務(wù)是設(shè)計(jì)一個(gè)簡(jiǎn)易數(shù)字調(diào)節(jié)器。用兩位數(shù)碼管顯示數(shù)值,變化范圍00—59。開始時(shí)
顯示00,每按下key1鍵一次,數(shù)值加1;每按下
key2鍵一次,數(shù)值減1;每按下key3鍵一次,數(shù)值
歸零;按下key4鍵一次,利用定時(shí)器功能使數(shù)值開
始自動(dòng)每秒加1,再次按下key4鍵,數(shù)值停止自動(dòng)
加1,保持原來(lái)的數(shù)。Key1—key4鍵均采用獨(dú)立式按鍵。任務(wù)引導(dǎo)由獨(dú)立式鍵盤工作原理知,要通過(guò)四個(gè)按鍵實(shí)現(xiàn)不同的數(shù)字顯示,只需要依次檢測(cè)key1—key4鍵是否有鍵按下,若有,延時(shí)10—20ms消抖后再判斷是否有鍵按下,若確認(rèn)有,再轉(zhuǎn)去執(zhí)行相應(yīng)的按鍵動(dòng)作即可。(4)任務(wù)實(shí)施①硬件電路設(shè)計(jì)②軟件設(shè)計(jì)#include<reg52.h>#include
<stdio.h>//52系列單片機(jī)頭文件//標(biāo)準(zhǔn)I/O庫(kù)函數(shù)頭文件#define
uchar
unsigned
char //宏定義#define
uint
unsigned
intuchar
code
BitTab[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};//8字位選碼uchar
code
table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};//共陽(yáng)極0~F字段碼//定義按鍵sbit
key1=P3^2;sbit
key2=P3^3;sbit
key3=P3^4;sbit
key4=P3^5;uchar
numt0,num;//xms延時(shí)函數(shù)void
delayms(uint
xms){uint
i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}//顯示子函數(shù)void
display(uchar
numdis){uchar
shi,ge;//將要顯示的2位數(shù)分離成十位、個(gè)位shi=numdis/10;//十位數(shù)ge=numdis%10;//個(gè)位數(shù)P0
=table[shi];//送十位數(shù)段選碼P2=0x02;//送位選delayms(5);//延時(shí)P2=0x00;//消隱P0=table[ge];//送個(gè)位數(shù)段選碼P2=0x01;//送位選delayms(5);//延時(shí)P2=0x00;//消隱}//定時(shí)器T0初始化函數(shù)void
T0_init(){TMOD=0x01;//設(shè)置定時(shí)器T0為工作方式1(0000
0001)//裝初值50ms中斷一次TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;//開總中斷//開定時(shí)器0中斷}//鍵盤掃描子函數(shù)void
keyscan(){if(key1==0){//消抖delayms(10);if(key1==0){num++;//數(shù)值加1if(num==60)//當(dāng)?shù)?0時(shí)重新歸0num=0;while(!key1); //等待按鍵釋放}//消抖//當(dāng)?shù)?時(shí)重新歸60}if(key2==0){delayms(10);if(key2==0){if(num==0)num=60;num--;//數(shù)值減1while(!key2);}//消抖}if(key3==0){delayms(10);if(key3==0){num=0;//數(shù)值歸0while(!key3);}//消抖}if(key4==0){delayms(10);if(key4==0){while(!key4);TR0=~TR0;//等待按鍵釋放//啟動(dòng)或停止定時(shí)器T0}}}//T0中斷服務(wù)函數(shù)void
main(){T0_init();while(1){keyscan();display(num);}}void
T0_time()
interrupt
1{//重裝初值TH0=(65536-50000)/256;TL0=(65536-50000)%256;numt0++;//如果中斷次數(shù)到20次,說(shuō)明1s時(shí)間到//numt0清0,重新再計(jì)20次if(numt0==20){numt0=0;num++;if(num==60)num=0;}}(5)效果演示2、一鍵多功能控制(1)訓(xùn)練目的①進(jìn)一步掌握按鍵的檢測(cè)與軟件消抖方法。②學(xué)會(huì)一鍵多功能控制程序流程的編程方法。(2)訓(xùn)練任務(wù)本項(xiàng)目要完成的任務(wù)是采用一個(gè)按鍵實(shí)現(xiàn)
LED燈多花樣顯示。按下按鍵一次:左移,按下按鍵二次:右移,按下按鍵三次:閃爍,按下按鍵四次:跑馬燈。任務(wù)引導(dǎo)由獨(dú)立式鍵盤工作原理知,要通過(guò)一個(gè)按鍵實(shí)現(xiàn)LED燈不同的顯示效果,只需不斷檢測(cè)是否有
鍵按下,若有,延時(shí)消抖后再判斷是否有鍵按下,若確認(rèn)有,記下按鍵按下次數(shù),根據(jù)記錄下的按鍵次數(shù)轉(zhuǎn)去執(zhí)行相應(yīng)的功能程序段即可。任務(wù)實(shí)施①硬件電路設(shè)計(jì)②軟件設(shè)計(jì)A、程序流程圖B、控制源程序#include<reg52.h>#include
<stdio.h>//52系列單片機(jī)頭文件//標(biāo)準(zhǔn)I/O庫(kù)函數(shù)頭文件#define
uchar
unsigned
char#define
uint
unsigned
intsbit
Key=P3^2; //定義按鍵/* 定義顯示花樣*///Leftuchar
codeleft[]={0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0xFF};uchar
coderight[]={0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0xFf};//Rightuchar
code
shining[]={0xFF,0x00,0x0FF,0x00,0x0FF,0x00,0x0FF,0x00,0x0F//Shininguchar
code
running[]={0xFE,0xFD,0xF9,0xF7,0xEF,0xDF,0x9F,0x7F,0xFf};//Runninguchar
ID;//xms延時(shí)函數(shù)void
delayms(uint
xms){uint
i,j;for(i=xms;i>0;i--)for(j=125;j>0;j--);void
ModeCode(uchar
*Datamode,uchar
DataLen)//取花樣數(shù)據(jù)送單片機(jī)端口顯示函數(shù){uchar
CopyLen;for(CopyLen
=
0;CopyLen
<
DataLen;CopyLen++){P1=*Datamode++;//取花樣數(shù)據(jù)碼送P1口并顯示delayms(1000);}}void
main(){while(1){if(Key==0)delayms(10);if(Key==0){ID++;if(ID==5){ID=0; //ID歸0再次循環(huán)}while(Key==0);//等待按鍵釋放,相當(dāng)于while(!Key);}switch(ID){case
1:ModeCode(&left,sizeof(left));break;case
2:ModeCode(&right,sizeof(right));break;case
3:ModeCode(&shining,sizeof(shining));breacase
4:ModeCode(&running,sizeof(running));breadefault:P1=0xff;}//滅燈}}//數(shù)據(jù)移位//數(shù)據(jù)鎖存LS595DS
=*pointer_Hangdata++;//上8行數(shù)據(jù)有效LS595DatasShift
=
0;LS595DatasShift
=
1;LS595DatasShift
=
0;LS595DatasLock
=
0;LS595DatasLock
=
1;LS595DatasLock
=
0;delayms(1); //每列保持時(shí)間}}}}(5)效果演示3、矩陣式鍵盤操作訓(xùn)練目的①了解鍵盤的結(jié)構(gòu)與工作原理。②掌握識(shí)別鍵盤編碼的方法。③學(xué)會(huì)矩陣式鍵盤鍵盤掃描編程方法。訓(xùn)練任務(wù)本項(xiàng)目要完成的任務(wù)是設(shè)計(jì)并仿真一個(gè)矩陣式鍵盤,分別按下矩陣鍵盤上的任意按鍵0~F,數(shù)碼管上即顯示出相應(yīng)的數(shù)碼。(3)任務(wù)引導(dǎo)由矩陣式鍵盤工作原理知,本項(xiàng)目可采用如前所述的鍵盤掃描法得到鍵碼值。(4)任務(wù)實(shí)施①硬件電路設(shè)計(jì)②軟件設(shè)計(jì)#include<reg52.h>#include
<stdio.h>//52系列單片機(jī)頭文件//標(biāo)準(zhǔn)I/O庫(kù)函數(shù)頭文件#define
uchar
unsigned
char#define
uint
unsigned
int//uchar
code
BitTab[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};//8位選碼uchar
code
table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};//0~F字段碼(共陽(yáng)極)//xms延時(shí)子函數(shù)void
delayms(uint
xms){uint
i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}//顯示子函數(shù)void
display(uchar
num){P0=table[num];//送字段碼P2=0x01; //送位選碼//矩陣式鍵盤掃描子函數(shù)}void
matrixkeyscan(){uchar
temp,key=0xFF;static
uchar
data
lastKey;P3=0x7F; //掃描第一列if((P3&0x0F)!=0x0f){delayms(10);//延時(shí)消抖if((P3&0x0F)!=0x0f){temp=P3;switch(temp){case
0x7E:
key=12;break;case
0x7D:
key=13;break;case
0x7B:
key=14;break;case
0x77:
key=15;break;default:key=0;}}}P3=0xBF; //掃描第二列if((P3&0x0F)!=0x0f){delayms(10);//延時(shí)消抖if((P3&0x0F)!=0x0f){temp=P3;switch(temp){case
0xBE:
key=8;break;case
0xBD:
key=9;break;
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 借用林地協(xié)議合同范本
- 包裝紙盒合同范本
- 北京車輛過(guò)戶合同范本
- 軍事拓展協(xié)議合同范本
- 企業(yè)價(jià)值咨詢合同范本
- 動(dòng)產(chǎn)個(gè)人抵押合同范本
- 人工勞務(wù)外包合同范本
- 企業(yè)綠化合同范本
- 農(nóng)業(yè)機(jī)械改裝項(xiàng)目合同范例
- 化妝品廠家代工合同范本
- 婦產(chǎn)科醫(yī)療質(zhì)控月匯報(bào)
- 《石油化工企業(yè)場(chǎng)地地下水污染防治技術(shù)指南》(T-CAEPI 39-2021)
- 人大代表身份證明
- 部編版語(yǔ)文四年級(jí)下冊(cè)第二單元大單元教學(xué)設(shè)計(jì)核心素養(yǎng)目標(biāo)
- 城區(qū)排水管網(wǎng)雨污分流改造項(xiàng)目可行性報(bào)告
- 公務(wù)員因私出國(guó)規(guī)定
- 《幼兒教育評(píng)價(jià)》課程標(biāo)準(zhǔn)
- 《現(xiàn)代教育技術(shù)》課程標(biāo)準(zhǔn)
- 教職工安全教育培訓(xùn)課件
- 2024年山東省春季高考技能考試-汽車專業(yè)備考試題庫(kù)(濃縮500題)
- 2024年湖南生物機(jī)電職業(yè)技術(shù)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
評(píng)論
0/150
提交評(píng)論