早期控制LED亮度的方法一般是采用模拟电路来调节LED的工作电流来实现,这种方式灵活性较差,很难达到智能控制的效果。本文将介绍如何通过一个普通MCS51单片机来产生PWM信号,达到调节LED的亮度的目的。

一、硬件的简单介绍:

该实验在“ME300B型51/AVR单片机学习开发系统”上完成(本刊2005年第11期和2006年第1期上分别有ME300B的功能与使用介绍),实验中用到了开发系统上的8个发光二极管、独立按键和蜂鸣器,现将这三部分的电路工作原理进行简单的介绍:

  1. 发光二极管驱动电路

ME300B上的8个发光二极管接在单片机的P0端口上。由于51系列单片机的P0端口输出高电平时的推电流能力弱,而输出低电平时的灌电流能力强,所以ME300B开发板上的8个发光二极管设计成输出低电平时点亮,输出高电平时熄灭,如图1所示。

图1 发光二极管驱动电路

  1. 独立键盘电路

独立键盘是直接用I/O口线构成的单个按键电路。每个独立键盘单独占有一根I/O口线。

开发板设有4个独立按键,分别对应接于P1.4-P1.7端口上,如图2所示。

图2 独立键盘电路

在正常状况下,与键盘所连接的单片机I/O端口先被置为高电平,即“1”状态(输入状态)。当有键按下时,与之相连的单片机I/O端口将被拉成低电平,即“0”状态。所以直接依据每个I/O口线的状态来判断按键是否按下。

  1. 蜂鸣器驱动电路

图3 蜂鸣器驱动电路

由于ME300B开发系统使用的是交流蜂鸣器,不能使用直流电平控制方式,必须使用交变脉冲控制方式来驱动,这一点请大家注意。

二、PWM的工作原理

PWM 是脉冲宽度调制(Pulse Width Modulation)的简称,PWM是一种周期一定而高低电平的占空比可以调制的方波信号,当输出脉冲周期一定时,输出脉冲的占空比越大,相对应的输出有效电压越大。

图4 PWM波形图

在一个周期内的脉冲宽度(导通时间)为T1,周期为T,波形如图4所示。

则输出电压的平均值为: U=Vcc×T1/ T=αVcc

其中,α=T1/T(正脉冲的持续时间与脉冲周期的比值)称为占空比,α的变化范围为0≤α≤1,Vcc为电源电压。

当电源电压Vcc不变的情况下,输出电压的平均值U取决于占空比α的大小,改变α的大小就可以改变输出电压的平均值,这就是PWM的工作原理。

发光二极管的亮度与加在发光二极管两端的电压成比例,而发光二极管两端的电压与PWM信号的占空比成正比。因此,占空比越大,发光二极管越亮,当占空比α=1时,发光二极管的亮度最高。

三、 演示软件的编程方法

由于大多数51系列单片机没有PWM信号输出功能,所以我们在这里采用单片机定时器配合软件的方法来实现PWM信号的输出。

  1. 确定改变占空比的值的方法

有几种方法都可以改变占空比的值。

  1. 定宽调频法

保持T1不变,只改变T2,这样使周期(或频率)也随之改变。

  1. 调频调宽法

保持T2不变,而改变T1,这样使周期(或频率)也随之改变。

1.3 定频调宽法

周期T(或频率)保持不变,而同时改变T1和T2。

我们选用定频调宽的方法来改变占空比的值。

2、确定PWM的占空比输出方式

图5 P0口输出波形

由于P0所接的8个发光二极管是用低电平驱动,所以要将PWM的实际输出波形按图5所示的P0口输出波形进行编程,即PWM的占空比输出方式为反向。

  1. 演示软件的编程

用T0定时器设置PWM输出的周期(或频率),T0定时器设置成工作方式1,16位定时器。

T0中断服务子程序主要任务是确定PWM输出的周期(或频率)和控制定时器1中断。

T0定时器的定时常数是一个固定值,这样就确定PWM输出的周期(或频率)。

用T1定时器设置PWM输出的占空比,T1定时器设置成工作方式2, 8位定时器,自动载入设定值。

T1中断服务子程序主要任务是调节PWM输出的占空比(或脉宽)

T1定时器的定时常数是一个变化值,用K1键或K2键来设定。

T0、T1中断服务子程序如下:

;====================================================

;T0中断服务子程序 周期(或频率)

;控制定时器1中断

;====================================================

INTT0:

CLR TR1

MOV TH0,#0FCH ;1ms延时常数

MOV TL0,#066H ;周期调节

MOV TH1,PWM_NUM

SETB TR1

MOV PWM_OUT,#00H ;输出低电平

RETI

;====================================================

;T1中断服务子程序 脉宽(或占空比)

;控制PWM脉冲宽度

;====================================================

INTT1:

CLR TR1

MOV PWM_OUT,#0FFH ;输出高电平

RETI

PWM_OUT 为外接LED的控制端口,PWM_NUM为按键设置的T1定时器定时值的存放单元。

4、演示软件的功能

由两个按键K1、K2来调节P0口输出脉冲的占空比,该脉冲直接驱动P0口所接的8个发光二极管,随着占空比的不同发光二极管的亮度不同,当按下K1键(不要松手)发光二极管逐渐变暗,当有蜂鸣器响时,说明输出脉冲的占空比已经达到最小值,发光二极管的亮度已处在最暗的状态。

当按下K2键(不要松手)发光二极管逐渐变亮,当有蜂鸣器响时,说明输出脉冲的占空比已经达到最大值,发光二极管的亮度已处在最亮的状态。

作者: 山西太原 贵国庆

光敏电阻控制led亮度程序_单片机开发系统学习LED亮度控制原理相关推荐

  1. 单片机led闪烁代码_单片机、555实现LED闪烁电路

    有朋友在后台发消息,希望设计一个LED闪烁电路,闪烁频率为2Hz,想了解LED闪烁的电路原理是什么,下面解答一下,看看有没有写的很通俗易懂.要设计一个闪烁电路,闪烁频率为2Hz,即500ms亮灭交替. ...

  2. 光敏电阻控制led亮度程序_利用光敏电阻加声音传感器制作声控灯

    视频演示 https://www.zhihu.com/video/1145029294962020352 光敏电阻传感器模块 模块参数: 工作电压:3.3V-5V 光敏电阻模块对环境光线敏感,一般用来 ...

  3. 控制led闪烁次数_单片机驱动LED灯的进阶之路

    对于大多数单片机的学习者或者是从事单片机行业的工程师来说,单片机驱动LED闪烁起来的时候,基本都是我们入坑的开始,同时当时的那种兴奋与喜悦都是难以忘怀的,从LED灯亮起,到闪烁,再到各种流水灯,能开心 ...

  4. 二阶声波正演c语言程序_嵌入式开发中的三种程序构架

    关注.星标公众号,直达精彩内容 0.前言 在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题.软件架构对于系统整体的稳定性和可靠性是非常重要的,一个合适的软件架构不仅结构 ...

  5. 计算机行业中的烧写怎么翻译,单片机怎么烧录程序_单片机烧录程序步骤说明...

    描述 单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU.随机存储器RAM.只读存储器ROM.多种I/O口和中断系统.定时器/ ...

  6. 单片机人流统计装置的程序_单片机其实不难

    对于大学读电子方面专业的同学们,肯定知道有这么一个神奇的元器件,它枯燥难懂,但也十分吸引人,它就是我们今天要讲的元器件--单片机 单片机作为工业控制领域里面最核心的部件,它存在于每一台机器,小到扫地机 ...

  7. 单片机按键防抖程序_单片机独立按键使用程序

    独立按键是单片机中很重要的一个器件,在这篇文章里,通过这个用独立按键控制LED灯的小程序来介绍独立按键开关的使用. 1.按键分类与输入原理         按键按照结构原理科分为两类,一类是触点式开关 ...

  8. 单片机学c语言还是python好_单片机开发用哪种语言最好?

    在过去的几十年中,单片机的规格变化不大,但是语言和支持软件的扩展为应用程序开发开辟了许多途径.多年来,对单片机进行编程涉及到两种语言的选择:C语言和汇编语言.但是随着现在可用于微处理器的新语言,用户在 ...

  9. 从左到右的流水灯单片机课程设计实验报告c语言版,流水灯_单片机课程设计-实验-LED流水灯.doc...

    实验 LED流水灯 P0口作输出口,经74LS244驱动,接8只发光二极管LED0-LED7.当单片机的引脚输出为低电平时发光二极管点亮,为高电平时息灭.编写程序,使8个发光二极管循环点亮,时间间隔约 ...

最新文章

  1. 佛弟子有三样东西需要永远保密!
  2. 微软或允许 Android 应用运行于 Windows 和 WP
  3. 如何让制定的计划实施起来
  4. 高效地加载图片(一) 高效地加载大图
  5. 追随自己的价值观:用研经理 Anne Diaz 职业探索之路
  6. Java-js处理textarea自动生成的制表符(空格,换行,tab等)
  7. readyboost提升明显吗_主动降噪影响音质吗?为什么降噪耳机打开降噪后音质会有明显提升...
  8. 爱可生 mysql监控_MySQL 数据传输DTLE 最新版来啦-爱可生
  9. 染色问题 —— 扇形涂色
  10. RRT 算法原理以及过程演示
  11. Qt_屏幕保护程序、进程监听、数据库读取、屏幕保护
  12. PN结的形成及PN结工作原理(单向导电)讲解
  13. java 在某个时间段定时_Java 在某一个时间点定时执行任务(转载)
  14. Verilog中reg和wire的区别
  15. 上课笔记-机器学习(4)-泰坦尼克号沉没乘客存活分析
  16. 无线渗透-----aircrack-ng破解WEP加密
  17. 运营商精准大数据外呼系统
  18. 漫画:什么是大数据?
  19. CodeForces 85D Sum of Medians Splay | 线段树
  20. 保护自己的笔记本电脑,和我一起做

热门文章

  1. 当我们在谈数字化转型的时候,我们在谈什么?
  2. Activiti 5.3:子流程(subProcess)
  3. JeeWx 捷微 2.2 发布,微信管家平台
  4. jeecg 分布式部署附件共享问题(Linux软连接和硬链接)
  5. hadoop--HDFS搭建客户端API环境
  6. 金三银四,如何征服面试官,拿到Offer
  7. Spark2.3.1在Idea控制台调整日志等级
  8. HDU 4548 美素数 素数题解
  9. 一位前辈工程师职业发展的忠告
  10. 【翻译】How-To: Using the N* Stack, part 5