标题:
智能寻迹小车CODE
[打印本页]
作者:
风中的大表哥
时间:
2017-1-9 16:20
标题:
智能寻迹小车CODE
第一次发帖 给我点黑b吧
0.png
(57.23 KB, 下载次数: 76)
下载附件
2017-1-12 02:54 上传
资料下载:
智能寻迹小车CODE 11-14.rar
(32.13 KB, 下载次数: 10)
2017-1-9 16:20 上传
点击文件名下载附件
这是一个用51做的红外循迹小车
下载积分: 黑币 -5
/*******************引脚定义****************/
#include "reg51.h"
typedef unsigned int uint;
typedef unsigned char uchar;
#define Duty_cycle 35 //占空比
#define Cycle 100 //PWM周期
sbit Sensor_1 = P1^1; //红外检测
sbit Sensor_2 = P1^2;
sbit Sensor_3 = P1^3;
sbit Motor_1H = P2^0; //电机驱动控制信号
sbit Motor_1L = P2^1;
sbit Motor_2H = P2^2;
sbit Motor_2L = P2^3;
sbit En_pwm1 = P2^4; //使能信号(PWM)
sbit En_pwm2 = P2^5;
uchar timer1; //定义变量
/*******************************************************************************
* 函 数 名 : Time1Config
* 函数功能 : 设置定时器
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
/**************设置定时器***********/
void Time1Config()
{
TMOD|= 0x10; //设置定时计数器T1工作在模式1
/***定时器赋初始值,12MHZ下定时0.5ms***/
TH1 = 0xFE;
TL1 = 0x0C;
ET1 = 1; //开启定时器1中断
EA = 1;
TR1 = 1; //开启定时器
}
/************************************************
延时函数
总共延时
1ms
乘以
count
************************************************/
void DelayX1ms(uint count)
{
uint j;
while(count--!=0)
{
for(j=0;j<72;j++);
}
}
/************************************************
电机转动函数定义
************************************************/
void Go_Straight( )
{
Motor_1H = 0;
Motor_1L = 0;
Motor_2H = 0;
Motor_2L = 0;
DelayX1ms(10);
Motor_1H = 1;
Motor_1L = 0;
Motor_2H = 1;
Motor_2L = 0;
DelayX1ms(20);
}
void Turn_Left( )
{
En_pwm1=0;
En_pwm2=0;
DelayX1ms(10);
Motor_1H = 0;
Motor_1L = 1;
Motor_2H = 1;
Motor_2L = 0;
DelayX1ms(20);
}
void Turn_Right( )
{
En_pwm1=0;
En_pwm2=0;
DelayX1ms(10);
Motor_1H = 1;
Motor_1L = 0;
Motor_2H = 0;
Motor_2L = 1;
DelayX1ms(20);
}
void Go_Back( )
{
Motor_1H = 0;
Motor_1L = 0;
Motor_2H = 0;
Motor_2L = 0;
DelayX1ms(10);
Motor_1H = 0;
Motor_1L = 1;
Motor_2H = 0;
Motor_2L = 1;
DelayX1ms(20);
}
/**************主函数**************************/
void main( )
{
Time1Config(); //定时器初始化
while(1)
{
if(Sensor_1==0 && Sensor_2==1 && Sensor_3==0) //状态:轨迹居中
Go_Straight(); //方向:前进
else if(Sensor_1==0 && Sensor_2==0 && Sensor_3==1) //状态:偏左
Turn_Right(); //方向:右转
else if(Sensor_1==1 && Sensor_2==0 && Sensor_3==0) //状态:偏右
Turn_Left(); //方向:左转
else if(Sensor_1==0 && Sensor_2==0 && Sensor_3==0) //状态:偏离轨道
Go_Back(); //方向:后退
else Go_Straight( ); //其他情况:前进
}
}
/*******************************************************************************
* 函 数 名 : Time1
* 函数功能 : 定时器1的中断函数
* 输 入 : 无
* 输 出 : 无
* 备 注 : 3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2 4 串口中断
*******************************************************************************/
/********************定时器1的中断函数********************/
void Time1(void) interrupt 3 //3 为定时器1的中断号
{
timer1++;
if(timer1>Cycle) //PWM周期为100*0.5ms
{
timer1=0;
}
if(timer1 < Duty_cycle) //改变Duty_cycle这个值可以改变直流电机的速度
{
En_pwm1=1;
En_pwm2=1;
}
else
{
En_pwm1=0;
En_pwm2=0;
}
TH1 = 0xFE; //重新赋初值
TL1 = 0x0C;
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1