mayday!mayday!智能小车程序存在bug,求助!
时间:10-02
整理:3721RD
点击:
自己写的一个小车程序,编译无报错,但是在proteus内P1口始终为高电位,求高手帮忙查看程序
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define motor P1 //电机动作输出
#define test P0 //红外检测输入
volatile uchar flag;
void Mforward() //前进赋值 左ENB IN4 IN3 ENA IN2 IN1右
{
motor=0x2d; //101101
}
void Mturnright() //右转
{
motor=0x28; //101000
}
void Mturnleft() //左转
{
motor=0x05; //000101
}
void Mroll() //左反右正转
{
motor=0x35; //110101
}
void Mstop() //停止
{
motor=0x24; //100100
}
void flagtest() //红外检测 1表示无障碍或检测到黑线
{
uchar temp;
temp=test&0x0f; //取P0低四位
switch(temp)
{
case 0x08: //未偏 1000
case 0x0a: // 1010
flag=0;
break;
case 0x0c: //偏左 1100
case 0x0e: // 1110
flag=1;
break;
case 0x09: //偏右 1001
case 0x0b: // 1011
flag=2;
break;
case 0x0d: //终点 1101
case 0x0f: // 1111
flag=3;
break;
case 0x00: //有障碍 P0^3=0
case 0x01:
case 0x02:
case 0x03:
case 0x04:
case 0x05:
case 0x06:
case 0x07:
flag=4;
break;
default:
break;
}
}
void main() //主函数
{
flagtest();
switch(flag)
{
case 0:
Mforward();
break;
case 1:
Mturnleft();
break;
case 2:
Mturnright();
break;
case 3:
Mroll();
break;
case 4:
Mstop();
break;
}
}
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define motor P1 //电机动作输出
#define test P0 //红外检测输入
volatile uchar flag;
void Mforward() //前进赋值 左ENB IN4 IN3 ENA IN2 IN1右
{
motor=0x2d; //101101
}
void Mturnright() //右转
{
motor=0x28; //101000
}
void Mturnleft() //左转
{
motor=0x05; //000101
}
void Mroll() //左反右正转
{
motor=0x35; //110101
}
void Mstop() //停止
{
motor=0x24; //100100
}
void flagtest() //红外检测 1表示无障碍或检测到黑线
{
uchar temp;
temp=test&0x0f; //取P0低四位
switch(temp)
{
case 0x08: //未偏 1000
case 0x0a: // 1010
flag=0;
break;
case 0x0c: //偏左 1100
case 0x0e: // 1110
flag=1;
break;
case 0x09: //偏右 1001
case 0x0b: // 1011
flag=2;
break;
case 0x0d: //终点 1101
case 0x0f: // 1111
flag=3;
break;
case 0x00: //有障碍 P0^3=0
case 0x01:
case 0x02:
case 0x03:
case 0x04:
case 0x05:
case 0x06:
case 0x07:
flag=4;
break;
default:
break;
}
}
void main() //主函数
{
flagtest();
switch(flag)
{
case 0:
Mforward();
break;
case 1:
Mturnleft();
break;
case 2:
Mturnright();
break;
case 3:
Mroll();
break;
case 4:
Mstop();
break;
}
}
你的主函数中while(1)循环哪里去了?程序就只判断一次就不知道飞哪里去,然后估计就是你现在的情况了!
单片机上电后都是为高电平,说明你的程序没起作用。
对啊·但是我就是没有找到哪里有bug··很郁闷
用keil仿真运行啊
keil运行不太会哎···能否帮我运行下看看?THANKYOU !
真的没加while
其中的一段,只是循迹什么的
只判断一次难道就没有输出了?
没明白我的意思?没有while循环的话,程序就只执行一次,就不知道跑哪了。