根据线反转法扫描键盘返回的键值编码,查键值编码表,从而得到键值并送数码管显示,开机时显示“-”

发布时间:2019-08-09 15:22:40

行线接P1.0---P1.3, 列线接P1.4--P1.7,我这个程序编译没有错误,但是下载到单片机的时候,不管按哪个键,显示都是“0”,什么原因呢
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit P27=P2^7;
uchar key;
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,
0x83,0xc6,0xa1,0x86,0x8e,0xbf};
uchar code key_code[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};

void delay(uint i)
{
uchar j;
while(i--)
{
for(j=0;j<115;j++);
}
}

uchar keyscan()
{
uchar scan1,scan2,keycode,j;
P1=0xf0;
scan1=P1;
if((scan1&0xf0)!=0xf0)
{
scan1=P1;
delay(30);

if((scan1&0xf0)!=0xf0)
{
P1=0x0f;
scan2=P1;
keycode=scan1|scan2;
for(j=0;j<16;j++)
{
if(keycode=key_code[j])
{
key=j;
return(key);
}
}
}
}
else
{
P1=0xff;
return(16);
}

}
void main()
{
P0=0xbf;
P27=0;
P1=0XFF;
while(1)
{

P1=0xf0;


if((P1&0xf0)!=0xf0)
{
keyscan();
P0=table[key];
}
}
}

推荐回答

if(keycode=key_code[j]) --应该是双等号。 试试下面的: uchar keyscan() { uchar scan1, scan2; P1 = 0xf0; scan1 = P1; if((scan1 & 0xf0) != 0xf0) { scan1 = P1; delay(30); if((scan1 & 0xf0) != 0xf0) { P1 = 0x0f; scan2 = P1; scan1 = scan1 | scan2; for(scan2 = 0; scan2 < 16; scan2++) if(scan1 == key_code[scan2]) return(scan2); } } return(16); } void main() { uchar key; P0 = 0xbf; P27 = 0; while(1) { key = keyscan(); if(key < 16) P0 = table[key]; } }
以上问题属网友观点,不代表本站立场,仅供参考!