精华内容
下载资源
问答
  • 利用51单片机输出pwm

    万次阅读 多人点赞 2017-05-18 13:31:52
    51单片机是可以输出PWM的,比较的麻烦。此时需要用到内部定时器来实现,可用两个定时器实现,也可以用一个定时器实现。  用两个定时器的方法是用定时器T0来控制频率,定时器T1来控制占空比。大致的的编程思路是这样...
     51单片机是可以输出PWM的,比较的麻烦。此时需要用到内部定时器来实现,可用两个定时器实现,也可以用一个定时器实现。

      用两个定时器的方法是用定时器T0来控制频率,定时器T1来控制占空比。大致的的编程思路是这样的:T0定时器中断让一个I0口输出高电平,在这个定时器T0的中断当中起动定时器T1,而这个T1是让IO口输出低电平,这样改变定时器T0的初值就可以改变频率,改变定时器T1的初值就可以改变占空比。

      下面重点介绍用一个定时器的实现PWM的方法。以周期为1ms(1kHZ)为例,要产生其它频率的PWM波,程序中只需作简单修改即可。用一个定时器时(如定时器T0),首先要确定PWM的周期T和占空比D,确定了这些以后,就可以用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则D*T=n*t,类似的可以求出PWM低电平时间需要多少个时间基准n。

      因为这里我们是产生周期为1ms(1kHZ)的PWM,所以可设置中断的时间基准为0.01ms,,然后中断100次即为1ms。在中断子程序内,可设置一个变量如time,在中断子程序内,有三条重要的语句:

       1、当time>=100时,time清零(此语句保证频率为1kHZ);

       2、当time>n时(n应该在0-100之间变化开),让单片相应的I/O口输出低电平;

       3、当time<=n时,让单片相应的I/O口输出高电平,此时占空比就为%n。

     下面程序产生30%占空比的pwm:

    #include<reg51.h>
    #define uint unsigned int
    #define uchar unsigned char
    
    sbit PWM=P2^0;//  P2.0输出pwm
    uchar time;  // 定义占空比的变量
    
    void main()
    {
    	TMOD=0x01;//定时器0工作方式1
    	TH0=0xff;//(65536-10)/256;//赋初值定时
    	TL0=0xf7;//(65536-10)%256;//0.01ms
    	EA=1;//开总中断
    	ET0=1;//开定时器0中断
    	TR0=1;//启动定时器0 
    	while(1)
    	{			
    	}			
    }
    
    void tim0() interrupt 1
    {
    	TR0=0;//赋初值时,关闭定时器
    	TH0=0xff;//(65536-10)/256;//赋初值定时
    	TL0=0xf7;//(65536-10)%256;//0.01ms
    	TR0=1;//打开定时器
    
    	time++;
    	if(time>=100)  //1khz
    	  time=0;   
    	if(time<=30)   //占空比%30,可改
    	  PWM=1;  
    	else PWM=0;
    }


       最后的到波形,在示波器上显示如下图所示:


       如果想修改占空比,直接在程序里面修改下面这句即可。
       if(time<=30)//占空比%30,可改占空比

       当然我们可以加入其它的手段来动态改变占空比,比如按键,上位机等。
    按键动态调节占空比可参考我另一篇博客:http://blog.csdn.net/dmfylb/article/details/72605221


    展开全文
  • 利用51单片机输出pwm-CH549DS1.PDF
  • PWM这个功能在飞思卡尔、STM32等高档的单片机内部有专用的模块,用此类芯片...但是如果要用51单片机的话,也是可以的,但是比较的麻烦。此时需要用到内部定时器来实现,可用两个定时器实现,也可以用一个定时器实现。
  • 利用51单片机输出PWM

    千次阅读 2020-07-23 10:11:55
    利用51单片机输出PWM波 用一个定时器时(如定时器T0),首先确定PWM的周期T和占空比D,确定了这些以后,用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则DT=nt,类似的可以求出PWM低电平...

    利用51单片机输出PWM波

    用一个定时器时(如定时器T0),首先确定PWM的周期T和占空比D,确定了这些以后,用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则DT=nt,类似的可以求出PWM低电平时间需要多少个时间基准n。
    因为这里我们是产生周期为1ms(1000HZ)的PWM,所以可设置中断的时间间隔为0.01ms,然后中断100次即为1ms。在中断子程序内,可设置一个变量如time,在中断子程序内,有三条重要的语句:
    1、当time>=100时,time清零(此语句保证频率为1000HZ)
    2、当time>n时(n应该在0-100之间变化开),让单片相应的I/O口输出低电平
    3、当time<n时,让单片相应的I/O口输出高电平,此时占空比就为百分之n。

    程序1,使单片机的I/O口输出固定频率的PWM波

    程序说明:

    1、关于频率的确定:对于11.0592M晶振, PWM输出频率为1KHZ, 此时设定时器0.01ms中断一次,时中断次数100次即为1KHZ( 0.01ms*100=1ms,即为1000HZ)此时, 定时器计数器赋初值为TH0=FF,TL0=F7。

    2、关于占空比的确定:此时我们将来time的值从0-100之间进行改变,就可以将占空比从%0-%100之间进行变化,上面程序中time<=20时 PWM1=0; else PWM1=1;意思就是%20的时间输出低电平,%80的时间输出高电平,即占空比为%80。如需得到其它占空比,如%60,只需将time的值改为40即可。(程序为if(time<=40) PWM1=0;else PWM1=1;)

    3、编写程序时也可以定义一个标志位如flag,根据flag的状态决定输出高平还是低电平,假设定义flag=1的时候输出高电平,用一个变量去记录定时器中断的次数,每次中断就让记录中断次数的变量+1,在中断程序里面判断这个变量的值是否到了 n ,如果到了说明高电平的时间够了,那么就改变flag为0,输出低电平,同时记录中断变量的值清零,每次中断的时候依旧+1,根据flag=0的情况跳去判断记录变量的值是否到了 n’ 如果到了,说明PWM的低电平时间够了,那么就改flag=1,输出改高电平,同时记录次数变量清零,重新开始,如此循环便可得到想要的PWM波形

    /*******************************************************************/
    
    /* 程序名:单片机输出固定频率的PWM波*/
    
    /* 晶振:11.00592 MHz CPU型号:STC89C52 */
    
    /* 功能:P2^0口输出周期为1ms(1000HZ),占空比为%80的PWM波*/
    
    /*****************************************************************/
    
    #include<reg52.h>
    #define uint unsigned int
    #define uchar unsigned char
    
    sbit PWM1=P2^0;//接IN1 控制正转
    sbit PWM2=P2^1;//接IN2 控制反转
    uchar time;
    
    void main()
    {
    	TMOD=0x01;//定时器0工作方式1
    	TH0=0xff;//(65536-10)/256;//赋初值定时
    	TL0=0xf7;//(65536-10)%256;//0.01ms
    	EA=1;//开总中断
    	ET0=1;//开定时器0中断
    	TR0=1;//启动定时器0
    	while(1){}
    }
    
    
    void delay(uint z)
    {
    	uint x,y;
    	for(x=z;x>0;x--)
    	{
    		for(y=500;y>0;y--);
    	}
    }
    
     
    
    void tim0() interrupt 1
    {
           TR0=0;		//赋初值时,关闭定时器
           TH0=0xff;	//(65536-10)/256;//赋初值定时
           TL0=0xf7;	//(65536-10)%256;//0.01ms
           TR0=1;		//打开定时器
           time++;
           if(time>=100) time=0;	//1khz
           if(time<=20) PWM1=0;		//点空比%80
           else PWM1=1;
           PWM2=0;
    }
    
    程序2,使用单片机I/O口输出PWM波,并能通过按键控制正反转

    在程序中我们通常需要控制电机的正反转,如通过一个按键控制正反转,此时我们也可以设置一个标志位如flag。在主程序中当按键每次被按下时,flag相应取反。然后在子程序中当flag为1时,进行正转程序,当flag为0时执行反转程序。

    /*******************************************************************/
    
    /* 程序名:PWM直流电机调速 */
    
    /* 晶振:11.00592 MHz CPU型号:STC89C52 */
    
    /* 功能:直流电机的PWM波控制,可以通过按键控制正反转 */
    
    /*****************************************************************/
    
    #include<reg52.h>
    #define uint unsigned int
    #define uchar unsigned char
    
    uchar time,count=50,flag=1;//低电平的占空
    
    sbit PWM1=P2^0;		//PWM 通道 1,反转脉冲
    sbit PWM2=P2^1;		//PWM 通道 2,正转脉冲
    sbit key_turn=P3^7; //电机换向
    
     
    
    /************函数声明**************/
    void delayxms(uint z);
    void Motor_turn(void);
    void timer0_init(void);
    
    /*********主函数********************/
    
    void main(void)
    {
    	timer0_init();
    	while(1)
    	{
    		 Motor_turn();
    	}
    }
    
     
    
    /****************延时处理**********************/
    
    void delayxms(uint z)//延时xms程序
    {
        uint x,y;
        for(y=z;x>0;x--)
              for(y=110;y>0;y--);
    }
    
     
    
    /************电机正反向控制**************/
    
    void Motor_turn(void)
    {
    	if(key_turn==0)
    	 {
    	    delayxms(2);//此处时间不能太长,否者会的中断产生冲突
    	    if(key_turn==0)flag=~flag;
    	    while(!key_turn);
    	 }
    }
    
     
    
    /***********定时器0初始化***********/
    
    void timer0_init(void)
    {
    	TMOD=0x01; //定时器0工作于方式1
    	TH0=(65536-10)/256;
    	TL0=(65536-10)%256;
    	TR0=1;
    	ET0=1;
    	EA=1;
    }
    
     
    
    /**************定时0中断处理******************/
    
    void timer0_int(void) interrupt 1
    {
    	TR0=0;//设置定时器初值期间,关闭定时器
    	TH0=(65536-10)/256;
    	TL0=(65536-10)%256;
    	TR0=1;
    
    	if(flag==1)//电机正转
    	{
    		PWM1=0;
    		time++;
    		if(time<count)PWM2=1;
    		else  PWM2=0;
    		
    		if(time>=100)time=0;
    	}
    
    	else //电机反转
    	{
    		PWM2=0;
    		time++;
    		if(time<count) PWM1=1;
    		else PWM1=0;
    		
    		if(time>=100)time=0;
    	}
    }
    
    程序3、使单片机输出PWM,并能控制正反转和实现调速

    下面再给出一个复杂一点的程序,实现的功能为通过一个按键控制正反转并通过另外两个按键使之可以在0到20级之间调速的程序。

    /*******************************************************************/
    
    /* 程序名:PWM直流电机调速 */
    
    /* 晶振:11.00592 MHz CPU型号:STC89C52 */
    
    /* 直流电机的PWM波控制,可以通过按键控制正反转并在0到20级之间调速 */
    
    /*****************************************************************/
    #include<reg52.h>
    #define uint unsigned int
    #define uchar unsigned char
    
    uchar time,count=50,flag=1;//低电平的占空比
    
     
    sbit PWM1=P2^0;			//PWM 通道 1,反转脉冲
    sbit PWM2=P2^1;			//PWM 通道 2,正转脉冲
    sbit key_add=P3^5;		//电机加速
    sbit key_dec=P3^6;		//电机减速
    sbit key_turn=P3^7;		//电机换向
    
     
    
    /************函数声明**************/
    
    void delayxms(uint z);
    void Motor_turn();
    void Motor_add();
    void Motor_dec();
    void timer0_init();
    
     
    /*********主函数********************/
    
    void main()
    {
        timer0_init();
        while(1)
        {
           Motor_turn();
           Motor_add();
           Motor_dec();
        }
    }
    
     
    /****************延时处理**********************/
    
    void delayxms(uint z)//延时xms程序
    {
        uint x,y;
        for(y=z;x>0;x--)
           for(y=110;y>0;y--);
    }
    
     
    
    /************电机正反向控制**************/
    
    void Motor_turn()
    {
    	if(key_turn==0)
    	{
    		delayxms(2);//此处时间不能太长,否者会的中断产生冲突
    		if(key_turn==0)
    		{
    			flag=~flag;
    		}
    		while(!key_turn);
    	}
    
    }
    
     
    
    void Motor_add()//电机加速
    {
    	if(key_add==0)
    	{
    		delayxms(2);//此处时间不能太长,否者会的中断产生冲突
    		if(key_add==0)
    		{
    			count+=5;
    			if(count>=100)
    			{
    				count=0;
    			}
    		}
    		while(!key_add);
    	}
    }
    
     
    
    void Motor_dec()//电机加减速
    {
    	if(key_dec==0)
    	{
    		delayxms(2);//此处时间不能太长,否者会的中断产生冲突
    		if(key_dec==0)
    		{
    			count-=5;
    			if(count>=100)
    			{
    				count=0;
    			}
    		}
    		while(!key_dec);
    	}
    }
    
     
    
    /***********定时器0初始化***********/
    
    void timer0_init()
    {
        TMOD=0x01; //定时器0工作于方式1
        TH0=(65536-10)/256;
        TL0=(65536-10)%256;
        TR0=1;
        ET0=1;
        EA=1;
    }
    
     
    
    /**************定时0中断处理******************/
    
    void timer0_int() interrupt 1
    {
        TR0=0;//设置定时器初值期间,关闭定时器
        TH0=(65536-10)/256;
        TL0=(65536-10)%256;
        TR0=1;
    
        if(flag==1)//电机正转
        {
           PWM1=0;
           time++;
            if(time<count) PWM2=1;
            else           PWM2=0;
    
            if(time>=100) time=0;
        }
    
        else //电机反转
        {
           PWM2=0;
           time++;
            if(time<count) PWM1=1;
            else           PWM1=0;
    
    		if(time>=100) time=0;
        }
    }
    
    
     
    
    程序四:利用单片机输出PWM简单控制小车直行
    #include<reg52.h>
    
    #define uint unsigned int
    
    #define uchar unsigned char
    
     
    
    sbit PWM1=P2^0;//接IN1 控制正转
    
    sbit PWM2=P2^1;//接IN2 控制反转
    
     
    
    sbit PWM3=P2^2;//接IN3 控制正转
    
    sbit PWM4=P2^3;//接IN4 控制反转
    
     
    
    sbit PWM5=P2^4;//接IN3 控制正转
    
    sbit PWM6=P2^5;//接IN4 控制反转
    
     
    
    sbit PWM7=P2^6;//接IN3 控制正转
    
    sbit PWM8=P2^7;//接IN4 控制反转
    
     
    
    uchar time;
    
     
    
    void main()
    
    {
    
        TMOD=0x01;//定时器0工作方式1
    
        TH0=0xff;//(65536-10)/256;//赋初值定时
    
        TL0=0xf7;//(65536-10)%256;//0.01ms
    
        EA=1;//开总中断
    
        ET0=1;//开定时器0中断
    
        TR0=1;//启动定时器0
    
        while(1)
    
        {
    
              
    
        }         
    
    }
    
     
    
    void delay(uint z)
    
    {
    
        uint x,y;
    
        for(x=z;x>0;x--)
    
           for(y=500;y>0;y--);
    
    }
    
     
    
    void tim0() interrupt 1
    
    {
    
        TR0=0;//赋初值时,关闭定时器
    
        TH0=0xff;//(65536-10)/256;//赋初值定时
    
        TL0=0xf7;//(65536-10)%256;//0.01ms
    
        TR0=1;//打开定时器
    
     
    
        time++;
    
        if(time>=100) time=0;//1khz
    
        PWM2=0;
    
        PWM4=0;   
    
        if(time<=75) PWM1=1;
    
        else PWM1=0;
    
        if(time<=80) PWM3=1;
    
        else PWM3=0;
    
     
    
        PWM6=0;
    
        PWM8=0;   
    
        if(time<=50) PWM5=1;
    
        else PWM5=0;
    
        if(time<=50) PWM7=1;
    
        else PWM7=0;     
    
    }
    
    展开全文
  • 51单片机输出PWM

    2013-04-19 15:35:31
    利用Atmel89C51单片机的定时器输出占空比可调的PWM
  • 51单片机输出PWM.zip

    2020-07-16 11:16:45
    程序是一个三基色合成演示装置,可以通过串口屏和案件控制PWM脉宽,从而调节亮度,利用51单片机用一个定时器实现PWM来调节三个灯的亮度,51单片机用一个定时器实现PWM来调节三个灯的亮度,
  • 利用中断和延时程序 实现按钮控制单片机输出PWM波,用于控制双足机器人
  • 两种方法教你利用单片机输出PWM脉冲来源:华强电子网作者:华仔浏览:406时间:2017-05-04 23:52标签:摘要:51单片机没有PWM输出功能,可以采用定时器配合软件的方法实现,对精度要求不高的场合是非常实用的。...

    两种方法教你利用单片机输出PWM脉冲

    来源:华强电子网

    作者:华仔

    浏览:406

    时间:2017-05-04 23:52

    标签:

    摘要:

    51单片机没有PWM输出功能,可以采用定时器配合软件的方法实现,对精度要求不高的场合是非常实用的。采用高速光隔6N137输出,并将PWM的信号倒相。一、 工作原理二、PWM输出1. 固定脉宽PWM输出用T0定时器完成PWM输出,脉宽固定为65536μs。T0定时器设置成16位定时器,PWM波形如图2所示。程序清单:(12MHz)PwmData0 ;T0定时t1的初值(字)PwmData1

    51单片机没有PWM输出功能,可以采用定时器配合软件的方法实现,对精度要求不高的场合是非常实用的。采用高速光隔6N137输出,并将PWM的信号倒相。

    一、 工作原理

    二、PWM输出

    1. 固定脉宽PWM输出

    用T0定时器完成PWM输出,脉宽固定为65536μs。T0定时器设置成16位定时器,PWM波形如图2所示。

    程序清单:(12MHz)

    PwmData0 ;T0定时t1的初值(字)

    PwmData1 ;T0定时t2的初值(字)

    PwmF   ;PWM输出标志

    ;***************************

    setb tro ;启动T0

    ……

    T0Int:;T0中断服务程序

    JB PwmF ,PwmOutH

    ;PWM输出未完成返回

    Mov TH0,High(PwmData0)

    Mov TL0,Low(PwmData0)

    Setb tr0

    Setb PwmF

    Clr p1.0 ;PWM输出脚

    reti

    PwmOutH:Setb p1.0

    Clr tr0

    Mov TH0,High(PwmData1)

    Mov TL0,Low(PwmData1)

    Setb tr0

    Clr PwmF

    reti

    说明:在主程序中计算PwmData0、PwmData1的值。

    2. 可变脉宽PWM输出

    用T0定时器控制PWM的占空比,T1定时器控制脉宽(最大65536μs。)

    T0、T1定时器设置成16位定时器。

    程序清单:(12MHz)

    PwmData0 ;T0定时t1的初值(字)

    PwmData1 ;T1定时T的初值(字)

    ;***************************

    setb tro ;启动T0

    setb tr1

    ……

    T0Int:Clr tr0   ;T0中断服务程序

    setb p1.0 ;PWM输出脚

    reti

    T1Int:Clr p1.0 ;T1中断服务程序

    Clr tr0

    Clr tr1

    Mov TH0,High(PwmData0)

    Mov TL0,Low(PwmData0)

    Mov TH1,High(PwmData1)

    Mov TL1,Low(PwmData1)

    Setb tr1

    Setb tr0

    reti

    说明:在主程序中计算PwmData0、PwmData1的值。

    展开全文
  • 51单片机按键控制输出pwm的占空比

    万次阅读 多人点赞 2017-05-21 20:11:00
    之前说到利用51单片机输出pwm,但是输出的pwm是固定占空比的,如果想要改变占空比,还得回过头来修改程序并重新烧写进单片机。这样做的话不但麻烦、效率低,还又把芯片的可烧写次数减少了一次,虽然51的芯片现在很...

        之前说到利用51单片机输出pwm,但是输出的pwm是固定占空比的,如果想要改变占空比,还得回过头来修改程序并重新烧写进单片机。这样做的话不但麻烦、效率低,还又把芯片的可烧写次数减少了一次,虽然51的芯片现在很便宜,但能省点就省点,能不浪费就不浪费,哈哈,开玩笑啦!最主要的还是为了灵活性,为此特地通过加入按键的功能来实现动态修改输出的pwm的占空比。这样在用pwm控制电机的时候就能使用按键来控制电机转速了。废话不多说,见下:

    #include<reg51.h>
    
    #define uint unsigned int 
    #define uchar unsigned char							 
    
    uchar time; 
    double count=26;	//定义占空比,并初始占空比为26%
    sbit PWM=P2^0;      //P2^0口输出PWM 
    sbit key_add=P3^4;   //电机加速的按键 的I/O口
    sbit key_dec=P3^5;   //电机减速的按键 的I/O口
    
    
    /************函数声明**************/
    void delayxms(uint z); //延时
    void Motor_add();	  //电机加速,即增加占空比
    void Motor_dec();	   //电机减速,即减少占空比
    void timer0_init();		//定时器0初始化
    
    /*********主函数********************/
    void main()
    {	 
    	timer0_init();
    	delayxms(5);
    	while(1)
    	{
    	 Motor_add();
    	 Motor_dec();
    	}
    }
    
    /****************延时处理**********************/
    void delayxms(uint z) //延时xms程序
    {
        uint x,y;
    	for(y=z;x>0;x--)
    		for(y=110;y>0;y--);
    }
    
    
    void Motor_add()  //电机加速
    {
      if(key_add==0)
      {
    	  delayxms(2); //此处时间不能太长,否者会的中断产生冲突
      if(key_add==0)
      {
    	  count+=0.5;	//每按一次加速按键占空比加0.5
       if(count>=32)	    //限定占空比上限
    	{
    	 count=32;
    	}
      }
    	while(!key_add);
      }
    }
    
    void Motor_dec()//电机减速
    {
     if(key_dec==0)
     {
      delayxms(2);//此处时间不能太长,否者会的中断产生冲突
      if(key_dec==0)
      {
      	count-=0.5;	 	//每按一次减速按键占空比减0.5
       if(count<=25)    //限定占空比下限
       {
    	count=25;
       }
      }
    	while(!key_dec);
       }
    }
    
    /***********定时器0初始化***********/
    void timer0_init()
    {
      TMOD=0x01; //定时器0工作于方式1
      TH0=(65536-10)/256;
      TL0=(65536-10)%256;
      TR0=1;
      ET0=1;
      EA=1;
    }
    
    /**************定时0中断处理******************/
    void timer0_int() interrupt 1 
    {
    	
      TR0=0;    //设置定时器初值期间,关闭定时器
      TH0=(65536-10)/256;
      TL0=(65536-10)%256;
      TR0=1;
    	 
      time++;
      if(time<count)	  //count为占空比
      {
    	PWM=1;	   //输出高电平
      }
      else 
    	PWM=0;	
      if(time>=100)
      {
    	time=0;
      }
     }


    我特地标注了重要部分程序的注释。另外,可以在程序中修改按键每次增加或者减少的占空比,但有的时候发现在按键调节占空比时,不想占空比一直增加或者减少下去,还可以在程序里面修改限定占空比的上下限,当达到上限或下限时,相应的增加或减少占空比的按钮这时就不再增加或者减少占空比了。这样在电机控制时就可以防止不小心让电机速度增加到规定速度以上或以下了。这些在程序注释里面课看见在哪里改。除此之外,还可以加进来很多功能。这里就不举相应的子了。


    展开全文
  • 主要是讲51系列单片机利用定时器输出PWM的两种方法
  • 89C51芯片没有自带PWM发生器,如果要用51来产生PWM波就必须要用软件编程的方法来模拟。方法大概可以分为软件延时和定时器产生两种方法。下面将逐一介绍。1 软件延时法利用软件延时函数,控制电平持续的时间,达到...
  • 利用C51单片机控制输出PWM(脉宽调制)波形从而控制温度的C语言程序
  • 基于51单片机模拟PWM

    2018-12-26 20:16:07
    脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。本程序基于51单片机所涉及的模拟PWM的脉宽输出
  • 51单片机,通过使用定时器T0,利用方式2达到输出PWM脉冲并控制占空比程序。
  • 51单片机是可以输出PWM的,比较的麻烦。此时需要用到内部定时器来实现,可用两个定时器实现,也可以用一个定时器实现。  用两个定时器的方法是用定时器T0来控制频率,定时器T1来控制占空比。大致的的编程思路是...
  • 通过模拟PWM信号输出利用光敏电阻控制led10 #include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int #define AIN0 0xb4; //光敏电阻 sbit CS = P3^7; sbit ...
  • 51单片机PWM控制

    2009-11-22 00:09:00
    利用定时器输出PWM信号控制发光二极管的亮度
  • 51单片机学习——PWM

    2021-02-02 14:35:20
    当用单片机IO口输出PWM信号时,可采用下面三种方法 (1)利用软件延时。当高电平延时时间到时,对IO口电平取反得到低电平,然后再延时,当低电平延时时间到时,再对IO口电平取反,如此循环就可以得到PWN信号 (2)...
  • 前言 ...本博文用描述两种模拟输出PWM波的方法; 如有不做之处还请多多指教; 方法一: 需要用到的东西 利用定时器0完成(定时器1也一样); 利用P1.0~P1.3完成4路PWM的输出(不同的占空比); ...
  • PWM简介 脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。 脉冲宽度调制是一种模拟... 本文主要介绍的是51单片机PWM双舵机控
  • // 包含51单片机寄存器定义的头文件 #include<stdio.h>sbit sound=P1^5; //将sound位定义为P1.5引脚 void main(void) { TMOD=0x10; //使用定时器T1的模式1 TH1=(65536-921)/256; //定时器T1的高8位赋初值 TL1...

空空如也

空空如也

1 2 3 4
收藏数 68
精华内容 27
关键字:

利用51单片机输出pwm