您的位置 首页 模拟

单片机智能循迹小车制造

电路图和制作详情请从这里下载附件:http:www51heicombbsdpj-18970-1html,下面是程序源代码*************************************

电路图和制造详情请从这儿下载附件:http://www.51hei.com/bbs/dpj-18970-1.html,下面是程序源代码

/****
**********************************
*程序阐明:
*此ATmega128单片机程序
*包括功用:
*1、
*2、
*3、
*4、
*5、
**********************************
*文件:main.c
*用处:体系主程序
*留意:体系时钟8MHZ
*编译环境:Code VisionAVR
**********************************
*版别:智能循迹小车v1.0
*作者:吾ARM1
*批改时刻?012年4月19日
*完结时刻:2012年4月16日
**********************************/

#include
#include “delay.h”
#define left1 PORTC.0
#define left2 PORTC.1
#define min PORTC.2
#define right1 PORTC.3
#define right2 PORTC.4
#define Turn_Left PORTC.5
#define Turn_Right PORTC.6
#define u8 unsigned char
#define u16 unsigned int

void Init_IO(void)
{
DDRC = DDRC&0xe0; //将C端口低5位界说为输入,浮空
PORTC = 0xe0;//
DDRB = 0xff; //将B端口设为输出形式
PORTB = 0xff;
PORTA = 0xff;
DDRA = 0xff;
}

void Adjust_Speed(u8 Left_Speed,u8 Right_Speed)
{
OCR1A = (u16)Right_Speed*10 ;//Left_Speed:1–100,为右电机占空比
OCR1B = (u16)Left_Speed*10;//Right_Speed:1–100,为左电机的占空比
}

void Init_Timer1(void)
{ u16 i,j;
i = 300; //实践测验发现1600时电机速度仍是很快的。
j = 300;
TCCR1A = 0xa0;//相位与频率批改PWM,TOP值为ICR1,向上计数匹配清零,向下计数匹配时置1
TCCR1B = 0x12;//体系时钟8分频,A,B一起输出PWM
OCR1A = i; //右电机
OCR1B = j; //在电机
ICR1 = 1000;
}

void main(void)
{
Init_IO();
Init_Timer1();
while(1)
{
if(PINC==0xfb)//只要中心循迹管检测到黑线11011
{
Adjust_Speed(90,90);//行进(35,35):一圈循迹时刻16.3S (38,38)一圈循迹时刻15.5s (40,40)一圈循迹时刻16.34s (50,50)15.34s(60,60)14.21s
PORTA = 0xfe; //(80,80)13.68s
}

if(PINC==0xf9)//中心和左面第二个循迹管检测到黑线10011
{
Adjust_Speed(20,60);//左转
// delay_ms(5);
PORTA = 0xfd;
}

if(PINC==0xfd)//左面第二个循迹管检测到黑线10111
{
Adjust_Speed(15,65);//左转
//delay_ms(5);
PORTA = 0xfb;
}

if(PINC==0xfc)//左面两个一起检测到黑线00111
{

Adjust_Speed(10,70);//左转
PORTA = 0xf7;
}

if(PINC==0xfe)//左面第一个循迹管检测到黑线01111
{

Adjust_Speed(7,85);//左转
// delay_ms(5);
PORTA = 0xef;
}

if(PINC==0xf3)//中心和右边第二个循迹管检测到黑线11001
{

Adjust_Speed(35,15);//右转
PORTA = 0xdf;
}
if(PINC==0xf7)//右边第二个循迹管检测到黑线11101
{
Adjust_Speed(70,13);//右转
PORTA = 0xbf;
}
if(PINC==0xe7)//右边两个检测到黑线11100
{
Adjust_Speed(80,10);//右转
PORTA = 0x7f;
}
if(PINC==0xef)//右边第一个检测到黑线11110
{
Adjust_Speed(100,10);//右转
PORTA = 0xfc;
}
if(PINC==0xe3)//右侧三个循迹管一起检测到黑线(直角)11000
{
Adjust_Speed(40,0);//右转
PORTA = 0xf8;
}
if(PINC==0xe7)//左边三个循迹管一起检测到黑线(直角)00011左转
{
Adjust_Speed(0,40);//左转
PORTA = 0xf0;
}
if(PINC==0xe0)//5个循迹管一起检测到穿插00000直走
{
Adjust_Speed(25,25);//直走
PORTA = 0xe0;
}
// if(PINC==0xff)
// {
// Adjust_Speed(0,100);//直走
// PORTA = 0xc0;
//}

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/moni/318052.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部