首页 > 代码库 > 【003】AVR单片机控制发光二极管
【003】AVR单片机控制发光二极管
点亮ARV单片机开发板上的一个LED灯
原理图:
分析:上面的截图就是单片机和LED灯的连接原理图,其中J6是一个排阻,起到限流的作用,防止LED电流过大而烧坏。
排阻的内部就是一组并联的电阻:
提示:
算一下这个排阻的电阻的大小,二极管的工作电流是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 int11 #define uchar unsigned char12 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 //点亮第一个LED27 PORTB = 0xFE;28 29 //这里就是Delay函数的实现30 c = 5000;31 while(c--);32 c = 5000;33 while(c--);34 35 //熄灭第一个LED36 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单片机对二极管的控制电路原理图:
【003】AVR单片机控制发光二极管
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。