当前位置:文档之家› 步进电机控制程序

步进电机控制程序

#include
#define uchar unsigned char
#define uint unsigned int
#define shi_neng a=P1IN&BIT0
#define fang_shi b=P1IN&BIT1
#define fang_xiang c=P1IN&BIT2
#define mai_chong d=P1IN&BIT3

#define zheng_zhuan e=P2OUT&BIT0
#define fan_zhuan f=P2OUT&BIT1
#define jia_su g=P2OUT&BIT2
#define jian_su h=P2OUT&BIT3
uchar a,b,c,d,e,f,g,h;
uchar Y=1; //初始化速度
/********************************************************
控制位定义
********************************************************/
/*
sbit shi_neng=P1^0; // 使能控制位
sbit fang_shi=P1^1; // 工作方式控制位
sbit fang_xiang=P1^2;// 旋转方向控制位
sbit mai_chong=P1^3; // 脉冲控制位

sbit zheng_zhuan=P2^0; // 正转
sbit fan_zhuan=P2^1; // 反转
sbit jia_su=P2^2; // 加速
sbit jian_su=P2^3; // 减速
*/
/********************************************************
延时函数
********************************************************/
uchar keyscan(void)
{
delay_ms(100);
uchar keyno=0;
P6DIR=0Xf0;
P6OUT=0xef;
switch(P6IN&0x0f)
{
case 0x0e: keyno=4;
break;
case 0x0d: keyno=3;
break;
case 0x0b: keyno=2;
break;
case 0x07: keyno=1;
break;
}
P6OUT=0xDf;
switch(P6IN&0x0f)
{
case 0x0e: keyno=8;
break;
case 0x0d: keyno=7;
break;
case 0x0b: keyno=6;
break;
case 0x07: keyno=5;
break;
}
P6OUT=0xBf;
switch(P6IN&0x0f)
{
case 0x0e: keyno=12;
break;
case 0x0d: keyno=11;
break;
case 0x0b: keyno=10;
break;
case 0x07: keyno=9;
break;
}
P6OUT=0x7f;
switch(P6IN&0x0f)
{
case 0x0e: keyno=16;
break;
case 0x0d: keyno=15;
break;
case 0x0b: keyno=14;
break;
case 0x07: keyno=13;
break;
}
delay_ms(20);
return keyno;
}
void delay(uchar i)//延时函数
{
uchar j,k;
for(j=0;jfor(k=0;k<180;k++);
}
/********************************************************
加速函数
********************************************************/
void jia()
{

Y=Y-1;
if(Y<=1){Y=1;}//如果速度值小于等于1,值保持不变

}
/****

****************************************************
减速函数
********************************************************/
void jian()
{

Y=Y+1;
if(Y>=100){Y=100;}

}
/********************************************************
主函数
********************************************************/

main()
{
shi_neng;a=1; // 使能控制位
fang_shi;b=1; // 工作方式控制位
fang_xiang;c=1;// 旋转方向控制位
mai_chong;d=1; // 脉冲控制位
while(1)
{
key=keyscan();
switch(key)
{
case 1:e=0;break;//0
case 2:f=0;break;//1
case 3:g=0;break;//2
case 4:h=0;break;//3
default:break;
}
zheng_zhuan;if(e==0){c=1;}
fan_zhuan;if(f==0){c=0;}
jia_su;if(g==0){delay(10);while(!g);jia();}
jian_su;if(h==0){delay(10);while(!h);jian();}
d=~d; //输出时钟脉冲
delay(Y); //延时(括号内数值越小,电机转动速度越快)

}
}
/********************************************************
结束
********************************************************/






相关主题
文本预览
相关文档 最新文档