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

📄 t.c

📁 本人收集的一些C语言程序
💻 C
字号:
/************************************************************************************/
/*     程序名:PWM直流电机调速                                                      */
/*                                                                                  */
/*     晶振:12.0 M                                        CPU型号:AT89S52         */
/*                                                                                  */                                             
/*                                                                                  */
/*     功能描述: 将J12的2,3脚和J8的7,8脚(均自上而下数)分别相连!	    		*/
/*                     直流电机的pwm波控制,可以直接的调速从0到20级的调速           */ 
/*                                                                                  */
/*     http://www.mculover.net                                                      */
/*     http://www.mculover.net/bbs                                                  */
/*   													 					    	*/
/*                                                                                  */
/*                                                湘灵电子工作室 版权所有           */                                 
/*                                                         2006-03-20               */
/************************************************************************************/ 
#include<reg51.h>

#define  TH0_TL0  (65536-1000)//设定中断的间隔时长

unsigned char count0 = 0;
unsigned char count1 = 0;

bit  Flag = 1;//电机正反转标志位,1正转,0反转

sbit Key_add=P1 ^ 4;  //电机减速
sbit Key_dec=P1 ^ 5;  //电机加速
sbit Key_turn=P1 ^ 6; //电机换向

sbit PWM1=P3^6;//PWM 通道 1
sbit PWM2=P3^7;//PWM 通道 2

unsigned char Time_delay;

//函数声明
void Delay(unsigned char x);
void Motor_speed_high(void);
void Motor_speed_low(void);
void Motor_turn(void);
void Timer0_init(void);

/******************************************************************************/
void Delay(unsigned char x)//延时处理
{
	Time_delay = x;

	while(Time_delay != 0);
}

/******************************************************************************/
void Timer0_int(void) interrupt 1 using 1//定时中断处理
{
	TR0 = 0;
    TL0 += (TH0_TL0 + 9) % 256;
    TH0 += (TH0_TL0 + 9) / 256 + (char)CY;
    TR0 = 1;

	if(Time_delay != 0)
	{
		Time_delay--; //延时函数用
	}

	if(Flag == 1)//电机正转
	{
		PWM1 = 0;	

		if(++count1 < count0)
		{
			PWM2 = 1;
		}
		else 
			PWM2 = 0;

		if(count1 >= 100)
		{
			count1=0;
		}
	 }
	else      //电机反转
	{
		PWM2 = 0;	

		if(++count1 < count0)
		{
			PWM1 = 1;
		}
		else 
			PWM1 = 0;

		if(count1 >= 100)
		{
			count1=0;
		}
	 }//反转
}

/******************************************************************************/
void Motor_speed_high(void)//按键处理加pwm占空比,电机加速
{
	if(Key_add==0)
	{
		Delay(10);
		if(Key_add==0)
		{
			count0 += 5;
		
			if(count0 >= 100)
			{
				count0 = 0;
			}	
	   	}
		while(Key_add == 0);//等待键松开
	}
}

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

/******************************************************************************/
void Motor_turn(void)//电机正反向控制
{
	if(Key_turn == 0)
	{
		Delay(10);
		if(Key_turn == 0)
		{
			Flag = ~Flag;
		}
		while(Key_turn == 0);
	}
}

/******************************************************************************/
void Timer0_init(void)//定时器0初始化
{
	TMOD=0x01;
	TH0=TH0_TL0 / 256;
	TL0=TH0_TL0 % 256;
	TR0=1;
	ET0=1;
	EA=1;
}

/******************************************************************************/
void main(void)//主函数
{
    Timer0_init();
           
	while(1)
	{
		Motor_turn();

		Motor_speed_high();
		Motor_speed_low();
	 }
}


⌨️ 快捷键说明

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