51驱动四相步进电机.docVIP

  • 5
  • 0
  • 约5.28千字
  • 约 7页
  • 2016-09-19 发布于重庆
  • 举报
51驱动四相步进电机

#include reg51.h #define uint unsigned int; #define uchar unsigned char //以下定义LED片选信号 sbit LED_1 = P3^0; sbit LED_2 = P3^1; sbit LED_3 = P1^6; sbit LED_4 = P1^7; //以下定义M1驱动信号 sbit M1_1 = P2^0; sbit M1_2 = P2^1; sbit M1_3 = P2^2; sbit M1_4 = P2^3; //以下定义M2驱动信号 sbit M2_1 = P2^4; sbit M2_2 = P2^5; sbit M2_3 = P2^6; sbit M2_4 = P2^7; //以下定义M3驱动信号 sbit M3_1 = P3^4; sbit M3_2 = P3^5; sbit M3_3 = P3^6; sbit M3_4 = P3^7; //定义输入按键的序号 sbit K_1 = P1^0; sbit K_2 = P1^1; sbit K_3 = P1^2; sbit K_4 = P1^3; sbit K_5 = P1^4; sbit K_6 = P1^5; //以下定义共阴极LED的显示代码,0~9 uchar code tab[10] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f }; //以下定义电机正转代码 uchar code zheng[9] = { 0x00,0x03,0x02,0x06,0x04,0x0c,0x08,0x09,0x01 }; //以下定义电机反转代码 uchar code fan[9] = { 0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x00 }; //下面定义全局变量 uchar m1_zheng = 0;//主轴正转,用1表示,停止用0表示 uchar m1_zheng_val = 0;//正转的步进 uchar m1_fan = 0;//主轴反转,用2表示,停止用0表示 uchar m1_fan_val = 0;//反转步进 uchar m2_mode = 0;//m2状态 X轴增加时用0,递减时用1 uchar m2_zheng_val = 0;//m2 X轴递增时的位置 uchar m2_fan_val = 0;//m2 X轴递减时的位置 uchar m2_pre_mode = 0;//存储m2前一次的状态,递增为0,递减为1 uchar m3_mode = 0;//m3状态 Y轴增加时用0,递减时用1 uchar m3_zheng_val = 0;//m3 Y轴递增时的位置 uchar m3_fan_val = 0;//m3 Y轴递减时的位置 uchar m3_pre_mode = 0;//存储m3前一次的状态,递增为0,递减为1 uchar inc_dec = 0;//递增为0,递减为1 uchar choose_motor = 0;//电机驱动选择,1为驱动M1,2为驱动M2,3为驱动M3 //下面是 函数声明 extern void delay(uchar time);//延时程序 void init_cpu(void);//初始化51单片机 void led_show(void);//LED显示程序 void int0_isr();//中断处理程序 void motor_driver();//电机控制程序 void key_1();//KEY_1处理程序,既主轴正转程序 void key_2();//主轴反转程序 void key_3();//M2处理程序,既X轴电机 void key_4();//M3处理程序,既Y轴电机 void key_5();//设置X轴或Y轴位置递增或递减程序 void key_6();//未定义,留待功能扩展 //主函数开始 void main() { init_cpu();//初始化单片机 while(1) { led_show(); //显示当前电机状态 } } void init_cpu() { EA = 0;//关所有中断 IT0 = 0;//下降沿触发 EX0 = 1;//允许INT0中断 EA = 1;//开所有中断 } void led_show() { uchar i; LED_1 = 0;//显示第一个LED,既M1的

文档评论(0)

1亿VIP精品文档

相关文档