51单片机通过按钮控制步进电机正反转角度

51单片机通过按钮控制步进电机正反转角度


  • 🌿通过按钮控制电机顺时针或逆时针旋转:
    在这里插入图片描述

📝程序代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include<reg51.h>
#include<string.h>
#include<stdio.h>
#include<intrins.h>
#include<stdlib.h>

#define INT8U unsigned char
#define INT16U unsigned int

sbit FFW_KEY=P3^0;
sbit REV_KEY=P3^1;
sbit STOP_KEY=P3^2;

//0000\_0001 A->AB->B->BC->C->CD->D->AD
INT8U code FFW_ARR[]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09};
//0000\_1001 AD->D->CD->C->BC->B->AB->A
INT8U code REV_ARR[]={0x09,0x08,0x0C,0x04,0x06,0x02,0x03,0x01};

/\*\*
\*延时
\*
\*@param x 延时时间
\*@return
\*/
void delay\_ms(INT16U x)
{
INT8U t=120;
while(x--)
while(t--);
}

/\*\*
\*顺时针旋转
\*
\*@param n 旋转圈数
\*@return
\*/
void STEP\_FFW(INT8U n)
{
INT8U i,j;

for(i=0; i<5\*n; i++)
{
for(j=0; j<8; j++) //8\*9=72
{
P1=FFW_ARR[j];
delay\_ms(60);

if(STOP_KEY==0)
return;
}
}
}

/\*\*
\*逆时间旋转
\*
\*@param n 旋转圈数
\*@return
\*/
void STEP\_REV(INT8U n)
{
INT8U i,j;

for(i=0; i<5\*n; i++)
{
for(j=0; j<8; j++)
{
P1=REV_ARR[j];
delay\_ms(60);

if(STOP_KEY==0)
return;
}
}
}

void main()
{
INT8U n = 1;

while(1)
{
if(FFW_KEY==0)
{
P0=0xFE; // 1111\_1110
STEP\_FFW(n);
}
else if(REV_KEY==0)
{
P0=0xFD; // 1111\_1101
STEP\_REV(n);
}
else
{
P0=0xFB; // 1111\_1011
}
}
}





📚程序代码和仿真资源

1
2
3
链接:https://pan.baidu.com/s/1lP\_62Au0DHite7Weq1ZTxg 
提取码:k344