单片机四线步进电机驱动 程序功能:

当按下SW1时步进电机正转,按下SW2后步进电机反转,并可以根据源码任意调节旋转速度和每一个脉冲旋转角度



程序参考源代码如下:

/C语言程序:/
#include <reg52.h> //可用非常成功。
#define uchar unsigned char
#define uint unsigned int

uchar table_begin;
uint maichong; //脉冲
uchar zhuansu; //转速
uchar flag; //方向
sbit key_fuwei=P3^0; //复位键
sbit key_z=P3^1; //正转键
sbit key_f=P3^2; //反转键
sbit key_jia=P3^3; //加速键
sbit key_jian=P3^6; //减速键

sbit A1=P2^0;
sbit A2=P2^1;
sbit A3=P2^2;
sbit A4=P2^3;
void display();
void delayms(xms);

void delay(uchar x)
{
uchar i,j; //延时
for(i=0;i<x;i++)
for(j=100;j>0;j–);
}
void fuwei(void) //复位
{
flag=2;
zhuansu=0;
}
/*void Display(void) //显示
{
unsigned char b1, b2;
b1=zhuansu/10;
b2=zhuansu%10;
if(flag == 0) //0
P0=0x71;//显示F
else
P0=0x79;
A1=0;
delayms(3);
A1=1;

    P0=0x40;A2=0;         //显示--delayms(3);A2=1;P0=table2[b1];A3=0;         //显示十位delayms(3);A3=1;P0=table2[b2];A4=0;delayms(3);   //显示个位A4=1;

} */

void display()
{
uchar b1,b2,b3,b4;
if(flag0)
P0=0x71;//显示F
else
P0=0x79;
if(flag1)
P0=0x7c;//显示b
else
P0=0x71;
b1=10;
b2=0x3f;
b3=zhuansu/10;
b4=zhuansu%10;
//P0=table2;
A1=0; //P2.0
delay(1);
A1=1;
P0=b2;
A2=0; //P2.1
delay(1);
A2=1;
P0=table2[b3];
A3=0; //P2.3
delay(1);
A3=1;
P0=table2[b4];
A4=0; //P2.4
delay(1);
A4=1;
}

void key() //按键扫描
{
if(key_fuwei0)
{
delay(5);
if(key_fuwei0)
fuwei();
}
if(key_z0)
{
delay(5);
if(key_z0)
{
flag=0;
zhuansu=10;
while(key_z0);
}
}
if(key_f0)
{

delay(5);
if(key_f0)
{
flag=1;
zhuansu=10;
while(key_f0);
}
}
if(key_jia0)
{
delay(5);
if(key_jia0)
{
zhuansu++;
if(zhuansu21)
zhuansu=20;
while(key_jia0);
}
}
if(key_jian0)
{
delay(5);
if(key_jian0)
{
zhuansu–;
if(zhuansu<=0)
zhuansu=0;
while(key_jian==0);
}
}
}
void dispose() //脉冲函数
{
switch(zhuansu)
{

case 0: flag=2; break;
case 1: maichong=300; break;
case 2: maichong=295; break;
case 3: maichong=290; break;
case 4: maichong=280; break;
case 5: maichong=260; break;
case 6: maichong=240; break;
case 7: maichong=200; break;
case 8: maichong=180; break;
case 9: maichong=160; break;
case 10: maichong=120; break;
case 11: maichong=80; break;
case 12: maichong=70; break;
case 13: maichong=60; break;
case 14: maichong=40; break;
case 15: maichong=35; break;
case 16: maichong=30; break;
case 17: maichong=25; break;
case 18: maichong=20; break;
case 19: maichong=15; break;
case 20: maichong=10; break;

}
if(flag0)
table_begin=0;
else
if(flag1)
table_begin=4;
}
void zhuandong(void)
{
uint i,j;
if(zhuansu>0&&zhuansu<=20)
{
for(j=0+table_begin;j<4+table_begin;j++)
{
P1=table1[j];
for(i=0;i<maichong;i++)
display();
}
}
}
……………………


最后,如果有什么意见或者建议欢迎您留言给我,让我们共同学习一起进步,
如果需要 程序完整源代码和 设计文件,请在下方留言或者私信我,看到后会第一时间回复。

谢谢!

单片机四线步进电机驱动 PROTEUS 和51单片机教程(附仿真文件+源代码)相关推荐

  1. 51单片机控制的LOVE心形创意彩灯 PROTEUS 和51单片机教程(附仿真文件+源代码)

    51单片机控制的LOVE心形创意彩灯 PROTEUS 和51单片机教程附仿真文件截图 单片机控制的LOVE心形创意彩灯 参考源代码 ORG 0000H LJMP START ORG 0030H ;初始 ...

  2. 单片机控制蜂鸣器唱生日快乐歌曲 PROTEUS 和51单片机教程(附仿真文件+源代码)

    功能:按一下开关后,单片机控制蜂鸣器唱生日快乐歌曲 PROTEUS 和51单片机教程 单片机控制蜂鸣器唱生日快乐歌曲 程序源代码如下: /* 生日歌 */ #include <reg51.h&g ...

  3. 51单片机 16X192点阵程序动态显示汉字 PROTEUS 和51单片机教程(附仿真文件+源代码)

    51单片机 16X192点阵程序动态显示任意汉字 程序参考源代码如下: #include<AT89X52.H> sbit ST=P3^5; sbit E1=P3^4; sbit MR=P3 ...

  4. 数码管显示拨码开关编码 PROTEUS 和51单片机教程(附仿真文件+源代码)

    功能: 数码管显示拨码开关编码 (当八个拨码开关拨到不同位置时候,三位数码管会显示不同的编码 供参考代码如下: /* 数码管显示拨码开关编码 */ #include <reg51.h> t ...

  5. 基于51单片机的步进电机驱动,亲测无误

    文章目录 前言 一.我们该如何实现电机驱动? 二.驱动实现 1.硬件准备 2.软件编写 3.实物 总结 前言 这一次要分享的项目是最近接单做的一个小玩意儿,基于51单片机的步进电机驱动.最近积压了两个 ...

  6. hc05与单片机连接图_基于proteus的51单片机开发实例(13)-LED指示那个按键被按下

    1. 基于proteus的51单片机开发实例(13)-LED指示那个按键被按下 1.1. 实验目的 本实例将实现两路外部中断的检测和识别,让我们能够更好地理解51单片机的外部中断以及中断优先级的概念. ...

  7. c++程序设计_基于proteus的51单片机开发实例30-模块化程序设计

    1. 基于proteus的51单片机开发实例30-模块化程序设计 1.1. 实验目的 模块化程序设计 不知不觉我们的51单片机开发实例已经进行到第三十篇了,是时候进行一个总结和反思了,总结什么?反思什 ...

  8. c51中断优先级c语言,基于proteus的51单片机开发实例(14)中断嵌套和中断优先级...

    1. 基于proteus的51单片机开发实例(14)中断嵌套和中断优先级 1.1. 实验目的 在前面实例中我们已经学习了51单片机的定时器/计数器中断,外部中断,通过这些实例,知道了中断电路的设计,中 ...

  9. hc05与单片机连接图_基于proteus的51单片机开发实例37-DAC0832

    学习手记 1. 基于proteus的51单片机开发实例37-DAC0832 1.1. 实验目的 之前我们学习了数模转换芯片DAC0808,今天我们继续学习另一种D/A转换芯片DAC0832. 1.2. ...

最新文章

  1. 专栏 | 机器学习 - 最大似然估计
  2. 如何把字符串类型转换成整型?
  3. 【自动驾驶】33.【图像坐标系】 到 【像素坐标系】 的度量单位变换、【英寸】、【感光芯片】
  4. 关于浏览器对静态HTML页面的缓存问题
  5. Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.... 此错误的解
  6. 1024到了,默默给自己点个赞!
  7. [html] 说说你对影子(Shadow)DOM的了解
  8. python怎么把写在一个文件的类导入另一个文件_跟我一起自学python语言 第9章 类(9.4 导入类)...
  9. [转]关闭不必要端口 让电脑固若金汤
  10. C#基础系列:实现自己的ORM(构造我自己的ORM)
  11. Python 文件(文件夹)匹配(glob模块)(转载)
  12. 6阶子群同构于s3或者z6_顾沛《抽象代数》1.6变换群与置换群习题解答
  13. DHCP自动分配IP地址
  14. 母亲节,表格交给我们,你早点回家
  15. iOS 单元测试 Tests 和 UITests
  16. 大学计算机教程内容,大学计算机基础教程(教程).ppt
  17. 蓝桥杯算法--计算纪念日
  18. Matlab似然比检验函数,似然比检验 LRT
  19. DW与JavaScript
  20. cds云服务器_云探CDS拨测服务全面上线

热门文章

  1. 幼儿园校园广播系统(IP网络广播)方案
  2. 将系统(deepin15.11)装进U盘里面,在任何电脑上即插即用,使用自己的系统
  3. Java异步编程指南
  4. 第五章 Kettle数据的清洗与检验
  5. curl多线程批量请求
  6. 2021CFA一级二级三级预测 结合十余年实践总结
  7. 【网络安全入门】SQL注入是什么?SQL注入危害有哪些?
  8. 【RPG Maker MV】使用技巧1:用自己绘制的图片当做地图
  9. 打造自己的LoRaWAN网关,进阶3:设参运维
  10. android手机Down版本