找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机的pwm呼吸灯

  [复制链接]
跳转到指定楼层
楼主
ID:686752 发表于 2020-8-31 14:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/**********PWM呼吸灯**********************/
/**********100us中断一次*****************/
/**********100ms更新一次PWM*************/
/*************T=2000us*****************/                             
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit led=P1^0;
void timer0_init();                                //定时器初始化
uchar zhongduan_count;                        //中断次数          10次变化一次
uchar pwm_value;                                //当前高电平对应的定时次数
uint update_count;                                //占空比更新 中断的次数  1000次增加5%
bit flag;                       // flag 0 增加   1减少
void timer0_init()
{       
        EA=1;
        TMOD=0x02;                 //定时器0 方式2
        TH0=0xA3;                 //100us
        TL0=0xA3;
        ET0=1;                        //中断打开
        TR0=1;                        //打开定时器
}
void main()
{
        zhongduan_count=0;
        update_count=0;
        pwm_value=10;
        flag=0;       
        timer0_init();
        led=1;
        while(1);
       
}
void time0() interrupt 1
{
        zhongduan_count++;
        update_count++;
       
        if(zhongduan_count==20)                                         //控制周期 20*100us=2ms 一个周期 不变
        {
                led=1;
                zhongduan_count=0;
        }
        if(zhongduan_count==pwm_value)                  
        {
                led=0;
        }          
        if(update_count==1000)                                        //100ms更新一次占空比
        {
        if((flag==0))                                                        //标志为清0 说明我们现在为占空比增加模式
                {
                update_count=0;                                                //占空比更新中断的次数清0,记录下一次到达100ms
                pwm_value++;                                                //占空比增加5%   因为1/20=0.05=5%
                if(pwm_value==20)                                        //如果占空比为100% 我们进入到占空比减少模式
                {
                        flag=1;
                }
                }
        }
        if(update_count==1000)                                        //100ms更新一次占空比
        {
                if(flag==1)                                                        //标志位置1 说明我们现在为真空比减少模式
                {
                        update_count=0;                                        //占空比更新中断的次数清0,记录下一次到达100ms
                        pwm_value--;                                        //占空比减少5%
                        if(pwm_value==0)                                //如果占空比为0% 进入到占空比增加模式
                        {
                                flag=0;
                        }
                }
        }
       
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏7 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:842962 发表于 2021-1-1 20:08 | 只看该作者
如何把速度调快啊
回复

使用道具 举报

板凳
ID:849266 发表于 2021-7-8 16:09 | 只看该作者
这个定时如何改变呀
回复

使用道具 举报

地板
ID:928284 发表于 2022-1-20 07:12 | 只看该作者
下载了,可以呼吸。程序挺好的,学习中
回复

使用道具 举报

5#
ID:928284 发表于 2022-1-20 07:20 | 只看该作者
if(update_count==1000) ,改变这个参数,就可以改变它的时间。如果(update_count==500)则效果更好。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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