/******************************************************************** * 文件名 : 步进电机.c * 描述 : 用单片机驱动ULN2003去控制步进电机。 步进电机先正转一圈,然后反转一圈,最后停止。 * 杜邦线接法: P1.3用杜邦线连接到D端。 P1.4用杜邦线连接到C端。 P1.5用杜邦线连接到B端。 P1.6用杜邦线连接到A端。 步进电机接到ULN2008的端口,其中,步进电机的电源线接VCC端。 ***********************************************************************/ #include <reg52.h> #define uchar unsigned char #define uint unsigned int 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 (延时一毫秒的个数) * 输出 : 无 ***********************************************************************/ void Delay(uint i) { uchar x,j; for(j=0;j<i;j++) for(x=0;x<=148;x++); } main() { uchar i; uint k = 0; for(k=0;k<512;k++) { for(i=0;i<8;i++) //因为有8路的控制时序 { P1 = F_Rotation[i]; //顺时针转动 Delay(3); //改变这个参数可以调整电机转速 } } for(k=0;k<512;k++) { for(i=0;i<8;i++) //因为有8路的控制时序 { P1 = B_Rotation[i]; //逆时针转动 Delay(3); //改变这个参数可以调整电机转速 } } while(1); }
/******************************************************************** * 文件名 : 步进电机.c * 描述 : 用单片机驱动ULN2003去控制步进电机。 按P3.2端口,步进电机顺时针旋转。 按P3.3端口,步进电机逆时针旋转。 按P3.4端口,步进电机调速。 * 杜邦线接法: P1.3用杜邦线连接到D端。 P1.4用杜邦线连接到C端。 P1.5用杜邦线连接到B端。 P1.6用杜邦线连接到A端。 步进电机接到uln2008的端口,其中步进电机的电源线接VCC端。 P3.2用杜邦线连接按键1。 P3.3用杜邦线连接按键2。 P3.4用杜邦线连接按键3。 ***********************************************************************/ #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 (延时一毫秒的个数) * 输出 : 无 ***********************************************************************/ 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,实现步进电机的顺时针转动 { Delay(15); if(KEY1 == 0) { FB_flag = 0; } Delay(200); } if(KEY2 == 0) //按P3.3,实现步进电机的逆时针转动 { Delay(15); if(KEY2 == 0) { FB_flag = 1; } Delay(200); } if(KEY3 == 0) //按P3.4,实现步进电机的调速 { Delay(15); if(KEY3 == 0) { Step++; if(Step == 3) { Step = 0; } } Delay(200); } } main() { uchar i; //uint k = 0; while(1) { KEY(); //按键处理函数 for(i=0;i<8;i++) //因为有8路的控制时序 { //k++; //if(k == 4096) while(1); if(FB_flag == 0) { P1 = F_Rotation[i]; //顺时针转动 } else { P1 = B_Rotation[i]; //逆时针转动 } Delay(2+Step); //改变这个参数可以调整电机转速 } } }
/******************************************************************** * 文件名 : 步进电机.c * 描述 : 用单片机驱动ULN2003去控制步进电机。 数码管旋转的角度会在数码管上进行显示。* 杜邦线接法: P1.3用杜邦线连接到D端。 P1.4用杜邦线连接到C端。 P1.5用杜邦线连接到B端。 P1.6用杜邦线连接到A端。 步进电机接到ULN2008的端口,其中,步进电机的电源线接VCC端。***********************************************************************/ #include <reg52.h> #define uchar unsigned char #define uint unsigned int 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}; //逆时针转表格 uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar code LED_W[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; /******************************************************************** * 名称 : Delay_1ms() * 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无 ***********************************************************************/ void Delay(uint i) { uchar x,j; for(j=0;j<i;j++) for(x=0;x<=148;x++); } main() { uchar i,count=0; uint j; uint k = 0; while(1) { for(k=0;k<512;k++) { for(i=0;i<8;i++) //因为有8路的控制时序 { P1 = F_Rotation[i]; //顺时针转动 Delay(2); //改变这个参数可以调整电机转速 } j=(uint)((360000/512) * k /1000); P0 = table[j%10]; P2 = LED_W[0]; Delay(1); P0 = table[j/10%10]; P2 = LED_W[1]; Delay(1); P0 = table[j/100%10]; P2 = LED_W[2]; Delay(1); } } }