基于51单片机的步进电机控制系统—正/反转、加/减速 基于51单片机的步进电机控制仿真程序原理图功能介绍具体功能1.由ULN2003A驱动步进电机2.LCD12864显示状态3.按键控制功能有正/反转、加/减速、停止​演示视频基于51单片机的步进电机控制系统—正/反转、加/减速添加图片注释不超过 140 字可选程序/************************************************************ *实例名称步进电机 *实例说明实现步进电机的正反转以及加减速控制并在LCD屏上实时 显示步进电机的状态 /***微信公众号木子单片机**** ************************************************************/ #include target.h #include key.h /**************调节MOTER_SPEED_NORMAL 5的大小就可改变速度********/ #define MOTER_SPEED_NORMAL 5 //电机正常运行上限 #define MOTER_SPEED_MIN 25 //电机低速运行下限 uchar timer0Count; //timer0中断溢出计数 uchar moterStep; //电机步数 (0x00~0x07) uint moterSpeed; //速度值变化量 (0~moterSpeedMax) uint moterSpeedMax; //速度最快值 uchar moterState; //电机运行状态 uchar moterDirect; //电机运转方向,静止/0x00;正转/0x01;反转/0x02 uchar moterAddReduce; //电机加速及减速量 uchar speedDirect; //0x01,电机加速;0x02,电机减速 bit display_is_ok; //显示屏是否需要更新 /********************************************************** MOTER_STOP,停止;MOTER_FRONT_ADD,正转加速 MOTER_FRONT_REDUCE,正转减速;MOTER_FRONT_NORMAL,正转正常 MOTER_FRONT_LOWER,正转低速;MOTER_QUEEN_ADD,反转加速 MOTER_QUEEN_REDUCE,反转减速,MOTER_QUEEN_NOMAL,反转正常 MOTER_QUEEN_LOWER,反转低速 ***********************************************************/ void main() { uchar keyValueRead; target_init(); moterStateMOTER_STOP; timer0Count0x00; moterAddReduce0x00; moterStep0x00; moterSpeed0x00; moterSpeedMax0x00; //默认停止 moterDirect0x00; //默认停止 moter_state_display(MOTER_STOP); display_is_ok1; sei(); while(1) { keyValueReadget_key_value(); switch(keyValueRead) { case KEY_FRONT: //正转 { moterStateMOTER_FRONT_LOWER; moterDirect0x01; moterSpeedMaxMOTER_SPEED_MIN; display_is_ok0; //moter_state_display(MOTER_FRONT_LOWER); break; } case KEY_QUEEN: //反转 { moterStateMOTER_QUEEN_LOWER; moterDirect0x02; moterSpeedMaxMOTER_SPEED_MIN; display_is_ok0; //moter_state_display(MOTER_QUEEN_LOWER); break; } case KEY_ADD: //加速 { speedDirect0x01; ***//完整资料 **//***微信公众号木子单片机**** /**************调节moterAddReduce10的大小就可改变速度********/ moterAddReduce5; display_is_ok0; if(moterDirect0x01) //正转 moter_state_display(MOTER_FRONT_ADD); else if(moterDirect0x02) moter_state_display(MOTER_QUEEN_ADD); break; } case KEY_REDUCE: //减速 { speedDirect0x02; moterAddReduce100; display_is_ok0; if(moterDirect0x01) //正转 moter_state_display(MOTER_FRONT_REDUCE); else if(moterDirect0x02) moter_state_display(MOTER_QUEEN_REDUCE); break; } case KEY_STOP: //停止 { moterStateMOTER_STOP; moterSpeedMax0x00; //默认停止 moterDirect0x00; //默认停止 moter_state_display(MOTER_STOP); display_is_ok1; break; } default: break; } if(display_is_ok0) //判断LCD内容是否需要更新 { switch(moterSpeedMax) { case MOTER_SPEED_NORMAL: { if(moterDirect0x01) moter_state_display(MOTER_FRONT_NORMAL); else if(moterDirect0x02) moter_state_display(MOTER_QUEEN_NOMAL); display_is_ok1; break; } case MOTER_SPEED_MIN: { if(moterDirect0x01) moter_state_display(MOTER_FRONT_LOWER); else if(moterDirect0x02) moter_state_display(MOTER_QUEEN_LOWER); display_is_ok1; break; } default: break; } } } } void timer0_overflow(void) interrupt 1 //timer0定时10ms { TH00xEE; //定时10ms TL00x00; if(timer0CountmoterAddReduce) //是否中断100次moterAddReduce在加速减速处赋值 timer0Count; else { timer0Count0x00; if(speedDirect0x01) //如果为加速 { if(moterSpeedMaxMOTER_SPEED_NORMAL) moterSpeedMax--; //最大加速到正常值 else { moterAddReduce0x00; speedDirect0x00; //已经加速到正常值不再加速 } } else if(speedDirect0x02) { if(moterSpeedMaxMOTER_SPEED_MIN) moterSpeedMax; else { moterAddReduce0x00; speedDirect0x00; } } } if(moterSpeedmoterSpeedMax) moterSpeed; else { moterSpeed0x00; if(moterDirect0x01) //正转 { if(moterStep0x00) moterStep--; else moterStep0x07; } else if(moterDirect0x02) //反转 { if(moterStep0x07) moterStep; else moterStep0x00; } ground(moterStep); } }硬件设计使用元器件单片机STC89C52注意单片机是通用的无论51还是52、无论stc还是at都一样引脚功能都一样。程序也是一样的。液晶显示屏:LCD12864步进电机晶振:12M排阻:10K电位器:10K电机驱动芯片:ULN2003A电容:33P按键导线若干添加图片注释不超过 140 字可选设计资料01仿真图本设计使用Proteus7.8和Proteus8.9两个版本设计具体如图添加图片注释不超过 140 字可选02原理图本系统原理图采用Altium Designer19设计具体如图添加图片注释不超过 140 字可选03程序本设计使用Keil5版本编程设计具体如图添加图片注释不超过 140 字可选04设计资料资料获取请看前面演示视频全部资料包括仿真源文件 、AD原理图、程序含注释、元件清单等。具体内容如下全网最全! 操作演示请观看前面演示视频点赞分享一起学习成长。