找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
ID:1002664 发表于 2022-1-19 17:35 来自触屏版 | 显示全部楼层 |阅读模式
麻烦大佬教一下
回复

使用道具 举报

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的占空比控制,占空比由小到大,渐亮,反之,渐暗,频率高的目的是人看着感觉不到闪或闪烁轻微。至于快慢不用说了吧。
回复

使用道具 举报

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;         
    }

}
回复

使用道具 举报

ID:397211 发表于 2022-1-20 16:00 | 显示全部楼层
使用定时器产生PWM波,调节占空比就可以了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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