历史上的今天
返回首页

历史上的今天

今天是:2024年12月03日(星期二)

正在发生

2019年12月03日 | AVR单片机教程——点亮第一个LED

2019-12-03 来源:eefocus

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


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


单片机的英文是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就应该亮起了。

推荐阅读

史海拾趣

CP Technology Inc公司的发展小趣事

CP Technology Inc成立之初,便专注于半导体技术的研发。公司研发团队成功开发出一种高效能、低功耗的芯片,这一创新为公司的快速崛起奠定了基石。随着技术的不断完善和产品的广泛应用,CP Technology Inc逐渐在半导体市场上占据了一席之地。公司通过持续的技术创新和产品迭代,不断满足市场需求,赢得了客户的信赖和支持。

BOWEI公司的发展小趣事

CP Technology Inc成立之初,便专注于半导体技术的研发。公司研发团队成功开发出一种高效能、低功耗的芯片,这一创新为公司的快速崛起奠定了基石。随着技术的不断完善和产品的广泛应用,CP Technology Inc逐渐在半导体市场上占据了一席之地。公司通过持续的技术创新和产品迭代,不断满足市场需求,赢得了客户的信赖和支持。

AC Interface Inc公司的发展小趣事

随着国内市场的饱和,ABC Electronics Inc. 开始寻求国际化的发展道路。公司首先在欧洲设立了分支机构,通过参加国际电子展会、与欧洲企业建立合作伙伴关系等方式,逐步打开了欧洲市场。随后,公司又进军北美和亚洲市场,通过本地化运营和定制化服务,满足了不同国家和地区的需求。这一国际化战略不仅拓展了公司的市场份额,也提升了其品牌影响力。

Emhiser Research Inc公司的发展小趣事

Emhiser Research在成立之初就专注于半导体技术的研究。随着市场对更高效能、更小体积的芯片需求的增长,公司研发团队成功开发出了一种新型的高性能低功耗芯片。这一技术突破迅速吸引了众多手机厂商和电子设备制造商的关注。Emhiser抓住这一市场机遇,与多家大型企业建立了合作伙伴关系,其产品迅速在市场上占据了一席之地。

Advance Tapes公司的发展小趣事

随着环保意识的日益增强,电子行业对环保材料的需求也越来越大。Advance Tapes公司积极响应国家环保政策,致力于研发环保型胶带产品。通过采用环保材料和生产工艺,减少了对环境的污染和资源的浪费。同时,公司还加强了对废弃胶带产品的回收和处理工作,实现了资源的循环利用。这些举措不仅提升了Advance Tapes的企业形象,也为公司的可持续发展奠定了坚实基础。

以上是基于已知信息构建的关于Advance Tapes在电子行业中可能的发展故事。然而,这些故事并非真实的历史记录,仅用于展示该公司可能的发展路径和面临的挑战。如需了解更多关于Advance Tapes公司的真实发展历程和故事,建议查阅相关文献资料或访问公司官网。

无锡友达公司的发展小趣事

面对电子行业的快速发展和智能化趋势,无锡友达积极响应,加快智能化转型和升级。公司不仅在产品设计和生产上引入智能化技术,还通过建立智能化管理系统,提升企业的运营效率和产品质量。此外,无锡友达还积极参与各类行业展会和交流活动,与业界同行共同探讨智能化转型的未来趋势。

问答坊 | AI 解惑

讨论下PWM控制LED亮度proteus仿真

能和现实的单片机一样吗 http://blog.ednchina.com/mcusoft/ 在这个博客上看到一个,图片很漂亮…

查看全部问答>

工程师的交际能力在中国有多重要

前几天和论坛里一位聊天,说起工程师不能光闷头干活,也得注意交际,他也深表同意。 看上去工程师似乎只要闷头做自己的事就行了,但是和同事的交流、和领导的交流可能也会很重要。虽然技术是一个硬指标,但在哪里都是那些能说会道的人沾光。再说了 ...…

查看全部问答>

电子元器件配套知识大全(一)

电子元器件配套知识大全(一)…

查看全部问答>

有谁做过wince下播放地面信号相关功能?

有谁做过wince下播放地面信号相关功能?…

查看全部问答>

基于GSM模块的单片机应用问题

   最近做一个基于GSM的家庭安全系统,需要GSM模块和视频模块在HT46的基础上,将不安全信息用短信发送给屋主,请问    (1)这方面的GSM只是需要从哪里开始入手学习,比较容易入门?而且需要尽快做出来,之前没有基础。 &nbs ...…

查看全部问答>

三菱PLC软件下载

三菱电机官方网站,软件下载,要注册登陆后才可下载。不收费! 三菱全系列PLC编程软件为:GX Developer   http://www.meas.cn/download/dwn_idx_software.asp  …

查看全部问答>

基于FPGA的DA数模转换

如何在FPGA上设计DA数模转换电路?(就是在FPGA的芯片上实现DA转换功能)求大侠们给小弟说一下! [ 本帖最后由 非图后来之福报 于 2011-7-21 17:37 编辑 ]…

查看全部问答>

这段程序怎么理解呢?谢谢

#if !defined (USE_STM3210B_EVAL) &&  !defined (USE_STM3210E_EVAL) //#define USE_STM3210B_EVAL #define USE_STM3210E_EVAL#endif这段程序怎么理解?谢谢?…

查看全部问答>

RS232和timer_A的现问题

我刚学了msp430F149单片机,现在想用Timer_A作波特率发生器实现串口通信,请问各位高手怎样怎么才能用Timer_A编写RS232时序,将发送的数据显示在串口调试助手上面,谢谢啦…

查看全部问答>