单片机控制步进电机程序c语言正反转停止,51单片机控制步进电机正反转并实现调速的程序设计…

单片机控制步进电机程序c语言正反转停止,51单片机控制步进电机正反转并实现调速的程序设计…这是一款51单片机控制步进电机正反转的程序,同时还能实现调速。#include”reg51.h“#include“intrins.h”#defineucharunsignedchar#defineuintunsignedint#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};unsignedcharcodeFFW[8]…

大家好,又见面了,我是你们的朋友全栈君。

这是一款51单片机控制步进电机正反转的程序,同时还能实现调速。

#include”reg51.h“

#include “intrins.h”

#define uchar unsigned char

#define uint unsigned int

#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};

unsigned char code FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; //??

unsigned char code REV[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe}; //??

//unsigned char code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //??

//unsigned char code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //??

90f34ab3e75d4a6eaaa7fa1719efa93d.png

sbit K1 = P3^2; //?????

sbit K2 = P3^3; //????

sbit K3 = P3^4; //????

sbit K4 = P3^5; //????

sbit LCD_RS = P2^0;

sbit LCD_RW = P2^1;

sbit LCD_EN = P2^2;

bit on_off=0; //???????

bit direction=1; //????

bit rate_dr=1; //????

bit snum_dr=1; //????

uchar code cdis1[ ] = {“NO.0738230126 ”};

uchar code cdis2[ ] = {“ 2012/5/24”};

uchar code cdis3[ ] = {“ STOP ”};

uchar code cdis4[ ] = {“NUM: RATE: ”};

uchar code cdis5[ ] = {“ RUNNING ”};

uchar m,v=0,q=0;

uchar number=0,number1=0;

uchar snum=20,snum1=20; //?????

uchar rate=3; //?????

uchar data_temp,data_temP0,data_temp2;

void delay(uint t)

{

uchar k;

while(t–)

{

for(k=0; k《124; k++)

{ }

}

}

void delayB(uchar x) //x*0.14MS

{

uchar i;

while(x–)

{

for (i=0; i《13; i++)

{ }

}

}

bit lcd_busy()

{

bit result;

LCD_RS = 0;

LCD_RW = 1;

LCD_EN = 1;

delayNOP();

result = (bit)(P0&0x80);

LCD_EN = 0;

return(result);

}

void lcd_wcmd(uchar cmd)

{

while(lcd_busy());

LCD_RS = 0;

LCD_RW = 0;

LCD_EN = 0;

_nop_();

_nop_();

P0 = cmd;

delayNOP();

LCD_EN = 1;

delayNOP();

LCD_EN = 0;

}

void lcd_wdat(uchar dat)

{

while(lcd_busy());

LCD_RS = 1;

LCD_RW = 0;

LCD_EN = 0;

P0 = dat;

delayNOP();

LCD_EN = 1;

delayNOP();

LCD_EN = 0;

}

void lcd_init()

{

delay(30);

lcd_wcmd(0x38); //16*2??,5*7??,8???

delay(5);

lcd_wcmd(0x38);

delay(5);

lcd_wcmd(0x38);

delay(5);

lcd_wcmd(0x0c); //???,???

delay(5);

lcd_wcmd(0x06); //????

delay(5);

lcd_wcmd(0x01); //??LCD?????

delay(5);

}

void lcd_pos(uchar pos)

{

lcd_wcmd(pos | 0x80); //????=80+????

}

void LCD_init_DIS()

{

delay(10); //??

lcd_init(); //???LCD

lcd_pos(0); //????????????1???

m = 0;

while(cdis1[m] != ‘’)

{ //????

lcd_wdat(cdis1[m]);

m++;

}

lcd_pos(0x40); //???????????1???

m = 0;

while(cdis2[m] != ‘’)

{

lcd_wdat(cdis2[m]); //????

m++;

}

delay(3000); //??

lcd_pos(0); //????????????1???

m = 0;

while(cdis3[m] != ‘’)

{ //????

lcd_wdat(cdis3[m]);

m++;

}

lcd_pos(0x40); //???????????1???

m = 0;

while(cdis4[m] != ‘’)

{

lcd_wdat(cdis4[m]); //????

m++;

}

for(m=0;m《2;m++)

{

lcd_pos(0x0c+m); //??????

lcd_wdat(0x3e);

}

}

void data_conv()

{

data_temP0=data_temp/10; //??

if(data_temP0==0)

{data_temP0=0x20;} //???0???

else

{data_temP0=data_temP0+0x30;}

data_temp2=data_temp; //??

data_temp2=data_temp2+0x30;

}

void data_dis()

{

data_temp = snum; //????

data_conv();

lcd_pos(0x44);

lcd_wdat(data_temP0);

lcd_pos(0x45);

lcd_wdat(data_temp2);

data_temp = rate; //????

data_conv();

lcd_pos(0x4d);

lcd_wdat(data_temP0);

lcd_pos(0x4e);

lcd_wdat(data_temp2);

}

void motor_DR()

{

if(di

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146240.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dumpbin的使用方法_Dumpbin 工具的使用

    dumpbin的使用方法_Dumpbin 工具的使用sSummary1000.data1000.reloc1000.rsrc8000.textC:\>dumpbinMicrosoft(R)COFFBinaryFileDumperVersion6.00.844Copyright(C)MicrosoftCorp1992-1998.Allrightsresusage:DUMPBIN[options][fil…

    2022年6月19日
    25
  • c语言的条件运算符,条件运算符c语言[通俗易懂]

    c语言的条件运算符,条件运算符c语言[通俗易懂]C语言中条件运算符是什么意思C语言中条件运算符是什么意思?:是什么意思怎么利用呢举例说明条件运算符(?:)是一个三目运算符,即有三个操作数。使用条件运算符(?:)可以实现Ifelse的功能,其一般形式为:表达式1?表达式2:表达式3例如条件语句:if(a>b)max=a;elsemax=b;可用条件表达式写为max=(a>b)?a:b;执…

    2022年10月3日
    2
  • jdk动态代理和cglib动态代理详解

    jdk动态代理和cglib动态代理详解本文内容概括:静态代理概述 基于继承方式实现静态代理 基于聚合方式实现静态代理 jdk动态代理实现 如何实现一个HashMap的动态代理类 cglib动态代理实现 jdk和cglib代理的区别 动态代理和静态代理的区别 spring如何选择jdk和cglib代理如上图,代理模式可分为动态代理和静态代理,我们比较常用的有动态代理中的jdk动态代理和Cglib代理,像spr…

    2022年5月16日
    37
  • MPU9250传感器

    MPU9250内部包括3轴陀螺仪、3轴加速度计和3轴磁力计,这3个功能输出都是16位的数字量;可以通过常用的数据总线(IIC)接口和单片机进行数据交互,传输速率400kHz/s。陀螺仪的角速度测量范围±2000(°/s),具有良好的动态响应特性。加速度计的测量范围最大为±16g(g为重力加速度),静态测量精度高。磁力计采用高灵度霍尔型传感器进行数据采集,磁感应强度测量范围为±4800μT,可用于对偏航角的辅助测量。MPU9250自带的数字运动处理器DMP硬件加速引擎,可

    2022年4月8日
    197
  • “12306”的架构到底有多牛逼?

    “12306”的架构到底有多牛逼?

    2020年11月13日
    196
  • simulink中积分环节、惯性环节、比例环节

    simulink中积分环节、惯性环节、比例环节simulink中积分环节、惯性环节、比例环节的搭建

    2022年9月28日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号