点亮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 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单片机对二极管的控制电路原理图:
时间: 2024-10-06 00:53:27