历史上的今天
返回首页

历史上的今天

今天是:2024年12月11日(星期三)

正在发生

2019年12月11日 | 单片机+ULN2003A步进电机控制系统(正反转+加减速)

2019-12-11 来源:51hei

51单片机步进电机的正反转。加减速控制
电路原理图如下:
原理图分解.jpg?imageView2/2/w/550

仿真原理图如下
0.png?imageView2/2/w/550 

单片机源程序如下:

#include

#include

#include


#define uchar unsigned char

#define uint unsigned int


sbit RS = P2^4;//1602数据/命令选择端(H:数据寄存器L:指令寄存器) 

sbit RW = P2^5;//1602读/写选择端 

sbit E  = P2^6;//1602使能信号端


sbit key1=P3^0;//用户按键

sbit key2=P3^1;

sbit key3=P3^2;

sbit key4=P3^3;

sbit key5=P3^4;


uchar code B_Rotation[8]={0x7f,0x3f,0xbf,0x9f,0xdf,0xcf,0xef,0x6f}; //反转表格

uchar code F_Rotation[8]={0xef,0xcf,0xdf,0x9f,0xbf,0x3f,0x7f,0x6f}; //正转表格



uchar table1[]="dir: +  spe:005";

uchar table2[]="cir:000 ang:000";


uchar num;

uint key,flag,speed=5,zflag,znum,fflag,fnum,select,pp,qq;

//1键值2键值标志3速度4正转标志5正转圈数6反转标志7反转圈数8正转角度9反转角度10选择

float zang,fang;

/******************************************************************/

/*                    延时函数 Xms                                   */

/******************************************************************/

void delay(uint z)

{

        uint x,y;

        for(x=z;x>0;x--)

                for(y=110;y>0;y--);

}

/******************************************************************/

/*                   LCD1602写命令操作                            */

/******************************************************************/

void WriteCommand(uchar com)

{

        delay(5);//操作前短暂延时,保证信号稳定

        E=0;

        RS=0;

        RW=0;

        P0=com;

        E=1;

        delay(5);

        E=0;

}

/******************************************************************/

/*                   LCD1602写数据操作                            */

/******************************************************************/

void WriteData(uchar dat)

{

        delay(5);  //操作前短暂延时,保证信号稳定

        E=0;

        RS=1;

        RW=0;

        P0=dat;

        E=1;

        delay(5);

        E=0;

}

/******************************************************************/

/*                           1602初始化程序                       */

/******************************************************************/

void InitLcd()//1602初始化程序

{

        delay(15);

        WriteCommand(0x38); //display mode

        WriteCommand(0x38); //display mode

        WriteCommand(0x38); //display mode

        WriteCommand(0x06); //当读或写一个字符后地址指针加一,且光标加一

        WriteCommand(0x0c); //显示开及光标不显示

        WriteCommand(0x01); //清屏


        WriteCommand(0x80);

        for(num=0;num<15;num++)//第一行的显示

        {

                WriteData(table1[num]);

                delay(15);

        }

        WriteCommand(0x80+0x40);//第二行的显示

        for(num=0;num<15;num++)

        {

                WriteData(table2[num]);

                delay(15);

        }


}

/******************************************************************/

/*              独立键盘扫描函数                                  */

/******************************************************************/

void keyscan()  

{        

        

        P3=0xff;//拉高P3口,以读取P3口的值

        if(key1==0)//键1被按下

        {

                delay(5);//延时消抖

                if(key1==0)

                {

                        flag=1;

                }

                while(!key1);

                delay(5);//延时消抖

                while(!key1);//松手检测

        }

        if(key2==0)

        {

                delay(5);

                if(key2==0)

                {

                        flag=2;

                }

                while(!key2);

                delay(5);

                while(!key2);

        }

        if(key3==0)//键1被按下

        {

                delay(5);//延时消抖

                if(key3==0)

                {

                        flag=3;

                }

                while(!key3);

                delay(5);//延时消抖

                while(!key3);//松手检测

        }

        if(key4==0)

        {

                delay(5);

                if(key4==0)

                {

                        flag=4;

                }

                while(!key4);

                delay(5);

                while(!key4);

        }

        if(key5==0)

        {

                delay(5);

                if(key5==0)

                {

                        flag=5;

                }

                while(!key5);

                delay(5);

                while(!key5);

        }

}

/******************************************************************/

/*                           1602显示3位数                       */

/******************************************************************/

void write_sfm(uchar add,uint date)//1602显示

{

        uchar bai,shi,ge;

        bai=date/100;

        shi=date%100/10;

        ge=date%10;

        WriteCommand(0x80+add);//设置数据地址指针

        WriteData(0x30+bai);

        WriteData(0x30+shi);

        WriteData(0x30+ge);

        WriteData(0x20);

}

/******************************************************************/

/*                           键值处理                             */

/******************************************************************/

void handle_flag() 

{        


        uchar select1;

        if(TR0==0&&TR1==0)

        {        

                if(flag==1) //正转

                {

                        WriteCommand(0x80+0x05);

                        WriteData('+');

                        delay(20);

                        select=0;

                }

                if(flag==2) //反转

                {

                        WriteCommand(0x80+0x05);

                        WriteData('-');

                        delay(20);

推荐阅读

史海拾趣

EA Elektro-Automatik公司的发展小趣事

EA Elektro-Automatik深知持续创新是企业发展的重要动力。因此,公司始终将创新作为企业文化的核心价值观之一。公司鼓励员工积极提出创新想法和解决方案,并为他们提供充分的支持和资源。此外,EA Elektro-Automatik还积极参与各类科研项目和行业标准的制定工作,推动整个行业的创新和发展。这种企业文化不仅为公司带来了更多的机会和挑战,也为企业的长期发展奠定了坚实的基础。

以上是关于EA Elektro-Automatik公司在电子行业发展的5个相关故事。这些故事展示了公司从创立到成为全球知名电子测量品牌的发展历程和取得的成就。

E-San Electronic Co Ltd公司的发展小趣事

随着全球环保意识的提高和可持续发展的呼声日益高涨,E-San Electronic Co Ltd积极响应这一趋势,将环保和可持续发展理念融入企业的日常运营中。公司采用环保材料和节能技术生产电子产品,减少了对环境的污染和资源的浪费。同时,公司还积极参与各种环保公益活动和社会责任项目,为社会做出了积极的贡献。这些举措不仅提升了企业的社会形象和声誉,也为企业赢得了更多消费者的信任和支持。

恒连电子(EVERCOM)公司的发展小趣事

在恒连电子的发展历程中,技术突破和产品创新始终是公司发展的核心动力。公司投入大量资金和资源进行技术研发,不断推出具有竞争力的新产品。其中,一款具有自主知识产权的智能芯片成为了公司的明星产品,不仅提升了产品的整体性能,还为公司带来了可观的利润。此外,恒连电子还注重产品的多元化发展,不断拓展产品线,满足市场的多样化需求。

ADLINK公司的发展小趣事

在恒连电子的发展历程中,技术突破和产品创新始终是公司发展的核心动力。公司投入大量资金和资源进行技术研发,不断推出具有竞争力的新产品。其中,一款具有自主知识产权的智能芯片成为了公司的明星产品,不仅提升了产品的整体性能,还为公司带来了可观的利润。此外,恒连电子还注重产品的多元化发展,不断拓展产品线,满足市场的多样化需求。

CML Microcircuits公司的发展小趣事

在1968年,电子行业正迎来一场技术革新。在这个充满机遇的时代,CML Microcircuits公司应运而生。初创时期的CML专注于研发单芯片解决方案,而不是传统的标准组件组合。这一创新理念使CML在行业中脱颖而出。公司的第一个产品——频率敏感开关,凭借其卓越的性能和可靠性,迅速赢得了市场的认可。这款产品不仅销售了30多年,而且至今仍在某些应用中发挥着关键作用。

General Magnetics Inc公司的发展小趣事
在电子变压器电路中安装过流、过压、过热等保护装置,以防止因异常情况导致的损坏。

问答坊 | AI 解惑

给需要各学科视频教程的坛友推荐一个视频教学资料网站

http://www.abab123.com/bbs/down.asp?html=1316213 今天晚上我在网上找到的一个网站,里面有很多课程的视频教程,当然也包括电子学科,所以我来推荐一下。直接链接进去就可以看到了, 反正我觉得对我这样的学生很有用。呵呵!共享了~~~~~…

查看全部问答>

看arm汇编遇到的几个问题,请各位达人讲解,谢谢!

1.汇编程序调用C程序 C_add.c #include int g(int a,int b ,int c, int d ,int e) { return (a+b+c+d+e); } ARM_add.s AREA ARM_add,CODE ,READONLY EXPORT ARM_add IMPORT g ENTRY STR LR ,[SP,#-4]!  ;保存返回地址 MOV ...…

查看全部问答>

c# ftp客户端 ?

wince5,在C#下如何开发ftp客户端?…

查看全部问答>

用51芯片做一个自动剃头机

本人想用51 芯片控制剃头机,既一个自动手来控制刀片,想请教一下高手象这样的程序该如何来编.…

查看全部问答>

香主,关于如何实现IAP功能的若干疑问。。。

                                  …

查看全部问答>

发一个基于uc/os的流水灯例子能在3合1上运行

                                  …

查看全部问答>

关于STM32ADC用DMA采多通道时数据错位的问题

STM32 的ADC 施加干扰时应该是ADC的配置参数丢失了,所以数据会放错误,而一旦错误就一直错下去(即使干扰消失),除非重新上电复位,重新初始化ADC,现在我只能在每个周波20ms重新初始化ADC,这样再加干扰时就不会出现数据错位,产品的问 ...…

查看全部问答>

128 捕捉模式

谁能指教一下 128的捕捉输入…

查看全部问答>

嵌入式之路该怎么走?

我是自动化专业的,九月份就大三了。大二期间学过C语言和51单片机,自我感觉理论知识还学得不错,编程上可能实践少了点。在我哥的建议下我正在学AVR单片机,感觉和51单片机差不多,只是资源多一点罢了!不知道我理解得对不对?但自己真正想做一个项 ...…

查看全部问答>

09.22【每周讨论】这么便宜啊,真有这样的活动吗?

【EEWORLD全球独家】TI 原装MSP430 LaunchPad千人大团购!!! 25元包邮!!!   我看到这个活动的第一个感觉就是:这么便宜啊,真有这样的活动吗? 25块钱,包邮,真不贵,我也买了一个!看看怎样…

查看全部问答>