AVR单片机教程——闪烁LED
本文隶属于AVR单片机教程系列。
上次我们把LED点亮了。你可能已经试过把 LED_RED 换成其他灯,也可能已经用 led_on() 把所有LED一起点亮了。但是LED点亮以后,程序就退出了,之后LED一直没有暗,直到没有供电。这一次,我们用程序来控制LED的亮和暗。
新建一个C executable项目,选择ATmega324PA单片机,在项目属性中添加库libee1,将配置改为Release。这是本教程现阶段中每一次新建项目都要做的。我刚才尝试用project template简化,然而设置无法导入。
默认生成的main.c中的内容我们还是不要,全部删除后敲入以下代码:
#include <ee1/led.h>
#include <ee1/delay.h> int main()
{
led_init();
while ()
{
led_set(LED_RED, LED_ON);
delay();
led_set(LED_RED, LED_OFF);
delay();
}
}
分析一下这段代码:
第2行包含了一个头文件 delay.h ,它提供了 delay 函数,用于设置一定时长的延时。第10行和第12行用这个函数来延时500毫秒。
第9行和第11行分别让红色LED开启与关闭。
while (1) 表示无限循环,循环的周期是1秒多一点,1秒是两个500毫秒相加,多一点是因为两个 led_set 的调用也需要时间。
F5、F6以后,你会发现开发板上的红色LED以1秒为周期闪烁。
通过这个例子,你应该可以发现,单片机程序与计算机程序还有一个不同点,在于计算机程序一般都有结束,而单片机程序一般都要持续运行。这是因为单片机一般用于控制用途,控制的设备是长期运作的。同时这也意味着,单片机系统对可靠性的要求很高,这包含了两方面:其一,单片机硬件不能出错,比如电源波纹不能让程序不能跑飞;其二,单片机程序不能出错,控制逻辑一定不能写错,同时对可能发生的错误也要有合理的处理措施。
上一篇:点亮第一个LED
下一篇:流水灯
AVR单片机教程——闪烁LED的更多相关文章
- AVR单片机教程——随机点亮LED
之前我们做的闪烁LED和流水灯,灯效都是循环的.这次我们来尝试一些不一样的——每一次随机选择一个LED并点亮. 要实现随机的效果,我们要用C语言标准库中的相关设施: #define RAND_MAX ...
- AVR单片机教程——点亮第一个LED
做了这么多准备,我们终于可以开始用开发板做点事了. 单片机编程与计算机编程有一些不同点.程序都要有零个或多个输入.一个或多个输出,这是两者都有的,但是计算机编程的输入输出主要靠控制台,而单片机没有. ...
- AVR单片机教程——流水灯
上次我们用 delay 函数与 while 循环实现了一个LED的闪烁.这一次我们把所有LED加入进来,让它们依次闪烁,形成流水灯的效果. 开发板上有4个LED,我们可以用不多的语句把循环体直接描述出 ...
- AVR单片机教程——LCD1602
本文隶属于AVR单片机教程系列. 显示屏 开发板套件里有两块屏幕,大的是LCD(液晶显示),小的是OLED(有机发光二极管).正与你所想的相反,短小精悍的比较贵,而本讲的主题--LCD1602-- ...
- AVR单片机教程——UART进阶
本文隶属于AVR单片机教程系列. 在第一期中,我们已经开始使用UART来实现单片机开发板与计算机之间的通信,但只是简单地讲了讲一些概念和库函数的使用.在这一篇教程中,我们将从硬件与软件等各方面更深 ...
- AVR单片机教程——走向高层
本文隶属于AVR单片机教程系列. 在系列教程的最后一篇中,我将向你推荐3个可以深造的方向:RTOS.C++.事件驱动.掌握这些技术可以帮助你更快.更好地开发更大的项目. 本文涉及到许多概念性的内容 ...
- AVR单片机教程——数码管
先解答之前一个思考题:如果不把引脚配置为输出而写高电平,连接LED会怎样? 实验结果是,LED会亮,但相比于输出高电平的情况,亮度很低.这是为什么呢? 通过上一篇教程我们知道,引脚输入输出模式是由寄存 ...
- AVR单片机教程——数字输出
从上一篇教程中我们了解到,按键与开关的输入本质上就是数字信号的读取.这一篇教程要讲的是,控制LED的原理是数字信号的输出.数字IO是单片机编程之有别于桌面编程的各项内容中最简单.最基础的. 在讲数字信 ...
- AVR单片机教程——数字输入
我们已经学习了如何使用按键和拨动开关,不知你有没有好奇 button_down 和 switch_status 等函数是如何实现的.本篇教程带你一探究竟,让我们从按键的原理开始. 在原理图中,按键的符 ...
随机推荐
- 范仁义html+css课程---2、html常用标签
范仁义html+css课程---2.html常用标签 一.总结 一句话总结: html常用的标签有 标题标签.div.span.p.hr.br标签 等 1.html中的标题标签有哪些? <h1& ...
- open jdk性能与稳定性测试比较(转载)
因为oracle jdk从jdk8u201之后就不提供免费下载了,所以最近在看openjdk的分支实现,网上搜了下,有下列选择和比较(我们目前主要在跑的是open jdk,不少人推荐的zulu ope ...
- OpenJudge 计算概论1007:点评赛车
总时间限制: 1000ms 内存限制: 65536kB描述4名专家对4款赛车进行评论1)A说:2号赛车是最好的:2)B说:4号赛车是最好的:3)C说:3号赛车不是最好的:4)D说: B说错了.事实上只 ...
- nginx 80 下的一个路径 到 8888
# For more information on configuration, see:# * Official English Documentation: http://nginx.org/en ...
- Vehicle routing with Optaplanner graph-theory
Vehicle routing with Optaplanner - Stack Overflow https://stackoverflow.com/questions/22285252/vehic ...
- Spring-AOP @AspectJ切点函数之@annotation()
@annotation()概述@annotation表示标注了某个注解的所有方法. 下面通过一个实例说明@annotation()的用法. AnnotationTestAspect定义了一个后置切面增 ...
- JDK动态代理在RPC框架中的应用
RPC框架中一般都有3个角色:服务提供者.服务消费者和注册中心.服务提供者将服务注册到注册中心,服务消费者从注册中心拉取服务的地址,并根据服务地址向服务提供者发起RPC调用.动态代理在这个RPC调用的 ...
- linux系统telnet端口不通能收到SYN但不回SYN+ACK响应问题排查(转载)
linux系统telnet端口不通能收到SYN但不回SYN+ACK响应问题排查 一:背景:一台机器从公司办公网登录不上且所有tcp端口都telnet不通,但是通过同机房同的其它机器却可以正常访问到出问 ...
- Linux expect的安装与使用
Expect是在Tcl的基础上创建的,可以用来做一些Linux下无法做到交互的命令操作,可用于远程管理服务器. 一.安装Tcl: 1.下载源码包: wget http://nchc.dl.source ...
- ros 学习 array 的添加
array的添加,使用 arry[i]赋值时会出现段错误,需要使用array.push_back添加到数据中,在ros中array数组是以vector方式存储的. 例如: 包含数组的msg定义为: h ...