关于键盘扫描程序的c 程序各位DX好:
小兄弟刚写好一个键盘扫描的小程序,但在调试过程中出了一些小问题,我的硬件条件是:行4列三3的键盘,从左向右从上向下依次显示0~C,键盘扫描接口是P3口,数显接口是P2口;我是一个初学者,调试没有什么技巧,请求各位DX帮忙调试一下!成功程序能否发到:hgchen1111@163.com 谢谢!
程序如下:
#include <reg51.h>
#define uint unsigned int
void delay();
main()
{
uint a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e},i,d,c,h,j;
while(1)
{
A:
P2=0xff;
d=0xfe;
for(i=0;i <4;i++)
{
j=d&0x0f;
P3=d;
P3=P3&0x0f;
delay();
h=P3&0xf0;
c=P3^0xf0;
if(c!=0)
{
B: while(c!=0){c=P3^0xf0;goto B;}
while((h|0x0f)==0xff)
{
P3=h|j;
switch(P3)
{
case 0xde:P2=a[1];delay();break;
case 0xbe:P2=a[2];delay();break;
case 0x7e:P2=a[3];delay();break;
case 0xdd:P2=a[4];delay();break;
case 0xbd:P2=a[5];delay();break;
case 0x7d:P2=a[6];delay();break;
case 0xdb:P2=a[7];delay();break;
case 0xbb:P2=a[8];delay();break;
case 0x7b:P2=a[9];delay();break;
case 0xd7:P2=a[10];delay();break;
case 0xb7:P2=a[0];delay();break;
case 0x77:P2=a[11];delay();break;
}
goto A;
}
}
else{d=d < <1|1;}
}
}
}
////////////////////////////////////////////////////////////
void delay()
{
unsigned int i;
for(i=0;i <10000;i++);
}