单片机编程问题告急!!!希望个位大哥大姐帮忙.
FTDXL 2007-07-17 03:52:17 我要实现的是4X4键盘显示电路 我键盘接P2口 显示电路用LED(8位) ,使用的是 (P3.1)串行通行 现在我要让键盘每一个键对应显示 1,2,3,....F,0, 我的单片机初始状态显示了 LED 全亮 可我的按键不能控制, 按下一点反应也没? 我在电脑上KEILC51 中编译也通过了,ISP下载也下到单片机里面去了,希望各为帮忙跟我找出原因,我的程序如下:
#include <reg51.h>
#include <absacc.h>
#include <stdio.h>
void delay ( );
unsigned int jiansao( );
unsigned char A[16]={0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0xfc};
void uart()
{
TH0=0xf4; //计数3000次//
TL0=0x48;
TR0=1;
}
main ( )
{ TMOD=0x01;//00000001 方式1 (16位计数器//
SCON=0x00; //8位移位寄存器 开起串口//
uart();
ET0=1; EA=1;
for (; ;);
}
void timer0(void) interrupt 1 using 1
{ unsigned int i;
unsigned int key;
key=jiansao( );
delay();
switch (key)
{ case 0x11: for (i=0;i<=7;i++)
{ if (i<=7) SBUF=A[0]; while(!TI) TI=0;}; break;
case 0x21: for (i=0;i<=7;i++)
{ if (i<=7) SBUF=A[1]; while(!TI) TI=0;}; break;
case 0x41: for (i=0;i<=7;i++)
{ if (i<=7) SBUF=A[2]; while(!TI) TI=0;}; break;
case 0x81: for (i=0;i<=7;i++)
{ if (i<=7) SBUF=A[3]; while(!TI) TI=0;}; break;
case 0x12: for (i=0;i<=7;i++)
{ if (i<=7) SBUF=A[4]; while(!TI) TI=0;}; break;
case 0x22: for (i=0;i<=7;i++)
{ if (i<=7) SBUF=A[5]; while(!TI) TI=0;}; break;
case 0x42: for (i=0;i<=7;i++)
{ if (i<=7) SBUF=A[6]; while (!TI) TI=0;}; break;
case 0x82: for (i=0;i<=7;i++)
{ if (i<=7) SBUF=A[7]; while(!TI) TI=0;}; break;
case 0x14: for (i=0;i<=7;i++)
{if (i<=7) SBUF=A[8]; while(!TI) TI=0;}; break;
case 0x24: for (i=0;i<=7;i++)
{if (i<=7) SBUF=A[9]; while(!TI) TI=0;}; break;
case 0x44: for (i=0;i<=7;i++)
{if (i<=7) SBUF=A[10]; while(!TI) TI=0;}; break;
case 0x84: for (i=0;i<=7;i++)
{ if (i<=7) SBUF=A[11]; while(!TI) TI=0;}; break;
case 0x18: for (i=0;i<=7;i++)
{if (i<=7) SBUF=A[12]; while(!TI) TI=0;}; break;
case 0x28: for (i=0;i<=7;i++)
{ if (i<=7) SBUF=A[13]; while(!TI) TI=0;}; break;
case 0x48: for (i=0;i<=7;i++)
{ if (i<=7) SBUF=A[14]; while(!TI) TI=0;}; break;
case 0x88: for (i=0; i<=7;i++)
{if (i<=7) SBUF=A[15]; while (!TI) TI=0;}; break;
default: SBUF=0xff; break;
}
}
void delay(void) //延时去斗//
{ unsigned int k;
for (k=600; k>0; k--);
}
unsigned int jiansao (void ) 扫描子程序
{ unsigned int lie, han;
P2=0xf0;
if ((P2&0xf0)!=0xf0) 判断有无键按下
{ delay (); 去斗
if((P2&0xf0)!=0xf0) 确认有键按下
{ lie=0xfe;
while ((lie&0x10)!=0)
{ P2=lie;
if ((P2&0xf0)!=0xf0)
{ han=(P2&0xf0)|0x0f;
return ((~lie)+(~han));
}
else lie=(lie<<1)|0x01;
}
}
} return (0); 无键按下 返回0
}