#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^7
sbit key2=P3^6
sbit key3=P3^5
uchar kz,i=200
uchar zhengzhuan[]={0xf3,0xf9,0xfc,0xf6}
uchar fanzhuan[]={0xf3,0xf6,0xfc,0xf9}
void delay1ms(uint ms)
{
uchar i
while(ms--)
{
for(i = 0i<10i++)
{
_nop_()
_nop_()
_nop_()
_nop_()
}
}
}
void key()
{
if(key2==0)
{
delay1ms(10)
if(key2==0)
kz=1
while(!key2)
{}
}
if(key3==0)
{
delay1ms(10)
if(key3==0)
kz=2
while(!key3)
{}
}
}
void zz()//正祥纳转
{
uchar a=0,b=20
while(kz==1)
{
P1=zhengzhuan[a]
a++
if(a>3)
a=0
i--if(i==0)kz=0
if(key1==0)
{
delay1ms(10)
if(key1==0)
{
kz=0
P1=0xff
while(!key1)
}
}
if(key2==0)
{
b=b+5
if(b>=240)
b=240
while(!key2)
{
}
}
if(key3==0)
{
b=b-5
if(b<=20)
b=20
while(!key3)
{
}
}
delay1ms(b)
}i=200
}
void fz()//反转
{
uchar a=0,b=20
while(kz==2)
{
P1=fanzhuan[a]
a++
if(a>3)
a=0
if(key1==0)
{
delay1ms(10)
if(key1==0)
{
kz=0
P1=0xff
}
}
if(key2==0)
{
b+=5
if(b>=240)
b=240
while(!key2)
{
}
}
if(key3==0)
{
b-=5
if(b<=20)
b=20
while(!key3)
{
}
}
delay1ms(b)
}
}
void main()
{
while(1)
{
key()
if(kz==0)
else if(kz==1)
zz()
else
fz()
}
}
/*-----------------------------------------------名称:步进电机
内容:本程序用于测试4相步进电机常规驱动
含正反转
使用1相励磁
------------------------------------------------*/
#include
<reg52.h>
sbit
A1=P1^0
//定义步进电机连接端口
sbit
B1=P1^1
sbit
C1=P1^2
sbit
D1=P1^3
#define
Coil_A1
{A1=1B1=0C1=0D1=0}//A相通电,其他相断电
#define
Coil_B1
{A1=0B1=1C1=0D1=0}//B相通电,其他相断电
#define
Coil_C1
{A1=0B1=0C1=1D1=0}//C相通电,其他相断电
#define
Coil_D1
{A1=0B1=0C1=0D1=1}//D相通电,其他相断电
#define
Coil_AB1
{A1=1B1=1C1=0D1=0}//AB相通电,其他相断电
#define
Coil_BC1
{A1=0B1=1C1=1D1=0}//BC相通电,其他相断电
#define
Coil_CD1
{A1=0B1=0C1=1D1=1}//CD相通电,清尘其他相断电
#define
Coil_DA1
{A1=1B1=0C1=0D1=1}//D相通电,其他相断电
#define
Coil_OFF
{A1=0B1=0C1=0D1=0}//全部断电
unsigned
char
Speed
/*------------------------------------------------
uS延时函数,含有输入参数
unsigned
char
t,无返回值
unsigned
char
是定义无符号字符变量,其值的范围是
0~255
这里使用晶振12M,精确延时请使用汇编空正绝,大致延时
长度如下
T=tx2+5
uS
------------------------------------------------*/
void
DelayUs2x(unsigned
char
t)
{
while(--t)
}
/*------------------------------------------------
mS延时函数,含有输入参数
unsigned
char
t,无返回值
unsigned
char
是定义无符号字符变量,其值的范围是
0~255
这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void
DelayMs(unsigned
char
t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245)
DelayUs2x(245)
}
}
/*------------------------------------------------
主函数
------------------------------------------------*/
main()
{
unsigned
int
i=512//旋转一周时间
Speed=8
Coil_OFF
while(i--)
//正向
{
Coil_A1
//遇到Coil_A1
用{A1=1B1=0C1=0D1=0}代替
DelayMs(Speed)
//改变这个参数可以调整电机转速
,
//数字越小,转速越大,力矩越小
Coil_B1
DelayMs(Speed)
Coil_C1
DelayMs(Speed)
Coil_D1
DelayMs(Speed)
}
Coil_OFF
i=512
while(i--)//反向
{
Coil_D1
//遇到Coil_A1
用{A1=1B1=0C1=0D1=0}代替
DelayMs(Speed)
//改变这个参数可以调整电机转速
,
//数字越小,斗姿转速越大,力矩越小
Coil_C1
DelayMs(Speed)
Coil_B1
DelayMs(Speed)
Coil_A1
DelayMs(Speed)
}
}
#include "reg52.h"
void delay(unsigned int t)
//Motor
sbit F1 = P1^0
sbit F2 = P1^1
sbit F3 = P1^2
sbit F4 = 腊悄P1^3
unsigned char code FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6} //反转
unsigned char code FFZ[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe} //正转
unsigned int K
/**********************************************************************
* *
* 步进电机明局简驱动 *
* *
***********************************************************************/
void motor_ffw()
{
unsigned char i
unsigned int j
for (j=0 j<12 j++) //转1*n圈
{
for (i=0 i<8 i++) //一个周期转30度
{
if(K==1) P1 = FFW[i]&0x1f //取数据
if(K==2) P1 激裤= FFZ[i]&0x1f
delay(15) //调节转速
}
}
}
/******************************************************
*
* 延时程序
*
********************************************************/
void delay(unsigned int t)
{
unsigned int k
while(t--)
{
for(k=0 k<100 k++)
{ }
}
}
main()
{
while(1)
{
K=1
motor_ffw()
K=2
motor_ffw()
}
}
给你个例子,这是正反转的可以用这个修改出加减速程序
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)