找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机pwm呼吸灯原理及程序

[复制链接]
跳转到指定楼层
楼主
本帖最后由 TzMVP 于 2020-10-21 00:00 编辑

PWM

PWM(脉冲宽度调制)对模拟信号电平进行数字编码的方法,计算机只能输出0或5V的数字电压值而不能输出模拟电压,而我们如果想获得一个模拟电压值,则需通过使用高分辨率计数器,改变方波的占空比来对一个模拟信号的电平进行编码。

51单片机的Timer

控制PWM需要用到定时器来生成不同占空比的波形,采用定时器中断的方式。

1.IE寄存器

2. TCON寄存器

3. TMOD寄存器

4. Timer0/1计数寄存器

TL1

TH1

而当TL0(TL1)和TH0(TH1)都满了以后,此时如果定时中断和总中断都已经打开,那么就会发生溢出中断,同时这两个寄存器清零。

运用PWM完成呼吸灯硬件电路

程序设计:

  1. unsigned char PWM_COUNT; //计数
  2. unsigned int HUXI_COUNT; //占空比更新时间
  3. unsigned char PWM_VLAUE; //占空比比对值
  4. bit direc_flag; //占空比更新方向

  5. void timer0_init()
  6. {
  7.   TMOD = 0x02; //模式设置,00010000,定时器0,工作于模式2(M1=1,M0=0)
  8.   TH0 = 0x47; //定时器溢出值设置,每隔200us发起一次中断。
  9.   TL0 = 0X47;
  10.   TR0 =1; //定时器0开始计时
  11.   ET0 =1; //开定时器0中断
  12.   EA = 1; //开总中断
  13.   PWM_COUNT =0;
  14. }

  15. void time0() interrupt 1
  16. {
  17.   PWM_COUNT++;
  18.   HUXI_COUNT++;
  19.   if(PWM_COUNT == PWM_VLAUE) //判断是否到了点亮LED的时候
  20.     LED = 1; //点亮LED
  21.   if(PWM_COUNT == 10) //当前周期结束
  22.   {
  23.     LED = 0; //熄灭LED
  24.     PWM_COUNT = 0; //重新计时
  25.   }
  26.   if((HUXI_COUNT == 600) && (direc_flag == 0))
  27.   {
  28.     //占空比增加10%
  29.     HUXI_COUNT = 0;
  30.     PWM_VLAUE++;
  31.     if(PWM_VLAUE == 9) //占空比更改方向
  32.     direc_flag = 1;
  33.   }
  34.   if((HUXI_COUNT == 600) && (direc_flag == 1))
  35.   {
  36.     //占空比减少10%
  37.     HUXI_COUNT = 0;
  38.     PWM_VLAUE--;
  39.     IF(PWM_VLAUE == 1) //占空比更改方向
  40.     DIREC_FLAG = 0;
  41.   }
  42. }

  43. void main()
  44. {
  45.   HUXI_COUNT = 0;
  46.   PWM_COUNT = 0;
  47.   PWM_VLAUE = 5;
  48.   direc_flag = 0;
  49.   LED = 1; //默认LED熄灭
  50.   timer0_init(); //定时器0初始化
  51.   while(1);
  52. }
复制代码

pIYBAFq7Y4qALBbYAABSGPoX_7I406.png (20.52 KB, 下载次数: 48)

pIYBAFq7Y4qALBbYAABSGPoX_7I406.png

o4YBAFq7Y1OAMtOUAAC2TVm7uiw154.png (45.58 KB, 下载次数: 45)

o4YBAFq7Y1OAMtOUAAC2TVm7uiw154.png

o4YBAFq7Y12AT4z9AABTo6kPeNQ795.png (20.91 KB, 下载次数: 48)

o4YBAFq7Y12AT4z9AABTo6kPeNQ795.png

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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