找回密码
 注册
查看: 379|回复: 3
打印 上一主题 下一主题

关于PWM呼吸灯的几个问题,求解答

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-11-29 10:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
  • #include "reg52.h"
  • typedef unsigned char u8;
  • typedef unsigned int u16;
  • ***it LED = P2^0;
  • u16 timer1, count, value;
  • bit flag;
  • void TimeInit()//¶¨Ê±1us
  • {
  •         TMOD |= 0x10;
  •         TH1 = 0xFF;
  •         TL1 = 0xFF;
  •         TR1 = 1;
  •         EA = 1;
  •         ET1 = 1;
  • }
  • void main()
  • {
  •                 LED = 1;
  •                 timer1 = 0;
  •                 count = 0;
  •                 value = 0;
  •                 flag = 0;
  •                 TimeInit();
  •                 while(1);
  • }
  • void Time() interrupt 2
  • {
  •         TH1 = 0xFF;
  •         TL1 = 0xFF;
  •         //while(1)
  • //        {
  •                 timer1++;
  •                 count++;
  •                         if(timer1 == 1000)
  •                         {
  •                                 timer1 = 0;
  •                                 LED = 1;
  •                         }
  •                         if(count == 100)
  •                         {
  •                                 count = 0;
  •                                 if(flag == 0)
  •                                 {
  •                                         value++;
  •                                 }
  •                                 if(flag == 1)
  •                                 {
  •                                         value--;
  •                                 }
  •                         }
  •                         if(value == 1000)
  •                         {
  •                                 flag = 1;
  •                         }
  •                         if(value == 0)
  •                         {
  •                                 flag = 0;
  •                         }
  •                         if(value > timer1)
  •                         {
  •                                 LED = 0;
  •                         }
  •                         else
  •                         {
  •                                 LED = 1;
  •                         }
  •         //        }
  • }
    0 L/ t* |4 Z- F8 F" r7 N

1 w7 Q! y: V* V% g5 |$ n0 T* \  g. l复制代码1 f5 s) x' U9 s! w
0 p$ J. _, H5 G' W
  这是我编写的PWM呼吸灯程序,但是只有在中断里面加上while(1)循环他才能呼吸。没有这个while直接就不亮了,但我看别人的呼吸灯函数中断内没有while循环也能呼吸,这是为什么?
4 ~* R8 `9 i8 m4 o; V  还有一个问题,加上while循环后的呼吸灯在逐渐变暗的时候“灯亮灭的抖动”明显,怎么能让他看起来流畅一点。/ K- h/ Q/ g. I6 p+ g

该用户从未签到

2#
发表于 2022-11-29 10:55 | 只看该作者
在中断里面加while循环,这个程序架构很明显是有问题的,定时器中断只是用来处理紧急的情况,你可以在中断里面操控变量,在主程序中放一个while(1){} 去根据变量的值反转IO

该用户从未签到

3#
发表于 2022-11-29 13:10 | 只看该作者
中断执行后就退出了,怎么能while1呢,思路都是错误的

该用户从未签到

4#
发表于 2022-11-29 13:39 | 只看该作者
利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,OLED屏的亮和暗就是这样控制的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-5-29 22:55 , Processed in 0.078125 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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