4X4矩陣鍵盤掃描仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (43.54 KB, 下載次數: 46)
下載附件
2018-7-27 23:56 上傳
0.png (49.96 KB, 下載次數: 41)
下載附件
2018-7-27 23:56 上傳
單片機源程序如下:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define SCANPORT P1
- sbit spk=P2^3; //按鍵提示音驅動端口
- uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f, //數碼管顯示代碼
- 0x77,0x7c,0x39,0x5e,0x79,
- 0x71};
- uchar a_LineScan[4]={0xEF,0xDF,0xBF,0x7F}; //列掃描賦值
- void delay(uchar x)
- {
- uchar j;
- while(x--)
- for(j=110;j>0;j--);
- }
- uchar KeyScan() //掃描函數
- {
- uchar Temp=0;
- uchar i=0,j=0;
- for(i=0;i<4;i++)
- {
- SCANPORT=a_LineScan[i]; //定義掃描端口
- Temp=SCANPORT & 0x0F; //取低四位掃描信號
- if(Temp!=0)
- {
- delay(10); //消抖函數
- if(Temp!=0)
- {
- if(Temp!=0x0F) //掃描按鍵是否按下
- {
- switch(Temp)
- {
- case 0x0E: j=10;break; //第一列
- case 0x0D: j=20;break; //第二列
- case 0x0B: j=30;break; //第三列
- case 0x07: j=40;break; //第四列
- default: j=50;break; //輸入錯誤
- }
- break;
- }
- }
- }
- }
- return i+j+1; //送出返回值
- }
- void KeyProcess(unsigned char KeyCode) //數碼管顯示函數
- {
-
- switch(KeyCode)
- { //j=10
- case 11:P0=table[0];spk=1;break; //'0'
- case 12:P0=table[1];spk=1;break; //'1'
- case 13:P0=table[2];spk=1;break;
- case 14:P0=table[3];spk=1;break;
- //j=20
- case 21:P0=table[4];spk=1;break; //'4'
- case 22:P0=table[5];spk=1;break; //'5'
- case 23:P0=table[6];spk=1;break;
- case 24:P0=table[7];spk=1;break;
- //j=30
- case 31:P0=table[8];spk=1;break; //'8'
- case 32:P0=table[9];spk=1;break; //'9'
- case 33:P0=table[10];spk=1;break;
- case 34:P0=table[11];spk=1;break;
- //j=40
- case 41:P0=table[12];spk=1;break; //'C'
- case 42:P0=table[13];spk=1;break; //'d'
- case 43:P0=table[14];spk=1;break;
- case 44:P0=table[15];spk=1;break;
- default:break; //無法識別
- }
- }
- void main()
- {
- spk=0; //揚聲器初始化
- P0=0;
- while(1)
- {
- KeyProcess(KeyScan());
- spk=0; //復位揚聲器
- }
- }
復制代碼
所有資料51hei提供下載:
20161111144-李作鑫4×4鍵盤矩陣按鍵.rar
(66.55 KB, 下載次數: 130)
2018-7-27 07:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|