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

📄 renwu.c

📁 智能的通用的充电器
💻 C
字号:
#include "reg5410.h"
#include "head.h"

unsigned int Maxjiao=502;
unsigned int Minjiao=483;

unsigned int j_time=750;
unsigned int f_time=1500;


extern void DispShuzi(unsigned char x,unsigned char y,unsigned int n);	 //8*16数字显示
extern void DispShuzi0(unsigned char x,unsigned char y,unsigned int n);	 //8*16数字显示
extern void DispShuzi1(unsigned char x,unsigned char y,unsigned int n);	 //8*16数字显示
extern void DispShuzi2(unsigned char x,unsigned char y,unsigned int n);	 //8*16数字显示
extern void send_data(unsigned char command_data) ;

void yuyin(unsigned char n,unsigned char *str);
void yuyin1(unsigned char n,unsigned char *str,unsigned int x,unsigned char n1,unsigned char *st);


extern unsigned char five_ms;
extern unsigned char Sound_time;
extern unsigned int Run_time;
extern unsigned int delay; 
extern unsigned char work;

bit Dir=0;
bit Start=0;

void Find_Way(void)
{
	if(Start==1)
	{
		if(Dir==Froth)
		{
			if(Led_left==Black)
		    {	LZMove=1;RZMove=0;  }
			else if(Led_right==Black)
			{	LZMove=0;RZMove=1;  }
			else if(Led_qian==Black)
			{	LZMove=0;RZMove=0;  }
		}
		else if(Dir==Back)
		{
			if(Led_leftH==Black)
			{	LFMove =1;RFMove=0;}
			else if(Led_rightH==Black)
			{	LFMove =0;RFMove=1;}
			else if(Led_qianH==Black)
			{	LFMove =0;RFMove=0;}
		}
	}
	else 
	{	LZMove=1;	RZMove=1;	LFMove =1;	RFMove=1;}
}



void GetADCaiJi(unsigned int *ADData)
{
	unsigned int i, j, Sum;
	ADC_CONTR=0x80|0x05;
	for(i=0; i<100; i++);
	Sum = 0;
	for(i=0; i<64; i++)
	{
		ADC_CONTR|=0x08;
		while((ADC_CONTR&0x10)==0x00);			//等待变成flag=1
		Sum = Sum + (ADC_DATA*4+ADC_LOW2);
		for(j=0; j<100;j++);
	}
	*ADData = Sum / 64;
}



void Do_Renwu0(void)
{
	unsigned int tmp=0,lasttmp=0,tim;
	unsigned char Pingheng=0;
	unsigned char dei=10;//运动时间
	unsigned int delayi=200,j=0,ji=0;
	unsigned char PH=0;
	
	yuyin(18,"基本部奋|测试|开始");

	for(j=0;j<520;j++)
		for(ji=0;ji<5000;ji++);

	yuyin(9,"向C点行驶"); 
	Sound_time=50;

	Run_time=0;	
	Dir=Froth; Start=1;
	LZMove=0;RZMove=0; 	
	while(Run_time<j_time)
	{	Find_Way();	} 
	LZMove=1;	RZMove=1;	LFMove =1;	RFMove=1;
	tim=Run_time/20;
	DispShuzi(0,4,tim);

	Sound_time=20;
	yuyin1(12,"到达C点|用时",tim,10,"寻找平衡点");
		
	Pingheng=0;
	Run_time=0;		   
	while(1)
	{
		Start=0;
		delay=50;
		while(delay); //100ms
		GetADCaiJi(&tmp);
		if(tmp<lasttmp+7||tmp>lasttmp-7)
		{
			if(tmp>(Maxjiao+7))
			{	Dir = Froth ; Start = 1 ; 
				delay=3;
				LZMove=0;RZMove=0;  
				while(delay)
					Find_Way();
				Start=0;
				LZMove=1;	RZMove=1;	LFMove =1;	RFMove=1;
				Pingheng=0;
			}
			else if(tmp<(Maxjiao-7))
			{
				Dir = Back; Start = 1;
				delay=3;
				LFMove=0;RFMove=0;  
				while(delay)
					Find_Way();
				Start=0;
				LZMove=1;	RZMove=1;	LFMove =1;	RFMove=1;
				Pingheng=0;
			}
			else 
			{	Pingheng++;
				if(Pingheng>=20)
				{Start=0; LZMove=1;RZMove=1;LFMove =1;RFMove=1; tim=Run_time/20;DispShuzi(1,4,tim);delay=200;/*while(delay){Sound_time=2;}*/	break;}
			}
		} 
		lasttmp=tmp;
	}

	yuyin1(15,"到达平衡点|用时",tim,0,"");
	delay=1000;
	while(delay)
	{
		if(delay%200==190)
			Sound_time=10;
	}
	yuyin(11,"向|B点|行驶"); 
//	delay=200;
//	while(delay);		   
	Run_time=0;
	Dir=Froth; Start=1; 
	LZMove=0;RZMove=0;
	while(Led_left==White||Led_right==White||Led_qian==White)
		Find_Way();
	Start=0;	{	LZMove=1;	RZMove=1;	LFMove =1;	RFMove=1;}
	tim=Run_time/20;
	DispShuzi(2,4,tim);
	yuyin1(13,"到达|B点|用时",tim,0," ");	
//	delay=200;while(delay){Sound_time=2;}
	
	delay =1000;

	while(delay)
	{
		if(delay%200==190)
			Sound_time=10;
	}
	yuyin(10,"向|A点行驶");
//	delay=200;
//	while(delay);
	Run_time=0;
	Dir = Back;Start = 1;
	LFMove=0;RFMove=0;
	while(Led_leftH==White||Led_rightH==White||Led_qianH==White)
		Find_Way();
	
	Start = 0; 
	Sound_time=50;
	tim=Run_time/20;
	DispShuzi(3,4,tim);
	yuyin1(12,"到达A点|用时",tim,18,"|基本部奋|测试完毕");
	work=Renwu0;
	Run_time=0;	 
	LZMove=1;	RZMove=1;	LFMove =1;	RFMove=1;
}

void Do_Renwu1(void)
{	
	unsigned char flagph=0,Pingheng=0,i=0,PH=0;
	unsigned int tmp=0,lasttmp=0,jiaodu=0,tim=0;
	unsigned char si=0,phi=0; //phi为平衡次数
	unsigned char dei=20;//运动时间
	unsigned int delayi=20,j=0,ji=0;	  
	yuyin(18,"发挥部奋|测试|开始");
/*	delay=650;
	while(delay!=0);*/
	for(j=0;j<520;j++)
		for(ji=0;ji<5000;ji++);
	Run_time = 0;
	Dir = Froth ; Start = 1;
	delayi=200;
	dei=20; 
	Sound_time=50;
	LZMove=0;RZMove=0; 
	
	yuyin(12,"向|跷板|行驶"); 	
	while(Run_time<f_time)
	{	/*if(Led_leftH==Black&&Led_rightH==Black&&Led_qianH==Black)
		{;}
		else*/ 
		Find_Way();
	}

	LZMove=1;	RZMove=1;	LFMove =1;	RFMove=1;

	while(1) 
	{
		Start=0;
		LZMove=1;	RZMove=1;	LFMove =1;	RFMove=1;			
		if(tmp>Maxjiao) 	
		{
			jiaodu=1.25*(tmp-Maxjiao);
			DispShuzi1(1,1,jiaodu);
		}
		else if(tmp<=Maxjiao)
		{	
			jiaodu=1.25*(Maxjiao-tmp);	
			DispShuzi2(1,1,jiaodu);
		}
		if(PH==0)
		{
			delay=50;
			while(delay); //100ms
			GetADCaiJi(&tmp);
			if(tmp>(Maxjiao-20))
			{
				Dir=Froth;Start=1;
				LZMove=0;RZMove=0;  
				delay=20;
				while(delay)
					Find_Way();
				Start=0;
				LZMove=1;	RZMove=1;	LFMove =1;	RFMove=1;
			}
			else 
			{
			 	Dir=Back;Start=1;
				LFMove=0;RFMove=0;  
				delay=30;
				while(delay)
					Find_Way();
				Start=0;
				LZMove=1;	RZMove=1;	LFMove =1;	RFMove=1;
				PH=1;
			}
   		}
		else if(PH==1)
		{
			delay=50;
			while(delay); //100ms
			GetADCaiJi(&tmp);
			if( (tmp<lasttmp+4)||(tmp>lasttmp-4))
			{
				if(tmp>(Maxjiao+7))
				{	
					Dir=Froth;Start=1;
					LZMove=0;RZMove=0;  
					delay=3;//40;//dei;
					while(delay)
						Find_Way();
					Start=0;
					LZMove=1;	RZMove=1;	LFMove =1;	RFMove=1;
					Pingheng=0;
					if(flagph==1)
						PH=0;
					flagph=0;
				}
		
				else if(tmp<(Maxjiao-7))
				{
					Dir=Back;Start=1;
					delay=3;
					LFMove=0;RFMove=0;  
					while(delay)
						Find_Way();
					Start=0;
					LZMove=1;	RZMove=1;	LFMove =1;	RFMove=1;
					Pingheng=0;
					if(flagph==1)
						PH=0;
					flagph=0;
				}	
				else 
				{	Pingheng++;
					if(Pingheng>=25)
					{
						Start=0;
						LZMove=1;	RZMove=1;	LFMove =1;	RFMove=1;
						if(flagph==0)
						{
							tim=Run_time/20;
							DispShuzi(3,1,tim);
							if(phi==0)
								yuyin1(15,"第一次平衡|用时",tim,9,"请放|重物");
							else if(phi==1)
								yuyin1(15,"第二次平衡|用时",tim,0,"");
							phi++;
							flagph=1;
							delay = 1600;
							while(delay)
							{
								if(delay%200==0)
								Sound_time=10;
							} 				
							
						}
					}
				}	
			}
			lasttmp=tmp;
		}
	}
	
}


void yuyin(unsigned char n,unsigned char *str)
{
	unsigned char i=0;
	SBUF=0xFE;
	while(TI==0);
	TI=0;
	
	SBUF=0x01;
	while(TI==0);
	TI=0;

	SBUF=0x00;
	while(TI==0);
	TI=0;

	SBUF=n;
	while(TI==0);
	TI=0;

	for(i=0;i<n;i++)
	{
		SBUF=*(str+i);
		while(TI==0);
		TI=0;
	}
}

void yuyin1(unsigned char n,unsigned char *str,unsigned int x,unsigned char n1,unsigned char *st)
{
	unsigned char i=0,sen[4],xi=0;
	if(x>999)
	{	  
		sen[0]=x/1000%10;
		sen[1]=x/100%10;
		sen[2]=x/10%10;
		sen[3]=x%10;
		xi=4;
	}
	else if(x>99)
	{ 
		sen[0]=x/100%10;
		sen[1]=x/10%10;
		sen[2]=x%10;
		xi=3;
	}
	else if(x>9) 
	{ 
		sen[0]=x/10%10;
		sen[1]=x%10;
		xi=2;  
	}
	else 
	{
		sen[0]=0;
		sen[1]=x%10;
		xi=2;  
	}	

	SBUF=0xFE;
	while(TI==0);
	TI=0;
	
	SBUF=0x01;
	while(TI==0);
	TI=0;

	SBUF=0x00;
	while(TI==0);
	TI=0;

	SBUF=n+xi+12+n1;
	while(TI==0);
	TI=0;

	for(i=0;i<n;i++)
	{
		SBUF=*(str+i);
		while(TI==0);
		TI=0;
	}
	
	SBUF='[';
	while(TI==0);
	TI=0;

	SBUF='n';
	while(TI==0);
	TI=0;

	SBUF='2';
	while(TI==0);
	TI=0;

	SBUF=']';
	while(TI==0);
	TI=0;

	for(i=0;i<xi;i++)
	{
		SBUF=sen[i]+48; 
		while(TI==0);			  
		TI=0;
		if(xi==(i+2))
		{
			SBUF=0xb5;
			while(TI==0);
			TI=0;
	
			SBUF=0xe3;
			while(TI==0);
			TI=0;
				SBUF='[';
			while(TI==0);
			TI=0;
		
			SBUF='n';
			while(TI==0);
			TI=0;
		
			SBUF='2';
			while(TI==0);
			TI=0;
		
			SBUF=']';
			while(TI==0);
			TI=0;
		}
							
	}
	
	SBUF=0xc3;
	while(TI==0);
	TI=0;
	
	SBUF=0xeb;
	while(TI==0);
	TI=0;
	
	for(i=0;i<n1;i++)
	{
		SBUF=*(st+i);
		while(TI==0);
		TI=0;
	}		
}	

⌨️ 快捷键说明

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