码迷,mamicode.com
首页 > 其他好文 > 详细

【003】AVR单片机控制发光二极管

时间:2014-10-15 14:40:50      阅读:576      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   ar   for   文件   

点亮ARV单片机开发板上的一个LED灯

原理图:

bubuko.com,布布扣
 bubuko.com,布布扣

分析:上面的截图就是单片机和LED灯的连接原理图,其中J6是一个排阻,起到限流的作用,防止LED电流过大而烧坏。

排阻的内部就是一组并联的电阻:

bubuko.com,布布扣

提示:
算一下这个排阻的电阻的大小,二极管的工作电流是3mA,工作电压时1.7V,VCC的电压时5V。所以电阻上的电流是3mA,电压是3.3V,所以电阻的阻值是1.1KΩ。

因为所有的二极管都是通过一个限流电阻共阳极的,所以只需要在Q端给一个低电平就能点亮这个发光二极管。Q端的电平通过一个573锁存器受控于D端的电平高低,也就是单片机的PB端口。这样我们就能通过写程序控制PB端口的高低电平来实现二极管的亮灭。

这里还用到573锁存器的原理:

锁存器的作用是,当单片机要用这个端口去控制其他的电路时,要修改端口的电平值,这样便会影响原来的电平值。所以要用锁存器来维持这个原来的电平,不会受到端口的新的电平值的影响。

点亮一个发光二极管程序代码:

 1 /********************************************************************************
 2 *功能:
 3 *     点亮第一个发光二极管
 4 *
 5 *头文件:
 6 *     原本单片机的I/O口都是一个十六进制的地址,非常不方便记忆,所以用头文件
 7 *     封装起来便于记忆。在程序编译的时候,头文件原样粘贴过来,还原回原来的十六
 8 *     进制的地址给硬件看。
 9 *     <AVRdef.h>是<macros.h>的新版本。
10 *
11 ********************************************************************************/
12 #include <iom16v.h>
13 #include <macros.h>
14 
15 void main(void)
16 {
17     //设置PA2口为输出高电平,控制锁存器573的锁存端接通
18     DDRA  |= BIT(2);
19     PORTA |= BIT(2);
20     //锁存器的D端口受控于PB口,所以设置PB口的第0位为输出低电平,其他7位输出高电平
21     //点亮第一个二极管
22     DDRB  = 0xFF;
23     PORTB = 0xFE; 
24 }

第一个发光二极管闪烁:

 1 /********************************************************************************
 2 *功能:
 3 *     第一个发光二极管闪烁
 4 *
 5 *
 6 ********************************************************************************/
 7 #include <iom16v.h>
 8 #include <macros.h>
 9 
10 #define uint unsigned int
11 #define uchar unsigned char
12  
13 void main(void)
14 {
15     uint c = 0;
16     
17     //设置PA2口为输出高电平,控制锁存器573的锁存端接通
18     DDRA   |= BIT(2);
19     PORTA |= BIT(2);
20 
21     //设置PB端口工作方式为输出
22     DDRB    = 0xFF;
23 
24     while(1)
25     {
26         //点亮第一个LED
27         PORTB   = 0xFE;
28 
29         //这里就是Delay函数的实现
30         c = 5000;
31         while(c--);
32         c = 5000;
33         while(c--);
34         
35         //熄灭第一个LED
36         PORTB   = 0xFF;
37 
38         //这里就是Delay函数的实现
39         c = 5000;
40         while(c--);
41         c = 5000;
42         while(c--);
43     }
44 }

 其中的c--可以用一个delay()函数实现:

1 void delay(void)
2 {
3     uint x,y;
4     for (x = 0; x < 500; x++ )
5     {
6         for(y = 0; y < 1000; y++);
7     }
8 }

 

补充

补录51单片机对二极管的控制电路原理图: 

bubuko.com,布布扣

【003】AVR单片机控制发光二极管

标签:style   blog   http   color   io   os   ar   for   文件   

原文地址:http://www.cnblogs.com/stemon/p/4026104.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!