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


    本文隶属于AVR单片机教程系列。

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

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

    单片机的英文是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.0 oolchainavr8avr8-gnu-toolchainavr,这个目录下也有include和lib两个文件夹。把压缩包里的文件夹放到这里来,对应文件夹合并,库就放对位置了。

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

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

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

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

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

    1 #include <ee1/led.h>
    2 
    3 int main()
    4 {
    5     led_init();
    6     led_set(LED_RED, LED_ON);
    7     return 0;
    8 }

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

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

    #include <ee1/led.h> 用于包含库的头文件,有了这句代码,后面才能调用库函数。主版本号为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就应该亮起了。

  • 相关阅读:
    Babel:JavaScript编译器
    Webpack:前端资源模块化管理和打包工具
    springboot之RocketMq实现
    spingboot之Java邮件发送
    第一模块总结
    嵌入式面试题(一)
    C/C++练习题(三)
    ToolTip特效 JavaScript 盗取厦门人才网的特效
    C#后台无刷新页面弹出alert方法
    复制表及其只复制表数据的区别
  • 原文地址:https://www.cnblogs.com/jerry-fuyi/p/11325718.html
Copyright © 2020-2023  润新知