找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3095|回復: 4
打印 上一主題 下一主題
收起左側

這個代碼哪里錯了;為什么那個步進電機轉的這么慢,而且還只轉了半圈求大神幫我改下

[復制鏈接]
跳轉到指定樓層
樓主
ID:337560 發(fā)表于 2018-6-5 22:24 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
#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, 下載次數: 30)

電路圖.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:337560 發(fā)表于 2018-6-5 22:26 | 只看該作者
跪拜大神降臨
回復

使用道具 舉報

板凳
ID:135031 發(fā)表于 2018-6-7 15:12 | 只看該作者
速度慢應該是頻率設置有問題,還有大體描述下你這個程序大體要實現什么樣的功能,設置的變量做下備注。每次上電都只轉半圈就停下來嗎
回復

使用道具 舉報

地板
ID:80338 發(fā)表于 2018-6-7 15:55 | 只看該作者
跪拜大神降臨
回復

使用道具 舉報

5#
ID:347294 發(fā)表于 2018-6-8 00:20 | 只看該作者

跪拜大神降臨
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表