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

📄 main.c~

📁 小车源程序工程,由pcf8565单片机控制
💻 C~
📖 第 1 页 / 共 2 页
字号:
    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(  );  
 
  OCR1AH=0x02; 
  OCR1AL =0xFF;                                                       //new
  OCR1BH=0x02; 
  OCR1BL=0xFF;
  
  startCPA ;
  startCPB ;
 
   TCCR2  = 0x0A;  
 
  delay_ms(2000);  
  
   OCR1AH=0x01; 
  OCR1AL =0xFF;                                                       //new
  OCR1BH=0x01; 
  OCR1BL=0xFF; 
 

   while(PIND.6||PIND.7);  
   beep( );  
   LCD_write_str( 0 ,  1 , step[4] );   
    
   CLI( ); 
 
   stopCPA ;
  stopCPB;  
 }        
 
  /******************************************************
  发挥部分
  ******************************************************/    
void advance ( void )
{
   unsigned char find=1;
   unsigned char j=0; 
      
   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;  
   } ;
   
 TCCR2  = 0x0A;
 
 /***************************************************** 
 一定时间后,减速找平衡
 *****************************************************/    
    while( Timer[0]<=0X30  );
    while ( get_ad( ) < 0X7F ) ; 
       TCCR2  = 0x00; 
 /**************************************************** 
 找到后,给出平衡指示,
 *****************************************************/   
  do{ 
        Findbenlen(  );
        PORTC.2=0;
        flage+=0x80;
        
         CLI( );
         LCD_write_str( 0 ,  1 ,display[j] ); 
         LCD_write_str( 6 ,  1 , "Balan:"  ); 
         flage+=0x04;
         SEI( );
/****************************************************** 
检测平衡状态,不平衡时继续寻找
*******************************************************/    
          while( get_ad( ) < 0X81 &&  get_ad( )>  0X7B );
          flage -=0x04; 
          BalanceTime=0;                                                  //平衡显示清零                                              
          LCD_write_str( 0,  1 , "                                   "  );  
         if(j<5)
          j++; 
          else 
          j=0;
     }
    while(1);      
    
/*******************************************************
找到后,给出平衡指示
*******************************************************/  
/*******************************************************   
   Findbenlen(  ); 
   PORTC.2=0;
   flage+=0x80;  
        
   CLI( ); 
   LCD_write_str( 0 ,  1 , display[1] ); 
   LCD_write_str( 6 ,  1 , "Balan:"  ); 
   flage+=0x04;
   SEI( );  
    
    delay_ms( 5000 );
    flage -=0x04;                                                         //关闭平衡显示                                       
    TCCR0  = 0x00;                                                     //关闭显示     
  
    MBgo ;
    MAback ;
    OCR1AH=0x02; 
    OCR1AL =0xFF;                                                       //new
    OCR1BH=0x02; 
    OCR1BL=0xFF; 
    startCPA  ;
    startCPB  ;
    delay_ms( 4000 );                                                  //速度减慢一倍,延时增加一倍        
     find=1;
      LCD_write_str( 0 ,  1 ,display[2] ); 
    
     while(find)                                                //当两个传感器有一个在线上时
   {
     if( PIND.2==1 )  
        find=0;  
        
      if(PIND.3==1)  
         find=0;  
   } ;   
   
    MBgo ;
    MAgo;  
    
    TCCR2  = 0x0A;                                               //开寻线
                            
    delay_ms(5000);
                                                                          //5秒后加速
    OCR1AH=0x01; 
    OCR1AL =0xFF;                                                       //new
    OCR1BH=0x01; 
    OCR1BL=0xFF;  
     
    delay_ms(5000);  
     
                                                                           //关寻线
    TCCR2  = 0x00;
    
    stopCPA ;
     stopCPB; 
    MBgo ;                                                              //梦幻舞步
    MAback;    
    startCPA  ;
    startCPB  ;
   
    find=1;
    delay_ms(6000);   
     
       while(find)                                                //当两个传感器有一个在线上时
   {
     if( PIND.2==1 )  
        find=0;  
        
      if(PIND.3==1)  
         find=0;  
  } ;   
  
    MBgo ;                                                              //梦幻舞步
    MAgo;  
     TCCR2  = 0x0A; 
                                                    //开寻线  
     delay_ms(5000);   
      
//***********************************************************************
反向转弯
//***********************************************************************    
      TCCR2  = 0x00;
    
     stopCPA ;
     stopCPB; 
    MBback ;                                                              //梦幻舞步
    MAgo;   
    delay_ms(1000); 
    startCPA  ;
    startCPB  ;
   
    find=1;
    delay_ms(6000);   
     
       while(find)                                                //当两个传感器有一个在线上时
   {
     if( PIND.2==1 )  
        find=0;  
        
      if(PIND.3==1)  
         find=0;  
  } ;   
  
    MBgo ;                                                              //梦幻舞步
    MAgo;  
     TCCR2  = 0x0A; 
     
  **************************************************************************/                                                   
}    

void demo( void )
{
   
    unsigned char find=1;
   
    LCD_write_str( 0 , 0 ,"min:  sec: "); 
   
    start_PCF( );
     
    MAgo ;  
    MBback;
    startCPA  ;
    startCPB  ;
    
    SEI( );  

     find=1;
    
     while(find)                                                //当两个传感器有一个在线上时
   {
     if( PIND.2==1 )  
        find=0;  
        
      if(PIND.3==1)  
         find=0;  
   } ;   
   
    MBgo ;
    MAgo;  
    
    TCCR2  = 0x0A;                                               //开寻线
                            
    delay_ms(5000);
                                                                          //5秒后加速
   
     
    delay_ms(5000);  
     
                                                                           //关寻线
    TCCR2  = 0x00;
    
    stopCPA ;
     stopCPB; 
    MBgo ;                                                              //梦幻舞步
    MAback;    
    startCPA  ;
    startCPB  ;
   
    find=1;
    delay_ms(10000);   
     
       while(find)                                                //当两个传感器有一个在线上时
   {
     if( PIND.2==1 )  
        find=0;  
        
      if(PIND.3==1)  
         find=0;  
  } ;   
  
    MBgo ;                                                              //梦幻舞步
    MAgo;  
     TCCR2  = 0x0A; 
                                                    //开寻线  
     delay_ms(8000);   
      
//***********************************************************************
//反向转弯
//***********************************************************************    
      TCCR2  = 0x00;
    
     stopCPA ;
     stopCPB; 
    MBback ;                                                              //梦幻舞步
    MAgo;   
    delay_ms(1000); 
    startCPA  ;
    startCPB  ;
   
    find=1;
    delay_ms(9000);   
     
       while(find)                                                //当两个传感器有一个在线上时
   {
     if( PIND.2==1 )  
        find=0;  
        
      if(PIND.3==1)  
         find=0;  
  } ;   
  
    MBgo ;                                                              //梦幻舞步
    MAgo;  
     TCCR2  = 0x0A; 


}      

void main ( void )
{
 /*******************************************************
变量定义
 *******************************************************/ 
  unsigned char  key;       
  
  
/******************************************************** 
初始化设备
*********************************************************/
  Init_IO( );
  Init_T0(  );  
  Init_T1(  );
  Init_T2(  );
  Init_TWI( );
  Init_device( ) ;      
  LCD_init( ); 
  
  delay_ms( 10 );
  LCD_clear( );   
  delay_ms(1);
   
  /********************************************************
  模式选择
  ********************************************************/
  key=SelectMode( );  
  
switch (key)
    {
    case 0: 
                 nomal (  );
                 break;
     case 1: 
                 advance ( );
                   break;  
      case 2:                       
                  demo( ); 
                  break; 
    default: 
                   break; 
    };
   
  
  while(1);                                             //结束
}

⌨️ 快捷键说明

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