51单片机+步进电机正反转4拍控制+Proteus仿真
51单片机+步进电机正反转4拍控制+Proteus仿真

程序代码
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 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
| /\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* ULN2003驱动5V减速步进电机程序 Target:STC89C52RC-40C Crystal:12MHz
Platform:51&avr单片机最小系统板+ULN2003步进电机驱动套件
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 接线方式: IN1 ---- P10 IN2 ---- P11 IN3 ---- P12 IN4 ---- P13 + ---- +5V - ---- GND \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/ #include<reg52.h> #define uchar unsigned char #define uint unsigned int #define MotorData P1 //步进电机控制接口定义 uchar phasecw[4] ={0x03,0x06,0x0c,0x09};//正转 电机导通相序 D-C-B-A uchar phaseccw[4]={0x03,0x09,0x0c,0x06};//反转 电机导通相序 A-B-C-D
uchar key1_down,key2_down,key3_down,key1_flag,key2_flag,key3_flag;//变量定义 sbit key1 = P3^0;//按键定义 sbit key2 = P3^1;
//ms延时函数 void Delay\_xms(uint t) { uchar k; while(t--) { for(k=0; k<125; k++) { } } } //顺时针转动 void MotorCW(void) { uchar i; for(i=0;i<4;i++) { MotorData=phasecw[i]; Delay\_xms(200);//转速调节 } } //逆时针转动 void MotorCCW(void) { uchar i; for(i=0;i<4;i++) { MotorData=phaseccw[i]; Delay\_xms(200);//转速调节 } }
//开启外部中断 void Init\_P( ) { EA=1; //开全局中断 EX0=1; //开外部中断0 IT0=1; //外部中断0边沿触发 IT1=0; //外部中断1电平触发 } //外部中断0处理 void interint0() interrupt 0 //using \*\* { key1_flag = 0; key2_flag = 0; key3_flag = 1; } void key\_scan() { /\*\*\*\*\*\*\*\*\*\*\*\*按键1\*\*\*\*\*\*\*\*\*\*\*\*\*/ if(key1 == 0) { Delay\_xms(100); if(key1 == 0)key1_down = 1; } if(key1_down == 1 && key1 == 1) { key1_flag = 1; key2_flag = 0; key3_flag = 0; key1_down = 0; } /\*\*\*\*\*\*\*\*\*\*\*\*按键2\*\*\*\*\*\*\*\*\*\*\*\*\*/ if(key2 == 0) { Delay\_xms(100); if(key2 == 0)key2_down = 1; } if(key2_down == 1 && key2 == 1) { key1_flag = 0; key2_flag = 1; key3_flag = 0; key2_down = 0; } }
/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*主程序\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/ main() { Init\_P( ); while(1) { key\_scan(); if(key1_flag == 1)MotorCW(); //电机正转 if(key2_flag == 1)MotorCCW(); //电机反转 if(key3_flag == 1) P1 = 0x0f; //电机停止 } }
|
仿真资源和程序代码
1 2 3
| 链接:https://pan.baidu.com/s/1zVzLTB0baOeujXBNJvKj1Q 提取码:ihy8
|
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!