PWM

PulseWidthModulation脉冲宽度调制,简称PWM。

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

仍输出数字信号,因为满幅值的直流供电只有5V(1)和0V(0)两种。电压是以一种连接(1)或断开(0)的重复脉冲序列被夹到模拟负载上去的,连接即是直流供电输出,断开即是直流供电断开。通过对连接和断开时间的控制,只要带宽足够,可以输出任意不大于最大电压值的模拟电压。

51单片机的Timer

用的单片机是STC89C52,其内部有3个16位Timer,分别为T/C0,T/C1,T/C2,通过配置相关寄存器即可实现Timer的功能控制。

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

相关寄存器:

1.IE寄存器

2. TCON寄存器

3. TMOD寄存器

控制Timer0/1的工作方式

4. Timer0/1计数寄存器

TL0

TL1

TH0

TH1

当定时开启后,TL0(TL1)自动跟随机器周期加一。当TL0(TL1)满了后,自动清零同时向TH0(TH1)进一位,不需要手动操作。

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

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

程序设计:

unsigned char PWM_COUNT; //计数

unsigned int HUXI_COUNT; //占空比更新时间

unsigned char PWM_VLAUE; //占空比比对值

bit direc_flag; //占空比更新方向

void timer0_init()

{ TMOD=0x02; //模式设置,00010000,定时器0,工作于模式2(M1=1,M0=0)

TH0=0x47; //定时器溢出值设置,每隔200us发起一次中断。

TL0=0X47; TR0=1; //定时器0开始计时

ET0=1; //开定时器0中断

EA=1; //开总中断

PWM_COUNT =0; }

void time0() interrupt 1

{ PWM_COUNT++; HUXI_COUNT++;

if(PWM_COUNT == PWM_VLAUE) //判断是否到了点亮LED的时候

LED = 1; //点亮LED

if(PWM_COUNT == 10) //当前周期结束

{ LED = 0; //熄灭LED

PWM_COUNT = 0; //重新计时 }

if((HUXI_COUNT == 600) && (direc_flag == 0)) { //占空比增加10%

HUXI_COUNT = 0;

PWM_VLAUE++; if(PWM_VLAUE == 9) //占空比更改方向

direc_flag = 1;

}

if((HUXI_COUNT == 600) && (direc_flag == 1))

{ //占空比减少10%

HUXI_COUNT = 0;

PWM_VLAUE--;

if(PWM_VLAUE == 1) //占空比更改方向

direc_flag = 0;

}

}

void main()

{ HUXI_COUNT = 0;

PWM_COUNT = 0;

PWM_VLAUE = 5;

direc_flag = 0;

LED = 1; //默认LED熄灭

timer0_init(); //定时器0初始化

while(1);

}

dsp呼吸灯C语言编程,pwm呼吸灯原理及程序分享相关推荐

  1. dsp呼吸灯C语言编程,DSP28335 呼吸灯程序

    DSP28335呼吸灯程序 //########################################################################### // // FI ...

  2. led交通灯c语言程序设计,单片机控制的交通灯C语言编程.doc

    单片机控制的交通灯C语言编程 单片机控制的交通灯 红灯停,绿灯行,黄灯闪烁提示行人红绿灯即将切换.四个方向各有一个红.黄.绿显示和两个数码管. 东西道为人行道(20秒),南北道为车行道(60秒),黄灯 ...

  3. 节日流水灯c语言编程,流水灯C语言编程

    这是流水灯C语言编程,针对单片机的仿真,可以在Keil或是在C++中实现编程. 流水灯C语言编程 #include #include #define LED_PORT1 P1 #define LED_ ...

  4. 【c】C语言编程写的一个http下载程序

    来自: 百度空间-软件工程师 大家都很熟悉HTTP协议的应用,因为每天都在网络上浏览着不少东西,也都知道是HTTP协议是相当简单的.每次用到FlashGet之类的下载软件下载网页,当用到那个" ...

  5. 51单片机呼吸灯c语言,51单片机呼吸灯C语言版.doc

    基于单片机与PWM的呼吸灯设计 实训指导教师: 班 级: 设 计 人姓名: 设 计 日 期: 设 计 地 点: 完 成 时 间: 摘要 本设计是基于单片机的原理与接口设计,采用单片机I/O口,加以C语 ...

  6. 树莓派输出pwm波c语言,02树莓派4B—C语言编程——PWM

    01树莓派直接输出PWM波 -- 硬件PWM程序  (推荐使用) #include #include #include //必不可少 int main( void) { int pwm_gpio5 = ...

  7. 一开关控制两个灯c语言编程,如何实现楼梯踏步灯用两个反射感应开关控制两台led编程控制器...

    楼梯上下口各设置一个感应开关,有人上时,灯从下往上亮,有人下时,灯从上往下亮,同时有人,灯从两边往中间亮.感谢平台好友的指导.需要什么设备来实现这个控制系统? 用单片机系统就可以实现这样的功能.前提是 ...

  8. C语言编程双向流水灯,C语言编程--数组控制流水灯-2

    原标题:C语言编程--数组控制流水灯-2 /*********************** ********************/ #include unsigned char code tabl ...

  9. 单片机人体感应灯c语言,红外人体感应灯单片机方案

    近来,红外人体感应灯受到了居家人们关注和喜爱.为此,英锐恩推出了一款低成本红外人体感应灯单片机方案.红外人体感应灯可应用于走廊.床边.楼梯.衣柜等地方,提供柔和照明作用.人来即亮,人走即灭,不受强光影 ...

  10. 流水灯c语言及汇编程序,流水灯C语言及汇编程序.doc

    一.51单片机流水灯C语言源程序 文件说明:流水灯C程序程序说明:MCU采用AT89S51,外接11.0592M晶振,P2口输出 ?? #include?? //51系列单片机定义文件#define ...

最新文章

  1. Windows 上看端口 找PID
  2. 如何有效使用Project(1)——编制进度计划、保存基准
  3. 转:Merge into的使用详解
  4. ionic3学习之总结
  5. Linux下apache与tomcat完美整合笔记
  6. python sys os_python常用的一些东西——sys、os等(转)
  7. 自适应滤波器原理第四版计算机实验,自适应滤波器原理(中文第4版)答案
  8. 《jQuery Cookbook中文版》——1.9 根据当前上下文遍历DOM获得新的DOM元素集
  9. silverlight体验之三:简单控件堆成个Login
  10. bzoj 1046: [HAOI2007]上升序列【dp+二分】
  11. [JavaScript]面向对象编程
  12. 西门子、RA、施耐德、三菱、汇川、和利时:中国PLC市场及产业链分析
  13. java外文文献_spring框架外文文献 PDF 下载
  14. 程序员脱离苦海就靠这些绝招了了了。。。
  15. Swarm创始人:强调BZZ主网上线不需要质押
  16. XSS(Reflected) 反射型跨站攻击
  17. 2021-10-26 MSA (测量系统分析)
  18. termux—手机远程连接服务器教程
  19. 如何引流购物粉?如何引流网购粉?怎么吸购物粉?
  20. oracle12c命令行安装grid,oracle12c-RAC安装部署之GRID安装-grid设置

热门文章

  1. java反编译 编译_5个最佳Java反编译器
  2. 如何在Axure使用iconfont图标库里的图标
  3. 2021世界机器人大赛— 青少年机器人设计大赛
  4. Fortran 95 数据类型、输入输出、声明
  5. 【已解决】Fortran77老代码中的do循环,在Fortran95中能否使用?
  6. Laravel 教程 - 实战 果酱社区 开源电商 API 系统
  7. 流密码:lfsr(线性反馈移位寄存器)
  8. Blender 设置环境贴图(天空盒)
  9. Edraw安装教程(附下载链接)
  10. Smart View for Office