仿真版本:Proteus8.6及以上版本
程序编译:Keil5 C51
编程语言:C语言
设计编号:【B01】
1. 简介
本文介绍一种用AT89C51作为核心部件进行逻辑控制及信号产生的单片机技术和C语言编程设计的步进电机控制系统,本控制系统采用单片机控制,通过人为按动开关实现步进电机的正反转、加速、减速、停止、复位。具有灵活方便、适用范围广的特点,基本能够满足实践需求。
2. 主要功能
a.支持按键设置正转、反转、停止、加速、减速。
b.支持LED灯指示当前运行状态。
c.支持ULN2003驱动步进电机转动。
3. 源程序(Keil5)
本设计采用keil5 C51软件(内附安装包)实现程序设计。如需用keil4打开程序,可自行通过.c和.h文件新建工程即可。
#include <reg51.h> //包含单片机头文件
//宏定义方便使用
#define uint unsigned int
#define uchar unsigned char
uchar code FFW[]= //8拍编码
{
0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09
};
sbit K1 = P3^0;//定义用符号k1来表示P3.0引脚
sbit K2 = P3^1;
sbit K3 = P3^2;
sbit K4 = P3^3;
sbit K5 = P3^4;
uchar Pos_N=1; //定义正转圈数变量
uchar Inv_N=2; //定义反转圈数变量
uchar Run_flag=0; //电机运行的标志
uint speed=20;
/*-----------------------------------
延时函数
------------------------------------*/
void DelayMS(uint ms)
{
uchar i;
while(ms--)
{
for(i=0;i<20;i++);
}
}
/*-----------------------------------
正转函数
------------------------------------*/
void SETP_MOTOR_FFW()
{
static uint i=0,j=0;
if(++i>speed*10) //延时
{
i=0;
P1=FFW[j]; //送8拍
if(++j>7)j=0;
}
}
/*-----------------------------------
反转函数
------------------------------------*/
void SETP_MOTOR_REV()
{
static uint i=0,j=0;
if(++i>speed*10) //延时
{
i=0;
P1=FFW[7-j]; //倒序送八拍编码
if(++j>7)j=0;
}
}
//*********************************
//按键扫描程序
//mode:0,不支持连续按;1,支持连续按;
//*********************************
uchar KEY_Scan()
{
static uchar key_up=1;//按键按松开标志
if(key_up&&(K1==0||K2==0||K3==0||K4==0||K5==0))
{
DelayMS(5);//去抖动
if(K1==0||K2==0||K3==0||K4==0||K5==0)
{
key_up=0;
if(K1==0)return 1;
else if(K2==0)return 2;
else if(K3==0)return 3;
else if(K4==0)return 4;
else if(K5==0)return 5;
}
else
{
return 0;
}
}else if(K1==1&&K2==1&&K3==1&&K4==1&&K5==1)key_up=1;
return 0;// 无按键按下
}
/*-----------------------------------
主函数
------------------------------------*/
void main()
{
uchar key_num=0;
P1=0x01; //电机初始位置
P2=0xfb; //停止指示灯
while(1)
{
key_num=KEY_Scan(); //扫面按键
if(key_num==1) //正转
{
P2=0xfe; //正转指示灯
Run_flag=1;//正转标志
}
else if(key_num==2)//反转
{
P2=0xfd; //反转指示灯
Run_flag=2;//反转标志
}
else if(key_num==3)//停止
{
P2=0xfb; //停止指示灯
P1=0x01; //回到初始位置
Run_flag=0;//停止标志
}
else if(key_num==5)//加速
{
if(speed!=0)
{
speed-=1;
}
}
else if(key_num==4)//减速
{
speed+=1;
if(speed>100) //限定调速范围0-100
{
speed=100;
}
}
4. 仿真proteus8.6
本设计采用proteus8.6软件(内附安装包)实现仿真设计,如下图所示。proteus软件一般存在高低版本兼容问题,该仿真是通过proteus8.6导出的,所以请尽量使用proteus8.6打开文件,低于proteus8.6的版本不能够正常使用,高于proteus8.6的版本除了proteus8.9理论上可以正常使用。
正转:反转:
停止:
5. 设计报告
设计报告主要包括硬件电路、软件设计、仿真调试等等,仅供参考。
6. 资料清单
设计资料主要包括C程序+仿真+设计报告+使用说明+元件清单+操作视频等。
7. 资料获取链接
百度网盘下载链接:【B01】百度网盘下载链接
更多单片机仿真设计合集:单片机仿真设计合集