找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 961|回复: 5
收起左侧

蓝桥杯单片机 PWM控制灯光亮度 Proteus仿真效果不好

[复制链接]
ID:294858 发表于 2023-6-14 10:24 | 显示全部楼层 |阅读模式
在蓝桥杯单片机综合训练平台上,利用PWM脉宽信号实现独立按键S7对L1指示灯亮度变化的控制。
具体要求如下:
1. PWM脉宽信号的频率为100Hz。
2.系统上电后L1指示灯处在熄灭状态。
3. L1指示灯有4种亮度模式,分别是完全熄灭、10%的亮度、50%的亮度和190%的亮度。4.按下S7按键,循环切换L1指示灯的四种亮度模式。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif

单片机源程序如下:
  1. #include "reg52.h"  

  2.      

  3.       
  4. sbit S7 = P3^0;        
  5. sbit L1 = P0^0;        


  6. void Init74HC138( )
  7. {
  8.     P2= (P2 & 0X1f) | 0x80;
  9. }

  10. void Delay(unsigned char t)
  11. {
  12.         while(t--);
  13.         
  14. }
  15. /***定时器相关代码***/
  16. void InitTimer0()
  17. {
  18.         TMOD = 0X01;                 //16位工作模式
  19.         TH0=(65535-100)/256;           //10ms=10000us     定时中断100us 100次中断即可
  20.         TL0=(65535-100)%256;

  21.         ET0=1;
  22.         EA=1;
  23.    
  24. }

  25. unsigned char count=0;
  26. unsigned char pwm_duty=0;
  27. void ServiceTimer0() interrupt 1
  28. {
  29.     TH0=(65535-100)/256;
  30.         TL0=(65535-100)%256;
  31.         count++;
  32.         if(count == pwm_duty)
  33.         {
  34.            L1=1;        
  35.         }
  36.          else if(count == 100)
  37.          {
  38.            L1=0;  
  39.            count=0;           
  40.          }
  41.          
  42. }
  43.   
  44. /***按键扫描相关代码***/
  45. unsigned char stat=0;
  46. void ScanKeys()
  47. {
  48.       
  49.         if(S7 == 0)
  50.         {
  51.                 Delay(10);
  52.                 if(S7 == 0)
  53.                 {
  54.                    switch(stat)
  55.           {
  56.                  case 0:
  57.                           L1=0;
  58.                         TR0=1;
  59.                          pwm_duty=10;
  60.                          stat=1;
  61.                          break;
  62.                
  63.                  case 1:
  64.                         pwm_duty=50;
  65.                         stat=2;
  66.                         break;
  67.                 case 2:
  68.                          pwm_duty=90;
  69.                          stat=3;
  70.                         break;
  71.                                 case 3:
  72.                         L1=1;
  73.                         TR0=0;                                            
  74.                         stat=0;
  75.                         break;
  76.           }
  77.           while(S7==0);   
  78.                 }
  79.         }
  80. }
  81.                           
  82. void main()
  83. {           
  84.       Init74HC138();
  85.            L1=1;
  86.       InitTimer0();
  87.            
  88.         while(1)
  89.         {
  90.          
  91.         ScanKeys();
  92.         }
  93. }
复制代码

Keil代码与Proteus仿真下载:
12 PWM控制灯光亮度.7z (63.38 KB, 下载次数: 14)
回复

使用道具 举报

ID:77589 发表于 2023-6-16 16:05 | 显示全部楼层
看看,还可以!
回复

使用道具 举报

ID:1085175 发表于 2023-6-20 16:27 | 显示全部楼层
您好,请问这是全部吗,额,我下载下来只有一个s7有用
回复

使用道具 举报

ID:294858 发表于 2023-9-19 15:34 | 显示全部楼层
xwl_ 发表于 2023-6-20 16:27
您好,请问这是全部吗,额,我下载下来只有一个s7有用

是全部的,下载后可以直接运行的。
回复

使用道具 举报

ID:69038 发表于 2023-9-19 16:24 | 显示全部楼层
理解不了190%的亮度~~
回复

使用道具 举报

ID:213173 发表于 2023-9-19 17:16 | 显示全部楼层
proteus难以仿真PWM调光亮度,可以用工具中的示波器查看PWM波形占空比来验证。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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