51开发板对4x4键盘控制,但键盘第一行无反应,键盘已确定...
时间:10-02
整理:3721RD
点击:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint z);
void keyscan();
void keydown();
uchar dis_buf,temp,key;
unsigned char code table[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};
void main()
{
P2=0xFF;
P2=0x00;
delay(10);
while(1)
{
keydown();
P0=table[dis_buf%16];
}
}
void delay(uint z)
{
uint x,y;
for(y=z;y>0;y--)
for(x=100;x>0;x--);
}
void keyscan()
{ temp = 0;
P3=0xF0; //高四位输入 行为高电平 列为低电平
delay(1);
temp=P3; //读P1口
temp=temp&0xF0; //屏蔽低四位
temp=~((temp>>4)|0xF0);
if(temp==1) // p3.4 被拉低
key=0;
else if(temp==2) // p3.5 被拉低
key=1;
else if(temp==4) // p3.6 被拉低
key=2;
else if(temp==8) // p3.7 被拉低
key=3;
P3=0x0F; //低四位输入 列为高电平 行为低电平
delay(1);
temp=P3; //读P3口
temp=temp&0x0F;
temp=~(temp|0xF0);
if(temp==1) // p3.0 被拉低
key=key+0;
else if(temp==2) // p3.1 被拉低
key=key+4;
else if(temp==4) // p3.2 被拉低
key=key+8;
else if(temp==8) // p3.3 被拉低
key=key+12;
dis_buf = key;
dis_buf = dis_buf & 0x0f;
}
void keydown()
{
P3=0xF0;
if(P3!=0xF0)
{
keyscan();
}
}
#define uchar unsigned char
#define uint unsigned int
void delay(uint z);
void keyscan();
void keydown();
uchar dis_buf,temp,key;
unsigned char code table[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};
void main()
{
P2=0xFF;
P2=0x00;
delay(10);
while(1)
{
keydown();
P0=table[dis_buf%16];
}
}
void delay(uint z)
{
uint x,y;
for(y=z;y>0;y--)
for(x=100;x>0;x--);
}
void keyscan()
{ temp = 0;
P3=0xF0; //高四位输入 行为高电平 列为低电平
delay(1);
temp=P3; //读P1口
temp=temp&0xF0; //屏蔽低四位
temp=~((temp>>4)|0xF0);
if(temp==1) // p3.4 被拉低
key=0;
else if(temp==2) // p3.5 被拉低
key=1;
else if(temp==4) // p3.6 被拉低
key=2;
else if(temp==8) // p3.7 被拉低
key=3;
P3=0x0F; //低四位输入 列为高电平 行为低电平
delay(1);
temp=P3; //读P3口
temp=temp&0x0F;
temp=~(temp|0xF0);
if(temp==1) // p3.0 被拉低
key=key+0;
else if(temp==2) // p3.1 被拉低
key=key+4;
else if(temp==4) // p3.2 被拉低
key=key+8;
else if(temp==8) // p3.3 被拉低
key=key+12;
dis_buf = key;
dis_buf = dis_buf & 0x0f;
}
void keydown()
{
P3=0xF0;
if(P3!=0xF0)
{
keyscan();
}
}
