標(biāo)題:
51單片機(jī)步進(jìn)電機(jī)控制器
[打印本頁(yè)]
作者:
softdesign
時(shí)間:
2021-5-17 18:59
標(biāo)題:
51單片機(jī)步進(jìn)電機(jī)控制器
1 #include <reg51.h> //包含單片機(jī)頭文件
2 //宏定義方便使用
3 #define uint unsigned int
4 #define uchar unsigned char
5
6 uchar code FFW[]= //8拍編碼
7 {
8 0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09
9 };
10 sbit K1 = P3^0;
11 sbit K2 = P3^1;
12 sbit K3 = P3^2;
13 sbit K4 = P3^3;
14 sbit K5 = P3^4;
15 uchar Pos_N=1; //定義正轉(zhuǎn)圈數(shù)變量
16 uchar Inv_N=2; //定義反轉(zhuǎn)圈數(shù)變量
17 uchar Run_flag=0; //電機(jī)運(yùn)行的標(biāo)志
18 uint speed=20;
19 /*-----------------------------------
20 延時(shí)函數(shù)
21 ------------------------------------*/
22 void DelayMS(uint ms)
23 {
24 1 uchar i;
25 1 while(ms--)
26 1 {
27 2 for(i=0;i<20;i++);
28 2 }
29 1 }
30 /*-----------------------------------
31 正轉(zhuǎn)函數(shù)
32 ------------------------------------*/
33 void SETP_MOTOR_FFW()
34 {
35 1 static uint i=0,j=0;
36 1 if(++i>speed*10) //延時(shí)
37 1 {
38 2 i=0;
39 2 P1=FFW[j]; //送8拍
40 2 if(++j>7)j=0;
41 2 }
42 1
43 1 }
44 /*-----------------------------------
45 反轉(zhuǎn)函數(shù)
46 ------------------------------------*/
47 void SETP_MOTOR_REV()
48 {
49 1 static uint i=0,j=0;
50 1
51 1 if(++i>speed*10) //延時(shí)
52 1 {
53 2 i=0;
54 2 P1=FFW[7-j]; //倒序送八拍編碼
55 2 if(++j>7)j=0;
C51 COMPILER V8.02 MAIN 01/27/2021 19:00:20 PAGE 2
56 2 }
57 1 }
58 //*********************************
59 //按鍵掃描程序
60 //mode:0,不支持連續(xù)按;1,支持連續(xù)按;
61 //*********************************
62 uchar KEY_Scan()
63 {
64 1 static uchar key_up=1;//按鍵按松開(kāi)標(biāo)志
65 1 if(key_up&&(K1==0||K2==0||K3==0||K4==0||K5==0))
66 1 {
67 2 DelayMS(5);//去抖動(dòng)
68 2 if(K1==0||K2==0||K3==0||K4==0||K5==0)
69 2 {
70 3 key_up=0;
71 3 if(K1==0)return 1;
72 3 else if(K2==0)return 2;
73 3 else if(K3==0)return 3;
74 3 else if(K4==0)return 4;
75 3 else if(K5==0)return 5;
76 3 }
77 2 else
78 2 {
79 3 return 0;
80 3 }
81 2 }else if(K1==1&&K2==1&&K3==1&&K4==1&&K5==1)key_up=1;
82 1 return 0;// 無(wú)按鍵按下
83 1 }
84 /*-----------------------------------
85 主函數(shù)
86 ------------------------------------*/
87
88 void main()
89 {
90 1 uchar key_num=0;
91 1 P1=0x01; //電機(jī)初始位置
92 1 P2=0xfb; //停止指示燈
93 1 while(1)
94 1 {
95 2 key_num=KEY_Scan(); //掃面按鍵
96 2 if(key_num==1) //正轉(zhuǎn)
97 2 {
98 3 P2=0xfe; //正轉(zhuǎn)指示燈
99 3 Run_flag=1;//正轉(zhuǎn)標(biāo)志
100 3 }
101 2 else if(key_num==2)//反轉(zhuǎn)
102 2 {
103 3 P2=0xfd; //反轉(zhuǎn)指示燈
104 3 Run_flag=2;//反轉(zhuǎn)標(biāo)志
105 3 }
106 2 else if(key_num==3)//停止
107 2 {
108 3 P2=0xfb; //停止指示燈
109 3 P1=0x01; //回到初始位置
110 3 Run_flag=0;//停止標(biāo)志
111 3 }
112 2 else if(key_num==4)//加速
113 2 {
114 3 if(speed!=0)
115 3 {
116 4 speed-=1;
117 4 }
C51 COMPILER V8.02 MAIN 01/27/2021 19:00:20 PAGE 3
118 3 }
119 2 else if(key_num==5)//減速
120 2 {
121 3 speed+=1;
122 3 if(speed>100) //限定調(diào)速范圍0-100
123 3 {
124 4 speed=100;
125 4 }
126 3 }
127 2
128 2 if(Run_flag==1)//正轉(zhuǎn)標(biāo)志
129 2 {
130 3 SETP_MOTOR_FFW();
131 3 }
132 2 else if(Run_flag==2)//反轉(zhuǎn)標(biāo)志
133 2 {
134 3 SETP_MOTOR_REV();
135 3 }
136 2 else
137 2 {
138 3 P2=0xfb; //停止指示燈
139 3 }
140 2
141 2
142 2 }
143 1 }
復(fù)制代碼
加減速轉(zhuǎn)+提示燈
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1