找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5901|回复: 7
收起左侧

单片机PWM控制LED增减光实验 Proteus仿真加源程序

  [复制链接]
ID:175881 发表于 2017-3-29 23:26 | 显示全部楼层 |阅读模式
用51单片机的PWM控制实现LED增减光的仿真原理图(proteus工程文件可到本帖附件下载):

0.png
51单片机源程序:
  1. //---------------------------------------------------------------------
  2. //程序名:PWM7-2.c
  3. //程序功能:PWM控制LED增减光。
  4. //---------------------------------------------------------------------
  5. #include <reg51.h>
  6. sbit OUT=P2^7;                                 //PWM输出
  7. sbit INC=P2^0;                                 //增加亮度按钮K1接口
  8. sbit DEC=P2^1;                                 //减小亮度按钮K2接口

  9. //--------------------------- 定时器0中断函数 ------------------------
  10. //频率
  11. void Timer0(void) interrupt 1                  //定时器0中断
  12.   {
  13.      OUT=1;                                     //关LED
  14.      TL0=0;
  15.      TR1=1;                                     //打开脉宽定时
  16.   }

  17. //-------------------------- 定时器1中断函数 -------------------------

  18. //脉宽
  19. void Timer1(void) interrupt 3                  //定时器1中断
  20.   {
  21.      OUT=~OUT;                                  //开LED
  22.      TR1=0;                                     //脉宽调节结束
  23.   }   

  24. //--------------------------- 消抖延时函数 ----------------------------

  25. delay()
  26. {
  27.   unsigned int i;
  28.   for(i=0;i<2000;i++);
  29. }
  30. //---------------------------- 定时器设置函数 ---------------------------
  31. INIT_TIMER()
  32.    {
  33.      TMOD=0x22;                                  //设置T1、T0为模式2方式,自动重装
  34.      TH1=0;                                      //脉宽宽度
  35.      TL1=0;
  36.      TH0=0;                                      //频率调节=0频率最低
  37.      TL0=0;   
  38.      TR0=1;                                      //启动T0定时
  39.      EA=1;                                       //允许总中断
  40.      ET1=1;                                      //允许定时器1中断
  41.      ET0=1;                                      //允许定时器0中断
  42.    }

  43. //------------------------------- 主函数 -------------------------------

  44. main()
  45. {
  46.    
  47.    INIT_TIMER();

  48. // 无限循环       
  49.         while(1)
  50.      {
  51.        INC=1;DEC=1;
  52.        if (INC==0)
  53.           { delay();
  54.            if (INC==0)  
  55.                {
  56.                 if (TH1<240) TH1++;
  57.                }
  58.           }
  59.        else if (DEC==0)
  60.           { delay();
  61.            if (DEC==0)  
  62.                {
  63.                 if (TH1>0) TH1--;
  64.                }
  65.           }

复制代码

0.png


该系列源码包含有很多非常经典,代码风格十分规范,而且注释详细的单片机例程,还带仿真,对于MCU学习特别是初学者是很有帮助的,全部源码下载(共25个项目):http://www.51hei.com/bbs/dpj-79328-1.html

本例程下载(含proteus仿真工程文件与源码):
7-2单片机PWM控制LED增减光实验.rar (31.54 KB, 下载次数: 148)

评分

参与人数 1黑币 +5 收起 理由
90182sis + 5

查看全部评分

回复

使用道具 举报

ID:224839 发表于 2017-8-4 21:53 | 显示全部楼层
谢谢楼主 好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:253425 发表于 2017-12-19 17:05 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:288202 发表于 2018-3-13 17:20 | 显示全部楼层
为什么我使用了你的程序,但是仿真的时候LED根本不会亮,虽然有脉冲,但是宽度也太小了,可能就是这个原因,LED不会亮~难过(ಥ﹏ಥ)
回复

使用道具 举报

ID:288202 发表于 2018-3-14 13:52 | 显示全部楼层
还有,程序第59行怎么感觉怪怪的,按键在一开始就让它的值为1?什么情况?
回复

使用道具 举报

ID:102702 发表于 2018-3-15 20:16 | 显示全部楼层
这个能控制LED台灯的吗?电路要怎么改?
回复

使用道具 举报

ID:263507 发表于 2018-7-10 10:56 | 显示全部楼层
这个可以实现灯光可调的智能化
回复

使用道具 举报

ID:751420 发表于 2021-6-21 14:49 | 显示全部楼层
求教如何实现
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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