程序目的:对4x4的矩阵键盘进行控制,
按下16个按键分别使第一个数码管显示0~F。
以下为我编写的程序,程序无错但烧写后的结果很奇怪,不明白是哪里错了。
#include "reg52.h"
sfr P4=0xc0;
unsigned char code keynum[18]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x70};
sbit R1=P3^0;
sbit R2=P3^1;
sbit R3=P3^2;
sbit R4=P3^3;
sbit C1=P4^4;
sbit C2=P4^2;
sbit C3=P3^5;
sbit C4=P3^4;
void HC138(unsigned int k)
{
switch (k)
{
case 4:
P2=0x80;
break;
case 5:
P2=0xa0;
break;
case 6:
P2=0xc0;
break;
case 7:
P2=0xe0;
break;
}
}
void delay(unsigned char t)
{
while(t--);
}
void DisplaySMG(unsigned int i)
{
HC138(7);
P0=keynum[i];
delay(6000);
}
int value=0;
void Scankey()
{
R1=0;
R2=R3=R4=1;
if(C1 == 0)
{
while(C1 == 0);
value=1;
DisplaySMG(value);
}
else if(C2==0)
{
while(C2==0);
value=2;
DisplaySMG(value);
}
else if(C3==0)
{
while(C3==0);
value=3;
DisplaySMG(value);
}
else if(C4==0)
{
while(C4==1);
value=4;
DisplaySMG(value);
}
R2=0;
R1=R3=R4=1;
if(C1==0)
{
while(C1==0);
value=5;
DisplaySMG(value);
}
else if(C2==0)
{
while(C2==0);
value=6;
DisplaySMG(value);
}
else if(C3==0)
{
while(C3==0);
value=7;
DisplaySMG(value);
}
else if(C4==0);
{
while(C4==0);
value=8;
DisplaySMG(value);
}
R3=0;
R2=R1=R4=1;
if(C1==0)
{
while(C1==0);
value=9;
DisplaySMG(value);
}
else if(C2==0)
{
while(C2==0);
value=10;
DisplaySMG(value);
}
else if(C3==0)
{
while(C3==0);
value=11;
DisplaySMG(value);
}
else if(C4==0);
{
while(C4==0);
value=12;
DisplaySMG(value);
}
R4=0;
R2=R3=R1=1;
if(C1==0)
{
while(C1==0);
value=13;
DisplaySMG(value);
}
else if(C2==0)
{
while(C2==0);
value=14;
DisplaySMG(value);
}
else if(C3==0)
{
while(C3==0);
value=15;
DisplaySMG(value);
}
else if(C4==0);
{
while(C4==0);
value=16;
DisplaySMG(value);
}
}
void main()
{
HC138(4);
P0=0xff;
HC138(5);
P0=0x00;
HC138(6);
P0=0x01;
HC138(7);
P0=0x00;
C1=1;C2=1;C3=1;C4=1;
while(1)
{
Scankey();
}
}