【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 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

【003】AVR单片机控制发光二极管的相关文章

单片机成长之路(avr基础篇)- 003 AVR单片机的BOOT区

BOOT区的由来基于一个简单的道理,即单片机的程序是保存在FLASH中的,要运行程序就必须不停的访问FLASH存储器.对于一般的FLASH存储器,数据的写入需要一定的时间来完成,在数据写入完成之前,存储器中所有的数据都是不可读的,这就在运行旧程序和写入新程序之间造成了一个矛盾. 使用BOOT区是解决这个矛盾的方法之一,它将FLASH存储器从物理上分为两个独立的区域,对其中的一个区的数据写入不会影响到另一个区的数据读取操作.我们可以让单片机的程序在其中一个区(通常是BOOT区)运行,而运行着的程序

控制AVR单片机5路PWM波形

现开发了单片机控制5路PWM波形,也可以同时控制15路直流三色灯板,按触摸屏顺序点亮的电路和程序,供大家参考. 电路为 单片机ATMEGA128控制5路PWM方波,按照74HC08逻辑编码输出15路PWM信号,一次按照迪文触摸屏点亮3种颜色灯板的5路发光信号.ULN2003提供12V电压.每个灯板通过一个CMOS管IR3205输出功率.一个74HC08通过一路PWM,这路PWM通过74HC08控制的继电器控制IR3205的开关,进而控制24V,13V,36V灯板的开关,灯板的亮度通过PWM波形的

AVR单片机入门

ATMEL公司有基于8051内核.基于AVR内核和基于ARM内核的三大系列单片机产品. 先进的EEPROM电可擦除和Flash ROM闪速存储器技术. 8051单片机采用复杂指令系统:CISC:由于CISC结构存在指令系统不等长,指令数多,CPU利用效率低,执行速度慢等缺陷:AVR单片机采用精简指令系统:RISC:RISC采用流水线操作(Pipelining),和等长指令体系结构. AVR单片机吸取了PIC及8051等单片机的优点,改进: 1.程序存储器为价格低廉.可擦写1万次以上.指令长度单元

【007】AVR单片机中断系统

AVR单片机的21个中断源 I/O端口的第二功能 AVR单片机共有单个定时器,定时/计数器1是16bit的,其余的定时/计数器0和定时/计数器2都是8bit的定时器. 定时器的工作模式 普通模式 CTC模式 快速PWM模式 相位修正PWM模式 相位频率修正PWM模式 输入捕获模式 和51单片机的定时计数器类似,根据设定的时钟频率,每过一个时钟,计数寄存器数值加1. 用到的寄存器 T/C1控制寄存器B:(控制时钟的来源和频率) 后三位的设置,1表示定时器停止,2~6表示不同频率的内部时钟,7~8表

AVR单片机教程——PWM调光

PWM 两位数码管的驱动方式是动态扫描,每一位都只有50%的时间是亮的,我们称这个数值为其占空比.让引脚输出高电平点亮LED,占空比就是100%. 在驱动数码管时,我们迫不得已使占空比为50%,因为不能让两位真正同时地显示不同的数字.但是,我们也可以有意地让LED的占空比不到100%,以降低其亮度. 占空比是可以用程序来调节的.下面的程序允许用户用按键调整蓝色LED的占空比,并通过数码管来显示. #include <ee1/ee.h> #define DUTY_MAX 9 int main()

AVR单片机教程——UART进阶

本文隶属于AVR单片机教程系列. ? 在第一期中,我们已经开始使用UART来实现单片机开发板与计算机之间的通信,但只是简单地讲了讲一些概念和库函数的使用.在这一篇教程中,我们将从硬件与软件等各方面更深入地了解UART. USART组件 一直在讲的UART其实是USART组件的一部分,USART比UART多了同步的一部分,但这一部分用得太少(我从来没用过),而且缺乏实例,所以就略过了.然而,单片机的设计者很机智地把这个鸡肋功能升华了一下,USART组件可以支持SPI模式.SPI是一种同步串行总线,

AVR单片机教程——EasyElectronics Library v2.0手册

本文隶属于AVR单片机教程系列. ? adc.h bit.h button.h buzzer.h dac.h delay.h ee.h exin.h exout.h lcd.h ldr.h led.h pin.h pot.h print.h pwm.h rgbw.h rotary.h segment.h switch.h timer.h tone.h uart.h wave.h ? 主要更新: 由于修改了一些接口,与之前版本不完全兼容,主版本号更新为2: 正式支持中断,初步使用回调: UART支

AVR单片机教程——矩阵键盘

本文隶属于AVR单片机教程系列. ? 开发板上有4个按键,我们可以把每一个按键连接到一个单片机引脚上,来实现按键状态的检测.但是常见的键盘有104键,是每一个键分别连接到一个引脚上的吗?我没有考证过,但我们确实有节省引脚的方法. 矩阵键盘 这是一个4*4的矩阵键盘,共有16个按键只需要8个引脚就可以驱动.我们先来看看它的原理. 每个按键有两个引脚,当按键按下时接通.每一行的一个引脚接在一起,分别连接到左边4个端口,称为"行引脚":每一列的另一个引脚接在一起,分别连接到右边的4个端口,称

控制发光二极管

第七章让我了解了如何通过驱动程序来控制发光二极管,实现驱动直接与硬件交互. 一个完整的Linux驱动主要由内部处理和硬件交互两部分组成,其中内部处理主要是指Linux驱动的装载.卸载.与设备文件相关的动作处理以及业务逻辑等:与硬件交互主要是指通过函数与硬件中的寄存器进行数据交互. LED驱动的实现原理:尽管Linux驱动直接与硬件打交道,但并不是Linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互.每一个连接Linux的硬件在I/O内存中都会有映射的首地址. 还要了解并注意:L