中级会员
![Rank: 3](static/image/common/star_level2.gif) ![Rank: 3](static/image/common/star_level1.gif)
- 积分
- 309
![QQ](static//image/common/qq_big.gif)
- 威望
- 264
- 贡献
- 39
- 兑换币
- 18
- 注册时间
- 2010-1-14
- 在线时间
- 3 小时
|
delay_ms(500);
PORTC.2=1;
start_PCF( );
/********************************************************
小车动作初始化
********************************************************/
MBgo ;
MAgo;
startCPA ;
startCPB ;
TCCR2 = 0x0A; //自动寻线开
SEI( ); //全局中断开
/**********************************************
第一阶段
**********************************************/
while ( Timer[0] != 0X15 ) ;
LCD_write_str( 0 , 1 , step[1] );
CLI( );
beep( );
start_PCF( );
/***************************************************
改变速度
***************************************************/
OCR1AH=0x06;
OCR1AL =0xFF; //new
OCR1BH=0x06;
OCR1BL=0xFF;
SEI( );
/************************************************
寻找平衡
************************************************/
TCCR2 = 0x00;
/**********************************************************
do
{
startCPA ;
startCPB ;
delay_ms(700);
stopCPA ;
stopCPB ;
delay_ms(200);
if( get_ad( )>= 0X75 )
balan=0;
} while(balan);
balan=1;
do
{
if( get_ad( ) <=0X7B ) //0x7d(yuan shi) 0X7E bux vula_adcg
{
MBgo ;
MAgo ;
startCPA ;
startCPB ;
delay_ms(300);
stopCPA ;
stopCPB ;
}
if( get_ad( ) >= 0X82) //0x82
{
MBback ;
MAback ;
startCPA ;
startCPB ;
delay_ms(300);
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( );
/******************************************************
检测平衡状态,不平衡时继续寻找
*******************************************************/ |
|