4X4鍵盤掃描c語言程式詳解
工具/原料
電腦
keill
方法/步驟
4X4鍵盤掃描,按下按鍵每個按鍵,在數碼管上顯示0~F
#include "reg51.h"//包含標頭檔案,一般情況不需要改動,標頭檔案包含特殊功能暫存器的定義
#define uint unsigned int
#define uchar unsigned char
uint key;
uchar smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f
,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F
uchar shuzu[4][4]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};/*陣列(00)(01)(02)(03)
(10)(11)(12)(13)
(20)(21)(22)(23)
(30)(31)(32)(33)*/
/******************************************************************/
/* 延時函式宣告 */
/******************************************************************/
/*void mdelay(uint t)
{
uchar n;
for(;t>0;t--)
for(n=0;n<125;n++)
{;}
}*/
/*大約一毫秒的延時函式*/
void mdelay(uint t)
{
uchar n;
while(t--)
{
for(n=0;n<123;n++)
{;}
}
}
/******************************************************************/
/* 主函式 1 */
/******************************************************************/
void main()
{
uchar hang,lie;
P2=0x00;
while(1)
{
P3=0x0f; //行掃描
key=P3;
if(key!=0x0f)//檢測是否有按鍵按下
{
mdelay(100);//去抖動
key=P3;
if(key!=0x0f)
{
switch(key)//行按鍵選擇
{
case 0x0e: hang=0; break;
case 0x0d: hang=1; break;
case 0x0b: hang=2; break;
case 0x07: hang=3; break;
}
}
}
P3=0xf0; //列掃描
key=P3;
if(key!=0xf0)//檢測是否有按鍵按下
{
mdelay(100);//去抖動
key=P3;
if(key!=0xf0)
{
switch(key)//列按鍵選擇
{
case 0x70: lie=0; break;
case 0xb0: lie=1; break;
case 0xd0: lie=2; break;
case 0xe0: lie=3; break;
}
}
}
P0=smg[shuzu[hang][lie]];
}
}
本經驗只供參考,如有不足,還請見諒。。