初级会员

- 积分
- 166
- 金钱
- 166
- 注册时间
- 2015-1-14
- 在线时间
- 7 小时
|
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;
}
|
|