|
///////////////////步进电机A,B正反转调试程序/////////////
#include
/*****P4.0=A ;P1.5=B ;P1.6=A' ; P1.7=B'****/
code unsigned char zrun[4]={0x7f,0xbf,0xdf,0xef}; //四相四拍工作方式
/*****P1.0=A ;P1.1=B ;P1.2=A' ; P1.3=B'****/
code unsigned char frun[4]={0xef,0xdf,0xbf,0x7f}; //四相四拍工作方?
unsigned char i,j,k;//延时变量
unsigned char y;//定义延时时间,时间越长电机转速越慢反之则快
unsigned char pda=0;//判断正反转变量
unsigned char y1=0,y2=5; //y坐标
unsigned char yq=0,yz=0; //起点,终点中间变量切换
unsigned int a=0; //计算得到的A电机步数
bit aqd=0; //A电机停止启动 默认停止
bit fz=1;//判断是否执行赋值函数
unsigned char za=0;
bit qr=0; //赋值后是否确认 默认否
bit yx=1; //按键重复允许 默认否
unsigned char r; //给x,y赋值的中间变量
unsigned char tq,tz;//起点,终点中间变量
unsigned char p=0,q=0; //赋值和确认中间标志
unsigned char t;
unsigned char data1[4]={0,0,0,0};
unsigned char kcs=0;
bit kz=0;
void delay(i)//延时函数
{
for(j=0;j
for(k=0;k<250;k++);
}
/****A电机转动函数****/
void azhuandong()
{
if(pda==1) //a电机正转
{ P1=zrun[za];
delay(y);
za++; //步序加1
if(za==4)za=0;
}
if(pda==2) //a电机反转
{ P1=frun[za];
delay(y);
za++; //步序减1
if(za==4)za=0;
}
}
//**********赋值走线函数**********//
void fuzhizouxian(unsigned char x1,unsigned char x2)
{
if(x2>x1) {pda=1;a=17.88*(x2-x1)/1;} //从下往上
if(x2
}
//**步进电机运行函数**//
void yunxing()
{
if(aqd==1) //A步进电机
{
if(a>0) //步骤未走完
{
azhuandong();
a--;
}
else { //步骤已走完
aqd=0;
P1=0xff; //端口置1,防止电流过大
}
}
}
//////////////////////////*************按键********///////////////////////////////////
void Getch() //矩阵键盘程序
{
unsigned char X,Y,Z;
P2=0xff;
P2=0x0f; //先对P2置数 行扫描
if(P2!=0x0f) //判断是否有键按下
{delay(200); //延时,软件去干扰
if(P2!=0x0f) //确认按键按下X = P2;
{ kcs++;
X=P2; //保存行扫描时有键按下时状态
P2=0xf0; //列扫描
Y=P2; //保存列扫描时有键按下时状态
Z=X|Y; //取出键值
switch(Z) //判断键值(那一个键按下)
{
case 0xee: { //0对键值赋值
data1[kcs]=0;
}
;break;
case 0xde: {data1[kcs]=1;} break; //1
case 0xbe: {data1[kcs]=2;} break; //2
case 0x7e: {data1[kcs]=3;} break; //3
case 0xed: {data1[kcs]=4;} break; //4
case 0xdd: {data1[kcs]=5;} break; //5
case 0xbd: {data1[kcs]=6;} break; //6
case 0x7d: {data1[kcs]=7;} break; //7
case 0xeb: {data1[kcs]=8;} break; //8
case 0xdb: {data1[kcs]=9;} break; //9
case 0xbb: {fz=1;
data1[0]=data1[1]*100+data1[2]*10+data1[3];
} break; //A//确认按键
//case 0x7b: {} break; //B //运行按键
//case 0xe7: {} break; //C//正转
//case 0xd7: {} break; //D//反转
//case 0xb7: {} break; //E
// case 0x77: {} break; //F
}
}
}
else yx=1;
// data1[0]=20; fz=1;
}
main()
{ aqd=1;
y=5; //定义延时时间,时间越长电机转速越慢反之则快
while(1)
{
Getch();
// data1[0]=20;fz=1;
if(fz==1)
{fz=0;
y1=y2;
y2=data1[0];
fuzhizouxian(y1,y2);
yunxing();
}
}
}
知道的,发表一下自己的看法,谢谢啦。
原因,例如我按键的起始值为10,终点值是20,但它就是不运行。
|
|