《單片機原理及接口技術(shù)》項目5 鍵盤接口技術(shù)_第1頁
《單片機原理及接口技術(shù)》項目5 鍵盤接口技術(shù)_第2頁
《單片機原理及接口技術(shù)》項目5 鍵盤接口技術(shù)_第3頁
《單片機原理及接口技術(shù)》項目5 鍵盤接口技術(shù)_第4頁
《單片機原理及接口技術(shù)》項目5 鍵盤接口技術(shù)_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單片機及接口技術(shù)項目教程項目5

鍵盤接口技術(shù)獨立式鍵盤矩陣式鍵盤訓(xùn)練項目鍵盤由一組規(guī)則排列的按鍵組成,一個按鍵實際上是一個開關(guān)元件。在單片機外圍電路中,通常用到的按鍵是機械觸點式彈性開關(guān),其主要功能是把機械上的通斷轉(zhuǎn)換為電氣上的邏輯關(guān)系

(1和0),當開關(guān)閉合(0)時,線路導(dǎo)通,開關(guān)斷開(1)時,線路斷開。常見的鍵盤種類有獨立式鍵盤和矩陣式鍵盤。一、獨立式鍵盤1、獨立式鍵盤結(jié)構(gòu)鍵盤實際上是一組按鍵開關(guān)的集合,平時按

鍵開關(guān)總是處于斷開狀態(tài),當按下鍵時它才閉合。每個按鍵單獨

占用一根I/O口線,每個按鍵工作不會影響其他I/O口線

的狀態(tài)。多用于所需鍵盤不多的場合。2、按鍵觸點的機械抖動機械式按鍵在按下或釋放時,由于機械彈性作用的影響,通常伴隨有一定時間的觸點機械抖動,然后其觸點才穩(wěn)定下來。抖動時間的長短與開關(guān)的機械特性有關(guān),一般為5—10ms。3、消抖方法為了克服按鍵觸點機械抖動所致的檢測誤判,必

須采取去抖動措施,可從硬件、軟件兩方面予以考慮。在鍵數(shù)較少時,可采用硬件消抖;而當鍵數(shù)較多時,

采用軟件消抖。①

硬件消抖②

軟件消抖軟件上采取的措施是在檢測到有按鍵按下時,

執(zhí)行一個10—20ms左右(具體時間應(yīng)視所使用的按

鍵進行調(diào)整)的延時程序,再確認該鍵電平是否仍

保持閉合狀態(tài)電平,若仍保持閉合狀態(tài)電平,則確

認該鍵處于閉合狀態(tài);同理,在檢測到該鍵釋放后,也應(yīng)采用相同的步驟進行確認,從而消除抖動的影

響。二、矩陣式鍵盤1、矩陣式鍵盤結(jié)構(gòu)2、鍵碼識別矩陣式鍵盤結(jié)構(gòu)比獨立式鍵盤要復(fù)雜,識別也要復(fù)雜一些。最常用的識別方法是鍵盤掃描法。它的控制方式是先判斷是否有鍵按下。如有,再判斷哪一鍵按下,并得到鍵碼值,然后根據(jù)鍵碼值轉(zhuǎn)向不同的功能程序。①判別鍵盤上有無鍵閉合②去除鍵的機械抖動③判別閉合鍵的鍵號④等待按鍵釋放三、訓(xùn)練項目1、簡易數(shù)字調(diào)節(jié)器(1)訓(xùn)練目的①了解獨立式鍵盤的結(jié)構(gòu)與工作原理。②掌握按鍵的檢測與軟件消抖方法。③學(xué)會通過獨立式按鍵操作設(shè)置參數(shù)的編程方法。訓(xùn)練任務(wù)本項目要完成的任務(wù)是設(shè)計一個簡易數(shù)字調(diào)節(jié)器。用兩位數(shù)碼管顯示數(shù)值,變化范圍00—59。開始時

顯示00,每按下key1鍵一次,數(shù)值加1;每按下

key2鍵一次,數(shù)值減1;每按下key3鍵一次,數(shù)值

歸零;按下key4鍵一次,利用定時器功能使數(shù)值開

始自動每秒加1,再次按下key4鍵,數(shù)值停止自動

加1,保持原來的數(shù)。Key1—key4鍵均采用獨立式按鍵。任務(wù)引導(dǎo)由獨立式鍵盤工作原理知,要通過四個按鍵實現(xiàn)不同的數(shù)字顯示,只需要依次檢測key1—key4鍵是否有鍵按下,若有,延時10—20ms消抖后再判斷是否有鍵按下,若確認有,再轉(zhuǎn)去執(zhí)行相應(yīng)的按鍵動作即可。(4)任務(wù)實施①硬件電路設(shè)計②軟件設(shè)計#include<reg52.h>#include

<stdio.h>//52系列單片機頭文件//標準I/O庫函數(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};//共陽極0~F字段碼//定義按鍵sbit

key1=P3^2;sbit

key2=P3^3;sbit

key3=P3^4;sbit

key4=P3^5;uchar

numt0,num;//xms延時函數(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ù)分離成十位、個位shi=numdis/10;//十位數(shù)ge=numdis%10;//個位數(shù)P0

=table[shi];//送十位數(shù)段選碼P2=0x02;//送位選delayms(5);//延時P2=0x00;//消隱P0=table[ge];//送個位數(shù)段選碼P2=0x01;//送位選delayms(5);//延時P2=0x00;//消隱}//定時器T0初始化函數(shù)void

T0_init(){TMOD=0x01;//設(shè)置定時器T0為工作方式1(0000

0001)//裝初值50ms中斷一次TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;//開總中斷//開定時器0中斷}//鍵盤掃描子函數(shù)void

keyscan(){if(key1==0){//消抖delayms(10);if(key1==0){num++;//數(shù)值加1if(num==60)//當?shù)?0時重新歸0num=0;while(!key1); //等待按鍵釋放}//消抖//當?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;//等待按鍵釋放//啟動或停止定時器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次,說明1s時間到//numt0清0,重新再計20次if(numt0==20){numt0=0;num++;if(num==60)num=0;}}(5)效果演示2、一鍵多功能控制(1)訓(xùn)練目的①進一步掌握按鍵的檢測與軟件消抖方法。②學(xué)會一鍵多功能控制程序流程的編程方法。(2)訓(xùn)練任務(wù)本項目要完成的任務(wù)是采用一個按鍵實現(xiàn)

LED燈多花樣顯示。按下按鍵一次:左移,按下按鍵二次:右移,按下按鍵三次:閃爍,按下按鍵四次:跑馬燈。任務(wù)引導(dǎo)由獨立式鍵盤工作原理知,要通過一個按鍵實現(xiàn)LED燈不同的顯示效果,只需不斷檢測是否有

鍵按下,若有,延時消抖后再判斷是否有鍵按下,若確認有,記下按鍵按下次數(shù),根據(jù)記錄下的按鍵次數(shù)轉(zhuǎn)去執(zhí)行相應(yīng)的功能程序段即可。任務(wù)實施①硬件電路設(shè)計②軟件設(shè)計A、程序流程圖B、控制源程序#include<reg52.h>#include

<stdio.h>//52系列單片機頭文件//標準I/O庫函數(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ù)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ù)送單片機端口顯示函數(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);//等待按鍵釋放,相當于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); //每列保持時間}}}}(5)效果演示3、矩陣式鍵盤操作訓(xùn)練目的①了解鍵盤的結(jié)構(gòu)與工作原理。②掌握識別鍵盤編碼的方法。③學(xué)會矩陣式鍵盤鍵盤掃描編程方法。訓(xùn)練任務(wù)本項目要完成的任務(wù)是設(shè)計并仿真一個矩陣式鍵盤,分別按下矩陣鍵盤上的任意按鍵0~F,數(shù)碼管上即顯示出相應(yīng)的數(shù)碼。(3)任務(wù)引導(dǎo)由矩陣式鍵盤工作原理知,本項目可采用如前所述的鍵盤掃描法得到鍵碼值。(4)任務(wù)實施①硬件電路設(shè)計②軟件設(shè)計#include<reg52.h>#include

<stdio.h>//52系列單片機頭文件//標準I/O庫函數(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字段碼(共陽極)//xms延時子函數(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);//延時消抖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);//延時消抖if((P3&0x0F)!=0x0f){temp=P3;switch(temp){case

0xBE:

key=8;break;case

0xBD:

key=9;break;

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論