加入收藏夹
域名:www.kincony.com    www.hificat.com       English Version || 公司简介|| 汇款须知 || 汇款确认及留言 || 论坛 || 淘宝网店


轻松学习PIC之LED发光管篇 PIC单片机学习系列教程

    发光二极管(简称LED),在日常生活中经常看到有些电器上带有LED指示灯有节奏地闪动,通过这个LED指示灯可以了解系统的工作状态。本小节就介绍最简单的发光管闪动实验。
pic开发板
图10-1 发光二极管闪动实验演示图

器件和原理

    本实验中主要应用到单片机的端口操作及延时循环程序。首先我们需要知道如何让一个发光二极管工作。发光二极管有很多类,如图10-2所示的是几种直径3mm的普通亮度发光二极管,电气原理图则如图10-3所示,当在它的A和K两个电极加上合适的电压的时候,它就会亮起来。说“合适的电压”,是因为不同的发光二极管工作电压并不相同,一般是在1.6V到2.8V之间,而工作电流则一般在2到30mA之间,但是实际工作的选择范围一般是4到10mA之间。

图10-2 发光二极管实物图 图10-3 发光二极管电气原理图

硬件电路

    上文介绍的发光管电压、电流参数,实际是为了解释LED上串接电阻大小的选择。例如系统供电为5V,LED上串接的电阻是1K,如果此时LED上的电压是2.0V,那么此时通过LED的电流则为(5V-2V)/1000Ω=3mA,如果需要提高亮度,一般会电流控制在10mA左右,则此时电阻应该选择(5V-2V)/10mA=300Ω,所以可以就近选择330Ω。

    电路已经确定,然后就是连接到单片机的I/O口上,见图10-4,我们可以看到LED的A极通过限流电阻连接到VCC,K极连接到了单片机的I/O口,因此要使LED发光,也就是使电流流过LED,只需要把I/O口置成高电平即可,所以最终我们对LED的控制变成了对一个I/O口的控制,比如要点亮LED,就是把RCx设置成高电平而已,这就是实现方法。实验电路可以参考图10-4。

图10-4 硬件原理图

程序设计

    通过上文我们已经知道,要使图10-4中的LED发光,只要把RCx置成高电平就可以了,相反,把RCx置成低电平就可以使LED灭掉,而要想让他闪动起来,其实也就是亮和灭在一段连续时间上交替出现。所以,实现方法就是使RCx在每隔一段时间轮流出现高低电平。因为单片机的程序执行速度很快,如果是在很短的时间内改变RCx的状态,人眼是看不出来的,中间必须有个合适的延迟时间,所以一般闪动地延迟是在300ms左右,据说以这个频率闪烁不太会令人觉得很紧张。到这里我们就可以编写如下程序,通过以下程序可以实现LED的闪动发光。程序代码如下:

#include <pic.h>
void delay()
{
unsigned int k;
for(k=0;k<6000;k++);
}
void main()
{
TRISC=0X00; /*TRISC寄存器被赋值,PORTC每一位都为输出*/
while(1) /*循环执行点亮发光二极管的语句*/
{
PORTC=0X01; /*向PORTC送数据,点亮LED发光管*/
delay();
PORTC=0X00;
delay();
}
}

流水灯实验

    上一小节介绍了最基本的LED闪动实验,但在日常生活中还会经常见到一些广告牌等以LED流动发光的形式来增加美观。本小节就以最简单的流水灯为例,介绍一些流水灯的编程与应用原理。

实例功能

    本实验可以在配套开发板上模拟广告牌流水灯实验。因为我们在实验板上暂时还只能用LED来模拟8个灯,但是它们的控制原理则是一样的,并且如果把这8个LED替换成8个继电器然后再去控制8个彩灯甚至是8组彩灯时,结果就是真正的流水灯了。下图为流水灯的三个状态,从实物图中可以看到发光管轮流发光。
pic单片机开发板
pic开发板
增强型PIC开发板
图10-5 流水灯实验演示图

器件和原理

    实现流水灯的原理是:使8个编号为LED1到LED8的LED从LED1开始亮起,每次只点亮一个,并按次序往LED8移动,结束后再次从头开始。在使用配套开发板时,LED标号为D10-D17。参照表10-1,实际上就是在程序开始执行之后,使程序一直在“复位状态”到“状态8”之间按顺序执行。如果把这些文字整理成一个状态表的话更有助于初学者理解,流水灯的状态变化见表10-1:


LED序号

LED1

LED2

LED3

LED4

LED5

LED6

LED7

LED8

对应的I/O口

RC0

RC1

RC2

RC3

RC4

RC5

RC6

RC7

复位状态

状态1

状态2

状态3

状态4

状态5

状态6

状态7

状态8

表10-1:流水灯状态表
从前一小节我们已经知道了控制一个LED的方法,所以要实现这个程序,关键是了解整个过程,我们先来比较一下“复位状态”和“状态1”的区别,有什么地方不一样呢?就是LED1在这里被点亮了,所以从“复位状态”到“状态1”,需要完成的操作是“点亮LED1”,然后从“状态1”到“状态2”,我们很容易发现,区别有两个地方,就是LED2亮了,LED1却灭了,所以在这一步,需要做的事情是“点亮LED2”和“熄灭LED1”,按照这样的过程其它步骤需要完成的任务也不难看出来,列出图10-6的流程图:

图10-6 流水灯程序流程图
硬件电路
有了以上理论基础,我们再参考上一节的电路设计经验,我们可以设计出下图10-7的硬件电路。

图10-7 硬件原理图

10.2.4 程序设计

#include <PIC.h>

void Delay()
{
unsigned char i,j;
for(i=0;i<255;i++)
for(j=0;j<255;j++);
}

void main()
{
unsigned char i;
unsigned char temp;

TRISC=0X00; //PC口输出
PORTC=0x00; //关LED
while(1)
{
temp = 0x01; //赋初值给temp,只有1位为1
for(i = 0; i < 8; i++)
{
PORTC = ~temp; //将temp取反后送P1口输出
Delay(); //调用延时函数
temp = temp << 1; //temp中的数据左移1位
}
}
}

--->>>返回首页


以上部分内容转载于网上,如有涉及到版权问题,请即通知本人删除 ICP备05019516号
联系地址:浙江省杭州市登云路428号 浙江时代电子市场4楼851室 邮政编码:310011 Email:hificat@163.com
电话总机:0571-88009850 产品咨询:转分机1 技术支持:转分机2 传真:转分机3 手机:13185018567
杭州晶控电子有限公司 版权所有 COPYRIGHT2003——2010 HANGZHOU KinCony ELECTRONICS CO.,LTD All rights reserved