標題: 這個代碼哪里錯了;為什么那個步進電機轉(zhuǎn)的這么慢,而且還只轉(zhuǎn)了半圈求大神幫我改下 [打印本頁]

作者: zgp535936402    時間: 2018-6-5 22:24
標題: 這個代碼哪里錯了;為什么那個步進電機轉(zhuǎn)的這么慢,而且還只轉(zhuǎn)了半圈求大神幫我改下
#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;       //轉(zhuǎn)速
bit fang_xiang=0;    //方向
bit qi_dong=1;       //啟動標志
code uchar shu_ma[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,2,0xf8,0,0x10}; //數(shù)碼管字段編碼
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()                     //每調(diào)用一次步進電機向指定方向走一步
{
        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)                         //根據(jù)拍數(shù)選擇不同的電壓組合
        {
                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];//把速度顯示到數(shù)碼管       
}

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, 下載次數(shù): 30)

電路圖.jpg

作者: zgp535936402    時間: 2018-6-5 22:26
跪拜大神降臨
作者: linlin7077    時間: 2018-6-7 15:12
速度慢應(yīng)該是頻率設(shè)置有問題,還有大體描述下你這個程序大體要實現(xiàn)什么樣的功能,設(shè)置的變量做下備注。每次上電都只轉(zhuǎn)半圈就停下來嗎
作者: bingzhizhui    時間: 2018-6-7 15:55
跪拜大神降臨
作者: 余生癡夢    時間: 2018-6-8 00:20

跪拜大神降臨




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1