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

📄 dcmotor-pwm.c

📁 PWM 控制 直流电机调速程序 利用定时器控制产生占空比可变的 PWM 波 按K1
💻 C
字号:
/*********************************************************
		PWM 控制 直流电机调速程序
		For 武汉理工大学  09.01.10
		晶振11.0592M
		利用定时器控制产生占空比可变的 PWM 波
		按K1,PWM值增加,则占空比减小,电机速度变慢。
		按K2,PWM值减小,则占空比增加,电机速度加快。	
*********************************************************/

#include < reg51.h >
#include < intrins.h >

sbit input1=P2^0;					//
sbit input2=P2^1;					//
sbit K1 =P1^4 ;                    //增加键
sbit K2 =P1^5 ;                    //减少键
sbit K3 =P1^6 ;                    //转向键
sbit K4 =P1^7 ;                    //开关键
sbit ENA = P2^2 ;				 //pwm输出,电机使能
bit m,n; 
unsigned char PWM=0x7f ;   //赋初值
/*********************************************************
	延时子程序
*********************************************************/
void delayms(unsigned char ms) 

{
    unsigned char i ;
    while(ms--)
     {
        for(i = 0 ; i < 120 ; i++) ;
     }
}
/*********************************************************
	 初始化子程序
*********************************************************/
void init()				
{
	P1=0xff; 
	TMOD=0x21 ;
	TH0=0xfe ;			//1ms延时常数
	TL0=0xff ;			//频率调节
	TH1=PWM ;			//脉宽调节
	TL1=0 ;
	EA=1;
	ET0=1;
	ET1=1;
	TR0=1 ;
	m=0;
	n=0;
}
/*********************************************************/
void main()
{  
	init();
	while(1)
	{ 
		if(K4==0)
		{m=~m;while(!K4);}				//启动、停止切换
		if(m==1)
		{
			if(K3==0)
			{n=~n;while(!K3);}			//前进、后退切换
				if(n==0)				//启动@前进
				{
					input1=1;
					input2=0;
				}
				else					//后退
				{
					input1=0;
					input2=1;
				}
		}
		else							//停止
		{
			input1=0;
			input2=0;
			n=0;
		}
		
		
		do	{
			if(PWM!=0xff)
			{PWM++ ;delayms(5);}
			}
		while(K1==0);
		
		do	{
			if(PWM!=0x01)
			{PWM-- ;delayms(5);} 
		}
		while(K2==0);
	}
}

/*********************************************************/
// 定时器0中断服务程序.
/*********************************************************/
void timer0() interrupt 1 
{ 
    TR1=0 ;
    TH0=0xfe ;
    TL0=0xff ;
    TH1=PWM ;
    TR1=1 ;
    ENA=0 ;      //启动输出
}

/*********************************************************/
// 定时器1中断服务程序
/*********************************************************/
void timer1() interrupt 3 
{ 
    TR1=0 ;
    ENA=1 ;     //结束输出
}

⌨️ 快捷键说明

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