×
嵌入式 > 嵌入式开发 > 详情

AT89S52控制混合式步进电机 C程序

发布时间:2020-09-21 发布时间:
|
#include<uart.h>//包含串口通信头文件(里面含有reg52.h)

#include//包含printf头文件
#define uint unsigned int
#define uchar unsigned char

sbit cp = P2^0;//脉冲输入端
sbit dir = P2^1;//方向控制端
sbit free = P2^2;//脱机控制端,一般接高即可

sbit jia_su = P1^0;//加速键key1声明
sbit jian_su = P1^1;//减速键key2声明
sbit fang_xiang = P1^2;//切换方向键key3声明
sbit ting = P1^3;//停止键key4声明
uint num;
void uart_Init();//串口初始化子函数声明

void delay(uint z)//ms子函数
{
uint x,y;
for(x = 0;xfor(y = 0;y<120;y++);
}

void delay1(uint z)//电机延时子函数us级
{
uint x;
for(x = 0;x
}

void init()//初始化电机、串口子函数
{
num = 2;
dir = 1;
free = 1;
uart_Init();
}

void key_scan()//键盘控制子函数
{
if(jia_su == 0)//判断有加速键按下
{
delay(5);//延时消抖
if(jia_su == 0)//再次判断有加速键按下
{
num++;//num(代表电机转速)增加
if(num>4)
{num=4;}
while(!jia_su);//松手检测
delay(5);
while(!jia_su);
printf("num = %dn",num);//通过串口查看num值
}
}
if(jian_su == 0)//判断有减速键按下
{
delay(5);//延时消抖
if(jian_su == 0)//再次判断有减速键按下
{
num--;//num(代表电机转速)减小
if(num<1)
{num=0;}
while(!jian_su);//松手检测
delay(5);
while(!jian_su);
printf("num = %dn",num);//通过串口查看num值
}
}
if(fang_xiang ==0)//判断是否有方向切换键按下
{
delay(5);//延时消抖
if(fang_xiang == 0)
{
dir =~dir;//方向改变
while(!fang_xiang);//松手检测
delay(5);
while(!fang_xiang);
printf("dir = %dn",dir);
}
}
if(ting ==0)//判断是否有停止键按下
{
delay(5);//延时消抖
if(ting == 0)
{
num = 0;//停止
while(!ting);//松手检测
delay(5);
while(!ting);
}
}

switch(num)
{
case 0: cp = 1; break;//电机停止
case 1: //以低速转动
{


cp = 1;
delay1(20);
cp = 0;
delay1(20);

}
break;

case 2: //以中速转动
{


cp = 1;
delay1(15);
cp = 0;
delay1(15);

}
break;

case 3: //以高速转动
{


cp = 1;
delay1(10);
cp = 0;
delay1(10);

}
break;

case 4: //以更高速转动
{


cp = 1;
delay1(5);
cp = 0;
delay1(5);

}
break;
}

}
void main()
{
init();//调用初始化子函数
while(1)
{
key_scan();//不停键盘扫描
}

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
PLC控制步进电机方法