历史上的今天

今天是:2024年11月08日(星期五)

正在发生

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';

                                break;

                        }

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

                        {

                                state=1;

[1] [2]
关键字:单片机  按键  串口控制  步进电机  正反转调速 引用地址:单片机按键&串口控制步进电机正反转调速含程序和仿真

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

推荐阅读

集微网消息,苹果公司上月发布的 iPad Pro 目前已经正式发售,其相关的性能水平也逐渐被公开。除了基本跑分之外,近日就有关于视频导出、图片转格式等的相关实测在测试 iPad Pro 的影像编辑性能。        视频方面的测试,是将一条时长为 12 分钟的 4K 视频导出成 1080p ,使用的是 Adobe Rush 应用。结果显示,iPad Pro 所需要...
(文章来源:快资讯) 大家现在感觉车间工人越来越少了,偌大的车间一眼望过去,看不见一个人,设备倒是不少,这是不是就意味着机器人换人的时代来了?其实现在招工难、薪酬高等一些客观原因,许多企业都在慢慢转型,尝试上自动化设备,不仅节约了人工问题,提高了效率,产品质量也提高在自动化机器人在冲压、、码垛、搬运、喷漆等都可以代替人工做很多...
PS5 即将上市,游戏开发商们也已经蓄势待发。昨天索尼 PlayStation 官方公布了动作游戏《神陨》(GodFall)的 PS5 发售预告。值得一提的是,《神陨》在 PS5 上将限时主机独占 6 个月(11 月 12 日发售,登陆 PS5 和 PC 平台),直到 2021 年 5 月 12 日为止,《神陨》届时便可能登陆其它游戏主机平台。上市预告展示了游戏剧情的大致...
英特尔正在设计一个充满活力、灵活且包容的未来办公场所,让超过11万名员工能够快速高效地工作。英特尔希望员工及其主管共同确定能够实现最好绩效的办公地点和模式。这可能意味着,现场办公环境下升级过的协作空间和新工具,将成为一个加分项。(图片来源:英特尔公司)Christy Pambianchi执行副总裁兼首席人力资源官自从加入英特尔担任首席人力资源官以...

史海拾趣

问答坊 | AI 解惑

AD采样注意的事项

AD采样注意的事项主要针对高精度测量类的AD.  …

查看全部问答∨

北京恒颐招聘硬件开发人员

北京恒颐高科技术有限公司( http://www.hyesco.com )招聘硬件开发人员。欢迎您了解我们的公司,欢迎有志于做一番事业的研发人员加入我们的队伍。也欢迎您推荐身边的朋友。请将简历发到zhaopin@hyesco.com,并注明个人期望情况。注:公司无法解决 ...…

查看全部问答∨

第7章 PCB的高级编辑技巧

第7章 PCB的高级编辑技巧…

查看全部问答∨

无线系统可靠性差(4)——我们担心什么?

谬误之三:无线系统可靠性差 您的工艺流程太重要了,以至于不能承受丢失数据的风险。这就是为什么网络可靠性――实际抵达目的地的信号比例――如此重要的原因。您希望这个百分比越高越好。 乍看上去,无线技术最初的特性具有增加风险的趋 ...…

查看全部问答∨

ccs3.3初次安装,高手帮忙补充下吧!

flyfly1314最近刚装完ccs3.3,在我督促下,分享了安装过程,详见: https://home.eeworld.com.cn/my/space.php?uid=212054&do=blog&id=30025 可其中还有些记忆不清的地方,请看到的高手不吝赐教 步骤:    1:双击目录ccs3.3下的s ...…

查看全部问答∨

永磁无刷直流电机控制系统的设计

永磁无刷直流电机控制系统的设计…

查看全部问答∨

请问usart透过rs232 跟终端机联机问题

请问为什么我的usart跟计算机透过rs232 在计算机终端机上一直都等不到我的英文字符串呢? 但我使用uVision内部模拟(没download到板子上)开启uVision所附的usart 可以看得到我写的英文字符串呢!!我计算机终端机的设定跟程序一样呢!  请帮帮我…

查看全部问答∨

9650摄像头驱动的问题

请问三星2440的板子上,开发板自带的camera驱动里有个iic的驱动,里面有个函数Wr_CamIIC 和Rd_CamIIC ,请问具体是干什么用的。因为我发现这两个函数根本就没有调用,但是网上有帖子说是配置camera寄存器参数用的,十分不解,请求指教。 void ...…

查看全部问答∨

WINCE6.0驱动问题

有篇文章(具体原文在那,我找不到了)提到在FLASH驱动中函数 BOOL  FMD_OEMIoControl(DWORD dwIoControlCode, PBYTE pInBuf, DWORD nInBufSize, PBYTE pOutBuf, DWORD nOutBufSize, PDWORD pBytesReturned) { ......... ......... ...…

查看全部问答∨

編譯

貼部份錯誤訊息 Starting sysgen phase for project ( dcom ) 系統找不到指定的路徑。 About to call Dev\'s pIABASE.bat 系統找不到指定的路徑。 CEBUILD: Running sysgen -p netcf postproc Starting sysgen phase for project ( netcf ) ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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