電子產業(yè)一站式賦能平臺

PCB聯(lián)盟網

搜索
查看: 2007|回復: 0
收起左側

單片機C語言實例-190-步進電機

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2022-2-17 10:00:21 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機C語言實例-190-步進電機

/********************************************************************
* 名稱 : 步進電機.c
* 功能 : 通過P1.3,P1.4,P1.5,P1.6四個IO口,來控制步進電機。
                 杜邦線的連接線,可以參考使用說明的1.3節(jié)。
/***********************************************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int

sbit KEY1 = P3^2;   //步進電機順時針方向轉
sbit KEY2 = P3^3;   //步進電機逆時針方向轉
sbit KEY3 = P3^4;        //步進電機調速

uchar  Step = 0;
bit FB_flag = 0;

unsigned char code F_Rotation[8]={0x08,0x18,0x10,0x30,0x20,0x60,0x40,0x48};    //順時針轉表格
unsigned char code B_Rotation[8]={0x48,0x40,0x60,0x20,0x30,0x10,0x18,0x08};    //逆時針轉表格

/********************************************************************
* 名稱 : Delay_1ms()
* 功能 : 延時子程序,延時時間為 1ms * x
* 輸入 : x (延時一毫秒的個數(shù))
* 輸出 : 無
***********************************************************************/
void Delay(uint i)
{
        uchar x,j;
        for(j=0;j<i;j++)
        for(x=0;x<=148;x++);       
}

void KEY(void)
{
        if(KEY1 == 0)           //按P3.2,實現(xiàn)步進電機的順時針轉動
        {
                Delay(15);
                if(KEY1 == 0)
                {
                        FB_flag = 0;
                }
                Delay(200);
        }
        if(KEY2 == 0)                 //按P3.3,實現(xiàn)步進電機的逆時針轉動
        {
                Delay(15);
                if(KEY2 == 0)
                {
                        FB_flag = 1;
                }
                Delay(200);
        }
        if(KEY3 == 0)                //按P3.4,實現(xiàn)步進電機的調速
        {
                Delay(15);
                if(KEY3 == 0)
                {
                        Step++;
                        if(Step == 3)
                        {
                                Step = 0;
                        }
                }
                Delay(200);
        }
}
main()
{
        uchar i;
        //uint k = 0;
        while(1)
        {
                KEY();                                                  //按鍵處理函數(shù)
                  for(i=0;i<8;i++)                      //因為有8路的控制時序
             {
                        //k++;
                        //if(k == 4096) while(1);
                        if(FB_flag == 0)
                        {
                             P1 = F_Rotation;  //順時針轉動
                        }
                        else
                        {
                                P1 = B_Rotation;         //逆時針轉動
                        }
                     Delay(1+Step);                 //改變這個參數(shù)可以調整電機轉速
                 }
          }
}


更多詳情參考附件文檔

游客,如果您要查看本帖隱藏內容請回復

回復

使用道具 舉報

發(fā)表回復

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

本版積分規(guī)則


聯(lián)系客服 關注微信 下載APP 返回頂部 返回列表