?? led_key.c
字號:
/**********************************************************************************************************
[源代碼]
//4*4鍵盤檢測程序,按下鍵后相應的代碼顯示在數碼管上
*********************************************************************************************************/
#include<reg51.h>
sbit beep=P2^3; //蜂鳴器接口
sbit dula=P2^6; //控制數碼管段選的鎖存器鎖存端
sbit wela=P2^7; //控制數碼管位選的鎖存器鎖存端
unsigned char i=100;
unsigned char j,k,temp,key;
void delay(unsigned char i) //可自定義延時長短的延時函數
{ //當i=10時大約為10毫秒
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; // 0-F編碼
display(unsigned char num) // 顯示子函數
{
P0=table[num]; //將第num個顯示編碼送P0口
dula=1; //一個下降沿將數據鎖存
dula=0;
P0=0xc0; //位選通全部的數碼管
wela=1; //一個下降沿將數據鎖存
wela=0;
}
void main()
{
dula=0; //使兩個鎖存器不可直通
wela=0;
while(1) //進入檢測總循環
{
P3=0xfe; //給P3.0送低電平,其余為高電平
temp=P3; //把P3口數據讀回來
temp=temp&0xf0; //把P3口與11110000相與
if(temp!=0xf0) //如果有鍵按下剛一定不相等,于是進入//下一步檢測
{
delay(10); //延時去抖動
if(temp!=0xf0) //再次判斷是否有鍵按下
{
temp=P3; //判斷為有,再次讀P3口數據
switch(temp) //因為我們剛才是將第一行置的低
{ //在這里再判斷是第幾列
case 0xee: //如果temp=0xee則為第一行和第一列
key=0; //的交叉點,由此我們知道是矩陣鍵盤
break; //上的第一個鍵被按下,我們給key=0。
case 0xde: //以后依此類推
key=1;
break;
case 0xbe:
key=2;
break;
case 0x7e:
key=3;
break;
}
while(temp!=0xf0) //這段程序是檢測按鍵是否被釋放
{
temp=P3; //如果沒有釋放就一直等待并且
temp=temp&0xf0;
beep=0; //蜂鳴器一直響
}
beep=1; //釋放后關閉蜂鳴器
display(key); //顯示按下相應鍵值的數據
P1=0xfe; //將第一個發光二極管點亮(我寫
} //程序的時候測試用的)
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
key=4;
break;
case 0xdd:
key=5;
break;
case 0xbd:
key=6;
break;
case 0x7d:
key=7;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
display(key);
P1=0xfc;
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:
key=8;
break;
case 0xdb:
key=9;
break;
case 0xbb:
key=10;
break;
case 0x7b:
key=11;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
display(key);
P1=0xf8;
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:
key=12;
break;
case 0xd7:
key=13;
break;
case 0xb7:
key=14;
break;
case 0x77:
key=15;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
display(key);
P1=0xf0;
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -