没有电路图,我猜你是用的矩阵键盘吧。
矩阵键盘的键选择,可不是你这样搞的哦。
我在我的板子上试验了一个,你看看:
#include<reg51.h>
#define GPIO_KEY P1
sbit LED0=P2^0;
sbit LED1=P2^1;
sbit LED2=P2^2;
sbit LED3=P2^3;
sbit LED4=P2^4;
sbit LED5=P2^5;
sbit LED6=P2^6;
sbit LED7=P2^7;
unsigned char KeyValue=9;
void Delay10ms();
void KeyDown();
void main(void)
{
while(1)
{
KeyDown();
if (KeyValue==0)
{
LED0=~LED0;
KeyValue=9;
}
if (KeyValue==1)
{
LED1=~LED1;
KeyValue=9;
}
if (KeyValue==2)
{
LED2=~LED2;
KeyValue=9;
}
if (KeyValue==3)
{
LED3=~LED3;
KeyValue=9;
}
if (KeyValue==4)
{
LED4=~LED4;
KeyValue=9;
}
if (KeyValue==5)
{
LED5=~LED5;
KeyValue=9;
}
if (KeyValue==6)
{
LED6=~LED6;
KeyValue=9;
}
if (KeyValue==7)
{
LED7=~LED7;
KeyValue=9;
}
if (KeyValue==8)
{
LED0=1;
LED1=1;
LED2=1;
LED3=1;
LED4=1;
LED5=1;
LED6=1;
LED7=1;
}
}
}
void KeyDown(void)
{
char a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)
{
Delay10ms();
if(GPIO_KEY!=0x0f)
{
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=1;break;
case(0X0d): KeyValue=2;break;
case(0X0e): KeyValue=3;break;
}
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70): KeyValue=KeyValue;break;
case(0Xb0): KeyValue=KeyValue+4;break;
case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;
}
while((a<50)&&(GPIO_KEY!=0xf0))
{
Delay10ms();
a++;
}
}
}
}
void Delay10ms(void)
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
电路图也发出来,程序都是与电路对应的。
|