⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 菜鸟,详细NRF24E1运用,程序,电路
💻 C
字号:
/**********************************
/nRF24LE1控制步进电机
***********************************/
#include "reg24le1.h"
#include "intrins.h"
/**********************************/
#define  A1  P00
#define  A2  P01
#define  B1  P02
#define  B2  P03
/**********************************/
#define LEDF P04
#define LEDR P05
#define Disableint do{EA=0;}while(0)
#define Enableint  do{EA=1;}while(0)
#define TABLE_LONGTH  120
/**********************************/
#define true  1
#define false 0
/**********************************/
#define Goahead 1
#define Goback  0
#define STOP    0
#define RUN     1
/**********************************/
typedef unsigned int  uint;
typedef unsigned char uchar;
typedef struct MOTOR{
 uint  Steps;
 uint  Stepc;
 uchar MOTORderection;
 uint  Speed;
 uchar State;
}STEPMOTORTYPE;
STEPMOTORTYPE StepMotor;
static  uint xdata  SpeedTable[TABLE_LONGTH];
/**********************************/
void MCUCLKSET()
{
 CLKCTRL   = 0x28;/*使用 XCOSC16M */ 	
 CLKLFCTRL = 0x01;
}
/**********************************/
void IOCONFIG()
{
P0DIR&=0XC0; /*设置P0.0~P0.5为输出*/
P0=0X00;
}
/**********************************
/设置定时器0用来控制速度
***********************************/
void Timer0init()
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
TR0=1;
EA=0;
}		
/**********************************
/初始化速度表
**********************************/
void SpeedTableinit()
{
uchar i;
SpeedTable[0]=30000;
SpeedTable[1]=25000;
for(i=2;i<TABLE_LONGTH;i++)
  {
  SpeedTable[i]=SpeedTable[i-2]-SpeedTable[i-1]/4;
  }
}
/**********************************
/Delay延时函数
***********************************/
void Delay(uint x)
{
uchar dl;
  for(;x>0;x--)
   for(dl=200;dl>0;dl--)
      {
	  _nop_();
	  }

}
/**********************************
/脉冲设置函数
**********************************/
void PulseSet(uchar _A1,uchar _A2,uchar _B1,uchar _B2)
{
A1=_A1;
A2=_A2;
B1=_B1;
B2=_B2;
return;
}
/**********************************
/步进电机驱动函数
***********************************/
void MOTORRUN(uchar Derection)
{
 static uchar Num=0;
 if(Derection==Goahead)  /*设置正转*/
 {
  Num=(Num+1)%8;                       
 }
 else                    /*设置反转*/
 {
  Num=(Num+7)%8;
 }
 switch(Num)
 {
  case 0 :PulseSet(0,1,1,1);break;
  case 1 :PulseSet(0,0,1,1);break;
  case 2 :PulseSet(1,0,1,1);break;
  case 3 :PulseSet(1,0,0,1);break;
  case 4 :PulseSet(1,1,0,1);break;
  case 5 :PulseSet(1,1,0,0);break;
  case 6 :PulseSet(1,1,1,0);break;
  case 7 :PulseSet(0,1,1,0);break;
  default:break;
 }
}
/**********************************
/步进电机控制运行
***********************************/
void MotorCtr()
{
if(StepMotor.Steps>StepMotor.Stepc)
 {
 StepMotor.State=RUN;
 StepMotor.Speed=StepMotor.Steps-StepMotor.Stepc;
 if(StepMotor.Speed>119)
  {
  StepMotor.Speed=119;
  }
 MOTORRUN(StepMotor.MOTORderection);
 StepMotor.Stepc++;
 }
else if(StepMotor.Steps<=StepMotor.Stepc)
 {
 StepMotor.State=STOP;
 StepMotor.Speed=0;
 StepMotor.Steps=0;
 StepMotor.Stepc=0;
 }
}
/**********************************
/步进电机启动参数设置
***********************************/
void MOTORSET(uchar state,bit Derection,uint steps)
{
StepMotor.Stepc=0;
StepMotor.Steps=steps;
StepMotor.MOTORderection=Derection;
StepMotor.Speed=100;
StepMotor.State=state;
if(StepMotor.State!=STOP)  
{TR0=1;}  /*打开步进电机前进*/
}
/**********************************
/定时中断服务函数
***********************************/
void TIMER0ISR() interrupt INTERRUPT_TF0
{
 TR0=0;
 MotorCtr();
// TH0=(65536-SpeedTable[StepMotor.Speed])/256;
// TL0=(65536-SpeedTable[StepMotor.Speed])%256;
 TH0=(65536-1500)/256;
 TL0=(65536-1500)%256;
 if(StepMotor.State!=STOP)
 {
 TR0=1;/*打开定时器*/
 }
}
/*********************************
/主函数部分
**********************************/
void main()
{
/*初始化函数*/
 Disableint;
 MCUCLKSET();
 IOCONFIG();
 Timer0init();
 SpeedTableinit();
 Enableint;
while(1)
 {
/*设置步进电机正转*/
 LEDR=0;
 LEDF=1; 
 MOTORSET(RUN,Goahead,10000);
 while(StepMotor.State!=STOP);
 Delay(20000);
/*设置步进电机反转*/
 LEDF=0;
 LEDR=1;
 MOTORSET(RUN,Goback,10000);
 while(StepMotor.State!=STOP);
 Delay(20000);
 }
}
/*******************************
/         程序到此结束         /
********************************/




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -