求大神帮忙把下面两个简单的程序合并在一起。非常感谢!
如下程序 。现要把步进电机正反转的控制按键变为S3, sbit S3=P3^5。。。。程序如下:正反转程序:
//先把J01的ABCD四个跳线组用跳线帽接通,(不使用步进电机时,请取下,以免影响其它模块的运行)
//步进电机正反方向运行。当按键S2=1时逆时针运作,当按键按下时顺时针运行。
#include<reg52.h>
sbit S2 =P3^4;
sbit dula=P2^6;
sbit wela=P2^7;
void delay (void)
{
int k;
for (k=0; k<2000; k++);
}
void main()
{
P0=0X00;//关掉数码管的信号。阻止数码管受到P0口信号的影响。
dula=1;
wela=0;
delay();
dula=0;
wela=0;
delay();
S2=1;
while (1)
{
if(S2==1)
{
P0=0XF3;//ABCD=1010
delay();
P0=0XDB;//ABCD=0110
delay();
P0=0XCF;//ABCD=0101
delay();
P0=0XE7;//ABCD=1001
delay();
}
else
{
P0=0XE7;//ABCD=1010
delay();
P0=0XCF;//ABCD=0101
delay();
P0=0XDB;//ABCD=0110
delay();
P0=0XF3;//ABCD=1001
delay();
}
}
}
加减速程序:
PL-51单片机开发系统演示程序 - 步进电机加减速运行程序
按键S2起动:
1.步进电机启动时,转速由慢到快逐步加速。
2.步进电机匀速运行
3.步进电机由快到慢逐步减速到停止
步进电机步进角为 7.5度,一圈 360 度。
双四拍工作方式:
AB-BC-CD-DA (即一个脉冲,转 7.5 度)
单双八拍工作方式:
A-AB-B-BC-C-CD-D-DA (即一个脉冲,转 3.75 度)
【小提示】先把J01的ABCD四个跳线组用跳线帽接通,(不使用步进电机时,请取下,以免影响其它模块的运行)!
*****************************************************************/
#include <reg51.h> //51芯片管脚定义头文件
#include <intrins.h> //内部包含延时函数 _nop_();
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit S2=P3^4;
uchar code FFW[8]={0x04,0x0c,0x08,0x18,0x10,0x30,0x20,0x24};
uchar rate ;
/********************************************************/
/*
/* 延时
/* 11.0592MHz时钟,
/*
/********************************************************/
void delay()
{
uchar k;
uint s;
k = rate;
do
{
for(s = 0 ; s <500 ; s++) ;
}while(--k);
}
/********************************************************/
/*
/*步进电机正转
/*
/********************************************************/
void motor_ffw()
{
uchar i;
for (i=0; i<8; i++) //一个周期转30度
{
P0 = FFW[i]; //取数据
delay(); //调节转速
}
}
/********************************************************
*
*步进电机运行
*
*********************************************************/
void motor_turn()
{
uchar x;
rate=0x10;
x=0xf0;
do
{
motor_ffw(); //加速
rate--;
}while(rate!=0x01);
do
{
motor_ffw(); //匀速
x--;
}while(x!=0x01);
do
{
motor_ffw(); //减速
rate++;
}while(rate!=0x10);
}
/********************************************************
*
* 主程序
*
*********************************************************/
main()
{
P0=0X00;//关掉数码管的信号。阻止数码管受到P0口信号的影响。
dula=1;
wela=0;
delay();
dula=0;
wela=0;
delay();
while(1)
{
P0=0xf0;
if(S2==0)
{
motor_turn();
}
}
}
/********************************************************/