/*=============================================================*/
//主文件
//时间:2019-10-18
//编写者:pandy
/*==============================================================*/
#include "motor.h"
#include "stanhard.h"
void main()
{
uchar num;
init();
while(1)
{
if(k1==0)
{
buzzer();
for(num=0;num<512;num++)
{
if(k3==0)
{
buzzer();
break;
}
cw_motor();
}
}
if(k2==0)
{
buzzer();
for(num=0;num<64;num++)
{
if(k3==0)
{
buzzer();
break;
}
ccw_motor();
}
}
MotorContrlPort=0;
}
}
步进驱动源文件
motor.c
/*=============================================================*/
//步进电机控制源文件
//时间:2019-10-18
//编写者:pandy
/*==============================================================*/
#include "stanhard.h"
#include "motor.h"
uchar ccw[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //反转
uchar cw[]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //正传
uchar code ducode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定义段码
uchar code wecode[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//定位段码
uchar tempdata[8],speed=10;
void delay(uchar z) //延时1ms
{
uchar i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void delay500us(void) //延时500us
{
int i;
for(i=0;i<58;i++);
}
void buzzer() //产生报警音
{
uchar t;
for(t=0;t<100;t++)
{
delay500us();
alarm=!alarm; //产生脉冲
}
alarm=1; //关闭蜂鸣器
}
void ccw_motor()//反转子程序
{
uchar i;
for(i=0;i<8;i++)//旋转一周 内部旋转一周
{
for(i=0;i<8;i++)
{
MotorContrlPort=ccw[i];
delay(speed);
}
}
}
void cw_motor()//正转子程序
{
uchar i;
for(i=0;i<8;i++)//旋转一周 内部旋转一周
{
for(i=0;i<8;i++)
{
MotorContrlPort=cw[i];
delay(speed);
}
}
}
void diaplay(uchar first,uchar num) //LED 显示函数
{
static uchar i;
P0=0xff;
wela=1;
wela=0;
P0=wecode[i+first];
wela=1;
wela=0;
P0=tempdata[i];
dula=1;
dula=0;
i++;
if(i==num)
{
i=0;
}
}
void init()//定时器1、2初始化函数
{
TMOD|=0X11;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
PT0=1; //边沿触发 如不设置 LED显示时会跳动
}
void timer0() interrupt 1//定时器1
{
TH0=(65536-2000)/256; //延时2ms
TL0=(65536-2000)%256;
tempdata[0]=ducode[speed%10];
tempdata[1]=ducode[speed/10];
diaplay(0,2);
}
void timer1() interrupt 3//定时器2
{
TH1=(65536-1000)/256; //延时1ms
TL1=(65536-1000)%256;
if(k4==0)
{
delay(5);
if(k4==0)
speed++;
}
while(k4==0);
if(k5==0)
{
delay(5);
if(k5==0)
{
if(speed>2)
speed--;
}
}
while(k5==0);
}
驱动头文件
motor.h
#ifndef __MOTOR_H__
#define __MOTOR_H__
#include<reg52.h>
#include<intrins.h>
#include "stanhard.h"
#define MotorContrlPort P1 //定义控制步进电机口
sbit k1=P2^0;//正转键
sbit k2=P2^1;//反转键
sbit k3=P2^2;//停止按键
sbit k4=P2^3;//加按键
sbit k5=P2^4;//减按键
sbit dula=P2^5;//定义段码位
sbit wela=P2^6;//定位段码位
sbit alarm=P2^7;//定义蜂鸣器位
/*--------------------function-----------------------------*/
void delay(uchar z); //延时1ms
void delay500us(void); //延时500us
void buzzer(); //产生报警音
void ccw_motor();//反转子程序
void cw_motor();//正转子程序
void diaplay(uchar first,uchar num); //LED 显示函数
void init();//定时器1、2初始化函数
#endif
定义标准数据类型
stanhard.h
#ifndef __STANHARD__H_
#define __STANHARD__H_
#define uchar unsigned char
#define uint unsigned int
#endif