⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 05-22 黄灯不闪ok.txt

📁 智能寻迹小车完整版c程序下载
💻 TXT
字号:
#include<reg52.h>
#define uchar unsigned char
sbit p00=P0^0;
sbit p01=P0^1;
sbit p02=P0^2;
sbit p03=P0^3;
sbit p04=P0^4;
sbit p05=P0^5;
sbit left=P0^6;			
sbit right=P0^7;

sbit p20=P2^0;			//前右绿
sbit p21=P2^1;			//前右黄
sbit p22=P2^2;			//前左黄	
sbit p23=P2^3;			//前左绿
sbit p24=P2^4;			//后右黄  	
sbit p25=P2^5;			//后右红
sbit p26=P2^6;			//后左红
sbit p27=P2^7;			//后左黄

bit ykok; 
uchar v,flag,ykcode,ykbnum,ykbtc,ykdelay,cc,temp,yknumber,sflag;      
unsigned int snum;                
bdata uchar ykcodetemp;               
sbit ykcodetemp0=ykcodetemp^0;
void YkInit(void);                  
unsigned char YkGetcode(void);   
                    
scan()
{ 		if(ykcode==16)  {v=v-2;ykcode=200;if(v<0) v=0;}
		if(ykcode==17)  {v=v+3;ykcode=200;if(v>30) v=30;}
		
}

void delay(unsigned int x)
{	unsigned int a,b;
	for(a=x;a>0&&temp!=12&&temp!=7;a--)
	 for(b=250;b>0&&temp!=12&&temp!=7;b--)   
		  if(temp==12||temp==7) break;
		  else   scan();			
}

void pwmdelay(unsigned int y)
{	unsigned int a;
	for(a=y*5;a>0&&temp!=12;a--)
		scan();
}

gof()							//of  tb     p20=p23=0; 绿灯
{			
	P2=0xF6;
	P0=0xFF;
	pwmdelay(v);
	P0=0xE7;
	pwmdelay(3);
}
gob()						  //ob tf	p25=p26=0	p24=p27=0/1; 后红灯亮	  黄灯闪
{									   
	P2=0x9F;
	P0=0xFF;	
	pwmdelay(v);
	P0=0xDB;
	pwmdelay(3);
	cc++;
	 if(cc>200) {cc=0;p24=!p24;p27=!p27;}
}
gor()						//of tf   p21=p24=0; 右侧黄灯闪烁
{
	P2=0xED;	
	P0=0xFF;		
	pwmdelay(v);
	P0=0xD7;
	pwmdelay(3);
	cc++;
	 if(cc>200) {cc=0;p21=p21!;p24=!p24;}
}
gol()						//ob tb		p27=p22=0    左侧黄灯闪烁
{			
	P2=0xFF;	
	P0=0xFF;
	pwmdelay(v);
	P0=0xEB;	
	pwmdelay(3);
	cc++;
	 if(cc>222) {cc=0;p22=!p22;p27=!p27;}
}
gos()					       //p25=p26=0       后红灯
{
	P2=0x4F;	
	P0=0xFF;
	scan();
}
gorr()						   //os tb    p24=p21=0/1; 右侧黄灯闪烁 右红亮p25=0
{
	P0=0xFF;	
	P2=0xDF;
	pwmdelay(v);
	P0=0xF7;
	pwmdelay(3);
	cc++;
	 if(cc>200) {cc=0;p21==!p21;p24=!p24;}
}
goll()							//of ts	 p27=p22=0/1   左侧黄灯闪烁 左红亮p26=0
{
	P0=0xFF;
    P2=0xBF;
	pwmdelay(v);
	P0=0xEF;
	pwmdelay(3);
	cc++;
	 if(cc>200)  {cc=0;p22=!p22;p27=!p27;}
}


void main(void)
{
	YkInit();	
	while(1)				
	{	
		if (ykok)
		    {
			  temp=ykcode; 
			  if(temp==1||temp==2||temp==3||temp==4||temp==5||temp==6||temp==7||temp==12||temp==13)
			           flag=temp;
		    }
	  if(flag==1) gof();
	  if(flag==2) gob();
	  if(flag==3) gol();
	  if(flag==4) gor();
	  if(flag==5) goll();
	  if(flag==6) gorr();
	  if(flag==12)gos();
	  if(flag==13)
		{	
		    if(sflag==0)  gof(); snum++;			
			if(snum>1000) {sflag++;snum=0;}
			if(sflag==1)  gob();
			if(sflag==2)  gol();
			if(sflag==3)  gor();
			if(sflag==4)  goll();
			if(sflag==5)  gorr();
			if(sflag==6)  {gos();sflag=0;flag=12;break;}
		}

	}
}
void YkInit(void)          		
{
	EA=1;                     
	TMOD=0x11;               
	SCON=0x00;
	TH1=0;
	TL1=0;
	IE|=0x89;             
	IP|=0x01;            
	TCON |= 0x41;         
	ykbnum=0;
	ykcodetemp=0;
	ykdelay=0;
	cc=0;
	v=20;
	sflag=snum=0;
	flag=0;
}
void intx0() interrupt 0 using 2        
{
	ykbtc=TH1;TH1=0;TL1=0;TR1=1;ET1=1;
	switch(ykbnum)
	{
		case(0):
			ykbnum=1;
			break;
		case(1):
			if(ykbtc==6)
				ykbnum=2;
			else 
				ykbnum=0;
			break;
		case(2):
			if(ykbtc==6||ykbtc==9)
				ykbnum=3;
			else 
				ykbnum=0; 
			break;
		case(3):
			if(ykbtc==9||ykbtc==6)
				ykbnum=4;
			else 
				ykbnum=0;
			break;
			
		default:
			if(ykbnum<7)
			{
				if(ykbtc==6)
					ykbnum++;
				else 
					ykbnum=0;
			}
			else 
			{
				if(ykbtc==6)
				{
					if(ykcodetemp0)
						ykcodetemp=ykcodetemp*2+1;
					else 
						ykcodetemp=ykcodetemp*2;
					ykbnum++;
				}
				else if(ykbtc==9)
				{        
					if(ykcodetemp0)
					{
						ykbnum++;
						ykcodetemp=ykcodetemp*2;
					}  
					else 
					{
						ykbnum+=2;
						ykcodetemp=ykcodetemp*2;
						ykcodetemp=ykcodetemp*2+1;
					}
				}
				else if(ykbtc>11&&ykbtc<15)
				{
					ykbnum+=2;
					ykcodetemp=ykcodetemp*2;
					ykcodetemp=ykcodetemp*2+1;
				}
				else if(ykbtc>30)
					EX0=1;
				else 
					ykbnum=0;                
			}
	}
}  

void intt1() interrupt 3 using 3        
{
	if(ykdelay)
	{
		ykdelay--;
		EX0=0;
	}        
	else
	{
	    if(ykbnum==13)    
	    {
		    ykcode=ykcodetemp*=2;
		    ykdelay=3;
		    EX0=0;        
		    ykok=1;      
	    }
	    else if(ykbnum==14)       
		{
		    ykcode=ykcodetemp;
		    ykdelay=3;
		    EX0=0;                
		    ykok=1;               
		}
		else 
			EX0=1;               
	    ykbnum=0;
	    ykcodetemp=0;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -