新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 步進電機正反轉程序

        步進電機正反轉程序

        作者: 時間:2016-11-24 來源:網絡 收藏

        #include //51芯片管腳定義頭文件
        #include //內部包含延時函數 _nop_();
        #define uchar unsigned char
        #define uint unsigned int
        uchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //四相八拍正轉編碼
        uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; ////四相八拍反轉編碼
        sbit K1 = P3^2; //正轉
        sbit K2 = P3^3; //反轉
        sbit K3 = P3^4; //停止
        sbit BEEP = P3^6; //蜂鳴器
        /********************************************************/
        /*
        /* 延時t毫秒
        /* 11.0592MHz時鐘,延時約1ms
        /*
        /********************************************************/
        void delay(uint t)
        {
        uint k;
        while(t--)
        {
        for(k=0; k<125; k++)
        { }
        }
        }

        本文引用地址:http://www.104case.com/article/201611/320779.htm

        /**********************************************************/
        void delayB(uchar x) //x*0.14MS
        {
        uchar i;
        while(x--)
        {
        for (i=0; i<13; i++)
        { }
        }
        }

        /**********************************************************/
        void beep()
        {
        uchar i;
        for (i=0;i<100;i++)
        {
        delayB(4);
        BEEP=!BEEP; //BEEP取反
        }
        BEEP=1; //關閉蜂鳴器
        }

        /********************************************************/
        /*
        /*步進電機正轉
        /*
        /********************************************************/
        void motor_ffw()
        {
        uchar i;
        uint j;
        for (j=0; j<8; j++) //轉1*n圈
        {
        if(K3==0)
        {break;} //退出此循環程序
        for (i=0; i<8; i++) //一個周期轉45度
        {
        P1 = FFW[i]; //取數據
        delay(2); //調節轉速
        }
        }
        }

        /********************************************************/
        /*
        /*步進電機反轉
        /*
        /********************************************************/
        void motor_rev()
        {
        uchar i;
        uint j;
        for (j=0; j<8; j++) //轉1×n圈
        {
        if(K3==0)
        {break;} //退出此循環程序
        for (i=0; i<8; i++) //一個周期轉45度
        {
        P1 = REV[i]; //取數據
        delay(2); //調節轉速
        }
        }
        }

        /********************************************************
        *
        * 主程序
        *
        *********************************************************/

        main()
        {
        uchar r,N=64; //N 步進電機運轉圈數
        while(1)
        {
        if(K1==0)
        {
        beep();
        for(r=0;r {
        motor_ffw(); //電機正轉
        if(K3==0)
        {beep();break;} //退出此循環程序
        }
        }
        else if(K2==0)
        {
        beep();
        for(r=0;r {
        motor_rev(); //電機反轉
        if(K3==0)
        {beep();break;} //退出此循環程序
        }
        }
        else
        P1 = 0xf0;
        }
        }

        /********************************************************/



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 玛多县| 龙陵县| 静安区| 昌江| 天全县| 新丰县| 宁安市| 横山县| 金门县| 乳源| 娄烦县| 正阳县| 云阳县| 道孚县| 陕西省| 调兵山市| 岳阳县| 涪陵区| 宣汉县| 平度市| 郯城县| 三门峡市| 石狮市| 石楼县| 泾源县| 镇远县| 龙江县| 安平县| 德昌县| 榆树市| 若尔盖县| 海安县| 阳朔县| 乌审旗| 义马市| 武隆县| 临沧市| 蛟河市| 黄山市| 分宜县| 乌鲁木齐县|