![《單片機原理及接口技術(shù)》項目5 鍵盤接口技術(shù)_第1頁](http://file4.renrendoc.com/view11/M00/03/0D/wKhkGWVpzieAbNwsAADPnnh0Qv0422.jpg)
![《單片機原理及接口技術(shù)》項目5 鍵盤接口技術(shù)_第2頁](http://file4.renrendoc.com/view11/M00/03/0D/wKhkGWVpzieAbNwsAADPnnh0Qv04222.jpg)
![《單片機原理及接口技術(shù)》項目5 鍵盤接口技術(shù)_第3頁](http://file4.renrendoc.com/view11/M00/03/0D/wKhkGWVpzieAbNwsAADPnnh0Qv04223.jpg)
![《單片機原理及接口技術(shù)》項目5 鍵盤接口技術(shù)_第4頁](http://file4.renrendoc.com/view11/M00/03/0D/wKhkGWVpzieAbNwsAADPnnh0Qv04224.jpg)
![《單片機原理及接口技術(shù)》項目5 鍵盤接口技術(shù)_第5頁](http://file4.renrendoc.com/view11/M00/03/0D/wKhkGWVpzieAbNwsAADPnnh0Qv04225.jpg)
版權(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),當(dāng)開關(guān)閉合(0)時,線路導(dǎo)通,開關(guān)斷開(1)時,線路斷開。常見的鍵盤種類有獨立式鍵盤和矩陣式鍵盤。一、獨立式鍵盤1、獨立式鍵盤結(jié)構(gòu)鍵盤實際上是一組按鍵開關(guān)的集合,平時按
鍵開關(guān)總是處于斷開狀態(tài),當(dāng)按下鍵時它才閉合。每個按鍵單獨
占用一根I/O口線,每個按鍵工作不會影響其他I/O口線
的狀態(tài)。多用于所需鍵盤不多的場合。2、按鍵觸點的機械抖動機械式按鍵在按下或釋放時,由于機械彈性作用的影響,通常伴隨有一定時間的觸點機械抖動,然后其觸點才穩(wěn)定下來。抖動時間的長短與開關(guān)的機械特性有關(guān),一般為5—10ms。3、消抖方法為了克服按鍵觸點機械抖動所致的檢測誤判,必
須采取去抖動措施,可從硬件、軟件兩方面予以考慮。在鍵數(shù)較少時,可采用硬件消抖;而當(dāng)鍵數(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系列單片機頭文件//標(biāo)準(zhǔn)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)//當(dāng)?shù)?0時重新歸0num=0;while(!key1); //等待按鍵釋放}//消抖//當(dāng)?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系列單片機頭文件//標(biāo)準(zhǔn)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);//等待按鍵釋放,相當(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); //每列保持時間}}}}(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系列單片機頭文件//標(biāo)準(zhǔn)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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度幼兒園兒童安全教育教材及課程開發(fā)協(xié)議
- 2025年度城市綜合體物業(yè)管理服務(wù)合同協(xié)議范本
- 2025年產(chǎn)品質(zhì)量保證協(xié)議文本
- 2025年倉儲場地續(xù)租合同樣本
- 2025年市場擴張戰(zhàn)略策劃咨詢協(xié)議
- 市場調(diào)研與分析服務(wù)框架協(xié)議
- 2025年飲料酒項目規(guī)劃申請報告模范
- 2025年中藥材市場分析與采購服務(wù)合同
- 2025年滌綸短纖項目規(guī)劃申請報告模范
- 2025年鼻毛修剪器項目規(guī)劃申請報告模稿
- DL∕ T 969-2005 變電站運行導(dǎo)則
- 應(yīng)急小組成立通知
- 關(guān)于如何做好清單招標(biāo)控制價的幾點建議
- 地鐵前期工程交通疏解施工方案
- NB-T32019-2013太陽能游泳池加熱系統(tǒng)技術(shù)規(guī)范
- 小學(xué)升初中六年級數(shù)學(xué)考試試卷含答案(達標(biāo)題)
- 2024年長沙航空職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫完整
- 醫(yī)療器械市場部年終總結(jié)
- 4M變更管理培訓(xùn)
- DBJ33-T 1009-2023 園林植物種植與養(yǎng)護技術(shù)規(guī)程
- 攪拌設(shè)備行業(yè)發(fā)展趨勢分析報告
評論
0/150
提交評論