设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 996|回复: 0
收起左侧

C51/STC单片机 定时器中断实现软件PWM LED呼吸灯程序源码

[复制链接]
发表于 2021-12-22 21:14:05 | 显示全部楼层 |阅读模式
呼吸灯.png
本例程使用main函数发生8位PWM波,定时器中断控制呼吸灯亮度(PWM占空比)。
单片机型号:STC任意 晶振频率:12Mhz 硬件连接:LED:P3.3与100R电阻与VCC连接。
  1. #include "STC15F104E.h"
  2. #include "intrins.h"
  3. #define u8 unsigned char
  4. #define u16 unsigned int
  5. #define u32 unsigned long
  6. sbit LED = P3 ^ 3;        //LED 低电平点亮 与VCC连接
  7. u8 pwm = 0;                        //LED亮度 0熄灭 255最亮
  8. void InitTimer0(){
  9.         TMOD = 0x01;
  10.         TH0 = 0x0FC;
  11.         TL0 = 0x18;
  12.         EA = 1;
  13.         ET0 = 1;
  14.         TR0 = 1;
  15. }

  16. void main() {
  17.         u8 j = 0;
  18.         InitTimer0();
  19.         WDT_CONTR = 0x27;                //开看门狗
  20.         while (1) {
  21.                 WDT_CONTR |= 0x10;
  22.                 LED = (j >= pwm);
  23.                 if (++j == 255) j = 0;
  24.         }
  25. }

  26. void Timer0Interrupt() interrupt 1 {                //12Mhz 1mS定时器中断
  27.         static u8 ms = 0;
  28.         static bit k = 1;                //1:亮度增加 0:亮度减小
  29.         TH0 = 0x0FC;
  30.         TL0 = 0x18;
  31.         if (++ms >= 10) {
  32.                 ms = 0;
  33.                 if (k) {
  34.                         pwm++;
  35.                 } else {
  36.                         pwm--;
  37.                 }
  38.                 if (pwm == 0 || pwm == 255) {
  39.                         k = !k;
  40.                 }
  41.         }
  42. }
复制代码

相关帖子

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-25 22:58 , Processed in 0.807046 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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