打印
[范例教程]

28BYJ-48步进电机驱动

[复制链接]
920|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kmzuaz|  楼主 | 2023-10-23 12:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<intrins.h>


unsigned char CCW[8]={0x80,0xC0,0x40,0x60,0x20,0x30,0x10,0x90};   //逆时钟旋转相序表
unsigned char CW[8]={0x90,0x10,0x30,0x20,0x60,0x40,0xC0,0x80};    //正时钟旋转相序表
//unsigned char tab[] = {0x0f};

sbit K1 = P3^0;  //反转按键
sbit K2 = P3^1;  //正转按键
sbit K3 = P3^2;  //停止按键
sbit K4 = P3^3;  //  蜂鸣器

unsigned char K1_Flag=0,K2_Flag=0,K3_Flag=0,K4_Flag=0;

void delay_ms(unsigned int z)                //@11.0592MHz
{
        unsigned char i, j;
   do
   {
        _nop_();
        _nop_();
        _nop_();
        i = 11;
        j = 190;
        do
        {
                while (--j);
        } while (--i);
        }while (--z);
}

void delay_us(unsigned int z)                //@11.0592MHz
{
        do
        {
                _nop_();
                _nop_();
                _nop_();
        }while(--z);
}


void main(void)
{
        unsigned char i;
        while(1)
        {
                if(K1 == 0)
                {
                        delay_ms(5);
                        {
                                if(K1 == 0)
                                {
                                        K1_Flag = ~K1_Flag;
                                        K2_Flag = 0;
                                        K3_Flag = 0;
                                        K4_Flag = 0;
                                }
                                while(K1 == 0);
                        }
                }
                else if(K2 == 0)
                {
                           delay_ms(5);
                        {
                                if(K2 == 0)
                                {
                                        K2_Flag = ~K2_Flag;
                                        K1_Flag = 0;
                                        K3_Flag = 0;
                                        K4_Flag = 0;
                                }
                                while(K2 == 0);
                        }
                }
                else if(K3 == 0)
                {
                        delay_ms(5);
                        {
                                if(K3 == 0)
                                {
                                        K3_Flag = ~K3_Flag;
                                        K1_Flag = 0;
                                        K2_Flag = 0;
                                        K4_Flag = 0;
                                }
                                while(K3 == 0);
                        }
                }
                else if(K4 == 0)
                {
                           delay_ms(5);
                        {
                                if(K4 == 0)
                                {
                                        K4_Flag = ~K4_Flag;
                                        K1_Flag = 0;
                                        K2_Flag = 0;
                                        K3_Flag = 0;
                                }
                                while(K4 == 0);
                        }
                }
                if(K1_Flag)
                {
                        for(i=0;i<8;i++)  //旋转45度
                        {
                                P2=CW[i];
                                delay_us(80);   //调节转速
                        P0 = 0XC6;
                        P2 &= 0XF0;
                        P2 |= 0X02;
                        P0 = 0XF9;
                        P2 &= 0XF0;
                        P2 |= 0X04;
                        }
                }
                else if(K2_Flag)
                {
                        for(i=0;i<8;i++)  //旋转45度
                        {
                                P2=CW[i];
                                delay_us(200);   //调节转速
                        }
                        P0 = 0XC6;
                        P2 &= 0XF0;
                        P2 |= 0X02;
                        P0 = 0Xa4;
                        P2 &= 0XF0;
                        P2 |= 0X04;
                }
                else if(K3_Flag)
                {
                          for(i=0;i<8;i++)  //旋转45度
                        {
                                P2=CW[i];
                                delay_ms(1);   //调节转速
                        }
                        P0 = 0XC6;
                        P2 &= 0XF0;
                        P2 |= 0X01;
                        P0 = 0XB0;
                        P2 &= 0XF0;
                        P2 |= 0X02;
                }
                else if(K4_Flag)
                {
                         for(i=0;i<8;i++)  //旋转45度
                        {
                                P2=CW[i];
                                delay_ms(5);   //调节转速
                        }
                        P0 = 0XC6;
                        P2 &= 0XF0;
                        P2 |= 0X01;
                        P0 = 0X99;
                        P2 &= 0XF0;
                        P2 |= 0X02;
                }
        }
}


使用特权

评论回复
沙发
chenqianqian| | 2023-10-24 12:31 | 只看该作者
现在步进电机用得少了吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

2904

帖子

0

粉丝