#include<reg52.h>
//*********************第一部分 Start***************************************
sbit IN1=P1^0;//以下是点击驱动芯片L298管脚位声明
sbit PWM1=P1^1;
sbit IN2=P1^2;
sbit IN3=P1^3;
sbit PWM2=P1^4;
sbit IN4=P1^5;
sbit RPR1=P1^6;//此处是传感器 RPR220管脚位声明
sbit RPR2=P1^7;
int count1=0;//用于定时计数的两个全局变量位声明
int count2=0;
//*********************第一部分 End***************************************
//*********************第二部分子函数定义 Start****************************
void forward_turn1()//电机1前进
{
IN1=0;
IN2=1;
}
void reverse_rutn1()//电机1后退
{
IN1=1;
IN2=0;
}
void forward_turn2()//电机2前进
{
IN3=0;
IN4=1;
}
void reverse_rutn2()//电机2后退
{
IN1=1;
IN2=0;
}
void speed1(int ct,int sd)//电机1速度控制函数,其中参数sd为生成PWM波形的比较基准
{
if(ct<=sd)
PWM1=1;
else
PWM1=0;
}
void speed2(int ct,int sd)//电机2速度控制函数,其中参数sd为生成PWM波形的比较基准
{
if(ct<=sd)
PWM2=1;
else
PWM2=0;
}
//*********************第二部分子函数定义 End*********************
//**********第三部分小车直线前进,左转,右转函数定义 Start********
void advance(int ct1,int sd1,int ct2,int sd2)//小车直线前进函数
{
forward_turn1();
forward_turn2();
speed1(ct1,sd1);
speed2(ct2,sd2);
}
//*************以下是方案 1,通过使两轮一快一慢来实现转向******************************
void left_turn1(int ct1,int sd1,int ct2,int sd2)//小车左转
{
forward_turn1();
forward_turn2();
speed1(ct1,sd1);
speed2(ct2,sd2);
}
void right_turn1(int ct1,int sd1,int ct2,int sd2)//小车右转
{
forward_turn1();
forward_turn2();
speed1(ct1,sd1);
speed2(ct2,sd2);
}
//*************以下是方案 2,通过使两轮一正传,一反转来实现转向************************
void left_turn2(int ct1,int sd1,int ct2,int sd2)//小车左转
{
forward_turn1();
reverse_rutn1();
speed1(ct1,sd1);
speed2(ct2,sd2);
}
void right_turn2(int ct1,int sd1,int ct2,int sd2)//小车右转
{
forward_turn1();
reverse_rutn1();
speed1(ct1,sd1);
speed2(ct2,sd2);
}
//**********第三部分小车直线前进,左转,右转函数定义 End********
//**********第 4部分主函数 Start********************************
main()
{
TMOD=0x11;//中断模式设置
TH0=(65536-1000)/256;//定时器 1初始化
TL0=(65536-1000)%256;
EA=1;
ET0=1;
TR0=1;
TH1=(65536-1000)/256;//定时器 2初始化
TL1=(65536-1000)%256;
EA=1;
ET1=1;
TR1=1;
while(1)
{
if(RPR1==0&&RPR2==0)//未检测到黑线,小车继续前进
{
advance(count1,500,count2,500);
}
if(RPR1==1&&RPR2==0)//仅左轮检测到黑线,小车向左转弯
{
left_turn1(count1,200,count2,500);
}
if(RPR1==0&&RPR2==1)//仅右轮检测到黑线,小车向右转弯
{
right_turn1(count1,500,count2,200);
}
if(RPR1==1&&RPR2==1)/*左右轮均检测黑线,小车继续前进*/
/*(此处用来处理"8"字型路线交叉处小车如何前进的问题)*/
{
advance(count1,500,count2,500);
}
}
}
//**********第 4部分主函数 End********************************
//**********第五部分中断服务程序 Start********************************
void time0()interrupt 1
{
TH0=(65536-1000)/256;//定时 1ms
TL0=(65536-1000)%256;
count1++;
if(count1>=1000)//周期是1s
count1=0;
}
void time1()interrupt 3
{
TH0=(65536-1000)/256;//定时 1ms
TL0=(65536-1000)%256;
count2++;
if(count2>=1000)//周期是1s
count2=0;
}//**********第五部分中断服务程序 End********************************
xunjixiaoche.zip_xunjixiaoche_循迹小车
版权申诉
23 浏览量
2022-09-14
19:18:49
上传
评论
收藏 1KB ZIP 举报
小波思基
- 粉丝: 70
- 资源: 1万+
最新资源
- 20240420-扬州高中小学部风雨操场转换层条件图r.dwg
- 小猫咪邮件在线发送系统源码v1.1,支持添加附件
- 永磁电机铜耗估算表-Excel-v1.0
- 参考资料-人工智能对劳动力市场的影响机制研究.pdf
- 协同供应链集成产品介绍V71sp1.rar
- 上市公司-人工智能的采纳程度面板数据(2003-2021年).xlsx
- 参考资料-人工智能技术应用对就业的影响及作用机制研究-来自制造业企业的微观证据.pdf
- 第5章spring-mvc请求映射处理
- 2023-04-06-项目笔记 - 第一百十六阶段 - 4.4.2.114全局变量的作用域-114 -2024.04.27
- 协同供应链集成产品介绍V70.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈