|
發(fā)一個(gè)我自己修改的切割機(jī)程序 用的就是28BYJ48步進(jìn)電機(jī) 長度可調(diào)節(jié) 速度程序內(nèi)調(diào)整
/*************** writer:shopping.w ******************/
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code FFW[]=
{
0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09
};
uchar code REV[]=
{
0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01
};
sbit K1 = P3^0; //正轉(zhuǎn)
sbit K2 = P3^1; //反轉(zhuǎn)
sbit K3 = P3^2; //停止
sbit K4 = P3^5; //增加N
sbit K5 = P3^4; //減少N
sbit BEEP = P1^7;//切刀電磁閥
void DelayMS(uint ms)
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
void SETP_MOTOR_FFW(uchar n)
{
uchar i,j;
for(i=0;i<5*n;i++)
{
for(j=0;j<8;j++)
{
if(K3 == 0) break;
P1 = FFW[j];
DelayMS(25); //正轉(zhuǎn)速度調(diào)整
}
}
}
void SETP_MOTOR_REV(uchar n)
{
uchar i,j;
for(i=0;i<5*n;i++) //
{
for(j=0;j<8;j++)
{
if(K3 == 0) break;
P1 = REV[j];
DelayMS(25); //反轉(zhuǎn)速度調(diào)整
}
}
}
void delayB(uchar x)
{
uint k;
while(x--)
{
for(k=0; k<10000; k++)
{ }
}
}
void beep()
{
BEEP=0;
delayB(20); //切刀電磁閥時(shí)間設(shè)定
BEEP=1; //關(guān)閉切刀電磁閥
}
void main()
{
uchar N =1; //默認(rèn)圈數(shù)
while(1)
{
if(K1 == 0)
{ DelayMS(125);
if(K1==0) {
P0 = 0xfe; //P0.0正轉(zhuǎn)指示
SETP_MOTOR_FFW(N);
if(K3 == 0) break;
}
delayB(5);//轉(zhuǎn)動停止間隔時(shí)間
beep();
}
else if(K2 == 0)
{ DelayMS(125);
if(K2==0){
P0 = 0xfd; //P0.1反轉(zhuǎn)指示
SETP_MOTOR_REV(N);
if(K3 == 0) break;
}
delayB(5);//轉(zhuǎn)動停止間隔時(shí)間
beep();
}
else if(K4==0)//步數(shù)加一按鍵按下
{ DelayMS(125);
if(K4==0)
while(K4==0);
N=N+1;//步數(shù)加一
if(N>50)//如果步數(shù)大于10
{
N=50;//步數(shù)最大設(shè)置到10
}
}
else if(K5==0)//步數(shù)減一按鍵按下
{ DelayMS(125);
if(K5==0)
while(K5==0);
N=N-1;//步數(shù)減一
if(N<1)//如果步數(shù)小于1
{
N=1;//步數(shù)設(shè)置最少1
}
}
else
{
P1 = 0x00;
P0= 0xfb; //P0.2停止指示
}
}
}
|
|