找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1871|回复: 5
打印 上一主题 下一主题
收起左侧

单片机如何实现流水灯开的时候慢到快暗到亮,关的时候快到慢亮到暗。

[复制链接]
跳转到指定楼层
楼主
ID:1002664 发表于 2022-1-19 17:35 来自触屏版 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
麻烦大佬教一下
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:752974 发表于 2022-1-20 08:07 | 只看该作者
PWM,频率取的高点。
回复

使用道具 举报

板凳
ID:1002664 发表于 2022-1-20 12:23 | 只看该作者
munuc_w 发表于 2022-1-20 08:07
PWM,频率取的高点。

那同时流水灯的速度慢到快呢?
回复

使用道具 举报

地板
ID:752974 发表于 2022-1-20 13:56 | 只看该作者
亮暗用PWM的占空比控制,占空比由小到大,渐亮,反之,渐暗,频率高的目的是人看着感觉不到闪或闪烁轻微。至于快慢不用说了吧。
回复

使用道具 举报

5#
ID:1002664 发表于 2022-1-20 14:23 | 只看该作者
munuc_w 发表于 2022-1-20 13:56
亮暗用PWM的占空比控制,占空比由小到大,渐亮,反之,渐暗,频率高的目的是人看着感觉不到闪或闪烁轻微。 ...

就是逐渐流水速度慢到快,现在只会用delay固定速度,无法做到开始由慢逐渐到快,PWM不知道怎么取值,想的效果是开始的时候慢到快暗道亮, 关的时候才会快到慢亮到暗,现在学写的PWM只能控制一个灯无法融入到流水效果里面,同时速度也是不知道怎么让它慢到快并且保持住快,关的时候才会快到慢
#include <reg51.h>  
sbit LED = P0;
unsigned char CYCLE;
unsigned char PWM_ON ;

void delay(unsigned int cnt)
{
while(--cnt);
}

main()

{
bit Flag;

TMOD |=0x01;              
TH0=(65536-100)/256;
TL0=(65536-100)%256;     
IE= 0x82;               
TR0=1;

CYCLE = 10;               
while(!Flag)
  {
   delay(20000);         
   PWM_ON++;            
   if(PWM_ON == CYCLE)
}

void tim(void) interrupt 1 using 1
{
static unsigned char count;
TH0=(65536-100)/256;
TL0=(65536-100)%256;     

if (count==PWM_ON)
    {
     LED = 1;         
    }
  count++;
if(count == CYCLE)
    {
    count=0;
        if(PWM_ON!=0)        
           LED = 0;         
    }

}
回复

使用道具 举报

6#
ID:397211 发表于 2022-1-20 16:00 | 只看该作者
使用定时器产生PWM波,调节占空比就可以了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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