巡线小车程序巡线

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include
#include
void port_init(void)
{
PORTA = 0xA0;
DDRA = 0xFF;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00;
DDRC = 0xFF;
PORTD = 0xFF;
DDRD = 0xFF;
}


void timer1_init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0xFF; //setup
TCNT1L = 0x01;
OCR1AH = 0x00;
OCR1AL = 0xFF;//右轮轮速
OCR1BH = 0x00;
OCR1BL = 0xFF;//左轮轮速
ICR1H = 0x00;
ICR1L = 0xFF;
TCCR1A = 0xA1;
TCCR1B = 0x0B; //start Timer
}


void init_devices(void)
{

CLI();
port_init();
timer1_init();

MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00;
SEI();
}

void Delay100us(int x)
{
int i; //4clock
for(i=147;x!=0;x--)
while(--i); //5 * i clock
}

void Delay1ms(int n)
{
for(;n!=0;n--)
{
Delay100us(10);
}
}

void corner(int f)//拐直角的中间状态
{
PORTA=0xA0;
if(f==0x1C)//右转直角走左路
{
OCR1BL = 0xAF;
OCR1AL = 0x90;
}
if(f==0x07)//左转直角走右路
{
OCR1BL = 0x90;
OCR1AL = 0xAF;
}
}
void back(void)//后退
{
PORTA=0x41;
OCR1BL = 0x2F;
OCR1AL = 0x3F;
}
void go_on(void)//直线前行
{
PORTA=0xA0;
OCR1BL = 0xFF;
OCR1AL = 0xFF;
}
void go_up(void)//直线加速
{
PORTA=0xA0;
OCR1BL = 0x9F;
OCR1AL = 0xAF;

}

void left_go(void)//小左转弯

{
PORTA=0xA0;
OCR1BL = 0x6F;
OCR1AL = 0xBF;

}
void left_go_go(void)//中左转弯

{ PORTA=0xA0;
OCR1BL = 0x40;
OCR1AL = 0xAF;

}
void left_go_go_go(void)//大左转弯

{
PORTA=0xA0;
OCR1BL = 0x20;
OCR1AL = 0xAF;
}
void left_off(void)
{
PORTA=0xA1;
OCR1BL = 0xFF;
OCR1AL = 0xAF;


}
void right_go(void)//小右转弯

{
PORTA=0xA0;
OCR1BL = 0xAF;
OCR1AL = 0x5F;

}

void right_go_go(void)//中右转弯

{

PORTA=0xA0;
OCR1BL = 0xAF;
OCR1AL = 0x20;

}
void right_go_go_go(void)//大右转弯

{ PORTA=0xA0;
OCR1BL = 0xAF;
OCR1AL = 0x10;

}
void right_off(void)
{
PORTA=0xE0;
OCR1BL = 0xAF;
OCR1AL = 0xFF;


}
void main(void)
{
unsigned char t,f;
//unsigned int i;
PORTA=0xA0;
init_devices();
OCR1AL = 0x9F;
OCR1BL = 0xBF;
t=PINB&0x1F;
while (1)
{
f=t;
t=(PINB&0x1F);
switch (t)
{
case 0x00:back();break;//灯全亮
case 0x04:go_on();break;//0134亮,2黑向前
case 0x06:left_go();break;//034亮,12黑轻度左转即左轮慢
case 0x0E:corner(f);break;//04亮,123黑两种转弯的选择状态,可以不用检查
case 0x02:left_go_go();break;//0234亮,1黑中度左转即左轮再慢
case 0x03:left_go_go_go();break;//234亮,01黑大度左转即左轮更慢
case 0x01:left_off();break;//1234亮,0黑超级大转弯左轮停
case 0x07:left_off();break;//34亮,012黑右路直角处左轮


case 0x0F:left_off();break;//4亮,0123黑右路直角处但车身有偏离左轮停
case 0x0C:right_go();break;//014亮,23黑轻度右转即右轮慢
case 0x08:right_go_go();//break;//0124亮,3黑中度右转即右轮再慢
case 0x18:right_go_go_go();break;//012亮,34黑大度右转即右轮再慢
case 0x10:right_off();break;//0123亮,4黑超级大转弯右轮停
case 0x1C:right_off();break;//01亮,234黑左路直角处右轮停
case 0x1F:go_up();break;// .全黑加速前进
case 0x1E:right_off();//break;//0亮,1234黑左路直角处但车身有偏离右轮停
default:break;
}
}
}

相关文档
最新文档