智能循迹小车程序

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

#include #define uchar unsigned char

#define uint unsigned int

//D0-D7:f,b,a,e,d,h,c,g 共阴 依次编码 //74LS04 反相器驱动数码管

uchar code table[10] = {0x5F,0x42,0x9E,0xD6,0xC3,0xD5,0xDD,0x46,0xDF,0xD7};

uchar

i = 0; // 用于 0-3 数码管轮流显示 uint

j = 0; // 计时的次数 uint

time=0; // 计时 uint

pwm=16; // 占空比 uint

speed; //调制PWM 波的当前的值

// 电机驱动口定义

sbit

ENB=P1A0; // 前轮电机停止控制使能 sbit

ENA=P1A1; // 后轮控制调速控制端口 sbit

IN1=P1A2; // 前轮 sbit

IN2=P1A3; // 前轮 sbit

IN3=P1A4; // 后轮 sbit IN4=P1A5; // 后轮

void Init()

{

TMOD = 0x12; // 定时器 0 用方式 2, 定时器 1 用方式 1

TH0=(256-200)/256; //pwm

TL0=(256-200)/256;

TH1 = 0x0F8; // 定时 2ms

TL1 = 0x30;

EA = 1;

ET0 = 1;

ET1 = 1;

TR0 = 1;

TR1 = 1;

}

void tim0(void) interrupt 1 //

产生 PWM

{ speed ++; if(speed <= pwm)

sbit

R=P3A 2; // 右边传感器 P3A 2 sbit L=P3A3; // 左边传感器 P3A3 //pwm 就相当于占 100 的比例

ENA = 1;

}

else if(speed < 100) {

ENA = 0;

}

else

speed = 0;

}

void time1() interrupt 3 {

TH1 = 0x0F8;

TL1 = 0x30;

i =(i+1) % 4; j++;

if(i == 0)

{ P0 = 0x00; P0 = table[time%10]; } if(i == 1) {

P0 = 0x00;

P0 = table[time/ 10% 10]; } if(i == 2) { P0 = 0x00;

P0 = table[time/ 100% 10]; } if(i == 3) {

P0 = 0x00;

P0 = table[time/ 1000% 10];

}

P2 = ( 0x10 << i );

// 送位选信号 if(j == 500)

{

time ++; //500 次为 1 秒 j = 0;

void forward() // 前进

{

IN2=1;

IN1=0;

}

void back() // 后退

{

IN2=0;

IN1=1;

}

void left()

// 左转

{ ENB=1;

// 打开使能 IN3=1;

// 定时 2ms //0-3 循环

// 显示最低位数码管

// 段选清零防止乱码

// 送段码信号

IN4=0;

}

void right() // 右转

{

ENB=1; // 打开使能

IN3=0;

IN4=1;

}

void stop() // 停止

{

IN2=0;

IN1=0;

IN3=0;

IN4=0;

}

void main()

{

Init(); // 定时器初始化while(1)

{

if(R==0 && L==1) // 右传感器检测到黑线

{

right(); // 右转

forward();

while(R==0 && L==1);

}

if(R==1 && L==0) // 左传感器检测到黑线{

left(); forward(); while(R==1 && L==0);

}

if(R==0 && L==0) // 都检测到黑线则停止

{

stop();

j = 0; // 定时器仍在工作,计数时间清空} else // 都没有检测到黑线

{

ENB = 0; // 关闭转向控制

forward();

}

}

}

相关文档
最新文档