51單片機矩陣掃描鍵盤程序實例_第1頁
51單片機矩陣掃描鍵盤程序實例_第2頁
51單片機矩陣掃描鍵盤程序實例_第3頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優質文檔-傾情為你奉上51單片機矩陣掃描鍵盤程序#include <reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar idata x,y;uchar code disp_code = 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, / 0-9 0 1 2 3 4 5 6 7 8 9 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, / 10-15 a b

2、c d e f 0x7F, 0xBF, 0x9C, 0xFF / 16-19 . - 。null; /數碼管顯示值列表void delay(uchar c) /延時函數 char a,b; for(a=c;a>0;a-) for(b=110;b>0;b-);uchar key_scan() /鍵盤掃描函數 uchar k; uchar z; x=0x00; y=0x00; P3=0xf0; /先給P3賦一個初值 if(P3!=0xf0) /判斷P3不等于所賦初值,說明有健按下 delay(10); /消除鍵盤抖動 延時10ms if(P3!=0xf0) x=P3; P3=0x0f;

3、 y=P3; z=x|y; switch(z) case 0xee: k=0; break; case 0xed: k=1; break; case 0xeb: k=2; break; case 0xe7: k=3; break; case 0xde: k=4; break; case 0xdd: k=5; break; case 0xdb: k=6; break; case 0xd7: k=7; break; case 0xbe: k=8; break; case 0xbd: k=9; break; case 0xbb: k=10;break; case 0xb7: k=11;break;

4、case 0x7e: k=12;break; case 0x7d: k=13;break; case 0x7b: k=14;break; case 0x77: k=15;break; return(k);void main() uchar dat; while(1) P3=0xf0; while(P3!=0xf0) dat=key_scan(); P1=0; P0=disp_codedat; 2:#include <reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned in

5、tuchar idata x,y;uchar code disp_code = 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, / 0-9 0 1 2 3 4 5 6 7 8 9 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, / 10-15 a b c d e f 0x7F, 0xBF, 0x9C, 0xFF / 16-19 . - 。null; /數碼管顯示值列表void delay(uchar c) /延時函數 char a,b; for(a=c;a>0;a-) for(b=110;b&

6、gt;0;b-);uchar key_scan() /鍵盤掃描函數 uchar k; uchar z; x=0x00; y=0x00; P3=0xf0; /先給P3賦一個初值 if(P3!=0xf0) /判斷P3不等于所賦初值,說明有健按下 delay(10); /消除鍵盤抖動 延時10ms if(P3!=0xf0) x=P3; /*這里稍作解釋:起初我們已經給P3賦了一個0xf0的值,如果有鍵按下,P3便一定不再是0xf0 , 如果我們這時查看P3的值我們就能知道是哪一列的鍵按下了(說明一下,我的開發板上P3.0-P3.3接的是列) 但這時我們先不看P3的值,這時我們先把P3的值賦給x,再給

7、P3賦一個0x0f的值,由于這兩條語句執行的速度是 很快的,是us級的,而我們按一個按鍵怎么也得幾十到上百ms,盡管我們在前面已經做過一個10ms的延時,但是 在我們給P3重新賦值后,按鍵一定還是閉合的,所以P3被賦0xof后由于有按鍵閉合,故P3的值又變了,這時候我們 查看P3的值就可以判斷出來是是哪一行的按鍵按下了.然后我們把這時的P3值賦給y,再用x或上y,把他們的值賦給z 然后判斷z的值就可以知道是具體哪一個鍵被按下了!(行和列都確定了,具體是哪一個鍵自然就確定了) */ P3=0x0f; y=P3; z=x|y; switch(z) case 0xee: k=0; break; ca

8、se 0xed: k=1; break; case 0xeb: k=2; break; case 0xe7: k=3; break; case 0xde: k=4; break; case 0xdd: k=5; break; case 0xdb: k=6; break; case 0xd7: k=7; break; case 0xbe: k=8; break; case 0xbd: k=9; break; case 0xbb: k=10;break; case 0xb7: k=11;break; case 0x7e: k=12;break; case 0x7d: k=13;break; case 0x7b: k=14;break; case 0x77: k=15;break; return(k);void main() uchar dat; while(1) P3=0xf0; while(P3!=0xf0) /*剛開始運行程序就判斷

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論