本文是进一步了解AVR微控制器的又一步。我们已经演示了3个简单的基于LED的项目使用ATmega328微控制器,这将帮助您了解其基本概念。ATmega328是一种8位AVR(高级虚拟RISC)微控制器。它是一个功能强大的微控制器,内置内存约32Kb。大多数Arduino板由Atmel 8位AVR微控制器组成,具有不同数量的闪存、引脚和功能。Arduino Uno是一款基于ATmega328的微控制器板。

AVR微控制器非常容易使用。所有AVR微控制器都需要集成开发环境(IDE),如Atmel Studio。利用该集成开发环境,我们可以在所有AVR微控制器上创建、编译和调试程序。

让我们使用Atmel Studio 7为ATmega328开发简单的LED闪烁程序。

  1. 闪烁两个LED使用ATmega328
  2. 控制两个LED使用一个按钮开关
  3. Toggle Two LED使用Push按钮开关

# 1。闪烁两个LED使用ATmega328

在本节中,我们将学习如何使用AVR ATmega328微控制器闪烁两个led。首先,我们将这2个LED与ATmega328单片机的PORTB的PB2和PB3连接。然后,我们将使2个LED以1秒的间隔闪烁。它的意思是,最初是1LED单独会发光,下一秒,它会关闭和2nd人会发光。这个过程会一直持续下去,led灯就这样不停地闪烁。

使用ATmega328闪烁两个LED
使用ATmega328闪烁两个LED -电路图

使用ATmega328闪烁两个LED
使用ATmega328闪烁两个LED

按图示组装电路。组装电路的照片如下所示。项目的视频演示如下所示。

程序解释

使用ATmega328 -闪烁两个LED下载程序

在程序开始时,定义了一个名为“F_CPU”的预处理器。这只是告诉库代码处理器每秒执行多少CPU周期的简单方法。这里我们定义F_CPU为1 MHz。“# include < avr /头文件>”是一个头文件,为您提供各种i / o操作,像DDRx PINx, PORTx,等等。”# include < util / delay.h >”是一个头文件,为您提供了内置的延迟函数像_delay_ms (), _delay_us(),等等。”_delay_ms(1000)”提供1000毫秒的延迟(即相当于1秒)。

DDRx—Data Direction Register配置端口的数据方向(输入/输出)。指令“DDRB |= (1<

PORTx-端口寄存器用于为端口引脚分配适当的值。

给PORTx写信。N将立即根据给定的值改变端口引脚的状态。“PORTB |=(1<

# 2。控制两个LED使用一个按钮开关

在这里,我们将学习如何使用一个按钮开关来控制两个LED的工作。与之前的电路类似,首先我们将2个led与微控制器PORTB的PB2和PB3连接。一个按钮开关,然后连接到PB0引脚和拉起使用10K电阻。交换机剩余端子接地。上拉电阻的功能是确保当开关未按下时,PB0引脚的状态应保持高。ATmega芯片内置了20K的上拉电阻,也可以通过软件访问。但这里我们用的是外部上拉电路。当开关被按下,两个LED将发光,并将关闭,而我们释放开关。这就是电路的工作原理。

控制两个LED使用一个按钮开关
控制两个LED的使用按钮开关-电路图

使用按键开关控制两个LED
控制两个LED使用按钮开关- ATmega328

按图示组装电路。组装电路的照片也显示在上面。项目的视频演示如下所示。

程序解释

使用按钮开关控制2个LED下载程序

我们已经在前面的部分讨论了预处理程序和库。这段代码中新包含的惟一内容是将PB0引脚指定为输入端口,以及与该引脚关联的“if”循环。

“DDRB &= ~(1 << DDB0)”是分配PB0作为输入端口的代码。一个“if”循环包含在“while”循环中,它将持续监测PB0引脚的状态并相应地改变两个LED的状态。

当端口被配置为输入时,PIN寄存器用于从端口引脚读取数据。" !(PINB&(1<

# 3。Toggle Two LED使用Push按钮开关

在本节中,我们将根据按钮开关的输入来切换两个LED的状态。为此所需要的电路与上述部分所需要的电路相似。唯一的区别是编程部分。电路的工作原理也略有不同。每当控制器从开关接收到输入时,就会切换两个LED的当前状态。

拨动2个LED使用按钮开关-电路图
拨动2个LED使用按钮开关-电路图

使用按钮开关拨动2个LED
使用按钮开关拨动2个LED

按图示组装电路。项目的视频演示如下所示。