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

📄 motor.c

📁 由单片机8951来控制 c语言编写 具有实现正转反转 加速减速 采用PWM调制的方法
💻 C
字号:
 #include <reg51.h>
 #include <intrins.h>
 #include <absacc.h>
 #define uchar unsigned char 
  
  sbit  PWM=P1^0;
  sbit  DR=P1^1;
  sbit  big_pwm=P1^2;
  sbit  small_pwm=P1^3;
  sbit  turn_direction=P1^4;
  sbit   big   =P2^1;
  
  #define timer_data (256-100)
  #define PWM_T  100		   //定义脉冲的宽度
  
  unsigned char PWM_t ;	   //位时间脉冲宽度0~100
  unsigned char  PWM_count;	//输出周期计数
  unsigned char time_count;
  bit direction;
/***************************************************/
 //函数声明
 /***************************************************/
   void Delay(uchar);
   void Mortor_speed_high();
   void Mortor_speed_low();
   void Mortor_turn();
 /***************************************************/
 //	 定时器初始化选择方式二,延时0.1MS
 /***************************************************/

  void timer_init(void)
  {
  	TMOD=0x22;
	PCON=0x00;	 //选择方式2
	TF0=0;
	TH0=timer_data;	 //定时0.1毫秒
	TL0=TH0;
	ET0=1;
	TR0=1;
	EA=1;
  }
void init()
{
	
}
void  Delay(uchar temp)
  {
  	uchar i;
	for(i=0;i<temp;i++);
  }
   /***************************************************/
 //	 设定脉冲宽度和方向
 /***************************************************/
  void setting_PWM()
  {
  
	if(PWM_count==0)
	{
		PWM_t=20;
		direction=1;
	}
  }
 
 /******************************************************************************/
void Motor_speed_high(void)//按键处理加pwm占空比,电机加速
{
	if(big_pwm==0)
	{
		Delay(10);
		if(big_pwm==0)
		{
			PWM_t += 5;
		
			if(PWM_t >= 100)
			{
				PWM_t = 100;
			}	
	   	}
		while(big_pwm == 0);//等待键松开
	}
}

/******************************************************************************/
void Motor_speed_low(void)//按键处理减pwm占空比,电机减速
{
	if(small_pwm==0)
	{
		Delay(10);
		if(small_pwm==0)
		{
			PWM_t -= 5;
	
			if(PWM_t <= 0)
			{
				PWM_t = 0;
			}	
	   	}
		while(small_pwm == 0);
	}	
}

/******************************************************************************/
void Motor_turn(void)//电机正反向控制
{
	if(turn_direction== 0)
	{
		Delay(10);
		if(turn_direction== 0)
		{
			direction = ~direction;
		}
		while(turn_direction== 0);
	}
}
 void main()
 {
 	timer_init();
	while(1)
	{
	 setting_PWM();
	 Mortor_speed_low();
	 Mortor_speed_high();
	 Mortor_turn();
	 }
 }
   /***************************************************/
 //	 pwm波输出程序
 /***************************************************/
 void  Intimer0() interrupt 1
 {
 	time_count++;
	DR=PWM_t;big=!big;
	if(time_count>=PWM_T)
	{
	 time_count=0;
	 PWM_count++;
	 setting_PWM();	//每一个周期调用一次
	}
	if(time_count<PWM_t)
	PWM=1;
	else 
	PWM=0;
 }

⌨️ 快捷键说明

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