步进电机仿真程序

这是一款步进电机仿真程序 , 程序是经过仿真调试通过的 , 是电子制作比较好的实例现贴出来给大家参考试验 。单片机使用的是的AT89C51单片机、晶振12M、电机驱动电路是L298、电机选用的是5-12伏的真流电机 , 程序实现四种功能:正转、反转、加速、减速 。仿真图如下:
 
附上源程序:
#include "REGX51.H"
#define uchar unsigned char
#define uint unsigned int
uint time,s;
zhpai[8]={0x16,0x96,0x86,0xc6,0x46,0x66,0x26,0x36};//正转
fzai[8]={0x36,0x26,0x66,0x46,0xc6,0x86,0x96,0x16};//正转
sbit k1=P1^1;
sbit k2=P1^2;
sbit k3=P1^3;
sbit k4=P1^4;
bit qt,zf; //启动停止及正反转标志位
void t0() interrupt 1 //定时器0中断 , 定时1ms//
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%6;
time++;
}
void delay(uint dtime) //延时
{
TR0=1;
while(time<=dtime)
{
if(k2==0) //加速按键处理程序
{
while(k2==0);
{
if(s>80)
s=s-40;
【步进电机仿真程序】}
}
if(k3==0)
{
while(k3==0); //减速按键处理程序
{
if(s<200)
s=s+40;
}
}
}
time=0;
TR0=0;
}
void moto() //电机驱动子程序 , 
{
uchar i,l=0;
for(i=0;i<8;i++)
{
P2=zhpai[l];
l++;
delay(s);
if(l>8)
l=0;
}
}
void moto1() //电机驱动子程序 , 
{
uchar i,l=0;
for(i=0;i<8;i++)
{
P2=fzai[l];
l++;
delay(s);
if(l>8)
l=0;
}
}
void main()
{
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%6;
EA=1;
ET0=1;
TR0=1;
qt=0;
zf=1;
s=200;
while(1)
{
if(k1==0) //反转按键处理程序
{
while(k1==0);
qt=0;
}
if(k4==0)
{
while(k4==0); //正转按键处理程序
qt=1;
}
if(qt==1)
{
moto();//正转
}
else moto1();//正转
}
}

    推荐阅读