一、当小车各模块电路接通时,运行小车程序,判断前方是否有障碍物;
若无障碍物,则向前行驶;
若有障碍物则判断障碍物时左边还是右边;
若障碍物是右边的,则控制小车向左转,反之,若障碍物时左边的,则小车向右转。
二、小车运动状态和轮子关系
三、Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统。
1、打开Keil软件后,点击Project--New Project,可以新建一个工程。
2、点击后在出现的对话框中选择工程存在路径,单击保存,出现界面。在此界面上选择电路板上所用的单片机型号(如图所示),单击“确定”。
3、设置完成后,软件会提示是否将8051上电初始化程序添加入工程。这个一般选“否”。这样就建立好了一个空的51工程。
4、点击File--New,便建立了一个空的文本框。
5、到现在为止,就可以开始在里面输入代码了。保存时注意:如果是用C语言写的程序,则将文本保存成*.c。
6、将写完的程序添加到工程里面,如图所示,在左边Project Workspace里的Source Group 1上右击,选择Add Files to Group ‟Source Group 1‟。在打开的对话框
中,选择刚存的文件路径和对应的扩展名。此时,程序就添加进了这个工程。
7、下一步就开始编译刚输入进去的代码。接着,Keil会打出下面的提示:
0 Error(s), 0 Warning(s).
建立工程的时候,默认是不生成HEX文件的,得在编译做如下设置:
在Project Workspace里Target 1上右击,选择“Options for Target „Target 1”
。出现如图所示对话框,选择“Output”按图示,将箭头所指的多选框勾上,点“确定”。
现在再点击重新编译,就会在工程所在文件夹里生成HEX文件。再利用下载软件,将HEX文件下载到单片机中进行调试。
四、小车程序如下:
啊实打实大师的撒
#include<reg51.h>
#define sen_port P1
sbit SEN1=P1^0;
sbit SEN2=P1^1;
sbit EN1=P2^2;
sbit IN1=P2^3;
sbit IN2=P2^4;
sbit EN2=P2^5;
sbit IN3=P2^6;
sbit IN4=P2^7;
void delay(int n) //延时子程序
{
unsigned char i,j,k;
for(i=n;i>0;i--)
for(j=100;j>0;j--)
for(k=200;k>0;k--);
}
unsigned char sensor_inp()
{
unsigned char sensor;
sensor = sen_port;
sensor &= 0x03;
P0 = sensor;
return sensor;
}
void forward() //two motos are runing forward
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
EN1=1;
EN2=1;
}
void backward() //two motos are runing backward
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
EN1=1;
EN2=1;
}
void turn_left() //left moto is runing, but right moto is brake
{
IN1=1;
IN2=0;
IN3=0;
IN4=0;
EN1=1;
EN2=1;
}
void rotate_left() //right moto is runing forward, and left moto is running backward
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
EN1=1;
EN2=1;
}
void turn_right() //right moto is runing, but left moto is brake
{
IN1=0;
IN2=0;
IN3=1;
IN4=0;
EN1=1;
EN2=1;
}
void rotate_right() //left moto is running forward, and right moto is running backward
{
IN1=0;
IN2=1;
IN3=1;
IN4=0;
EN1=1;
EN2=1;
}
void free() //two motos is free
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
EN1=0;
EN2=0;
}
void stop() //two motos stop
{
IN1=1;
IN2=1;
IN3=1;
IN4=1;
EN1=1;
EN2=1;
}
void main(void)
{
delay(10);
P0=0x55;
while(1)
{
// P0=P1;
// delay(100); forward();
// delay(100); stop();
delay(100); backward();
delay(100); stop();
delay(100); turn_left();
delay(100); stop();
delay(100); turn_right();
delay(100); stop();
delay(100); rotate_left();
delay(100); stop();
delay(100); rotate_right();
delay(100); stop();
delay(100); stop();
delay(20); forward();
delay(20); backward();
delay(20);
/*
*/
}
}
这个是没有加传感器的,你试着加上传感器改一下
单片机控制电机正反转动的c语言程序~
首先要看你的电机是直流电机还是步进电机。直流电机就简单了,只有两根线,电机两端电压正负极改变就可以实现正转反转。不过要加电机驱动芯片,或者H桥电路,电机驱动芯片可以选择L298N,加上适当的外围电路就可以直接用单片机控制电机了。比如让单片机P1.0 = 0,P1.1 = 1;(单片机I/0口要与电机驱动芯片的输入脚相连)这样的话,电机驱动芯片就会输出一个电压差,可以使直流电机向一个方向转,如果使P1.0 = 1,P1.1 = 0,则电机驱动芯片会输出一个和刚才相反的电压,使电机向相反的方向转动。H桥电路和电机驱动芯片的原理差不多,网上多的是。我这说的只是简单的原理,实际中,L298N的输入端和单片机相连的时候要加光耦隔离,否则单片机会工作不正常。步进电机就稍微复杂点,也得需要电机驱动芯片才行,只不过控制信号是按一定的规律给的,规律变了,电机转动的方向也就变了。楼上给出的貌似是步进电机的驱动程序。
把这个n位数当成字符串操作,很简单char s[10]={"\0"};int len=0,i;scanf("%s",s);len=strlen(s);printf("
");for(i=len-1;i>=0;i--){printf("%c",s[i]);}
#18211302803#
用51单片机产生PWM控制直流小电机 ******
#岳音# #define setbit(x,y) (x|=(1<<y)) #define clrbit(x,y) (x&=~(1<<y)) #define getbit(x,y) (x&(1<<y)) void forward(unsigned char speedl,unsigned char speedr) { unsigned char j; setbit(P0,4); clrbit(P0,3); setbit(P0,7); clrbit(P0,5); for(j=0;j<=100;j++)...
#18211302803#
单片机小车,为什么用c语言编出来的程序,烧录到小车上,实现的功能和预料中的不一样呢?51单片机小车 - ******
#岳音# 嗯!你的程序流程看了,左转、右转,后加一个延时,然后电动机停止,这样,你的小车可以转动一个角度,至于多大,你可以通过延时的时间调整,具体效果,需要测试!
#18211302803#
用单片机控制一个四个电机驱动的四轮车,如何实现原地打转 - ******
#岳音# 大致思路是同侧轮同向转,异侧轮异向转,比如左侧轮都向后,右侧轮都向前 但是实现真正的"原地转"需要对不同轮的速度进行调速尝试 原地转的话用两轮驱动+1个万向轮小车很容易实现
#18211302803#
上位机编写的软件控制下位机的界面叫什么?这种软件是用什么语言的软件编的,C语言可以编吗 - ******
#岳音# 在淘宝里面搜小车电机驱动模块,一般的卖家都会有这个软件,常常连接串口对电机进行控制,编写起来也很简单,但要熟悉串口
#18211302803#
跪求寻迹小车c程序, 用89s51单片机控制的 用3个043W封装的反射红外传感器寻迹 通过左右轮速度差转向 ******
#岳音# //=====================================================================// // 寻迹与直流电机驱动演示程序 // // 本程序通过前方的红外探头来检测地面的信号,根据道路的要求,当道路为白 // // 色时,红外接收到信号,与地面检测...
#18211302803#
请C语言编程高手们帮我设计个步进电机正转程序,不胜感激! - ******
#岳音# 这个要看你的电机驱动是什么了,不同的驱动电路或者驱动器的编程是不一样的 #include #define unit unsigned int#define uchar unsigned char sbit key = P1^1; //定义键盘接线口 unsigned char code F_Rotation[4]={0x01,0x02,0x04,0x08}; //正...
#18211302803#
步进电机297 298驱动程序 - ******
#岳音# 最近正好自己在搞一个小车,经过测试了,可用,有不懂得地方再联系:驱动用的l298n.#include<reg52.h>#define uchar unsigned char #define uint unsigned int uchar rec_int_flag=0; void delay_ms(uint x); void motor_con(uchar angle,uchar ...
#18211302803#
进电机四轮驱动,实现 前进 后退 停止等功能; 用C语言如何实现~本人现在实现了..正转..反转..... - ******
#岳音# 步进电机吗?你i/o口不再赋值,它马上就停止啦,加速的话把延时缩短就是拉.直流电机的话,通过调节pwm的占空比就可以实现调速 .
#18211302803#
循迹避障小车C语言编程 - ******
#岳音# 利用红外传感器接收障碍物信号..用2路PWM对俩电机进行调速..实现转弯和前进. 不知道障碍物是什么样的..所以传感器你最好找个好位置装好.这个直接影响整体效果..
#18211302803#
这个C语言怎样驱动这个步进电机的 - ******
#岳音# 4相电机,控制连接单片机不同的IO口, 逐个逐个给电平,就可以转动了!