找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机呼吸灯程序没看明白

[复制链接]
跳转到指定楼层
楼主
ID:1068108 发表于 2023-4-16 19:37 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
用的是stc15的芯片 ,程序没看明白(希望可讲解一下),这个程序只能从亮到暗,有没有什么办法是它循环起来(谢谢大家)

1681644894033.jpg (659.98 KB, 下载次数: 24)

1681644894033.jpg

1681644945677.jpg (668.16 KB, 下载次数: 22)

1681644945677.jpg

1681644972677.jpg (671.05 KB, 下载次数: 22)

1681644972677.jpg

1681644988272.jpg (569.88 KB, 下载次数: 25)

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

使用道具 举报

沙发
ID:1072104 发表于 2023-4-16 20:12 | 只看该作者
#include<STC15.h>

#define LED_PIN P1_0

void init_PWM() {
    TMOD |= 0x01; // 定时器0设置为16位定时器模式,以供PWM使用

    ET0 = 1; //打开定时器中断
    TR0 = 1; //启动定时器
}

void delay_nms(unsigned int n) { // 毫秒级延时函数,可根据实际情况调节
    unsigned int i,j;
    for (i=0; i<n; i++) {
        for (j=0; j<125; j++);
    }
}

void main() {
    unsigned char duty_cycle = 0; // 占空比,默认为0
    unsigned char flag = 0; // 标志变量,用于判断递增还是递减
    init_PWM();
    while(1) {
        if(!flag) {
            duty_cycle++;
            if(duty_cycle == 255) {
                flag = 1;
            }
        } else {
            duty_cycle--;
            if(duty_cycle == 0) {
                flag = 0;
            }
        }
        LED_PIN = (duty_cycle == 0 || duty_cycle == 255) ? 0 : 1; // 避免输出高电平或低电平长时间照成LED损伤
        delay_nms(10); // 延时10毫秒,可根据实际需求做出适当调整
    }
}

void timer0() interrupt 1 {
    TH0 = 245; // 修改定时器初值
    TL0 = 245;
    PWM_OUT = duty_cycle; // 修改PWM占空比
}
在上述代码中,循环呼吸灯的周期为500ms,可在 delay_nms() 函数中根据实际情况进行调整。同时,在 main() 函数中使用 flag 变量控制 duty_cycle 的递增和递减,从而实现循环呼吸灯的效果。在 timer0() 中断服务函数中,修改定时器初值并根据当前占空比设置 PWM 输出。
回复

使用道具 举报

板凳
ID:1068108 发表于 2023-4-16 22:33 来自手机 | 只看该作者
张大炮ie 发表于 2023-4-16 20:12
#include

#define LED_PIN P1_0

谢谢大佬
回复

使用道具 举报

地板
ID:1068108 发表于 2023-4-17 00:38 来自手机 | 只看该作者
张大炮ie 发表于 2023-4-16 20:12
#include

#define LED_PIN P1_0

我想再问一下,怎么让它和通过ad获得的光敏电阻值结合,就是用光敏电阻的值去控制led的亮暗(值越小,灯越暗,值越大,灯越亮)
回复

使用道具 举报

5#
ID:584814 发表于 2023-4-17 11:14 | 只看该作者
1234590qwehjm 发表于 2023-4-17 00:38
我想再问一下,怎么让它和通过ad获得的光敏电阻值结合,就是用光敏电阻的值去控制led的亮暗(值越小,灯 ...

将AD值与占空比进行关联就可以。
回复

使用道具 举报

6#
ID:1068108 发表于 2023-4-17 12:07 来自手机 | 只看该作者
man1234567 发表于 2023-4-17 11:14
将AD值与占空比进行关联就可以。

这个获取的AD值怎么转换,怎么看自己用的是多少位的ad
回复

使用道具 举报

7#
ID:1068108 发表于 2023-4-17 16:35 来自手机 | 只看该作者
1234590qwehjm 发表于 2023-4-17 12:07
这个获取的AD值怎么转换,怎么看自己用的是多少位的ad

好的,谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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