OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5435|回复: 0

请大神们帮我分析一下我的这个基于51单片机四路红外循迹小车程序,有没有好点的算法推荐一下

[复制链接]

19

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2015-1-14
在线时间
7 小时
发表于 2015-4-11 23:55:20 | 显示全部楼层 |阅读模式
5金钱
//这个程序小车在弯道时有时能检测到弯道,转过弯道,但在下一弯道又会冲出弯道,有时候检测不到弯道,直线冲出弯道,但小车的速度不是很快,只是程序问题还是硬件问题。

#include <reg52.h>

#define uchar unsigned char
#define uint  unsigned int
 
uchar time,mA,mB;   //time最大值为256,使用时注意溢出 

sbit pwmA=P1^5;
sbit pwmB=P1^0;

sbit Ain4=P1^4;
sbit Ain3=P1^3;
sbit Bin2=P1^1;
sbit Bin1=P1^2;

sbit L1=P2^0;
sbit L2=P2^1;
sbit R1=P2^2;
sbit R2=P2^3;

void init();
void go_str();
void left_lit();
void right_lit();

void main()
{
init();
mA=35;
mB=32;
Ain4=1;
Ain3=0;
Bin1=0;
Bin2=1;
while(1)
{
go_str();

while(((R1==1)|(R2==1))&&((L1==0)|(L2==0)))
right_lit();
while(((L1==1)|(L2==1))&&((R1==0)|(R2==0)))
left_lit();
}
}

void init()
{
TMOD=0X10;//设置工作方式1

    TH1=(65536-50)/256;//为定时器装初值
    TH1=(65536-50)%256;

ET1=1; //开外部中断1
EA=1;   //开总中断
TR1=1; //启动定时器1
}

void timer1() interrupt 3
{
TH1=(65536-50)/256;
TL1=(65536-50)%256;
time++;

if(time<mA)
  pwmA=1;
else
  pwmA=0;

if(time<mB)
  pwmB=1;
else
  pwmB=0;

if(time>=50)
  time=0;
}

void go_str()
{
mA=33;
mB=30;
}

void left_lit()
{
mA=15;
mB=42;
}

void right_lit()
{
mA=42;
mB=15;
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 19:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表