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

📄 kongwen.c

📁 对8051cf020的温度控制和液晶显示急串口上传的代码
💻 C
📖 第 1 页 / 共 4 页
字号:
             robot1.speed_rotate=atoff(array); 
			 if((robot1.speed_rotate<=0)|(robot1.speed_rotate>950))    //判别参数是否异常
			  {
			     clr_datarx();
			     return 0;
			  } 
             else
			   {
			      robot2.speed_rotate=robot1.speed_rotate;
			   }
          }
     lookresult=strstr1(data_rx,"sp");  //开始查找sp____position参数,
         if(lookresult==0)
         {
             robot1.robot_position=robot2.robot_position;            //如果没有则采用上一次设定结果
         }
         else
         {
             lookresult1=strstr1(lookresult,",");
             if (lookresult1==0)
             {
                clr_datarx();
                return 0;   //error                           //如果没有“,”,则返回,数组清零
             }
             lookresult=lookresult+2;
             lookresult=trim(lookresult);
             strmid(lookresult,0,lookresult1-lookresult);
             robot1.robot_position=atoff(array);  
			 robot2.robot_position=robot1.robot_position;
          }
     lookresult=strstr1(data_rx,"bv");  //开始查找base_value参数,
         if(lookresult==0)
         {
             robot1.base_value=robot2.base_value;            //如果没有则采用上一次设定结果
         }
         else
         {
             lookresult1=strstr1(lookresult,",");
             if (lookresult1==0)
             {
                clr_datarx();
                return 0;   //error                           //如果没有“,”,则返回,数组清零
             }
             lookresult=lookresult+2;
             lookresult=trim(lookresult);
             strmid(lookresult,0,lookresult1-lookresult);
             robot1.base_value=atoff(array);  
			 robot2.base_value=robot1.base_value;
          }

      lookresult=strstr1(data_rx,"dt");  //开始查找delay_value参数,
         if(lookresult==0)
         {
             robot1.delay_value=robot2.delay_value;            //如果没有则采用上一次设定结果
         }
         else
         {
             lookresult1=strstr1(lookresult,",");
             if (lookresult1==0)
             {
                clr_datarx();
                return 0;   //error                           //如果没有“,”,则返回,数组清零
             }
             lookresult=lookresult+2;
             lookresult=trim(lookresult);
             strmid(lookresult,0,lookresult1-lookresult);
             robot1.delay_value=atoff(array);  
			 robot2.delay_value=robot1.delay_value;
          }
      
	  lookresult=strstr1(data_rx,"vo");  //开始查找v_out参数,
         if(lookresult==0)
         {
             robot1.v_out=robot2.v_out;            //如果没有则采用上一次设定结果
         }
         else
         {
             lookresult1=strstr1(lookresult,",");
             if (lookresult1==0)
             {
                clr_datarx();
                return 0;   //error                           //如果没有“,”,则返回,数组清零
             }
             lookresult=lookresult+2;
             lookresult=trim(lookresult);
             strmid(lookresult,0,lookresult1-lookresult);
             robot1.v_out=atoff(array);  
			 robot2.v_out=robot1.v_out;
          }


     go_stop=2;                         //判断是否有go,stop参数,没有这两个函数中的一个则go_stop=2
     lookresult=strstr1(data_rx,"go");  //开始查找go参数,
         if(lookresult!=0)
         {
             go_stop=1;            //如果有go,则标志为1,运行
         }
     lookresult=strstr1(data_rx,"stop");  //开始查找go参数,
         if(lookresult!=0)
         {
             go_stop=0;           //如果存在,则标志为0,停止
         }

    if(go_stop==1)                    //如果go_stop=1,执行命令,
      {
	     switch(robot1.manner)//运行方式,=1,宏动前进;=2,宏动后退;=3,顺时针旋转;=4,逆时针旋转;=5,微动X轴;
		     {
			    T4CON = 0;                //定时器4停止计数
			    case 1:                 //宏动前进
				  {			        
			  		  set_v_out(robot1.v_out);
			       }
	            break;
				case 2:
				  { 
			          solid=0;
	              }
	            break;
				case 3:
				  {
                      frequency1=robot1.speed_left;				  
					  phase_add1 = frequency1 * PHASE_PRECISION / SAMPLE_RATE_DAC;  
					  output_waveform = res;         // 
					  clr_datarx();
					  T4CON |= 0x04;                      // 启动定时器4 
				  }
	            break;

				case 4:
				  {
                      frequency1=robot1.speed_left;				  
					  phase_add1 = frequency1 * PHASE_PRECISION / SAMPLE_RATE_DAC;  
					  output_waveform = vol;         // 
					  clr_datarx();
					  T4CON |= 0x04;                      // 启动定时器4 
				  }
	            break;
				case 5:                 //=5,                     
				  {
					 frequency1=robot1.speed_left;				  
					  phase_add1 = frequency1 * PHASE_PRECISION / SAMPLE_RATE_DAC;  
					  output_waveform = tem;         // 
					  clr_datarx();
					  T4CON |= 0x04;                    // 启动定时器4 
				  }
	            break;
				case 6:                                  //=6,微动X轴反向;
				  {
				      frequency1=robot1.speed_left;				  
					  phase_add1 = frequency1 * PHASE_PRECISION / SAMPLE_RATE_DAC;  
					  output_waveform = adjust;         // 选择 尺蠖蠕动方式X轴负向
					  clr_datarx();
					  T4CON |= 0x04;                      // 启动定时器4 
				  }
	            break;
				case 7:							          //=7,微动Y轴正向;		
				  {
				      frequency1=robot1.speed_right;
					  micro_init_dac1();				  
					  phase_add1 = frequency1 * PHASE_PRECISION / SAMPLE_RATE_DAC;  
					  clr_datarx();
					  T4CON |= 0x04;                       // 启动定时器4 
				  }
	            break;
				case 8:                                    //=8,
				  {
				        char i=0;
                        unsigned char qw_h=0;
						for(i=2;i<9;i++)
						   {
						      FLASH_PageErase(i,1);
						   }
					    FLASH_ByteWrite(2,(unsigned char)robot2.manner,1);
						FLASH_ByteWrite(3,(unsigned char)robot2.speed_left,1);

						FLASH_ByteWrite(4,(unsigned char)robot2.speed_right,1);
						FLASH_ByteWrite(5,(unsigned char)robot2.speed_rotate,1);

						FLASH_ByteWrite(6,(unsigned char)robot2.robot_position,1);
						FLASH_ByteWrite(7,(unsigned char)robot2.base_value,1);

						FLASH_ByteWrite(8,(unsigned char)robot2.delay_value,1);

						data_tx="已经存储,请看是否正确";
					    Tdata(data_tx);
						Tdatar(13);
						Tdatar(10);					  

						for(i=2;i<9;i++)
						   {
						      qw_h=FLASH_ByteRead(i,1);
							  Tdata(mysprint(qw_h,0));
							  data_tx=",";
					          Tdata(data_tx);
						   }
						Tdatar(13);
						Tdatar(10);
                       
                       clr_datarx();
				  }
	            break;
				case 9:                                   //                            
				  {				      
				       char i=0;
                        unsigned char qw_h=0;
						data_tx="参数列表";
					    Tdata(data_tx);					  
					    Tdatar(13);
						Tdatar(10);

						data_tx="m   ";
					    Tdata(data_tx);

						data_tx="sl  ";
					    Tdata(data_tx);

						data_tx="sr  ";
					    Tdata(data_tx);

						data_tx="so  ";
					    Tdata(data_tx);

						data_tx="sp  ";
					    Tdata(data_tx);

						data_tx="bv  ";
					    Tdata(data_tx);

						data_tx="dt  ";
					    Tdata(data_tx);	
						Tdatar(13);
						Tdatar(10);

						for(i=2;i<9;i++)
						   {
						      qw_h=FLASH_ByteRead(i,1);
							  Tdata(mysprint(qw_h,0));
							  data_tx="  ";
					          Tdata(data_tx);
						   }
						   Tdatar(13);
						   Tdatar(10);

                       clr_datarx();
				  }
	            break;
				case 10:                            //
				  {
				     test_value_set=(unsigned long)robot1.speed_rotate*robot1.robot_position;
				  }
	            break;
				case 11:                              //=11,球下俯;
				  {
				      clr_datarx();
				      return 0;
				  }
	            break;
				case 12:                                   //=12,球上仰
				  {
				      clr_datarx();
				      return 0;
				  }
	            break;
				case 13:                                 //=13,二极管亮;
				  {
				      
					  data_tx="ledon";
					  Tdata(data_tx);					  
					  Tdatar(13);
                      Tdatar(10);
					  Tdata(mysprint(robot1.manner,0));
					  Tdatar(13);
                      Tdatar(10);

					  Tdata(mysprint(robot1.speed_left,0));
					  Tdatar(13);
                      Tdatar(10);

					  Tdata(mysprint(robot1.speed_right,0));
					  Tdatar(13);
                      Tdatar(10);

					  Tdata(mysprint(robot1.speed_rotate,0));
					  Tdatar(13);
                      Tdatar(10);

					  Tdata(mysprint(robot1.robot_position,0));
					  Tdatar(13);
                      Tdatar(10);

					  Tdata(mysprint(robot1.base_value,0));
					  Tdatar(13);
                      Tdatar(10);

					  Tdata(mysprint(robot1.delay_value,0));
					  Tdatar(13);
                      Tdatar(10);

					  clr_datarx();
				  }
	            break;
				default:
				  {
				     clr_datarx();
				     return 0;      //如果manner参数不是预先定义字符,直接返回
				  }
			 }
		}
	  else                             //如果go_stop=0或者2,不执行命令,直接返回
	    {
		  T4CON = 0;                //定时器4停止计数
		  repeat_value=0;
	      clr_datarx();
		  return 0;
		}
}


//采集电压
float get_voltage(void)
{
    long temperature=0;  
    float qq_aaa=0.0,bbb=0,ccc=0;
	unsigned int i=0,j=0,k=0,m=0;
	for(i=0;i<501;i++)
	  {
	     AD0INT = 0;                      // clear conversion complete indicator
	      AD0BUSY = 1;                     // initiate conversion
	      while (AD0INT == 0);             // wait for conversion complete
	      temperature = ADC0>>4;              // read ADC0 data
		  result1[i]=(float)temperature/4096*2.451;
	  }
	  for(i=1;i<501;i++)
	   {
	       qq_aaa=qq_aaa+result1[i];
	   }
      qq_aaa=qq_aaa/500;
	  
	  for(i=1;i<501;i++)
	     {
		    bbb=result1[i]-qq_aaa;	
			bbb=fabs(bbb);
			if(bbb<0.15)
			   {
			       ccc=ccc+result1[i];
				   j++;
			   }
		 }
      qq_aaa=ccc/j;	 
	 return qq_aaa*1000*robot1.base_value/100;
}

void delay_us_time(unsigned int time_value)
{
  int hi,hj;
  for (hi=0; hi<time_value; hi++)
    {
	  for (hj=0; hj < 10; hj++) ; 
	} 
}

//测量铂电阻
float get_bo_res(void)
{
    long res_temp=0;  
    float qq_aaa=0.0,bbb=0,ccc=0,res_u2=0.0,res_u1=0.0;
	unsigned int i=0,j=0,k=0,m=0,h=0;
	adc0_single_init(5);
	for(i=0;i<501;i++)
	  {
				 AD0INT = 0;                      // clear conversion complete indicator
			     AD0BUSY = 1;                     // initiate conversion
			     while (AD0INT == 0);             // wait for conversion complete
			     res_temp = ADC0>>4;              // read ADC0 data  ???????long
				 res_u1=(float)res_temp/4096*2.451;
				 result1[i]=499.55*(res_u1-0.5)/0.5;
/*				 if(res_u1<=1.30)
				 {
		         	result1[i]=499.55*(res_u1-0.5)/0.5;
				  }

			      else
                  {
				  	adc0_single_init(4); 
					AD0INT = 0;                      // clear conversion complete indicator
			        AD0BUSY = 1;                     // initiate conversion
			        while (AD0INT == 0);             // wait for conversion complete
			        res_temp = ADC0>>4;              // read ADC0 data  ???????long
				    res_u2=(float)res_temp/4096*2.451;
				    result1[i]=499.55*(res_u1-res_u2)/res_u2;
					adc0_single_init(5); 
				 }*/
	  }	 
	  for(i=1;i<501;i++)
	   {
	       qq_aaa=qq_aaa+result1[i];
	   }
      qq_aaa=qq_aaa/500;           //average value
	  
    return qq_aaa*robot1.base_value/100;
}




//判断物品
unsigned char get_id(void)
{
      return 1;
}

unsigned int get_init_voltage(void)
{
   unsigned char w=0;
   int temp_voltage=0;
   for(w=0;w<9;w++)
  {
       result[w]=(int)get_voltage();
	   temp_voltage=temp_voltage+result[w];
  }
  temp_voltage=temp_voltage/9;
  return temp_voltage;
}

void lcd_clear(void)   //清除显示屏幕,把DDRAM位址计数器调整为"00H"
{
   lcd_data1_cmd=0;    //command     rs
   lcd_r1w=0;          //data write  rw
   delay_time(10);
   lcd_en1_lach=1;   
   delay_time(10);
   P7=0x01;
   delay_time(10);
   lcd_en1_lach=0;   
}

void lcd_bit_add_reset(void)   //把DDRAM位址计数器调整为"00H",游标回原点,该功能不影响显示DDRAM
{
   lcd_data1_cmd=0;    //command     rs
   lcd_r1w=0;          //data write  rw
   delay_time(10);
   lcd_en1_lach=1; 
   delay_time(10);  
   P7=0x02;
   delay_time(10);
   lcd_en1_lach=0;   
}

void lcd_add_reset(void)   //把DDRAM位址计数器调整为"00H",游标回原点,该功能不影响显示DDRAM功能:
{                          //执行该命令后,所设置的行将显示在屏幕的第一行。显示起始行是由Z地址计数器控制的,
                           //该命令自动将A0-A5位地址送入Z地址计数器,起始地址可以是0-63范围内任意一行。
						   //Z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。
						   //指定在资料的读取与写入时,设定游标移动方向及指定显示的移位
   lcd_data1_cmd=0;    //command     rs
   lcd_r1w=0;          //data write  rw
   delay_time(10);

⌨️ 快捷键说明

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