找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2768|回复: 4
打印 上一主题 下一主题
收起左侧

这个代码哪里错了;为什么那个步进电机转的这么慢,而且还只转了半圈求大神帮我改下

[复制链接]
跳转到指定楼层
楼主
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit A0= P1^0;
sbit A1 =P1^1;
sbit B0 =P1^2;
sbit B1 =P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
uchar su_du=9;       //转速
bit fang_xiang=0;    //方向
bit qi_dong=1;       //启动标志
code uchar shu_ma[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,2,0xf8,0,0x10}; //数码管字段编码
void yanshi2(uint a)          //延时程序
{
        while(a--);
}
uchar an_jian()         //按键检测
{
        {
                yanshi2(20000);
                if((P1&0x0f)!=0x0f)
                {
                        return P1&0x0f;
                }
        }
        return 0x0f;
}

void yanshi()                        //步进电机延时时间
{
        uint sd1=0;
        sd1=8000+5753*(10-su_du);
        while(sd1--)
        {
                if((P1&0x0f)!=0x0f)return;  //在延时里面判断有没有按键按下,有就直接返回
        }
}
void bu_jin()                     //每调用一次步进电机向指定方向走一步
{
        static char j=1;
        if(fang_xiang)                 //判断方向
        {
                j++;
                if(j==5)j=1;

        }
        else
        {
                j--;
                if(j==0)j=4;
        }        P1_6 = 0;
         
        switch(j)                         //根据拍数选择不同的电压组合
        {
                case 1:
                        A0=1;B0=1;A1=0;B1=0;yanshi(); //ab
                break;
                case 2:
                        A0=0;B0=1;A1=1;B1=0;yanshi(); //a~b
                break;
                case 3:
                        A0=0;B0=0;A1=1;B1=1;yanshi(); //a~b~
                break;
                case 4:
                        A0=1;B0=0;A1=0;B1=1;yanshi(); //ab~
                break;
        }       
}

void xian_shi()     //显示子程序
{
        P2=shu_ma[su_du];//把速度显示到数码管       
}

void main()
{       
        while(1){
                if (P1_4)
                {
                        qi_dong=1;
                        fang_xiang=0;
                        if(su_du<9)su_du++;
                }
                else
                {
                        qi_dong=0;
                        fang_xiang=1;
                        if(su_du<9)su_du--;
                }
                xian_shi();                                        //显示
                if(qi_dong)
                {
               
                        bu_jin();                                        //步进电机
                }
               
        }
}       



电路图.jpg (284.63 KB, 下载次数: 29)

电路图.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:337560 发表于 2018-6-5 22:26 | 只看该作者
跪拜大神降临
回复

使用道具 举报

板凳
ID:135031 发表于 2018-6-7 15:12 | 只看该作者
速度慢应该是频率设置有问题,还有大体描述下你这个程序大体要实现什么样的功能,设置的变量做下备注。每次上电都只转半圈就停下来吗
回复

使用道具 举报

地板
ID:80338 发表于 2018-6-7 15:55 | 只看该作者
跪拜大神降临
回复

使用道具 举报

5#
ID:347294 发表于 2018-6-8 00:20 | 只看该作者

跪拜大神降临
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表