单片机pwm控制led亮度原理图

用51产生PWM去控制LED,首先要确定PWM的周期T和占空比D,确定了这些以后,可以用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则D*T=n*t,类似的可以求出PWM低电平时间需要多少个时间基准n‘。

那么就可以编写程序,根据定的时间基准t给定时器赋值初始化,然后开启定时器,定义一个标志位flag,根据flag的状态决定输出高平还是低电平,假设定义flag=1的时候输出高电平,用一个变量去记录定时器中断的次数,每次中断就让记录中断次数的变量+1,在中断程序里面判断这个变量的值是否到了 n,如果到了说明高电平的时间够了,那么就改变flag为0,输出低电平,同时记录中断变量的值清零,每次中断的时候依旧+1,根据flag=0的情况跳去判断记录变量的值是否到了n’ 如果到了,说明PWM的低电平时间够了,那么就改flag=1,输出改高电平,同时记录次数变量清零,重新开始,如此循环便可得到想要的PWM波形。

/******************************************************************************************

* 文件:PWM.c

* 备注:51单片机PWM完全注释          *

******************************************************************************************/

#include 《STC89.H》

unsigned char CYCLE;      /*PWM周期长度*/

unsigned char count = 0;        /*记录中断次数*/

unsigned char PWM_ON;      /*PWM高电平时间计数*/

void delay()          /*延时约78ms*/

{

unsigned char i, j;

for(j = 100; j; j--)

for(i = 255; i; i--)

;

}

void main()

{

bit Flag;       /*变化状态标志,0:渐亮,1:渐暗*/

TMOD = 0x01;           /*时间基准为1ms*/

TH0 = (65536 - 100) / 256;      /*右端表达式编译后为0xFF*/

TL0 = (65536 - 100) % 256;      /*同上*/

IE = 0x82;       /*开定时器0中断0x82 = 10000010*/

TR0 = 1;          /*启动定时器0*/

CYCLE = 10;           /*十级亮度,即十级PWM*/

while(!Flag)          /*渐亮,每一次变化亮度增加1*/

{

delay();          /*延时*/

PWM_ON++;       /*高电平脉宽延长,即亮度增加*/

if(PWM_ON == CYCLE)       /*若高电平脉宽增长到整个周期*/

{

Flag = 1;       /*则转为渐暗*/

}

}

while(Flag)       /*渐暗,每一次变化亮度减少1*/

{

delay();       /*延时*/

PWM_ON--;       /*高电平脉宽缩短,即亮度降低*/

if(PWM_ON == 0)      /*若高电平脉宽缩短到0*/

{

Flag = 0;      /*则转为渐亮*/

}

}

}

void time0_server() interrupt 1 using 1

{

TH0 = (65536 - 100) / 256;      /*时间基准为1ms*/

TL0 = (65536 - 100) % 256;      /*即每1ms触发一次中断*/

if(count == PWM_ON)      /*若中断次数达到亮度设定值*/

{

P2 = 0xFF;        /*则熄灯*/

}

count++;        /*每次中断记录+1*/

if(count == CYCLE)      /*若中断次数达到PWM周期长度*/

{

count = 0;       /*则清零中断记录*/

if(PWM_ON != 0)       /*若此时亮度值非零*/

{

P2 = 0;        /*则点灯*/

}

}

}

控制led亮度C语言程序,单片机pwm控制led亮度原理图相关推荐

  1. 自动感光调节LED灯亮度C语言程序,单片机PWM调节LED灯亮度

    刚搞完飞思卡尔智能车,昨天我一起做车的搭档跑来跟我说魏老师(我们系的前主任,不知道他们怎么认识的....)叫他帮忙做个可通过无线遥控调节LED灯亮度的设计方案,问我有没有兴趣做做,主要是魏老师也是受他 ...

  2. led的c语言程序,单片机C语言LED灯点亮程序完全版

    <单片机C语言LED灯点亮程序完全版>由会员分享,可在线阅读,更多相关<单片机C语言LED灯点亮程序完全版(7页珍藏版)>请在人人文库网上搜索. 1.1例子1第二个灯亮#inc ...

  3. 按钮查询方式控制交通灯c语言程序,单片机控制交通灯(内含程序和实物图)

    模拟交通灯控制系统 摘要:随着经济发展,汽车数量急剧增加,城市道路日渐拥挤,交通拥塞已成为一个国际性的问题.因此,设计可靠.安全.便捷的多功能交通灯控制系统有极大的现实必要性.根据交通灯在实际控制中的 ...

  4. 单片机串口中断控制流水灯c语言,基于单片机AT89C51控制的中断控制流水灯_课程设计报告...

    <基于单片机AT89C51控制的中断控制流水灯_课程设计报告>由会员分享,可在线阅读,更多相关<基于单片机AT89C51控制的中断控制流水灯_课程设计报告(25页珍藏版)>请在 ...

  5. 按键控制8*8led点阵C语言程序,单片机按键控制8X8LED点阵屏显示图形 程序的几个问题...

    /*        名称:按键控制8X8LED点阵屏显示图形 说明:每次按下K1时,会使8X8LED点阵屏循环显示不同图形. 本例同时使用外部中断和定时中断. */ #include #include ...

  6. stc12c5a60s2c语言程序,单片机STC12C5A60S2控制AT24C04的程序(C语言)

    描述 /************************************** 主芯片  : STC12C5A60S2 (1T) 工作频率: 12.000MHz **************** ...

  7. 单片机控制灯光亮度c语言程序,基于51单片机控制LED灯光亮度并报警

    利用pwm控制led灯光亮度大小.可以显示许多亮度等级 到最低或者最高亮度等级会发出报警.设计思路: LED一般是恒流操作的,如何改变LED的亮度呢?答案就是PWM控制.在一定的频率的方波中,调整高电 ...

  8. 单片机发射红外c语言程序,单片机模拟红外发射源程序IR-send

    单片机模拟红外遥控器发射的C语言程序 //********************************************单片机红外发射**************************** ...

  9. C语言 int 转单精度浮点,单精度浮点数与十六进制转换 C语言程序 单片机也可用...

    单精度浮点数与十六进制转换 C语言程序 单片机也可用 #include float Hex_To_Decimal(unsigned char *Byte,int num)//十六进制到浮点数 { // ...

最新文章

  1. mac系统学习和快捷键
  2. 【问链-EOS公开课】第八课 EOS 数据库与持久化 API(一)
  3. 为什么int型的数组用memset不能清零(memset的使用规范)
  4. 【IBatis.Net】 各种配置说明
  5. Swoole安装报错No releases available for package pecl.php.net/swoole
  6. 人脸识别(二)——训练分类器
  7. 线段树(结构体建法_QAQ)
  8. 【Java从入门到天黑|05】JavaSE入门之面向对象(下)
  9. Linux下ejabberd安装配置
  10. [SCM]源码管理 - perforce快速入门
  11. rhel系统启动过程_Linux启动过程详解
  12. java 图片服务器 上传_Java实现把图片上传到图片服务器(nginx+vsftp)
  13. 成立一年,openEuler为开源带来哪些改变
  14. miui10,miui11,miui12 rom下载,支持市面常见机型
  15. C++ 强连通分量 - 缩点(Tarjan算法)
  16. 一级建造师-通信-光电缆检验
  17. [简单]poi 创建word2007脚注(FootNote)
  18. “百度杯”CTF比赛 十一月场Look
  19. 查看oracle关闭重启,oracle 数据库关闭重启
  20. 互联网赚钱的逻辑是什么?

热门文章

  1. shiro中使用自定义filter后,anon不生效解决方案
  2. 阿里云人机验证(无痕)完整流程以及注意事项
  3. 张俊芳电机学12章计算题以及答案
  4. 阿里云生活物联网平台搭建
  5. Docker入门教程 Part 1 基础概念 - 镜像、容器、仓库
  6. 质量保证QA与质量控制QC
  7. 如何删除tmp计算机桌面,教你Win10系统中tmp文件删除不了应该如何解决?
  8. TWR_MPC8309调试日志
  9. java项目集成谷歌登录验证器,给网站添加谷歌验证(我不是机器人)
  10. php 接入google 验证用户登录