📄 led8_8.c
字号:
#include "DSP28_Device.h"
#include "DSP28_Globalprototypes.h"
#define Phase_A GpioDataRegs.GPADAT.bit.GPIOA0
#define Phase_C GpioDataRegs.GPADAT.bit.GPIOA1
#define Phase_B GpioDataRegs.GPADAT.bit.GPIOA2
#define Phase_D GpioDataRegs.GPADAT.bit.GPIOA3
#define Start GpioDataRegs.GPBDAT.bit.GPIOB0
#define Stop GpioDataRegs.GPBDAT.bit.GPIOB1
#define Pos GpioDataRegs.GPBDAT.bit.GPIOB2
#define Neg GpioDataRegs.GPBDAT.bit.GPIOB3
#define SpeedUp GpioDataRegs.GPBDAT.bit.GPIOB4
#define SpeedDown GpioDataRegs.GPBDAT.bit.GPIOB5
#define ON 1
#define OFF 0
#define A 1
#define C 2
#define B 3
#define D 4
#define STT 0x01
#define STP 0x02
#define P 0x03
#define N 0x04
#define SUp 0x05
#define SDn 0x06
unsigned int flag;
unsigned int ssflag;
int timer;
unsigned int keytmp;
unsigned int KeyData;
unsigned int StartOrNot = 0;
unsigned int NegOrPos = 1;
void Gpio_select(void);
void Delay(unsigned int t);
void StepMotor(int phase,int status);
void stop(void);
unsigned char ScanKey(void);
void MoDe1(unsigned int MF1,unsigned int t);
void MoDe2(unsigned int MF2,unsigned int t);
void MoDe3(unsigned int MF3,unsigned int t);
void main(void)
{
unsigned int kb = 0;
InitSysCtrl();
// Disable and clear all CPU interrupts:
DINT;
IER = 0x0000;
IFR = 0x0000;
// Initialize Pie Control Registers To Default State:
InitPieCtrl();
InitPieVectTable();
Gpio_select();
timer = 2000;
StartOrNot = 0;
NegOrPos = 1;
stop();
while(1)
{
if(StartOrNot==1 && NegOrPos==1)
MoDe1(1,timer);
else if(StartOrNot==1 && NegOrPos==0)
MoDe1(0,timer);
else stop();
kb = ScanKey();
switch(kb)
{
case STT:
StartOrNot = 1;
break;
case STP:
StepMotor(A,OFF);
StepMotor(C,OFF);
StepMotor(B,OFF);
StepMotor(D,OFF);
StartOrNot = 0;
break;
case P:
if(StartOrNot==1 && NegOrPos==0)
NegOrPos=1;
break;
case N:
if(StartOrNot==1 && NegOrPos==1)
NegOrPos=0;
break;
case SUp:
timer = timer-100;
if(timer < 300) timer = 300;
break;
case SDn:
timer = timer+100;
break;
default:
break;
}
}
}
void Gpio_select(void)
{
EALLOW;
GpioMuxRegs.GPAMUX.all=0x0000;
GpioMuxRegs.GPADIR.all=0x000F;
GpioMuxRegs.GPAQUAL.all=0x0000;;
GpioMuxRegs.GPBMUX.all=0x0000;
GpioMuxRegs.GPBDIR.all=0x0000; // GPIO DIR select GPIOs as output
GpioMuxRegs.GPBQUAL.all=0x0000;
EDIS;
}
void Delay(unsigned int t)
{
int i,j;
for(i=0;i<t;i++)
{ for(j=0;j<200;j++); }
}
//单拍方式
void MoDe1(unsigned int MF1,unsigned int t)
{
if(MF1 == 1)
{
StepMotor(D,OFF);
StepMotor(A,ON);
Delay(t);
StepMotor(A,OFF);
StepMotor(C,ON);
Delay(t);
StepMotor(C,OFF);
StepMotor(B,ON);
Delay(t);
StepMotor(B,OFF);
StepMotor(D,ON);
Delay(t);
}else
{
StepMotor(C,OFF);
StepMotor(A,ON);
Delay(t);
StepMotor(A,OFF);
StepMotor(D,ON);
Delay(t);
StepMotor(D,OFF);
StepMotor(B,ON);
Delay(t);
StepMotor(B,OFF);
StepMotor(C,ON);
Delay(t);
}
}
//双拍方式
void MoDe2(unsigned int MF2,unsigned int t)
{
if(MF2 == 1)
{
StepMotor(D,OFF);
StepMotor(A,ON);
StepMotor(C,ON);
Delay(t);
StepMotor(A,OFF);
StepMotor(C,ON);
StepMotor(B,ON);
Delay(t);
StepMotor(C,OFF);
StepMotor(B,ON);
StepMotor(D,ON);
Delay(t);
StepMotor(B,OFF);
StepMotor(D,ON);
StepMotor(A,ON);
Delay(t);
}else
{
StepMotor(B,OFF);
StepMotor(A,ON);
StepMotor(C,ON);
Delay(t);
StepMotor(C,OFF);
StepMotor(D,ON);
StepMotor(A,ON);
Delay(t);
StepMotor(A,OFF);
StepMotor(B,ON);
StepMotor(D,ON);
Delay(t);
StepMotor(D,OFF);
StepMotor(C,ON);
StepMotor(B,ON);
Delay(t);
}
}
//单双拍结合
void MoDe3(unsigned int MF3,unsigned int t)
{
if(MF3 == 1)
{
StepMotor(D,OFF);
StepMotor(A,ON);
Delay(t);
StepMotor(A,ON);
StepMotor(C,ON);
Delay(t);
StepMotor(A,OFF);
StepMotor(C,ON);
Delay(t);
StepMotor(C,ON);
StepMotor(B,ON);
Delay(t);
StepMotor(C,OFF);
StepMotor(B,ON);
Delay(t);
StepMotor(B,ON);
StepMotor(D,ON);
Delay(t);
StepMotor(B,OFF);
StepMotor(D,ON);
Delay(t);
StepMotor(D,ON);
StepMotor(A,ON);
Delay(t);
}else
{
StepMotor(C,OFF);
StepMotor(A,ON);
Delay(t);
StepMotor(D,ON);
StepMotor(A,ON);
Delay(t);
StepMotor(A,OFF);
StepMotor(D,ON);
Delay(t);
StepMotor(B,ON);
StepMotor(D,ON);
Delay(t);
StepMotor(D,OFF);
StepMotor(B,ON);
Delay(t);
StepMotor(C,ON);
StepMotor(B,ON);
Delay(t);
StepMotor(B,OFF);
StepMotor(C,ON);
Delay(t);
StepMotor(A,ON);
StepMotor(C,ON);
Delay(t);
}
}
void StepMotor(int phase,int status)
{
switch(phase)
{
case A:
if(status==ON)
{
Phase_A = ON;
} else
{
Phase_A = OFF;
}
break;
case B:
if(status==ON)
{
Phase_B = ON;
} else
{
Phase_B = OFF;
}
break;
case C:
if(status==ON)
{
Phase_C = ON;
} else
{
Phase_C = OFF;
}
break;
case D:
if(status==ON)
{
Phase_D = ON;
} else
{
Phase_D = OFF;
}
break;
default:
break;
}
}
void stop(void)
{
StepMotor(A,OFF);
StepMotor(C,OFF);
StepMotor(B,OFF);
StepMotor(D,OFF);
}
unsigned char ScanKey(void)
{
EALLOW;
GpioMuxRegs.GPBDIR.all=0x0FFFF;
EDIS;
GpioDataRegs.GPBSET.all = 0x003F;
GpioDataRegs.GPBCLEAR.all = 0x0FFC0;
Delay(1000);
EALLOW;
GpioMuxRegs.GPBDIR.all=0x0000;
EDIS;
Delay(1000);
keytmp = GpioDataRegs.GPBDAT.all;
/*if(keytmp == 0x003F)
{
flag = 0;
while(flag == 0)
{
keytmp = GpioDataRegs.GPBDAT.all & 0x003F;
flag = 1;
}
}*/
switch(keytmp & 0x003F)
{
case 0x003E:
KeyData = STT;
break;
case 0x003D:
KeyData = STP;
break;
case 0x003B:
KeyData = P;
break;
case 0x0037:
KeyData = N;
break;
case 0x002F:
KeyData = SUp;
break;
case 0x001F:
KeyData = SDn;
break;
default:
break;
}
return(KeyData);
}
//===========================================================================
// No more.
//===========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -