51单片机驱动步进电机,能正反转,键盘调速,数码管显示转速

来自:    更新日期:早些时候
51单片机用四个按键同时控制数码管和步进电机,按键作为加减器,数码管显示加减后数字,按确认键后步进电机~

#include "reg52.h"

void delay(unsigned int t);

//Motor
sbit F1 = P1^0;
sbit F2 = P1^1;
sbit F3 = P1^2;
sbit F4 = P1^3;

unsigned char code FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; //反转
unsigned char code FFZ[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe}; //正转
unsigned int K;


/**********************************************************************
* *
* 步进电机驱动 *
* *
***********************************************************************/
void motor_ffw()
{
unsigned char i;
unsigned int j;
for (j=0; j<12; j++) //转1*n圈
{

for (i=0; i<8; i++) //一个周期转30度
{
if(K==1) P1 = FFW[i]&0x1f; //取数据
if(K==2) P1 = FFZ[i]&0x1f;
delay(5); //调节转速
}
}
}

/******************************************************
*
* 延时程序
*
********************************************************/
void delay(unsigned int t)
{
unsigned int k;
while(t--)
{
for(k=0; k<80; k++)
{ }
}
}


main()
{
while(1)
{
K=1;
motor_ffw();
K=2;
motor_ffw();

}
}

不可以的,给你分析分析:点亮一个发光diode,需要驱动电流至少5-10mA.而C51单片机的I/O口输出的电流在1mA左右。要想有提供大电流就需要在I/O口和diode之间加入一个电源,而一个加入一个电源之后,电流实在有点大,diode可受不了。那就只好在电源上在串一个电阻,电阻值的大小如何选,凭楼主的智慧应该可以算出来的。给个提示,一般上拉电阻值K级以上。

#include "reg52.h"
void delay(unsigned int t);

sbit F1 = P1^0;
sbit F2 = P1^1;
sbit F3 = P1^2;
sbit F4 = P1^3;
unsigned char code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; //反转
unsigned char code FFZ[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; //正转
unsigned int K;

void motor_ffw()
{
unsigned char i;
unsigned int j;
for (j=0; j<12; j++) //转1*n圈
{
for (i=0; i<8; i++) //一个周期转30度
{
if(K==1) P1 = FFW[i]&0x1f; //取数据
if(K==2) P1 = FFZ[i]&0x1f;
delay(20); //调节转速
}
}
}

void delay(unsigned int t)
{
unsigned int k;
while(t--)
{
for(k=0; k<80; k++)
{ }
}
}

main()
{
while(1)
{
K=1;
motor_ffw();
K=2;
motor_ffw();
}
}


51单片机驱动步进电机,能正反转,键盘调速,数码管显示转速视频

相关评论:
  • 18490784801在51单片机中,如何用一个按键实现步进电机的正反转?驱动芯片用的是ULN2...
    应浦邰在程序里定义一个位变量flag,按下按键时对它取反,若flag为1则正转,为0则反转,就可以了

  • 1849078480151单片机控制L298N驱动两相步进电机
    应浦邰2、一个线圈没电。试试单独接一个线圈,找出没电的线圈,看是否电路问题,比如对应线圈的EN脚的电平是否正常,还是接触不良。还有一个极小的可能是电机烧了一个线圈,用万用表测一下两个线圈的电阻,如果悬殊太大就说明一个线圈烧了。3、驱动电流不足,电压太低。4、启动频率太高(这个一般会傍有...

  • 18490784801求51单片机步进电动机控制设计程序
    应浦邰如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。(3)控制51单片步进电机的速度 如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。两个脉冲的间隔越短,步进电机就转得越快。调整单片机发出的脉冲频率,就可以对步进电机进行调速。步进电机是...

  • 1849078480151单片机控制电机转速
    应浦邰前天帮别人做了一个,还可以显示当前速度,和设置的速度,4X4键盘(16个按键),设置速度可直接输入,有正转,反转,启动,停止,和加速,减速功能

  • 18490784801怎样用51单片机接两相步进电机驱动器来控制步进电机?
    应浦邰脉冲信号就是像流水灯差不多,用两个口。例如:用到P1^0和P1^1;把P10制低电平,P11制高电平,延时一段时间后,P10制高电平 P11制低电平,如此循环,看程序:include "reg52.h"sbit P10=P1^0;sbit P11=P1^1;void delay(unsigned int x)P10=0;P11=1;delay(1000);P10=1;P11=0;delay(...

  • 18490784801求51单片机控制步进电机,实现其间歇运动的程序,最好要有C语言的_百度...
    应浦邰\/\/ \/\/bit flag;\/\/正反转标志 void delayus(unsigned int t) \/\/延时函数 { while(--t);} void delayms(unsigned int t) \/\/毫秒级延时 { unsigned int i,j;for(i=t;i>0;i--)for(j=110;j>0;j--);} void qudong(unsigned char t,bit flag) \/\/ t范围0~4控制转速,flag...

  • 18490784801这是51单片机驱动ULN2003控制步进电机正反转的程序,我想学习下'我想问...
    应浦邰程序是P0,附图是P1肯定不能实现

  • 18490784801有问题请教,用51单片机来控制步进电机加压,压力传感器反馈给单片机...
    应浦邰步进电机的运动是“步进”,压力传感器的“变形”是连续的而且变形量非常之小,在很大范围内不能稳定(不仅仅是一个临界“点”)。解决的方法是:1》在要求不高的情况下,用弹簧连接丝杆与传感器,并且丝杆导程尽量选小点,步进驱动器细分尽量高点,弹簧的弹性系数尽量小点。2》在要求较高的场合,利用...

  • 1849078480151单片机控制二相四线步进电机程序
    应浦邰include<reg52.h>\/\/头文件 sbit A1=P1^0;\/\/定义A线圈正端口 sbit A2=P1^1;\/\/定义A线圈负端口 sbit B1=P1^2;\/\/定义B线圈正端口 sbit B2=P1^3;\/\/定义B线圈负端口 sbit en1=P2^0;sbit en2=P2^1;int t=0;define F1 {A1=1;B1=0;A2=0;B2=0;} \/\/A线圈通正向电压 define ...

  • 1849078480151单片机驱动步进电机,用什么驱动芯片性能最好?
    应浦邰看驱动多大的电机,如果电机工作电流是100mA左右可以考虑用2003,如果电流比较考虑其他专用芯片。

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网