基于移动小车驱动电机运转的C语言程序

一、当小车各模块电路接通时,运行小车程序,判断前方是否有障碍物;

若无障碍物,则向前行驶;

若有障碍物则判断障碍物时左边还是右边;

若障碍物是右边的,则控制小车向左转,反之,若障碍物时左边的,则小车向右转。

二、小车运动状态和轮子关系

三、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&lt;&lt;y)) #define clrbit(x,y) (x&=~(1&lt;&lt;y)) #define getbit(x,y) (x&(1&lt;&lt;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&lt;=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口, 逐个逐个给电平,就可以转动了!

  • 行程开关如何编入C程序中?如何在C语言中体现出来?
  • 答:int motion()//小车运行,自己加码吧 int reset();//复位 int checkswitch();//检测开关状态触发时返回1,否则返回0 UINT inspect(void* p)//监控线程 {int cnt0=10;//重复次数 int cnt=0;//触发次数 do { if(checkswitch())//触发了么 { cnt++;//次数加一 if(cnt==cnt0)//等于...

  • 求keil-c51单片机控制步进电机运行的点动程序,一定要是点动功能的程序...
  • 答:include<reg51.h> define uchar unsigned char uchar step[]={0x08,0x0a,0x02,0x66,0x04,0x05,0x01,0x09};//根据实际电路调整数据 sbit key=P1^0;uchar num;main(){ uchar i;num=0;while(1){ while(key);//等待按键 while(!key);//等待键抬起 num++;//计数值加1 num&=0x07;/...

  • 步进电机28BYJ48的C语言程序问题
  • 答:上面是2相4拍的控制字,正转的顺序是A-B-C-D-A,下面是2相8拍的控制字,正转的顺序是A-AB-B-BC-C-CD-D-DA-A。步距角下面是上面的一半。

  • 51单片机C语言程序按键控制步进电机转速
  • 答:sbit K1=P1^0;sbit K2=P1^1;char y=0;while(1){ pangduan();for(i=0;i<4;i++) //4相 { /*P1=F_Rotation[i]; //输出对应的相 可以自行换成反转表格 Delay(500); //改变这个参数可以调整电机转速 Delay(5000);*/ P1=B_Rotation[i];Delay(265+y);P1=F_Rotation[i];De...

  • 求单片机控制步进电机的C语言程序,急啊
  • 答:include <reg52.h> define uchar unsigned char define uint unsigned int sbit KEY1 = P3^2; //步进电机逆时针方向转 sbit KEY2 = P3^3; //步进电机顺时针方向转 sbit KEY3 = P3^4; //步进电机调速 uchar step = 0;bit AB_flag = 0;unsigned char code A_Rotation[8]={...

  • 电气控制与C语言
  • 答:直流电机则受两个继电器KMR和KML的常开主触头CR和CL控制,CR接通时直流电机反转,CL接通时直流电机正转;使SR和SL分别控制继电器KMR和KML的得电,记住得电回路需要互锁;则当直流电机启动并正转,控制的小车运动到右边,触发SR时,KMR得电,KML失电,CR闭合,电机反转,带动小车往回运动至左边,触发SL时...

  • 用单片机控制一个四个电机驱动的四轮车,如何实现原地打转
  • 答:需要有单片机,需要电机驱动。需要一辆小车。需要学会c语言。控制电机驱动,应该有4个IO。让左轮前进右轮后退,或者右轮前进左轮后退就可以实现原地打转(剑刃风暴)注:左轮包括左边轮子的前后轮。

  • 单片机C语言程序怎么控制电动机
  • 答:步进电机(5V)与在单片机之间要加个驱动芯片,如ULN2803等,单片机通过程序产生PWM输出四拍或八拍控制波,( 四拍的驱动正转顺序为A-B-C-D-A,八拍的驱动正转顺序为A-AB-B-BC-C-CD-D-DA-A),步进电机就转起来了。单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把...

  • 步进电机控制,C语言程序,控制电机的正反转,加速,但是在仿真的时候提示程...
  • 答:好好学 还是有救的,中断函数应该这样写:void tim0 interrupt1(),其实好像没有语法错误,不过你的中断没有赋值,根本不会去执行, TH0=(65536-1000)/256;TL0=(65536-1000)%256;这两句话加上,这个是定时多长时间进中断一次,开定时器0先开总中断EA=1;然后开定时器0中断ET0=1;再开定时...

  • 关于C8051单片机控制电机转动的编程
  • 答:sbit KEY3 = P3^4; //步进电机调速 uchar step = 0;bit AB_flag = 0;unsigned char code A_Rotation[8]={0x08,0x18,0x10,0x30,0x20,0x60,0x40,0x48}; //顺时针转表格 unsigned char code B_Rotation[8]={0x48,0x40,0x60,0x20,0x30,0x10,0x18,0x08}; //逆时针转...

    为传递更多家电数码信息,若有事情请联系
    数码大全网