单片机按键&串口控制步进电机正反转调速含程序和仿真

2019-11-08来源: 51hei关键字:单片机  按键  串口控制  步进电机  正反转调速

包含程序和仿真


功能:按键或串口发送字符指令,控制步进电机正转、反转、停止、加速、减速动作


仿真过程可直接通过按下电脑键盘控制

仿真原理图如下

单片机源程序如下:

#include

#define uint  unsigned int

#define uchar unsigned char

//------8拍-----

uchar code zz[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};                        //正转

uchar code fz[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};                        //反转


sbit K1=P3^0;        //停止

sbit K2=P3^1;        //正转

sbit K3=P3^2;        //反转

sbit K4=P3^3;        //加速

sbit K5=P3^4;        //减速


uchar state=0;        //状态变量


uint Time=60;         //延时时间,用于调速


unsigned char receiveData='0';


void UsartConfiguration();           //初始化串口


void delay(uint ms)                           //延时,用于调速

{

        uint t;

        while(ms--)

                for(t=0;t<120;t++);

}


void motor_zz()                  //正传函数

{

        uint j;

        for(j=0;j<8;j++)

        {

                if(P3==0xfb)

                        break;

                P1=zz[j];

                delay(Time);

        }

}


void motor_fz()                  //反转函数

{

        uint j;

        for(j=0;j<8;j++)

        {

                if(P3==0xfb)

                        break;

                P1=fz[j];

                delay(Time);

        }

}


void main()

{

        UsartConfiguration();

        while(1)

        {

                while(state==0)                        //状态0,停止

                {

                        if((K2==0)||(receiveData=='z'))           //按下K2或串口接收到'z',电机正转

                        {

                                state=1;

                                receiveData='0';

                                break;

                        }

                        if((K3==0)||(receiveData=='f'))           //按下K3或串口接收到'f',电机反转

                        {

                                state=2;

                                receiveData='0';

                                break;

                        }

                        P0=0xfb;

                        P1=0x03;

                }


                


                while(state==1)                        //状态1,正转

                {

                        if((K1==0)||(receiveData=='t'))           //按下K1或串口接收到'f',电机反转

                        {

                                state=0;

                                receiveData='0';

                                break;

                        }

                        if((K2==0)||(receiveData=='z'))                //按下K2或串口接收到'z',电机正转

                        {

                                state=1;

                                receiveData='0';

                                break;

                        }

                        if((K3==0)||(receiveData=='f'))                //按下K3或串口接收到'f',电机反转

                        {

                                state=2;

                                receiveData='0';

                                break;

                        }

                        if((K4==0)||(receiveData=='+'))                //按下K4或串口接收到'+',电机加速

                        {

                                Time=Time-5;

                                if(Time<20)

                                Time=20;

                                while(K4==0);

                        }

                        if((K5==0)||(receiveData=='-'))                //按下K5或串口接收到'-',电机减速

                        {

                                Time=Time+5;

                                if(Time>100)

                                Time=100;

                                while(K5==0);

                        }

                        motor_zz();                 //状态1,正转

                }


                while(state==2)                   //状态2,反转

                {

                        if((K1==0)||(receiveData=='t'))                 //按下K1或串口接收到'f',电机反转

                        {

                                state=0;

                                receiveData='0';

[1] [2]
关键字:单片机  按键  串口控制  步进电机  正反转调速 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic479371.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:LED8x8点阵显示屏设计报告+PCB原理图与单片机程序
下一篇:TTP229触摸模块的51单片机驱动程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

通过软件程序消除单片机由外界干扰产生的异常复位的影响
前言:首先简单介绍一下外界干扰对单片机的2点影响:(1)异常复位在刚上电或外部复位引脚为复位电平时,单片机系统进入一个预定的状态——复位状态。在复位状态下,控制寄存器的值是确定的,而数据寄存器的值是随机的,程序计数器也被赋予一个确定的值。但多数情况下控制寄存器的初始值并非我们需要的,不确定的数据寄存器的值也是无法使用的,需要初始化把它们设置成一个预期的、确定的且安全的状态。初始化完成后,系统进入待命状态。系统在工作过程中,因来自电源的干扰,也可能执行复位操作,称为异常复位,这时如不采取措施,记录工作过程的数据又会被初始化,从而造成异常停机。(2)程序跑飞所谓程序跑飞是程序没按预定的顺序执行。因为单片机执行了不该执行的指令,该指令
发表于 2019-11-16
通过软件程序消除单片机由外界干扰产生的异常复位的影响
AVR单片机改造遥控车
利用玩具遥控车的高频发射电路和高频接收电路,结合单片机进行数据传输,模拟两通道比例控制遥控器。发射端用ATTINY24从TX的8号脚控制玩具遥控器的高频发射部分接收端用ATTINY24从RX2的3号脚接收信号。然后PWM控制遥控车的两个电机,一个由电位器反馈。另一个由测速盘反馈。数据结构0 高电平100us,低电平300us1 高电平200us,低电平200us数据帧结构16位为一个包起始2位(10),地址2位,数据10位,结束2位(01)每5个包为一个循环1号包 全0包,不含起始结束,用于接收端复位。2,3号包 地址01号数据。4,5号包 地址02号数据。纠错采用重复校验,当收到两组数据相同时确认数据有效发送侧任务 读A通道
发表于 2019-11-16
AVR单片机改造遥控车
avr单片机双通信C程序
将下面2个程序分别烧录进2个单片机中.单片机U1//ICC-AVR application builder : 2013-6-14 10:17:58// Target : M16// Crystal: 8.0000Mhz#include <iom16v.h>#include <macros.h>#define LED1_ON PORTD|=(1<<PD4)#define LED1_OFF PORTD&=~(1<<PD4)#define LED2_ON PORTD|=(1<<PD5)#define LED2_OFF PORTD&=~(1<<PD5
发表于 2019-11-16
AVR单片机8路AD如何采样
//*********ATmega128,8channel ADC sampling + LED display + USART*******#include <iom128v.h>#include <macros.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned long#define FOSC   1843200#define baud   9600#define MyUBBR   (uint)((ulong)FOSC/(16*(ulong)b
发表于 2019-11-16
DHT11温湿度传感器的AVR单片机例程
; Delay_10us();    Delay_10us();    Delay_10us();    Delay_10us();  //主机设为输入 判断从机响应信号   //P2_0=1;    //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行      // if(!P2_0)   //T !      if(COM_R)U8FLAG=1;   
发表于 2019-11-16
DHT11温湿度传感器的AVR单片机例程
PIC单片机调试心得
我是一位初学者,pic初学者,但是在单片机行当已经混迹多年了。说句实话,c开发环境都大同小异,只不过烧写和在线仿真大同小异。钻研了两天,收到了很多回应和启发。下面应soso的请求,把最近的调试心得和大家分享1、 先说说我要做的东西说来惭愧,这是临时的一个小任务,做一个采集和现实的部分,用两路ad采集模拟量,通过开关进行切换,简单的说就是开关打开,显示一路模拟量;开关关闭,显示另一路模拟量。主电路及其简单,我就直接说了,不附图了。电源通过一个负载(滑动变阻器就可以)回到电源负极,在回路中接入一个电流传感器,实时采集电流信号(如果条件不允许,也可以用康铜丝或者一个大瓦数小数值的采样电阻采集电流信号。然后通过放大,隔离后送入单片机
发表于 2019-11-16
PIC单片机调试心得
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved