|
1、掌握矩陣鍵盤工作原理和掃描方法。
2、學習逐行掃描鍵盤的編程方法。
3、學習按鍵消抖的方法。
二、實驗內容1、編寫程序實現2×4矩陣鍵盤掃描讀取。
2、鍵盤掃描與LED顯示電路配合實現按鍵掃描及顯示輸出。
依次定義S1~S8的鍵值為“1~8”,按下某一按鍵時,在LED上顯示其鍵值。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機源程序如下:
- #include<reg51.h>
- sbit P24 = P0^4;
- sbit P25 = P0^5;
- sbit P26 = P0^6;
- sbit P27 = P0^7;
- typedef unsigned char uchar;
- typedef unsigned int uint;
- unsigned char code led[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
- 0x88,0x83,0xc6,0xa1,0x86,0x8e
- }; //共陽極數碼管
- void delay(uint xms)
- {
- uint i,j;
- for(i=xms; i>0; i--)
- for(j=112; j>0; j--);
- }
- void main()
- {
- uchar temp;//第一行按鍵檢測
- P0=0xfe;
- P2=0x00;
- temp=P0;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=P0;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- switch(P0)
- {
- case 0xee:
- delay(1);
- P2=led[0];
- while(P0==0xee)
- {
- delay(100);
- P0=0xfe;
- if(P0!=0xee) break;
- }
- case 0xde:
- P2=led[1];
- while(P0==0xde)
- {
- delay(100);
- P0=0xfe;
- if(P0!=0xde) break;
- }
- case 0xbe:
- delay(1);
- P2=led[2];
- while(P0==0xbe)
- {
- delay(100);
- P0=0xfe;
- if(P0!=0xbe) break;
- }
- case 0x7e:
- P2=led[3];
- while(P0==0x7e)
- {
- delay(100);
- P0=0xfe;
- if(P0!=0x7e) break;
- }
- }
- }
- }
- /////////////////////////////////////////////////////////////
- P0=0xfd; //第二行按鍵檢測
- temp=P0;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=P0;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- switch(P0)
- {
- case 0xed:
- delay(1);
- P2=led[4];
- while(P0==0xed)
- {
- delay(100);
- P0=0xfd;
- if(P0!=0xed) break;
- }
- case 0xdd:
- P2=led[5];
- while(P0==0xdd)
- {
- delay(100);
- P0=0xfd;
- if(P0!=0xdd) break;
- }
- case 0xbd:
- delay(1);
- P2=led[6];
- while(P0==0xbd)
- {
- delay(100);
- P0=0xfd;
- if(P0!=0xbd) break;
- }
- case 0x7d:
- P2=led[7];
- while(P0==0x7d)
- {
- delay(100);
- P0=0xfd;
- if(P0!=0x7d) break;
- }
- }
- }
- }
- }
復制代碼
所有資料51hei提供下載:
附件.zip
(68.7 KB, 下載次數: 17)
2020-6-25 18:05 上傳
點擊文件名下載附件
|
|