#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar temp,signal,tt1,t0,t1,t2,t3,t4,t5,t6;
void delay_1ms(uint d)
{
uint i;
while(d--)
for(i=0;i<75;i++);
}
void motor_run() //电机起动
{
P1=0x35;
delay_1ms(200);
P1=0x53;
delay_1ms(10);
/* ENA=1;
OUT1=0;
OUT2=1;
delay_1ms(800);
OUT2=0;
delay_1ms(200);
ENB=1;
OUT4=0;
OUT3=1;
delay_1ms(800);
OUT3=0;
delay_1ms(200);
*/
}
void motor_left() //左进
{
P1=0x30;
delay_1ms(200);
P1=0x00;
delay_1ms(20);
}
void motor_right() //右进
{
P1=0x05;
delay_1ms(200);
P1=0x00;
delay_1ms(20);
}
void motor_big_right() //粗右进
{
P1=0x55;
delay_1ms(200);
P1=0x00;
delay_1ms(20);
}
void motor_big_left()
{
P1=0x33;
delay_1ms(200);
P1=0x00;
delay_1ms(20);
}
void motor_stop() //电机停止
{
P1=0x00;
}
void motor_back()
{
P1=0x53;
}
void main()
{
t0=0;
t1=0;
t2=0;
t3=0;
t4=0;
t5=0;
t6=0;
tt1=0;
EA=1;
ET1=1;
TR1=1;
TMOD=0x01;
TH1=-(1000/256);
TL1=-(1000%256);
while(1)
{
temp=P2;
signal=temp&0xff; //得到红外反向信号
switch(signal)
{
case 0xff: //无偏差
motor_run();
t0++;
if(t0==10)
{
t0=0;
motor_left();
motor_right();
}
t1=t2=t3=t4=t5=t6=0;
break;
case 0xfd: //1轮右偏
motor_big_left();
t1++;
if(t1==4)
{
t1=0;
motor_left();
}
t0=t2=t3=t4=t5=t6=0;
break;
case 0xef: //4轮左偏
motor_big_right();
t2++;
if(t2==4)
{
t2=0;
motor_right();
}
t0=t1=t3=t4=t5=t6=0;
break;
case 0xfb: //2轮右偏出轨
case 0xf9: //1、2轮右偏
motor_big_left();
t3++;
if(t3==4)
{
t3=0;
motor_left();
}
t0=t1=t2=t4=t5=t6=0;
// delay_1ms(10);
break;
case 0xdf: //5左偏出轨
case 0xcf: //4、5轮左偏
motor_big_right();
t4++;
if(t4==4)
{
t4=0;
motor_right();
}
t0=t1=t2=t3=t5=t6=0;
// delay_1ms(10);
break;
case 0xfe: //0最右偏出轨
case 0xfa:
motor_big_left();
t5++;
if(t5==1)
{
t5=0;
motor_left();
motor_left();
}
t0=t1=t2=t3=t4=t6=0;
// delay_1ms(10);
break;
case 0xbf: //6最左偏出轨
case 0x9f:
motor_big_right();
t6++;
if(t6==1)
{
t6=0;
motor_right();
motor_right();
}
t0=t1=t2=t3=t4=t5=0;
// delay_1ms(10);
break;
case 0xeb: //前两传感器压在黑线上
case 0xdb: //后两传感器压在黑线上
case 0xbe: //中间两传感器压在黑线上
case 0xac: //前四传感器压在黑线上
case 0x9a: //后四传感器压在黑线上
motor_back();
delay_1ms(200);
motor_stop();
// delay_1ms(1000);
default:
// motor_back();
// delay_1ms(50);
// motor_left();
// motor_right();
break;
}
}
}
/*void time1() interrupt 3
{
TH1=-(1000/256);
TL1=-(1000%256);
tt1++;
if(tt1==300)
{
motor_back();
// delay_1ms(1);
tt1=0;
}
} */
yxkfw
- 粉丝: 82
- 资源: 2万+
最新资源
- 三相异步电机转速电流双闭环矢量控制 Matlab Simulink仿真模型(成品) 采用双闭环PI控制,转矩突变时跟踪性能较好
- Iconize for Mac v1.5
- 卡尔曼滤波家族-锂离子电池soc估算模型-matlab程序-simulink模型-汇总
- Data Guardian for Mac v7.6.9
- 是的是的哦i阿斯还是哦
- 光伏并网模型 Matlab Simulink仿真模型(成品) 1、光伏电池经过逆变器并网包含MPPT计算
- 基于hadoop的个性化图书推荐系统的毕业设计与实现
- fpga实现cnn神经网络加速 手写字硬件加速 FPGA artix7-100t 纯verilog编写 神经网络硬件加速 使用ov5640摄像头dvp接口 verilog实现手写字识别
- 全新UI短剧搜索分享系统网站源码
- WORD办公教程网站模板 (H5自适应) WPS办公资源源码
- 萌宠桌宠键盘跟随软件!
- ARM Cortex-M3架构STM32F103微控制器数据手册:架构、特性和应用指南
- 光流法:适合大范围的场景,能精准检测运动方向 背景减除法:适用于背景固定且物体较为明显的场景 帧差法:简单易用,适合背景静止的场景 特征点跟踪法:适用于检测物体运动的细节和小范围的变化 深度学
- 导航系统DHPro4.1.3开心版
- ch07配套资源:图像处理与卷积神经网络(CNN)实战指南
- Annie推广导航开心免授权版本
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页