新手求助~~单片机C程序问题
8路输入,89s52的板子,现在我想实现一个比较输出的效果,就是我可以同时按下好几个键,然后这些按下的键会将已经被置零的length[7]的数组相应位赋值,同时start_data置1,T2每0.5秒(大概这个时间把)定时检测start_data是否为1,为1表示数组里有不为零的也就是说被赋值了,然后执行中断比较出最大的数并输出那个数。小弟刚学C,调试了很久没改好··请大家帮下忙并指点下,我贴出来的程序是根据别人的改的,实现不了很是郁闷·
#include <AT89X52.H>
#include <stdio.h>
sbit K0=P1^0;
sbit K1=P1^1;
sbit K2=P1^2;
sbit K3=P1^3;
sbit K4=P1^4;
sbit K5=P1^5;
sbit K6=P1^6;
sbit K7=P1^7;
unsigned int length[7]={0};
unsigned int n,i,click=0;
unsigned char s0,s1,s2,s3,s4,s5,s6,s7;
unsigned char start_data=0;
timer2() interrupt 1
{
click++;
if(click==10)
{
click=0;
if(start_data==1)
{
for(i=7;i>=1;i--)
{
if(length[i]-length[i-1]==1)
{
printf("#%d",length[i]);
start_data=0;
for(n=0;n<=7;n++)
{
length[n]=0;
}
break;
}
}
}
}
}
void main(void)
{
SCON = 0x50;
TMOD = 0x20;
TCON = 0x40;
TH1 = 0xfd;
TL1 = 0xfd;
TI = 1;
TR1 = 1;
RCAP2H=0x3C;
RCAP2L=0xAF;
TR2=1;
ET2=1;
EA=1;
while(1)
{
if(!K0)
{
for(n=0;n<1000;n++);
for(;s0<=1;s0++)
{
length[0]=1;
start_data=1;
}
}
else if(K0)
{
for(n=0;n<1000;n++);
s0=1;
}
if(!K1)
{
for(n=0;n<1000;n++);
for(;s1<=1;s1++)
{
length[1]=2;
start_data=1;
}
}
else if(K1)
{
for(n=0;n<1000;n++);
s1=1;
}
if(!K2)
{
for(n=0;n<1000;n++);
for(;s2<=1;s2++)
{
length[2]=3;
start_data=1;
}
}
else if(K2)
{
for(n=0;n<1000;n++);
s2=1;
}
if(!K3)
{
for(n=0;n<1000;n++);
for(;s3<=1;s3++)
{
length[3]=4;
start_data=1;
}
}
else if(K3)
{
for(n=0;n<1000;n++);
s3=1;
}
if(!K4)
{
for(n=0;n<1000;n++);
for(;s4<=1;s4++)
{
length[4]=5;
start_data=1;
}
}
else if(K4)
{
for(n=0;n<1000;n++);
s4=1;
}
if(!K5)
{
for(n=0;n<1000;n++);
for(;s5<=1;s5++)
{
length[5]=6;
start_data=1;
}
}
else if(K5)
{
for(n=0;n<1000;n++);
s5=1;
}
if(!K6)
{
for(n=0;n<1000;n++);
for(;s6<=1;s6++)
{
length[6]=7;
start_data=1;
}
}
else if(K6)
{
for(n=0;n<1000;n++);
s6=1;
}
if(!K7)
{
for(n=0;n<1000;n++);
for(;s7<=1;s7++)
{
length[7]=8;
start_data=1;
}
}
else if(K7)
{
for(n=0;n<1000;n++);
s7=1;
}
}
}