51单片机脉冲宽度调制(PWM)控制LED灯亮度

发布者:FreeSpirit123最新更新时间:2012-11-24 来源: 21ic 关键字:51单片机  脉冲宽度调制  PWM 手机看文章 扫描二维码
随时随地手机看文章

/*介绍一个51系列单片机采用脉冲宽度调制(PWM)方式控制LED灯亮度的一个程序,大家都知道,51单片机本身是没有pwm接口的,这个程序是通过软件模拟pwm.在一定的频率的方波中,调整高电平和低电平的占空比,即可实现LED灯亮度控制。程序出自:单片机网http://www.51hei.com,如有问题可在论坛提出,程序中使用定时器0产生2.5ms周期脉冲,使用占空比控制变量scale控制占空比,在低电平期间使LED灯亮,在高电平期间使LED灯灭,改变scale就改变了高电平与低电平的时间,因此也就控制了LED灯的亮度。*/
#include "AT89X51.H"  //模拟PWM输出控制灯的10个亮度级
unsigned int scale;   //占空比控制变量
void main(void)       // 主程序
{ unsigned int n;    //延时循环变量
TMOD=0x02;  //定时器0,工作模式2(0000,0010),8位定时模式
TH0=0x06;   //写入预置初值6到定时器0,使250微秒溢出一次(12MHz)
TL0=0x06;   //写入预置值
TR0=1;    //启动定时器
ET0=1;    //允许定时器0中断
EA=1;     //允许总中断
while(1)   //无限循环,实际应用中,这里是做主要工作
{ for(n=0;n<50000;n++);  //每过一段时间,就自动加一个档次的亮度
scale++;    //占空比控制变量scale加1
if(scale==10)  scale=0;  //如果scale=10,使scale为0
} }
timer0() interrupt 1    //定时器0中断服务程序
{ static  unsigned int   tt ;   //tt用来保存当前时间在一秒中的比例位置
tt++;    //每250微秒增加1
if(tt==10)   //2.5毫秒的时钟周期
{ tt=0;  //使tt=0,开始新的PWM周期
P2_0=0;  //使LED灯亮
}
if(scale==tt)  //按照当前占空比切换输出为高电平
P2_0=1;        //使LED灯灭

/*程序中从tt=0开始到scale为低电平,从scale开始到tt=10为高电平,由于scale是变量,所以改变scale就可以改变占空比。*/

关键字:51单片机  脉冲宽度调制  PWM 引用地址:51单片机脉冲宽度调制(PWM)控制LED灯亮度

上一篇:关于STC12C5410AD单片机PxM0,PxM1设置的问题
下一篇:用查询定时器0溢出标志位的方式实现LED灯闪

推荐阅读最新更新时间:2024-03-16 13:13

51单片机的延时计算
前言 我使用51,STC这一类的单片机做控制好几年,一直是使用现成的程序,在其上修修改改,以达到需求动作目的即可。从来都是不求甚解。想法既是如此,会用即可,了解那么多做什么。 此次又在做一项目,里面用到I2C通讯。本来是直接复制粘贴了事,却没想对里面的一个小小的延时函数起了兴趣,由于本人是基础功底只有5战斗力的渣渣,写写画画了一天才搞了个大体明白。 以前总是在看其他博主的文章,默默潜水。然而此次,突然就忍不住想写篇文章发表一下费尽心思的微不足道的心得体会。 正文 void Delay10us() //@12.000MHz { unsigned char i; _nop_(); _nop_(); i = 27
[单片机]
<font color='red'>51单片机</font>的延时计算
汇编写51单片机之按键检测
二话不说,先上代码: ORG 00H LOOP: JB P3.4,LOOP LCALL DELAY JB P3.4,LOOP LOOP1:JB P3.4,LOOP JB P1.0,TC1 SETB P1.0 JMP LOOP TC1: CLR P1.0 JMP LOOP DELAY: MOV R7,#50 D1: MOV R6,#50 D2: DJNZ R6,D2 DJNZ R7,D1 RET END 我就不说什么数码管的静态显示,动态显示了,会点LED了,数码管就是比较复杂的点LED。所以现在来说检测io口的状态。我的按键是P3.4,平常位高电平,按下即为低电平。实现:按键按一下灯的状态就变为相反状态 ORG 00H L
[单片机]
51单片机(七)—— LED进阶控制
在《51单片机(五)》和《51单片机(六)》中,我们对LED的控制比较简单,都只是点亮的操作,在本文中,我们进行一些相对复杂的操作,来更加熟悉单片机IO口的使用。 一、闪灯 在这个实验中,我们只对LED1进行控制,让它闪烁,代码如下所示 #include reg52.h //包含头文件,一般情况不需要改动, sbit LED1=P0^0; //用sbit关键字定义LED1到P00端口, /********************************************************************/ /* 延时函数 */ /*
[单片机]
基于51单片机可修改错误功能的计算器工作原理解析
utiliTIes.h #ifndefUTILITIES_H_INCLUDED #defineUTILITIES_H_INCLUDED typedefunsignedcharuchar,BYTE,uint8; typedefunsignedintuint,WORD,uint16; typedefunsignedlongulong,DWORD,uint32; typedefcharint8; typedefintint16; typedeflongint32; typedefunsignedchar*uchar_p; typedefunsignedint*uint_p; typedefunsignedlong*ulong_p;
[单片机]
基于<font color='red'>51单片机</font>可修改错误功能的计算器工作原理解析
51单片机学习之陆 —— 1.3 流水灯的花样玩法
上一次我们点亮了一个流水灯 LED1,其实仅仅点亮一个流水灯还是有些单调的。 这一次让我们试着尝试些别的花样 1 多个流水灯的点亮 a 打开keil 将原来的c文件关掉 左边的也删掉,因为我并不像重新创建工程 按照昨天的方法新建一个c文件,并添加到工程中(以后也这样,所以请有自己的命名规则,否则都分不清了,而我这里命名的是LED1.1) b 将代码写上。(假如你要点亮1357这几个流水灯) #include reg52.h sbit LED1 = P1^0; sbit LED3 = P1^2; sbit LED5 = P1^4; sbit LED7 = P1^6; void main() { LED1 = 0
[单片机]
<font color='red'>51单片机</font>学习之陆 —— 1.3 流水灯的花样玩法
基于51单片机的8255 并行 I/O 扩展实验Proteus仿真
1、了解单片机地址译码。 2、了解 8255 芯片结构及编程方法。 3、了解 8255 输入、输出实验方法。 4、熟悉 proteus 环境仿真电路的调试方法。 实验流程图如下: 实验仿真图如图:
[单片机]
基于<font color='red'>51单片机</font>的8255 并行 I/O 扩展实验Proteus仿真
使用两个定时器实现PWM(脉宽调制)——呼吸灯
PWM(脉宽调制)大家可以上网查查,其原理讲解很多。为了更好的学习PWM,我特意参照别人写的文章,自己也写了一份代码来实现PWM。代码如下: #include stc12c5a60s2.h unsigned long cnt; unsigned int cnt_T1; unsigned int high; unsigned int low; unsigned char TH0_high; unsigned char TL0_high; unsigned char TH0_low; unsigned char TL0_low; unsigned char T1H1; unsigned char T1L1; unsigned
[单片机]
基于89C51单片机的节拍器设计
1 硬件电路原理 节拍器以AT89C51 单片机为控制中心,由LED 显示模块、调节键盘模块、声音输出模块组成。图1 是节拍器的电路原理图。ATMEL 公司生产的AT89C51 单片机与MCS51指令系统兼容,40 脚结构,是系统的控制中心。显示模块由四位一体的共阳极蓝色LED 显示器构成,采用动态扫描显示方式, Q11~ Q14是LED 的位选择开关三极管, R6~ R13是数码管段发光二极管的限流电阻。四位一体的LED 数码管完成显示节拍数、各功能代码及参数值的功能。键盘调节模块由4 只按键构成,分别是功能选择键A、设置参数选择键B、参数增加键C和参数减少键D ,4 只按键可以完成各种功能的选择和各参数的设置。声音输
[单片机]
基于89C<font color='red'>51单片机</font>的节拍器设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • Linux内核移植
    实验步骤:(1)准备工作(2)修改顶层Makefile(3)修改falsh 分区(4)配置编译内核下面以Linux2 6 30 4内核移植到gec2440为例:一、准备 ...
  • S5PV210 PWM定时器
    第一节 S5PV210的PWM定时器S5PV210共有5个32bit的PWM定时器,其中定时器0、1、2、3有PWM功能,定时器4没有输出引脚。PWM定时器使用PCLK_PS ...
  • S5PV210 NAND Flash
    NAND Flash关于NAND FlashS5PV210的NAND Flash控制器有如下特点:1) 支持512byte,2k,4k,8k的页大小2) 通过各种软件模式来进行NAND Fl ...
  • S5PV210串口
    串口设置之输入输出字符S5PV210 UART相关说明 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它用来 ...
  • S5PV210按键控制LED
    原理图如图所示:查询用户手册得到:程序例子:(完整代码见“代码下载链接”)1、轮询的方式查询按键事件 *main c* 核心代码如下:while(1 ...
  • S5PV210控制蜂鸣器
  • S5PV210的启动过程
  • S5PV210点亮LED
  • S5PV210启动过程详解
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved