步进电机的正反转控制直接给方向引脚给高低电平即可。
光电开关被遮挡时,引号引脚输出高低电平
#include
#define uint unsigned int
***it motor = P1^0;//位定义电机脉冲信号端口
***it block = P1^1; //位定义接收光电开关遮挡信号的端口
***it dir = P1^2;//位定义步进电机方向控制端口
***it WE = P2^7;
***it DU = P2^6;
***it beep = P2^3;
uint pp;
void InitTimer0(void)
{
TMOD=0x01; //模式设置,00000001,采用的是定时器0,工作与模式1(M1=0,M0=1)。
TR0=1; //打开定时器
TH0=0Xff; //定时器设置,每隔100微秒发起一次中断。
TL0=0X48; // 0Xa4
ET0=1; //开定时器0中断
EA=1; //开总中断
}
void time0() interrupt 1 //每隔100微秒发起一次中断
{ TH0=0Xff;
TL0=0Xdb; // TH0 = 0x0FF; TL0=0Xa4;
pp++;
}
void motor_degree(uint i) // i取值0-255
{
while(i--)
{
if(pp<=2) //占空比0.2
motor = 1;
else
motor = 0;
if(pp==10)
pp=0;
}
}
void main()
{
InitTimer0(); //定时器0初始化
while(1)
{
WE = 1; //打开位选锁存器
P0 = 0xfe; //选中第一位数码管1111 1110
WE = 0; // 锁存位选数据
while(block == 0) //光电开关被遮挡,反转90度
{
DU = 1;
P0 = 0x06; //数码管显示1
DU = 0;
dir = 0;
beep = 0;
motor_degree(50);//
}
while(block == 1) //光电开关无遮挡
{
DU = 1;
P0 = 0x3f; //数码管显示0
DU = 0;
dir = 1;
beep = 1;
motor_degree(50);// 无遮挡,正转90度
}
}
}
步进电机的正反转控制直接给方向引脚给高低电平即可。
光电开关被遮挡时,引号引脚输出高低电平
#include
#define uint unsigned int
***it motor = P1^0;//位定义电机脉冲信号端口
***it block = P1^1; //位定义接收光电开关遮挡信号的端口
***it dir = P1^2;//位定义步进电机方向控制端口
***it WE = P2^7;
***it DU = P2^6;
***it beep = P2^3;
uint pp;
void InitTimer0(void)
{
TMOD=0x01; //模式设置,00000001,采用的是定时器0,工作与模式1(M1=0,M0=1)。
TR0=1; //打开定时器
TH0=0Xff; //定时器设置,每隔100微秒发起一次中断。
TL0=0X48; // 0Xa4
ET0=1; //开定时器0中断
EA=1; //开总中断
}
void time0() interrupt 1 //每隔100微秒发起一次中断
{ TH0=0Xff;
TL0=0Xdb; // TH0 = 0x0FF; TL0=0Xa4;
pp++;
}
void motor_degree(uint i) // i取值0-255
{
while(i--)
{
if(pp<=2) //占空比0.2
motor = 1;
else
motor = 0;
if(pp==10)
pp=0;
}
}
void main()
{
InitTimer0(); //定时器0初始化
while(1)
{
WE = 1; //打开位选锁存器
P0 = 0xfe; //选中第一位数码管1111 1110
WE = 0; // 锁存位选数据
while(block == 0) //光电开关被遮挡,反转90度
{
DU = 1;
P0 = 0x06; //数码管显示1
DU = 0;
dir = 0;
beep = 0;
motor_degree(50);//
}
while(block == 1) //光电开关无遮挡
{
DU = 1;
P0 = 0x3f; //数码管显示0
DU = 0;
dir = 1;
beep = 1;
motor_degree(50);// 无遮挡,正转90度
}
}
}
举报