📄 main.c~
字号:
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 + -