大神们这个程序,进入子函数就出不来了怎么办?
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
//uchar code fasong[]="abcd";//h1 h2 d1 d2
uchar count,flag,g,h,k,l,i,x;
sbit a=P2^3;//h1
sbit b=P2^2;//h2
sbit c=P2^1;//d1
sbit d=P2^0;//d2
sbit led0=P0^0;//oì?ìμ?1
sbit led1=P0^1;//oì?ìμ?2
sbit led2=P0^2;//μà?¢1?a
sbit led3=P0^3;//μà?¢11?
sbit led4=P0^4;//μà?¢2?a
sbit led5=P0^5;//μà?¢21?
sbit e=P1^3;
void init()
{
TMOD=0x20;
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=1;
ES=1;
}
void delaya()
{
unsigned char i;
for(i=0;i<0x14;i++)
{
TH1=0x3c;
TL1=0xb0;
TR1=1;
while(!TF1);
TF1=0;
}
}
void zijian()
{
unsigned char i,w;
TMOD=0x10;
while(1)
{
if(e==0)
{
w=0x01;
for(i=0;i<8;i++)
{
P0=w;
w<<=1;
delaya();
P0=0x00;
delaya();
while(e==1)
{
P0=0x00;
w=0x01;
i=8;
}
}
}
}
}
void main()
{
init();
TMOD=0x10;
P0=0x00;
delaya();
P0=0x02;
delaya();
P0=0x00;
delaya();
P0=0x08;
delaya();
P0=0x00;
delaya();
init();
while(1)
{ g=h=k=l=1;
if(x==1)
{
while(1)//youdaigaizheng
{
led2=1;
led0=1;
if(c==0)
{
while(1)
{if(a==0)
{ while(1)
{if(c==1&&a==1)
{
led2=0;
delaya();
led3=1;
delaya();
led0=0;
g=0;
}
}
}}
}
}
}
if(x==2)
{
while(h)
{
led4=1;
led1=1;
if(b==0)
{
while(1)
{if(d==0)
{ while(h)
{if((b==1)&&(d==1))
{
led4=0;
delaya();
led5=1;
delaya();
led0=0;
h=0;
}
}
}}
}
}
}
if(x==3&&flag==1)
{
ES=0;
flag=0;
// SBUF=P1&0x1f;
SBUF=P2;
while(!TI);
TI=0;
ES=1;
// P2=~(P2&0x1f);
// P1=~(P1&0x1f);
}
if(e==0) zijian();
}
}
void ver() interrupt 4
{
RI=0;
x=SBUF;
flag=1;
}
还有个问题啊,这个我收到1这个程序,怎么跳出来
简化你的问题吧~
void zijian()
{
unsigned char i,w;
TMOD=0x10;
//while(1)
//{
if(e==0)
{
w=0x01;
for(i=0;i<8;i++)
{
P0=w;
w<<=1;
delaya();
P0=0x00;
delaya();
if(e==1)
{
P0=0x00;
w=0x01;
i=8;
}
}
}
//}
怎么跳回到主函数
函数没问题,如果实在有问题,你可以试着把i=8;这个语句去掉试试,不行的话,试试把TMOD=0x10;去掉
void zijian()
{
unsigned char i,w;
TMOD=0x10;
while(1)
{
if(e==0)
{
w=0x01;
for(i=0;i<8;i++)
{
P0=w;
w<<=1;
delaya();
P0=0x00;
delaya();
while(e==1)
{
P0=0x00;
w=0x01;
i=8;
}
}
}
}
}
你上面写的这个函数,程序会一直等e==1
你程序中使用了6个while(1)死循环,不死那才怪。