找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9955|回复: 6
收起左侧

注释详细的51单片机pwm调光代码

[复制链接]
ID:433086 发表于 2019-5-18 14:59 | 显示全部楼层 |阅读模式
单片机pwm调光源程序如下:
  1. /*-----------------------------------------------
  2.   名称:PWM调光
  3.   修改:无
  4.   内容:通过PWM(脉宽调制)调节LED的亮度
  5. ------------------------------------------------*/
  6. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

  7. sbit LED0=P1^0;// 用sbit 关键字 定义 LED到P1.0端口,LED是自己任意定义且容易记忆的符号


  8. void Delay(unsigned int t); //函数声明
  9. /*------------------------------------------------
  10.                     主函数
  11. ------------------------------------------------*/
  12. void main (void)
  13. {
  14.                   
  15. unsigned int CYCLE=1000,PWM_LOW=0;//定义周期并赋值
  16. while (1)         //主循环
  17.   {
  18. LED0=1;
  19. Delay(60000);        //特意加延时,可以看到熄灭的过程
  20. for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++){ //PWM_LOW表示低
  21. //电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次

  22.                    LED0=0;        //点亮LED  
  23.                    Delay(PWM_LOW);//延时长度,600次循环中从1加至599
  24.                    LED0=1;        //熄灭LED
  25.               Delay(CYCLE-PWM_LOW);//延时长度,600次循环中从599减至1
  26.      
  27.    }
  28. LED0=0;
  29. for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--){ //与逐渐变亮相反的过程

  30.                    LED0=0;
  31.                    Delay(PWM_LOW);
  32.                    LED0=1;
  33.               Delay(CYCLE-PWM_LOW);
  34.      
  35.    }
  36.                      //主循环中添加其他需要一直工作的程序
  37.   }
  38. }
  39. /*------------------------------------------------
  40. 延时函数,含有输入参数 unsigned int t,无返回值
  41. unsigned int 是定义无符号整形变量,其值的范围是
  42. 0~65535
  43. ------------------------------------------------*/
  44. void Delay(unsigned int t)
  45. {
  46. while(--t);
  47. }
复制代码

所有资料51hei提供下载:
15-PWM调光.zip (20.94 KB, 下载次数: 161)
回复

使用道具 举报

ID:563595 发表于 2020-6-4 00:48 | 显示全部楼层
这个程序我觉得是很标准的写法,容易读。感谢。
回复

使用道具 举报

ID:709856 发表于 2020-12-31 08:03 | 显示全部楼层
借鉴一下,做了个九档调光电路,数码管显示。
回复

使用道具 举报

ID:468878 发表于 2020-12-31 10:14 | 显示全部楼层
有点意思,做单纯的PWM还是思路不错的,没搞计时器,最简单的。
回复

使用道具 举报

ID:390416 发表于 2020-12-31 11:37 | 显示全部楼层
#include "STC89.H"                                        //头文件包含
#include <intrins.h>                                //头文件包含
typedef unsigned char u8;                        //重新定义数据类型名
typedef unsigned short u16;                        //重新定义数据类型名
typedef unsigned long u32;                        //重新定义数据类型名
sbit PWM_OUT=P2^1;        
u8 idata PWM_Write_Byte[3]=0;

// 定时器0初始化  晶振11059200,12T,输出50Hz的PWM,占空比0~255
// 定时器初值为:256-(11059200÷12÷50Hz÷256) = 184 = 0xB8
//***************************祁绪电子 2020年5月***
void PWM_Init(void)
{
        TMOD &= 0xF0;                                        //配置定时器工作模式
        TMOD |= 0x02;                                        //配置定时器工作模式 8位自动重装模式
    TL0 = 0xB8;;                    //定时器初值
    TH0 = 0xB8;                                //定时器重装初值
    TR0 = 1;                        //启动定时器0
    ET0=1;                                                         //允许定时器0申请中断
        EA=1;                                                        //中断总闸闭合
}
//定时器0的CPU处理函数,位置任意写都行
//****************************祁绪电子 2020年5月***
void PWM_Display_timer0() interrupt 1
{
        
        static u8 pwm_t=0;                                 //局部变量,不丢失数据
        if(pwm_t<PWM_Write_Byte[0])
        {
                PWM_OUT=1;                                 
        }
        else PWM_OUT=0;
        pwm_t++;
}

// PWM 数模变换数据分配
//**************************祁绪电子 2020年5月***
void PWM_Allot()                                          
{
        static u8 kkk=0;        
        static u8 count=0;
        count++;
        if(count>100)
        {
                count=0;
                kkk++;
                PWM_Write_Byte[0]=kkk;        //kkk为占空比自动增加
                PWM_Write_Byte[1]=10;        
                PWM_Write_Byte[2]=10;
        }
}


void main()                                                        //主函数
{
        PWM_Init();
        while(1)                                                //主函数大循环
        {
                PWM_Allot();        
        }
}
回复

使用道具 举报

ID:120677 发表于 2020-12-31 14:36 | 显示全部楼层
程序很标准的写法 注释得详细
回复

使用道具 举报

ID:390416 发表于 2020-12-31 15:21 | 显示全部楼层
STC89单片机 定时器做PWM程序 http://www.51hei.com/bbs/dpj-200820-1.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表