AVR单片机教程——点亮第一个LED

2019-12-03来源: eefocus关键字:AVR  单片机教程  LED

做了这么多准备,我们终于可以开始用开发板做点事了。


单片机编程与计算机编程有一些不同点。程序都要有零个或多个输入、一个或多个输出,这是两者都有的,但是计算机编程的输入输出主要靠控制台,而单片机没有。


单片机的英文是microcontroller,主要作控制用途,它对设备的控制就是它的输出,从设备读取的信息就是它的输入。计算机编程中,提供了scanf、printf等函数来做输入输出,单片机虽然也有这一些函数,但它们往往是在串口上收发数据,最终还是在电脑上显示的。单片机对它连接的设备的控制,主要通过对寄存器(register)的操作实现。对寄存器的直接操作涉及到许多底层知识,我已经用一些函数把这些底层的东西封装好了,你只需要调用我编写的库中的函数就可以了。


用单片机来控制,最简单的就是点亮LED了。这个程序没有输入,有一个输出,就是让LED亮起。但即使简单,它也需要库,请在这里下载。


库下载完以后是不能直接用的,我们要把它放进编译器的包含目录下。


在EElib1.0.7z文件中有两个目录,分别是include和lib。打开Atmel Studio 7.0的安装目录,一路找toolchain→avr8→avr8-gnu-toolchain→avr,我是默认位置安装的,找到的目录就是C:Program Files (x86)AtmelStudio7.0toolchainavr8avr8-gnu-toolchainavr,这个目录下也有include和lib两个文件夹。把压缩包里的文件夹放到这里来,对应文件夹合并,库就放对位置了。


上述操作只需每次更新库时执行一遍。


然后我们打开AS7,加载完成后,点击菜单栏→File→New→Project...,也可以用快捷键Ctrl+Shifh+N,弹出新建项目的窗口:

选择GCC C Executable Project,取个名字,选好路径,点击OK,会弹出设备选择窗口:

右上角输入“ATmega324PA”(大小写无所谓),选择ATmega324PA,点击OK。稍等几秒后,一个默认的项目创建好了:

这堆自动生成的代码我们不用,全部删掉。输入以下代码(建议敲一遍,不要复制):


1 #include

3 int main()

4 {

5     led_init();

6     led_set(LED_RED, LED_ON);

7     return 0;

8 }


敲代码的时候你会发现IDE会提示代码补全,按Tab或回车可以选择。输入好以后应该是这样的:

下面来分析一下这段代码:

#include  用于包含库的头文件,有了这句代码,后面才能调用库函数。主版本号为1的库都放在 ee1/ 下。


led_init(); 用于初始化所有LED,如果不初始化,LED是不能点亮的。


led_set(LED_RED, LED_ON); 用于点亮红色LED。led_set 是一个库函数,接受两个参数,第一个表示要点亮哪个LED,第二个表示这个LED要亮还是不亮。详见库函数手册。


最后的 return 0; 可以不写,但加上是一个好习惯。


只写代码还不能让开发板点亮LED。我们调用了库函数,但是复制和 #include 还不足以把库加入到我们的程序中,我们需要配置一下项目属性:

在右边的Solution Explorer中对项目右键,点击最后的Properties,找到Toolchain→AVR/GNU Linker→Libraries,点击右上角Add Item按钮,输入“libee1”,点击OK,然后关闭选项卡,回到代码界面。


我们的开发板不支持debug,而且release编译出来的程序性能稍微好一点。在工具栏中选择Release:

现在我们可以build项目了,之前配置过快捷键的话直接按F5就可以了,也可以点工具栏按钮:

现在C语言代码被转换成了单片机能够执行的代码,它在项目目录中的某处,我们现在不去关心这个。之前配置过的external tool可以把这个文件烧录到单片机中去。如果之前配置过快捷键,按F6就可以,或者在菜单栏→Tools中点击AVRDUDE。输出结果应该是这样的:

如果输出结果不是这样的,那肯定是下载器出了点问题,可能的输出有:

“avrdude.exe: error: could not find USB device with vid=0x16c0 pid=0x5dc vendor='www.fischl.de' product='USBasp'”:这是下载器的电源问题,保持下载器与开发板连接,拔下下载器后重新插上就能解决;

“avrdude.exe: error: program enable: target doesn't answer.”:这是下载器与开发板之间的连接问题,可能是因为没有插紧。

如果烧写成功,现在红色LED就应该亮起了。

关键字:AVR  单片机教程  LED 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic481810.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:AVR单片机教程——闪烁LED
下一篇:AVR单片机教程——开发环境配置

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

avr单片机功能特性介绍
RISC 优先选取使用频率最高的简单指令,避免复杂指令:并固定指令宽度,减少指令格式和寻址方式的种类,从而缩短指令周期,提高运行速度。由于 AVR 采用了 RISC 的这种结构,使AVR系列单片机都具备了1MIPS/MHz(百万条指令每秒/兆赫兹)的高速处理能力。早期单片机主要由于工艺及设计水平不高、功耗高和抗干扰性能差等原因,所以采取稳妥方案:即采用较高的分频系数对时钟分频,使得指令周期长,执行速度慢。以后的CMOS单片机虽然采用提高时钟频率和缩小分频系数等措施,但这种状态并未被彻底改观(51以及51兼容)。此间虽有某些精简指令集单片机(RISC)问世,但依然沿袭对时钟分频的作法。AVR单片机的推出,彻底打破这种旧设计格局,废除
发表于 2019-12-14
avr单片机功能特性介绍
avr单片机按键程序
  什么是avr单片机  AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced InstrucTIon Set CPU) 精简指令集高速8位单片机。可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。AVR单片机是 Atmel 公司 1997 年推出的 RISC 单片机。RISC(精简指令系统计算机)是相对于CISC(复杂指令系统计算机)而言的。RISC 并非只是简单地去减少指令,而是通过使计算机的结构更加简单合理而提高运算速度的。  RISC 优先选取使用频率最高的简单指令,避免复杂指令:并固定指令宽度,减少指令格式和寻址方式的种类,从而缩短指令周期,提高
发表于 2019-12-14
avr单片机按键程序
三分钟告诉你:AVR单片机的熔丝与解锁
AVR单片机的熔丝位配置是AVR单片机初学者很容易出错的地方,其实只要注意一些事项,还是能够尽量避免单片机被锁死,即使单片机被锁死,也可以使用一些方法解锁,本文讲述我在刚开始接触AVR单片机时熔丝位配置出现的一些问题。1、AVR单片机的熔丝位是比较独到的特征,可以控制系统的时钟,JTAG调试、看门狗、芯片加密等等。图1是progisp软件,对于初学者来说,对熔丝位不熟悉,可以先将2处的编程熔丝对勾去掉,这样在编程的时候,就不会对熔丝位进行编程,单片机出厂的默认设置就可以使用。点击1处进入熔丝位配置界面。图1图2为位配置方式,这里的每一位都不能随意点击,尤其是熔丝低位控制时钟的地方,一般来说,直接对位进行配置并不安全,一定要确定是
发表于 2019-12-14
三分钟告诉你:AVR单片机的熔丝与解锁
avr单片机和stm32区别与优缺点分析
  摘要:avr单片机和stm32单片机是目前使用较广泛的单片机,那么avr单片机和stm32单片机有什么区别呢?有什么优劣势呢?  一、AVR单片机介绍  AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced InstrucTIon Set CPU) 精简指令集高速8位单片机。可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。  avr单片机特点:  1. avr系列没有类似累加器A的结构,它主要是通过R16~R31寄存器来实现A的功能。在avr中,没有像51系列的数据指针DPTR,而是由X(由 R26、R27组成)、Y(由R28、R29组成)、Z
发表于 2019-12-14
AVR系列单片机的主要特性及选型
AVR单片机是ATMEL公司研制开发的一种新型单片机,它与51单片机、PIC单片机相比具有一系列的优点:在相同的系统时钟下AVR运行速度最快;芯片内部的Flsah、EEPROM、SRAM容量较大;所有型号的Flash、EEPROM都可以反复烧写、全部支持在线编程烧写(ISP);多种频率的内部RC振荡器、上电自动复位、看门狗、启动延时等功能,零外围电路也可以工作;每个IO口都可以以推换驱动的方式输出高、低电平,驱动能力强;内部资源丰富,一般都集成AD、DA模数器;PWM;SPI、USART、TWI、I2C通信口;丰富的中断源等。目前支持AVR单片机编译器的语言主要有汇编语言、C语言、BASIC语言等。其中C编译器主要有
发表于 2019-12-14
AVR系列单片机的主要特性及选型
如何设计一个以AVR单片机为控制芯片的电子镇流器?
引言电子镇流器是新型节能产品,不仅能带动一些照明灯具,还可以和一些紫外灯结合在一起,对于空气净化和水源净化都有着非常大的作用。当前,全世界都在大力提倡环境保护,电子镇流器间接地为环保提供了原动力。AVR单片机是一款性价比较高的单片机,用这种单片机来对电子镇流器进行调光和时间采样非常合适,首先是AVR单片机本身较稳定,抗干扰能力比较强,其次是其本身的Harvard结构使得运行速度比较快,数据回读时间较快,可以实现实时在线控制。1 AVR单片机介绍1.1 AVR单片机的特点与以往的8位单片机相比,AVR单片机采用Harvard结构,也就是程序总线和数据总线分开,并采用两级流水线,具备1MIPS/MHz的高速运行处理能力。片内集成多种
发表于 2019-12-14
如何设计一个以AVR单片机为控制芯片的电子镇流器?
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved