版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
模塊七系統(tǒng)擴展與接口技術(shù)
7.2單片機與鍵盤的連接模塊七系統(tǒng)擴展與接口技術(shù)7.2.1鍵盤及其抖動問題鍵盤是由若干按鍵組成的開關(guān)矩陣,它是微型計算機最常用的輸入設(shè)備,用戶可以通過鍵盤向計算機輸入指令、地址和數(shù)據(jù)。一般單片機系統(tǒng)中采用非編碼鍵盤,非編碼鍵盤是由軟件來識別鍵盤上的閉合鍵,它具有結(jié)構(gòu)簡單,使用靈活等特點,因此被廣泛應(yīng)用于單片機系統(tǒng)。7.2.1鍵盤及其抖動問題鍵盤是由若干按鍵組成的開關(guān)矩陣27.2.1鍵盤及其抖動問題組成鍵盤的按鍵有觸點式和非觸點式兩種,單片機中應(yīng)用的一般是由機械觸點構(gòu)成的。當(dāng)開關(guān)S斷開時,P1.0輸入為高電平,S閉合時,P1.0輸入為低電平。由于按鍵是機械觸點,當(dāng)機械觸點斷開、閉合時,會有抖動。7.2.1鍵盤及其抖動問題組成鍵盤的按鍵有觸點式和非觸點3消除抖動的方法硬件方法:一般不常用。軟件方法:單片機設(shè)計中常用軟件法,軟件去除抖動其實很簡單,就是在單片機獲得P1.0口為低的信息后,不是立即認(rèn)定S已被按下,而是延時10毫秒或更長一段時間后再次檢測P1.0口,如果仍為低,說明S的確按下了,這實際上是避開了按鍵按下時的抖動時間。而在檢測到按鍵釋放后(P1.0為高),再延時5~10個毫秒,消除后沿的抖動,然后再對鍵值處理。消除抖動的方法硬件方法:一般不常用。47.2.2單片機與鍵盤的連接將每個按鍵的一端接到單片機的I/O口,另一端接地。1、通過I/O口連接:一、獨立式按鍵接口技術(shù)7.2.2單片機與鍵盤的連接將每個按鍵的一端接到單片機的5實例如下圖所示,采用不斷查詢的方法,即檢測是否有鍵閉合,如有鍵閉合,則去除鍵抖動,判斷鍵號并轉(zhuǎn)入相應(yīng)的鍵處理。假設(shè)兩個鍵定義如下:P3.0:開始執(zhí)行某種操作(假設(shè)讓8只發(fā)光二極管閃爍)。P3.1:停止執(zhí)行。實例如下圖所示,采用不斷查詢的方法,即檢測是否有鍵閉合,如6voiddelay(unsignedchar);bitkey();voidlsd(unsignedchar);unsignedcharvkey;bitstart_end=0;voidmain(){unsignedcharldata;while(1){}}if(key()){if(vkey==1)start_end=1;elsestart_end=0;}if(start_end){ldata=~ldata;delay(250);}elseldata=0xff;P0=ldata;源程序voiddelay(unsignedchar);if(k7源程序(延時函數(shù)delay())voiddelay(unsignedchart){unsignedchari,j;for(i=t;i>0;i--)for(j=200;j>0;j--);}源程序(延時函數(shù)delay())voiddelay(uns8bitkey(){unsignedchartemp;bitflag=0;temp=P3;temp=temp|0xfc;temp=temp^0xff;if(temp==0)returnflag;else{}}delay(25);temp=P3|0xfc;temp=temp^0xff;if(temp==0)
returnflag;else{vkey=temp;flag=1;while(temp){temp=P3|0xfc;temp=temp^0xff;}}returnflag;源程序(判斷是否有鍵按下函數(shù))bitkey()delay(25);temp=P3|092、采用中斷方式各個按鍵都接到一個與非門上,當(dāng)有任何一個按鍵按下時,都會使與門輸出為低電平,從而引起單片機的中斷,它的好處是不用在主程序中不斷地循環(huán)查詢,如果有鍵按下,單片機再去做相應(yīng)的處理。2、采用中斷方式各個按鍵都接到一個與非門上,當(dāng)有任何一個按鍵10實例試編程實現(xiàn)由3個按鍵控制發(fā)光二極管的全亮、閃爍或全滅。#include<reg51.h>voiddelay(unsignedchar);unsignedcharflag;voidmain(){IT0=1;EA=1;EX0=1;while(1){switch(flag){case1:P0=0x00;break;case2:P0=~P0;delay(250);break;case3:P0=0xff;break;}}}voiddelay(unsignedchart){unsignedchari,j;for(i=t;i>0;i--)for(j=200;j>0;j--);}實例試編程實現(xiàn)由3個按鍵控制發(fā)光二極管的全亮、閃爍或全滅。11中斷服務(wù)函數(shù)voidisr_int0()interrupt0{unsignedcharkdata;kdata=P1;kdata=kdata^0xff;kdata>>=1;if(kdata!=0){kdata>>=1;if(kdata!=0)flag=3;elseflag=2;}elseflag=1;}中斷服務(wù)函數(shù)voidisr_int0()interrup12二、矩陣式鍵盤接口技術(shù)在鍵盤中按鍵數(shù)量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口(如P1口)就可以構(gòu)成4*4=16個按鍵,在需要的鍵數(shù)比較多時,采用矩陣法來做鍵盤是合理的。1、矩陣式鍵盤的結(jié)構(gòu)二、矩陣式鍵盤接口技術(shù)在鍵盤中按鍵數(shù)量較多時,為了減少I/O13當(dāng)按鍵沒有按下時,所有的輸入端都是高電平,代表無鍵按下。一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可判斷是否有鍵按下了。1、矩陣式鍵盤的結(jié)構(gòu)當(dāng)按鍵沒有按下時,所有的輸入端都是高電平,代表無鍵按下。一旦142、矩陣式鍵盤的按鍵識別方法——行掃描法1)判斷鍵盤中有無鍵按下。將全部行線置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。2)判斷閉合鍵所在的位置。在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。2、矩陣式鍵盤的按鍵識別方法——行掃描法1)判斷鍵盤中有無鍵152、矩陣式鍵盤的按鍵識別方法——行掃描法2、矩陣式鍵盤的按鍵識別方法——行掃描法16行掃描法行掃描法識別按鍵的方法就象在二維平面上找確定的點,要在二維平面上找到確定的點。確定這點的橫坐標(biāo):行線位置確定它的縱坐標(biāo):列線位置公式:鍵值=行號×列數(shù)+列號行掃描法行掃描法識別按鍵的方法就象在二維平面上找確定的點,要17實例89S51單片機的P1口用作鍵盤I/O口,P0口用作輸出口,用于輸出所按鍵的鍵號(0~F)。89S51單片機的P1口用作鍵盤I/O口,鍵盤的列線接到P1口的低4位,鍵盤的行線接到P1口的高4位。列線P1.0~P1.3分別接有4個上拉電阻到正電源+5V,并把列線P1.0~P1.3設(shè)置為輸入線,行線P1.4~P1.7設(shè)置為輸出線。4根行線和4根列線形成16個相交點。實例89S51單片機的P1口用作鍵盤I/O口,P0口用作18行掃描識別步驟(1)檢測當(dāng)前是否有鍵被按下:檢測的方法是P1.4~P1.7輸出全“0”,讀取P1.0~P1.3的狀態(tài),若P1.0~P1.3為全“1”,則無鍵閉合,否則有鍵閉合。(2)去除鍵抖動:當(dāng)檢測到有鍵按下后,延時一段時間再做下一步的檢測判斷。(3)若有鍵被按下,應(yīng)識別出是哪一個鍵閉合。行掃描識別步驟(1)檢測當(dāng)前是否有鍵被按下:檢測的方法是P119識別鍵閉合的方法對鍵盤的行線進(jìn)行掃描。P1.4~P1.7按下述4種組合依次輸出:P1.71110P1.61101P1.51011P1.40111在每組行輸出時讀取P1.0~P1.3,若全為“1”,則表示為這一行沒有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值。識別鍵閉合的方法對鍵盤的行線進(jìn)行掃描。P1.4~P1.7按下20流程圖效標(biāo)志鍵盤掃描有鍵閉合延時去抖動掃描鍵盤計算鍵值閉合鍵釋放建立有效標(biāo)志建立無返回找到閉合鍵NYNYNY流程圖效標(biāo)志鍵盤掃描有鍵閉合延時去抖動掃描鍵盤計算鍵值閉合鍵21鍵盤掃描程序#include<reg51.h>unsignedcharseg[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};voiddelay(unsignedchar);unsignedcharkey_scan();voidmain(){unsignedcharval_key;while(1){val_key=key_scan();if(val_key!=0xff)P0=seg[val_key];}}鍵盤掃描程序#include<reg51.h>22voiddelay(unsignedchart){unsignedchari,j;for(i=0;i<t;i++)for(j=0;j<200;j++);}鍵盤掃描程序voiddelay(unsignedchart)鍵盤掃23鍵盤掃描函數(shù)unsignedcharkey_scan(){unsignedcharkdata,vkey,keyNo;bitiskey=0;//標(biāo)志,在確定具體哪一個鍵按下時,如果檢測到有一個鍵按下則該標(biāo)志置1P1=0x0f;//行線送“0”kdata=P1;//讀取列線值kdata&=0x0f;if(kdata==0x0f)return0xff;//無鍵按下,建立無效標(biāo)志(0xff為無鍵按下的無效標(biāo)志)
鍵盤掃描函數(shù)unsignedcharkey_scan()24鍵盤掃描函數(shù)else//若列線均為“1”則無鍵按下,否則有鍵按下{delay(25);//有鍵按下,去除抖動kdata=0xef;while(!iskey)//掃描鍵盤{vkey=P1=kdata;//送掃描碼至P1口行線,并將掃描碼保存到vkey中kdata=P1;//讀取列線值kdata&=0x0f;if(kdata==0x0f){kdata=vkey;//若沒有鍵盤按下,則取出行掃描碼kdata<<=1;//換掃描下一行的掃描碼(循環(huán)向左移一位kdata|=1;}鍵盤掃描函數(shù)else//若列線均為“1”則25鍵盤掃描函數(shù)else//若有鍵按下則鍵處理{kdata^=0x0f;//為計算列值的方便,將列線P1.3~P1.0分別與1異或即按位取反switch(kdata)//計算列值{case1:keyNo=0;break;case2:keyNo=1;break;case4:keyNo=2;break;case8:keyNo=3;break;}iskey=1;}}
鍵盤掃描函數(shù)else//若有鍵按下則鍵處26鍵盤掃描函數(shù)vkey=vkey>>4;//取行掃描碼vkey^=0x0f;//將行掃描碼取反switch(vkey){case1:keyNo+=0;break;//把行值加到列值中case2:keyNo+=4;break;case4:keyNo+=8;break;case8:keyNo+=12;break;}do{kdata=P1;kdata&=0x0f;}while(kdata!=0x0f);//判斷鍵釋放}returnkeyNo;}鍵盤掃描函數(shù)vkey=vkey>>4;27案例空調(diào)制冷控制系統(tǒng)預(yù)置溫度控制如下圖所示,“UP”是“升溫”按鈕,接INT0,“DOWN”是“降溫”按鈕,接INT1。顯然,該案例中,提高或降低調(diào)節(jié)溫度均采用中斷方式實現(xiàn),按“UP”則產(chǎn)生外部中斷0,按“DOWN”產(chǎn)生外部中斷1。案例空調(diào)制冷控制系統(tǒng)預(yù)置溫度控制如下圖所示,“UP”是“28源程序(主函數(shù))調(diào)節(jié)溫度的設(shè)置可分別在外部中斷0和外部中斷1的中斷服務(wù)程序中實現(xiàn),在中斷服務(wù)程序中,調(diào)節(jié)溫度放在變量temp(采用BCD碼)中,每發(fā)生一次中斷,temp中的數(shù)據(jù)加1或減1,并再分別由8051的P1、P2控制的兩個數(shù)碼管顯示其溫度值。#include<reg51.h>unsignedchartemp=30;main(){unsignedchart10,t;IT0=IT1=1;t10=temp/10;t=temp%10;P1=(t10<<4)|(t&0x0f);EA=1;EX0=EX1=1;while(1);}源程序(主函數(shù))調(diào)節(jié)溫度的設(shè)置可分別在外部中斷0和外部中斷129//按升溫按鈕的中斷服務(wù)程序voidisr_int0()interrupt0{unsignedchart10,t;if(temp<30)temp++;t10=temp/10;t=temp%10;P1=(t10<<4)|(t&0x0f);}溫度設(shè)定中斷子程序://按升溫按鈕的中斷服務(wù)程序溫度設(shè)定中斷子程序:30//按降溫按鈕的中斷服務(wù)程序voidisr_int1()interrupt2{unsignedchart10,t;if(temp>20)temp--;t10=temp/10;t=temp%10;P1=(t10<<4)|(t&0x0f);}溫度設(shè)定中斷子程序://按降溫按鈕的中斷服務(wù)程序溫度設(shè)定中斷子程序:31提示:本案例還解決了一個處理十進(jìn)制溫度(BCD碼)的問題,請留意。本案例只是提供一個思路,僅供參考,不要把思維局限在本案例上。本案例只用了兩個按鈕,可以直接采用中斷法,但本任務(wù)卻要四個按鈕,能直接用嗎?顯然不行?提示:本案例還解決了一個處理十進(jìn)制溫度(BCD碼)的問題,請32知識梳理與總結(jié)本任務(wù)通過溫度報警器預(yù)置溫度的實現(xiàn),讓讀者掌握鍵盤工作原理及其與單片機接口的相關(guān)知識,學(xué)會應(yīng)用。本任務(wù)重點內(nèi)容如下:(1)鍵盤工作原理、按鍵抖動問題及其消除方法;(2)獨立式按鍵與單片機連接的電路及其編程;(3)矩陣式鍵盤的結(jié)構(gòu)及其按鍵識別方法——行列掃描法的程序設(shè)計。知識梳理與總結(jié)本任務(wù)通過溫度報警器預(yù)置溫度的實現(xiàn),讓讀者掌握33任務(wù)作業(yè)P281~P282T8-4~T8-6任務(wù)作業(yè)P281~P28234模塊七系統(tǒng)擴展與接口技術(shù)
7.2單片機與鍵盤的連接模塊七系統(tǒng)擴展與接口技術(shù)7.2.1鍵盤及其抖動問題鍵盤是由若干按鍵組成的開關(guān)矩陣,它是微型計算機最常用的輸入設(shè)備,用戶可以通過鍵盤向計算機輸入指令、地址和數(shù)據(jù)。一般單片機系統(tǒng)中采用非編碼鍵盤,非編碼鍵盤是由軟件來識別鍵盤上的閉合鍵,它具有結(jié)構(gòu)簡單,使用靈活等特點,因此被廣泛應(yīng)用于單片機系統(tǒng)。7.2.1鍵盤及其抖動問題鍵盤是由若干按鍵組成的開關(guān)矩陣367.2.1鍵盤及其抖動問題組成鍵盤的按鍵有觸點式和非觸點式兩種,單片機中應(yīng)用的一般是由機械觸點構(gòu)成的。當(dāng)開關(guān)S斷開時,P1.0輸入為高電平,S閉合時,P1.0輸入為低電平。由于按鍵是機械觸點,當(dāng)機械觸點斷開、閉合時,會有抖動。7.2.1鍵盤及其抖動問題組成鍵盤的按鍵有觸點式和非觸點37消除抖動的方法硬件方法:一般不常用。軟件方法:單片機設(shè)計中常用軟件法,軟件去除抖動其實很簡單,就是在單片機獲得P1.0口為低的信息后,不是立即認(rèn)定S已被按下,而是延時10毫秒或更長一段時間后再次檢測P1.0口,如果仍為低,說明S的確按下了,這實際上是避開了按鍵按下時的抖動時間。而在檢測到按鍵釋放后(P1.0為高),再延時5~10個毫秒,消除后沿的抖動,然后再對鍵值處理。消除抖動的方法硬件方法:一般不常用。387.2.2單片機與鍵盤的連接將每個按鍵的一端接到單片機的I/O口,另一端接地。1、通過I/O口連接:一、獨立式按鍵接口技術(shù)7.2.2單片機與鍵盤的連接將每個按鍵的一端接到單片機的39實例如下圖所示,采用不斷查詢的方法,即檢測是否有鍵閉合,如有鍵閉合,則去除鍵抖動,判斷鍵號并轉(zhuǎn)入相應(yīng)的鍵處理。假設(shè)兩個鍵定義如下:P3.0:開始執(zhí)行某種操作(假設(shè)讓8只發(fā)光二極管閃爍)。P3.1:停止執(zhí)行。實例如下圖所示,采用不斷查詢的方法,即檢測是否有鍵閉合,如40voiddelay(unsignedchar);bitkey();voidlsd(unsignedchar);unsignedcharvkey;bitstart_end=0;voidmain(){unsignedcharldata;while(1){}}if(key()){if(vkey==1)start_end=1;elsestart_end=0;}if(start_end){ldata=~ldata;delay(250);}elseldata=0xff;P0=ldata;源程序voiddelay(unsignedchar);if(k41源程序(延時函數(shù)delay())voiddelay(unsignedchart){unsignedchari,j;for(i=t;i>0;i--)for(j=200;j>0;j--);}源程序(延時函數(shù)delay())voiddelay(uns42bitkey(){unsignedchartemp;bitflag=0;temp=P3;temp=temp|0xfc;temp=temp^0xff;if(temp==0)returnflag;else{}}delay(25);temp=P3|0xfc;temp=temp^0xff;if(temp==0)
returnflag;else{vkey=temp;flag=1;while(temp){temp=P3|0xfc;temp=temp^0xff;}}returnflag;源程序(判斷是否有鍵按下函數(shù))bitkey()delay(25);temp=P3|0432、采用中斷方式各個按鍵都接到一個與非門上,當(dāng)有任何一個按鍵按下時,都會使與門輸出為低電平,從而引起單片機的中斷,它的好處是不用在主程序中不斷地循環(huán)查詢,如果有鍵按下,單片機再去做相應(yīng)的處理。2、采用中斷方式各個按鍵都接到一個與非門上,當(dāng)有任何一個按鍵44實例試編程實現(xiàn)由3個按鍵控制發(fā)光二極管的全亮、閃爍或全滅。#include<reg51.h>voiddelay(unsignedchar);unsignedcharflag;voidmain(){IT0=1;EA=1;EX0=1;while(1){switch(flag){case1:P0=0x00;break;case2:P0=~P0;delay(250);break;case3:P0=0xff;break;}}}voiddelay(unsignedchart){unsignedchari,j;for(i=t;i>0;i--)for(j=200;j>0;j--);}實例試編程實現(xiàn)由3個按鍵控制發(fā)光二極管的全亮、閃爍或全滅。45中斷服務(wù)函數(shù)voidisr_int0()interrupt0{unsignedcharkdata;kdata=P1;kdata=kdata^0xff;kdata>>=1;if(kdata!=0){kdata>>=1;if(kdata!=0)flag=3;elseflag=2;}elseflag=1;}中斷服務(wù)函數(shù)voidisr_int0()interrup46二、矩陣式鍵盤接口技術(shù)在鍵盤中按鍵數(shù)量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口(如P1口)就可以構(gòu)成4*4=16個按鍵,在需要的鍵數(shù)比較多時,采用矩陣法來做鍵盤是合理的。1、矩陣式鍵盤的結(jié)構(gòu)二、矩陣式鍵盤接口技術(shù)在鍵盤中按鍵數(shù)量較多時,為了減少I/O47當(dāng)按鍵沒有按下時,所有的輸入端都是高電平,代表無鍵按下。一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可判斷是否有鍵按下了。1、矩陣式鍵盤的結(jié)構(gòu)當(dāng)按鍵沒有按下時,所有的輸入端都是高電平,代表無鍵按下。一旦482、矩陣式鍵盤的按鍵識別方法——行掃描法1)判斷鍵盤中有無鍵按下。將全部行線置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。2)判斷閉合鍵所在的位置。在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。2、矩陣式鍵盤的按鍵識別方法——行掃描法1)判斷鍵盤中有無鍵492、矩陣式鍵盤的按鍵識別方法——行掃描法2、矩陣式鍵盤的按鍵識別方法——行掃描法50行掃描法行掃描法識別按鍵的方法就象在二維平面上找確定的點,要在二維平面上找到確定的點。確定這點的橫坐標(biāo):行線位置確定它的縱坐標(biāo):列線位置公式:鍵值=行號×列數(shù)+列號行掃描法行掃描法識別按鍵的方法就象在二維平面上找確定的點,要51實例89S51單片機的P1口用作鍵盤I/O口,P0口用作輸出口,用于輸出所按鍵的鍵號(0~F)。89S51單片機的P1口用作鍵盤I/O口,鍵盤的列線接到P1口的低4位,鍵盤的行線接到P1口的高4位。列線P1.0~P1.3分別接有4個上拉電阻到正電源+5V,并把列線P1.0~P1.3設(shè)置為輸入線,行線P1.4~P1.7設(shè)置為輸出線。4根行線和4根列線形成16個相交點。實例89S51單片機的P1口用作鍵盤I/O口,P0口用作52行掃描識別步驟(1)檢測當(dāng)前是否有鍵被按下:檢測的方法是P1.4~P1.7輸出全“0”,讀取P1.0~P1.3的狀態(tài),若P1.0~P1.3為全“1”,則無鍵閉合,否則有鍵閉合。(2)去除鍵抖動:當(dāng)檢測到有鍵按下后,延時一段時間再做下一步的檢測判斷。(3)若有鍵被按下,應(yīng)識別出是哪一個鍵閉合。行掃描識別步驟(1)檢測當(dāng)前是否有鍵被按下:檢測的方法是P153識別鍵閉合的方法對鍵盤的行線進(jìn)行掃描。P1.4~P1.7按下述4種組合依次輸出:P1.71110P1.61101P1.51011P1.40111在每組行輸出時讀取P1.0~P1.3,若全為“1”,則表示為這一行沒有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值。識別鍵閉合的方法對鍵盤的行線進(jìn)行掃描。P1.4~P1.7按下54流程圖效標(biāo)志鍵盤掃描有鍵閉合延時去抖動掃描鍵盤計算鍵值閉合鍵釋放建立有效標(biāo)志建立無返回找到閉合鍵NYNYNY流程圖效標(biāo)志鍵盤掃描有鍵閉合延時去抖動掃描鍵盤計算鍵值閉合鍵55鍵盤掃描程序#include<reg51.h>unsignedcharseg[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};voiddelay(unsignedchar);unsignedcharkey_scan();voidmain(){unsignedcharval_key;while(1){val_key=key_scan();if(val_key!=0xff)P0=seg[val_key];}}鍵盤掃描程序#include<reg51.h>56voiddelay(unsignedchart){unsignedchari,j;for(i=0;i<t;i++)for(j=0;j<200;j++);}鍵盤掃描程序voiddelay(unsignedchart)鍵盤掃57鍵盤掃描函數(shù)unsignedcharkey_scan(){unsignedcharkdata,vkey,keyNo;bitiskey=0;//標(biāo)志,在確定具體哪一個鍵按下時,如果檢測到有一個鍵按下則該標(biāo)志置1P1=0x0f;//行線送“0”kdata=P1;//讀取列線值kdata&=0x0f;if(kdata==0x0f)return0xff;//無鍵按下,建立無效標(biāo)志(0xff為無鍵按下的無效標(biāo)志)
鍵盤掃描函數(shù)unsignedcharkey_scan()58鍵盤掃描函數(shù)else//若列線均為“1”則無鍵按下,否則有鍵按下{delay(25);//有鍵按下,去除抖動kdata=0xef;while(!iskey)//掃描鍵盤{vkey=P1=kdata;//送掃描碼至P1口行線,并將掃描碼保存到vkey中kdata=P1;//讀取列線值kdata&=0x0f;if(kdata==0x0f){kdata=vkey;//若沒有鍵盤按下,則取出行掃描碼kdata<<=1;//換掃描下一行的掃描碼(循環(huán)向左移一位kdata|=1;}鍵盤掃描函數(shù)else//若列線均為“1”則59鍵盤掃描函數(shù)else//若有鍵按下則鍵處理{kdata^=0x0f;//為計算列值的方便,將列線P1.3~P1.0分別與1異或即按位取反switch(kdata)//計算列值{case1:keyNo=0;break;case2:keyNo=1;break;case4:keyNo=2;break;case8:keyNo=3;break;}iskey=1;}}
鍵盤掃描函數(shù)else//若有鍵按下則鍵處60鍵盤掃描函數(shù)vkey=vkey>>4;//取行掃描碼vkey^=0x0f;//將行掃描碼取反switch(vkey){case1:keyNo+=0;break;//把行值加到列值中case2:keyNo+=4;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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度城市軌道交通工程款支付合同范本-@-1
- 2025年中國深圳互聯(lián)網(wǎng)金融市場競爭格局及投資戰(zhàn)略規(guī)劃報告
- 2025年提琴琴橋行業(yè)深度研究分析報告
- 2025年度國家貨運代理貨運代理代理責(zé)任合同
- 2025年中國口腔科用設(shè)備制造行業(yè)市場行情動態(tài)分析及發(fā)展前景趨勢預(yù)測報告
- 2025年度電子商務(wù)平臺合同法務(wù)培訓(xùn)及咨詢服務(wù)合同
- 2025年度中央空調(diào)系統(tǒng)節(jié)能改造與優(yōu)化合同
- 2025年度Amazon店鋪代運營及庫存管理與優(yōu)化合同
- 2025年中國智能馬達(dá)控制器行業(yè)市場全景評估及投資前景展望報告
- 2025年武漢市充電樁市場分析報告
- 決策與博弈論課件
- 為什么偉大不能被計劃
- 人大代表履職知識講座
- 精神障礙患者的社交技巧訓(xùn)練
- 危險物品管理制度
- 門靜脈炎護(hù)理課件
- 重慶八中2024屆高三12月高考適應(yīng)性月考卷(四) 語文試卷(含答案)
- 基礎(chǔ)研究成果向臨床轉(zhuǎn)化的實踐與挑戰(zhàn)
- 建筑構(gòu)造(下冊)
- 電流互感器試驗報告
- 蔣中一動態(tài)最優(yōu)化基礎(chǔ)
評論
0/150
提交評論