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

📄 改进改进改进.c

📁 小车源程序工程,由pcf8565单片机控制
💻 C
📖 第 1 页 / 共 2 页
字号:
                        stopCPA  ;
                        stopCPB  ;
                        }   
       
             delay_ms(1700); 
                ad=get_ad( );
              if(  ad < 0X82 &&  ad >  0X7B )   
                balan=0;
                
        }    while(balan);                      
    *******************************************************/      
    Findbenlen(  );
    PORTC.2=0;
    flage+=0x80;                                        //开启蜂鸣,中断关闭   
    
   /************************************************
   找到平衡
   ************************************************/
   CLI( ); 
   start_PCF( );                                                     //需要改动
   //Timer[2]= Read_sec( );
   LCD_write_str( 0 ,  1 , step[2] );
   LCD_write_str( 6 ,  1 , "Balan:"  ); 
   flage+=0x04;
    SEI( );  
    
    do  
       {   
       //保持平衡
        if( Timer[0]==0X05 )
            {
                         flage -=0x04; 
                         CLI( );
                         start_PCF( ); 
                         SEI( );
            }
       }
   while ( (flage==0X04 )|| ( flage==0X84  ) );  
   
    
   /***************************************************
   改变速度
   ***************************************************/
     CLI( );
   OCR1AH=0x01; 
   OCR1AL =0xFF;                                                       //new
   OCR1BH=0x01; 
   OCR1BL=0xFF; 
   SEI( ); 
   
    MBgo;
    MAgo;     
    startCPA ;
    startCPB ; 
  /************************************************
   慢走,直到传感器感知木板落下
  ************************************************/ 
  TCCR2  = 0x0A; 
   /********************************************** 
   检测传感器状态,没黑线时停下
   ***********************************************/ 
  while(PIND.2||PIND.3);                                           //关寻线   
          
   
  CLI( );  
  stopCPA ;
  stopCPB; 
  TCCR2  = 0x00;  
  beep(  ); 
  start_PCF( ); 
  delay_us(10);
  SEI( );
  /***********************************************
   等待五秒,倒车返回
  ***********************************************/  
  MBback;
  MAback;
  while( Timer[0]!=0X05 )  ; 
  LCD_write_str( 0 ,  1 , step[3] );
  beep(  ); 
  startCPA ;
  startCPB ;  
  TCCR2  = 0x0A;  
   while(PIND.6||PIND.7);  
    beep(  ); 
 }        
 
  /******************************************************
  发挥部分
  ******************************************************/    
void advance ( void )
{
   unsigned char find=1;
   
   
   LCD_write_str( 0 , 0 ,"min:  sec: "); 
   start_PCF( );
     
   MBgo ;  
   MAgo;
   startCPA  ;
   startCPB  ;
    
     
     SEI( );  
 /*****************************************************
 当两个传感器都在线上时开启寻线功能
 *****************************************************/
   while(find)  
   {
     if( PIND.2==1 )  
        find=0;  
        
      if(PIND.3==1)  
         find=0;  
   } ;
    //while( (P vula_adcD.6|P vula_adcD.7)==0 );
 TCCR2  = 0x0A;
 
 /***************************************************** 
 一定时间后,减速找平衡
 *****************************************************/    
    //while( Timer[0]!=0X40  );
   while ( get_ad( ) < 0X75 ) ;  //xiu gai
       TCCR2  = 0x00; 
 /**************************************************** 
 找到后,给出平衡指示,
 *****************************************************/   
   CLI( );
   OCR1AH=0x06; 
   OCR1AL =0xFF;                                                       //new
   OCR1BH=0x06; 
   OCR1BL=0xFF; 
   SEI( );  
   Findbenlen(  );
   PORTC.2=0;
   flage+=0x80;
     
        
   CLI( );
   LCD_write_str( 6 ,  1 , "Balan:"  ); 
   flage+=0x04;
   SEI( );
/****************************************************** 
检测平衡状态,不平衡时继续寻找
*******************************************************/    
    while( get_ad( ) < 0X82 &&  get_ad( )>  0X7B );
/*******************************************************
找到后,给出平衡指示
*******************************************************/     
   Findbenlen(  ); 
   PORTC.2=0;
   flage+=0x80;  
        
   CLI( );
   LCD_write_str( 6 ,  1 , "Balan:"  ); 
   flage+=0x04;
   SEI( );  
     
    MBgo ;
    MAback ;
    OCR1AH=0x01; 
    OCR1AL =0xFF;                                                       //new
    OCR1BH=0x01; 
    OCR1BL=0xFF; 
    startCPA  ;
    startCPB  ;
    delay_ms( 1000 );   
     find=1;
     
     while(find)  
   {
     if( PIND.2==1 )  
        find=0;  
        
      if(PIND.3==1)  
         find=0;  
   } ;   
    MBgo ;
    MAgo;
}          
unsigned char  output( void )
{
  if( vula_adc>=0X7D &&  vula_adc<=0X80 )
                return 0;
   if(  vula_adc>=0X7C && vula_adc<=0X81 )
                  return 1 ;
    if(  vula_adc>=0X7B &&  vula_adc<=0X82 )
                   return  2 ;
      if(  vula_adc>=0X7A &&  vula_adc<=0X83)
                    return 3 ;   
       if(  vula_adc>=0X79 &&  vula_adc<=0X84)
                     return  4 ;   
          if(  vula_adc>=0X78 &&  vula_adc<=0X85)
                      return  5 ;   
            if(  vula_adc>=0X77 &&  vula_adc<=0X86)
                        return  6 ;     
          if(  vula_adc>=0X76 &&  vula_adc<=0X87)
                          return  7  ;  
       if(  vula_adc>=0X75 && vula_adc<=0X88)
                            return  8 ;  
      if(vula_adc <=0X74 )                      
                           return 9;  
     if( vula_adc >= 0X89 )       
                          return 10;                                                                                                         
}   

/**************************************************************************************************
平衡驱动控制函数
**************************************************************************************************/
void  mortorgo( unsigned char high , unsigned char low, unsigned int  go_time, unsigned int  back_time )
 {
      OCR1AH=high; 
      OCR1AL = low;                                                      //new
      OCR1BH=high; 
      OCR1BL= low;   
       
       if( vula_adc<0x7F)
      {
        MAgo;
        MBgo;
      }
      else
      {
       MAback;
       MBback;
      }
     
      startCPA ;
      startCPB ; 
      
      delay_ms( go_time ) ;
     
      stopCPA ;
      stopCPB;
       
       if( vula_adc<0x7F)
      {
       MAback;
       MBback;
      }
      else
      {
        MAgo;
        MBgo;
      }
      
      startCPA ;
      startCPB ;
      
      delay_ms( back_time ) ;   
       
      stopCPA ;
      stopCPB;
 }
void main ( void )
{
 /*******************************************************
变量定义
 *******************************************************/ 
  unsigned char  key;       
  unsigned char  temp_key;
  
/******************************************************** 
初始化设备
*********************************************************/
  Init_IO( );
 // Init_T0(  );  
  Init_T1(  );
  //Init_T2(  );
  Init_TWI( );
  Init_device( ) ;      
  LCD_init( ); 
  
  delay_ms( 10 );
  LCD_clear( );   
  delay_ms(1);
    MBgo ;  
    MAgo;
    startCPA  ;
    startCPB  ;
  /********************************************************
  模式选择
  ********************************************************/
  do{
       vula_adc = get_ad ( );
     
     
      temp_key=vula_adc/16;
      LCD_write_char( 1 , 0 ,  temp_key+'0' );   
      temp_key=vula_adc%16;
      LCD_write_char( 2 , 0 ,  temp_key+'0' );  
       temp_key= vula_adc;
         key = output(  ) ;
      switch ( output(  ) ) {
                      case 0 : 
                                    
                                  stopCPA ;
                                  stopCPB;
                                 break;
                      case 1 :  
                                 
                                  mortorgo( 0x03,0xFF , 400, 350 ) ;
                                 break; 
                      case 2 :   
                                   
                                  mortorgo( 0x02,0xFF , 800, 700 ) ;
                                 break;
                      case 3 : 
                                 
                                 mortorgo( 0x02,0xFF , 900, 800 ) ;
                                 break;
                      case 4 :   
                                
                                mortorgo( 0x02,0xFF , 900, 700 ) ;
                                 break; 
                      case 5 :
                               
                                mortorgo( 0x02,0xFF , 900, 650 ) ;
                                 break; 
                      case 6 :  
                              
                                mortorgo( 0x02,0xFF , 900,600 ) ;
                                 break;  
                       case 7 :
                                  
                                 mortorgo( 0x02,0xFF , 1000, 700 ) ;
                                 break;   
                       case 8 :
                             
                                mortorgo( 0x02,0xFF , 1000,600 ) ; 
                                break;   
                       case 9 :
                                   MAgo;
                                   MBgo;
                                   OCR1AH=0x02; 
                                   OCR1AL = 0XFF;                                                      //new
                                   OCR1BH=0x02;
                                   OCR1BL= 0XFF;  
                                   startCPA ;
                                   startCPB ; 
                                break;  
                       case 10:
                                   MAback;
                                   MBback;
                                   OCR1AH=0x02; 
                                   OCR1AL = 0XFF;                                                      //new
                                   OCR1BH=0x02;
                                   OCR1BL= 0XFF;  
                                   startCPA ;
                                   startCPB ;                                                                            
                    default:  LCD_clear();  
                                LCD_write_char( 10 , 1 , 'E' );  
                                 break;
    };
       delay_ms(200);
  }
 
 while( 1 ); 
   
   // SEI();    
  // TCCR2  = 0x00;
   
   

  /*do
    {
    MBgo ;  
    MAgo;
    startCPA  ;
    startCPB  ;
    
    delay_ms(500);
    MBback ;  
    MAback;   
     delay_ms(500);
    MBgo ;  
    MAgo;  
    }
    while(1);    */
}

⌨️ 快捷键说明

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