微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > mayday!mayday!智能小车程序存在bug,求助!

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;
}
}


你的主函数中while(1)循环哪里去了?程序就只判断一次就不知道飞哪里去,然后估计就是你现在的情况了!

单片机上电后都是为高电平,说明你的程序没起作用。

对啊·但是我就是没有找到哪里有bug··很郁闷

用keil仿真运行啊

keil运行不太会哎···能否帮我运行下看看?THANKYOU !

真的没加while                    

其中的一段,只是循迹什么的

只判断一次难道就没有输出了?

没明白我的意思?没有while循环的话,程序就只执行一次,就不知道跑哪了。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top