标题:
单片机红外避障小车程序
[打印本页]
作者:
wzd
时间:
2020-5-25 11:51
标题:
单片机红外避障小车程序
红外避障小车
单片机源程序如下:
/******************************************************************
***名称:小车红外避障参考程序(PWM)*******************************
***晶振:11.0592MHZ*************************************************
******************************************************************/
/******************************************************************
************************* 头文件 **********************************
******************************************************************/
#include<AT89X52.H>
/******************************************************************
************************电机驱动定义*******************************
******************************************************************/
#define LS {P1_1=0,P1_2=0;} //左电机停转
#define Lg {P1_1=1,P1_2=0;} //左电机正转
#define Lb {P1_1=0,P1_2=1;} //左电机反转
#define RS {P1_4=0,P1_5=0;} //右电机停转
#define Rg {P1_4=1,P1_5=0;} //右电机正转
#define Rb {P1_4=0,P1_5=1;} //右电机反转
#define Lp P1_0 //PWM信号端
#define Rp P1_3 //PWM信号端
#define Ll P3_4 //左传感器
#define Rl P3_5 //右传感器
sbit BUZZ = P2^3; //蜂鸣器引脚
/******************************************************************
**********************PWM调速相关变量******************************
******************************************************************/
unsigned char pwm_val_left =0; //变量定义
unsigned char push_val_left =0; //左电机占空比N/20
unsigned char pwm_val_right =0;
unsigned char push_val_right=0; //右电机占空比N/20
bit Rs=1;
bit Ls =1;
unsigned int time=0;
/******************************************************************
**********************延时函数*************************************
******************************************************************/
void delay(unsigned int k)
{
unsigned int x,y;
for(x=0;x<k;x++)
for(y=0;y<2000;y++);
}
/******************************************************************
******************************小车前进*****************************
******************************************************************/
void front_run(void)
{
push_val_left=10;
push_val_right=10.1;
Lg;
Rg;
}
/******************************************************************
******************************小车后退*****************************
******************************************************************/
void back_run(void)
{
push_val_left=10;
push_val_right=10.1;
Lb;
Rb;
}
/******************************************************************
******************************小车左转*****************************
******************************************************************/
void left_run(void)
{
push_val_left=12;
push_val_right=12;
Rg;
Lb;
}
/******************************************************************
******************************小车右转******************************
******************************************************************/
void right_run(void)
{
push_val_left=12;
push_val_right=12;
Lg;
Rb;
}
/******************************************************************
******************************小车停*******************************
******************************************************************/
void stop(void)
{
push_val_left=15;
push_val_right=15;
LS;
RS;
}
/******************************************************************
****************************左电机调速*****************************
******************************************************************/
void pwm_out_left_moto(void)
{
if(Ls)
{
if(pwm_val_left<=push_val_left)
{
Lp=1;
}
else
{
Lp=0;
}
if(pwm_val_left>=20)
pwm_val_left=0;
}
else
{
Lp=0;
}
}
/******************************************************************
***************************右电机调速******************************
******************************************************************/
void pwm_out_right_moto(void)
{
if(Rs)
{
if(pwm_val_right<=push_val_right)
{
Rp=1;
}
else
{
Rp=0;
}
if(pwm_val_right>=20)
pwm_val_right=0;
}
else
{
Rp=0;
}
}
/******************************************************************
************************定时器0初始化******************************
******************************************************************/
void timer0_Init(void)
{
TMOD=0X01;
TH0= 0XFc; //1ms定时
TL0= 0X18;
TR0= 1;
ET0= 1;
EA = 1; //开总中断
}
/******************************************************************
*******************定时器0中断服务子程序***************************
******************************************************************/
void timer0()interrupt 1 using 2
{
TH0=0XFc;
TL0=0X18;
time++;
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();
}
/******************************************************************
**************************主函数***********************************
******************************************************************/
void main(void)
{
unsigned char i;
stop(); //小车停转
timer0_Init();
while(1)
{
if(Ll==1&&Rl==1) //前方无障碍
front_run(); //前进
else
{
if(Ll==1&&Rl==0) //右前方右障碍
{
left_run(); //左转
delay(40);
}
if(Rl==1&&Ll==0) //左前方右障碍
{
right_run(); //右转
delay(40);
}
if(Rl==0&&Ll==0) //前方有障碍
{
back_run(); //后退
delay(40);
right_run(); //右转
delay(90);
}
}
}
}
/******************************************************************
******************************结束*********************************
*******************************************************************/
复制代码
所有资料51hei提供下载:
XC.zip
(32.23 KB, 下载次数: 24)
2020-5-25 11:48 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2020-5-29 01:02
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1