控制led亮度C语言程序,单片机pwm控制led亮度原理图
单片机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亮度原理图相关推荐
- 自动感光调节LED灯亮度C语言程序,单片机PWM调节LED灯亮度
刚搞完飞思卡尔智能车,昨天我一起做车的搭档跑来跟我说魏老师(我们系的前主任,不知道他们怎么认识的....)叫他帮忙做个可通过无线遥控调节LED灯亮度的设计方案,问我有没有兴趣做做,主要是魏老师也是受他 ...
- led的c语言程序,单片机C语言LED灯点亮程序完全版
<单片机C语言LED灯点亮程序完全版>由会员分享,可在线阅读,更多相关<单片机C语言LED灯点亮程序完全版(7页珍藏版)>请在人人文库网上搜索. 1.1例子1第二个灯亮#inc ...
- 按钮查询方式控制交通灯c语言程序,单片机控制交通灯(内含程序和实物图)
模拟交通灯控制系统 摘要:随着经济发展,汽车数量急剧增加,城市道路日渐拥挤,交通拥塞已成为一个国际性的问题.因此,设计可靠.安全.便捷的多功能交通灯控制系统有极大的现实必要性.根据交通灯在实际控制中的 ...
- 单片机串口中断控制流水灯c语言,基于单片机AT89C51控制的中断控制流水灯_课程设计报告...
<基于单片机AT89C51控制的中断控制流水灯_课程设计报告>由会员分享,可在线阅读,更多相关<基于单片机AT89C51控制的中断控制流水灯_课程设计报告(25页珍藏版)>请在 ...
- 按键控制8*8led点阵C语言程序,单片机按键控制8X8LED点阵屏显示图形 程序的几个问题...
/* 名称:按键控制8X8LED点阵屏显示图形 说明:每次按下K1时,会使8X8LED点阵屏循环显示不同图形. 本例同时使用外部中断和定时中断. */ #include #include ...
- stc12c5a60s2c语言程序,单片机STC12C5A60S2控制AT24C04的程序(C语言)
描述 /************************************** 主芯片 : STC12C5A60S2 (1T) 工作频率: 12.000MHz **************** ...
- 单片机控制灯光亮度c语言程序,基于51单片机控制LED灯光亮度并报警
利用pwm控制led灯光亮度大小.可以显示许多亮度等级 到最低或者最高亮度等级会发出报警.设计思路: LED一般是恒流操作的,如何改变LED的亮度呢?答案就是PWM控制.在一定的频率的方波中,调整高电 ...
- 单片机发射红外c语言程序,单片机模拟红外发射源程序IR-send
单片机模拟红外遥控器发射的C语言程序 //********************************************单片机红外发射**************************** ...
- C语言 int 转单精度浮点,单精度浮点数与十六进制转换 C语言程序 单片机也可用...
单精度浮点数与十六进制转换 C语言程序 单片机也可用 #include float Hex_To_Decimal(unsigned char *Byte,int num)//十六进制到浮点数 { // ...
最新文章
- mac系统学习和快捷键
- 【问链-EOS公开课】第八课 EOS 数据库与持久化 API(一)
- 为什么int型的数组用memset不能清零(memset的使用规范)
- 【IBatis.Net】 各种配置说明
- Swoole安装报错No releases available for package pecl.php.net/swoole
- 人脸识别(二)——训练分类器
- 线段树(结构体建法_QAQ)
- 【Java从入门到天黑|05】JavaSE入门之面向对象(下)
- Linux下ejabberd安装配置
- [SCM]源码管理 - perforce快速入门
- rhel系统启动过程_Linux启动过程详解
- java 图片服务器 上传_Java实现把图片上传到图片服务器(nginx+vsftp)
- 成立一年,openEuler为开源带来哪些改变
- miui10,miui11,miui12 rom下载,支持市面常见机型
- C++ 强连通分量 - 缩点(Tarjan算法)
- 一级建造师-通信-光电缆检验
- [简单]poi 创建word2007脚注(FootNote)
- “百度杯”CTF比赛 十一月场Look
- 查看oracle关闭重启,oracle 数据库关闭重启
- 互联网赚钱的逻辑是什么?