当前位置:文档之家› 1、AVR学习笔记之点亮LED

1、AVR学习笔记之点亮LED

PORTB = 0XFF; //初始化 DDRB = 0XFF;//设置 PB 口为输出 while(1) {
for(char i=0;i<3;i++)//LED 闪烁 3 次 {
PORTB = 0XFF; //LED 暗 _delay_ms(500); PORTB = 0X00; //LED 亮 _delay_ms(500); }
欢迎转载、学习交流,杜绝商业用途
/index.php 转载请注明原作者:kidcao1987
以的。如果想要长时间点亮 LED 的话,限流电阻可以稍微大一点。电阻越小电流
பைடு நூலகம்
越大,亮度也会越强,但是会影响使用寿命。
焊接电路的时候 LED 长的引脚是正极,短的是负极,不要搞错。我们把 8 个
参数赋予相应的值可以获得较为准确的延时。比如我们要定时 500 毫秒,那么只
需要调用_delay_ms(500);即可。
下面是我们这次笔记的程序源代码的实现。
#include <avr/io.h> //头文件。必须包含
#include <util/delay.h>
//延时函数的头文件
int main(void) //注意这里函数的类型和参数类型 {
说到这里,上面的例程相信大家都能看得懂了。我们学习单片机一定要有自 己的方法,这里给大家推荐一点学习资料。第一,ATmega 中文手册;第二,基于 AVR 单片机的嵌入式原理与实践,马潮老师写的;然后经常来论坛看看帖子,足 够了。资料多了反而会乱的。有这两样足够入门了。我会给大家一起把附件传上 来,方便大家学习。
/index.php 转载请注明原作者:kidcao1987
AVR 学习笔记之从点亮 LED 开始 —基于 WINAVR20090313(GCC)
在前面的笔记中我们详细讲述了 WINAVR 这个编程软件的使用,以及双龙的 ISP 下载软件的使用,在这节开始我们将跟大家一起走进 AVR 真正的编程环境, 并动手编写第一个属于自己的 AVR 单片机程序。
LED 连接到了 M16 单片机的 PB 口。这样在单片机的 PB 口给一个低电平的时候,
LED 会亮;高电平的时候,LED 会暗。
2、 程序实现
在 GCC 中的位操作跟在给 51 单片机编程时使用的 KEIL C 是不同的,KEIL C
中可以直接进行位定义,在 GCC 中是通过与操作和或操作来实现的。比如我们要
PORTB = ~(0x01<<i); _delay_ms(200); } } }
AVR 单片机中,端口的设置比 51 稍微复杂,,AVR 单片机通过 3 个寄存器来 控制 I/O 口的状态:输入输出方向寄存器 DDRx(x 表示端口号,例如 DDRA 表示 端口 A 的方向寄存器)、输出寄存器 PORTx、输入寄存器 PINx。DDRx 为 1 是输出, 0 为输入。PORTB 的值就是在设置为输出的时候引脚的实际电平。PINX 是在设置 为输入的时候读取的引脚的实际电平。详细的说明请参见说明书。
for(char i=0;i<8;i++)//依次点亮 {
PORTB = (0xfe<<i); _delay_ms(150);
欢迎转载、学习交流,杜绝商业用途
/index.php 转载请注明原作者:kidcao1987 } for(char i=0;i<8;i++)//流水灯显示 {
关于如何下载程序请参见前面的两篇笔记。
作者:kidcao1987 2009 年 10 月 5 日 联系方式:QQ289718970 Email:289718970@
caodiansheng1987@
欢迎转载、学习交流,杜绝商业用途
在这次笔记中主要有两个主要内容:LED 的硬件电路实现和 GCC 中的位操作。 1、 硬件实现
在我的实验板中,8 个 LED 采用了共阳的接法,当然在 AVR 单片机中可以采 用共阴的接法,因为 AVR 单片机的引脚驱动能力足以驱动普通的发光二极管的。 很多初学单片机的人可能还不熟悉电阻的选择,这里大致解释一下。发光二极管 的压降在 1.7~2.0V 左右,我们取 1.7V,要想点亮发光二极管需要的电流大概在 5~10 毫安就可以了。所以我们在电阻上的压降为 3.3V 左右,那么电阻大概需要 3.3V/5MA=660 欧姆,在实际应用中我们可以选的稍微大一点,1K 的电阻也是可
果是 0b1111110,PORTB 与他相与的结果就是让最低位清零了。其他的操作类似,
依此类推。
另外介绍一下 GCC 中的一个头文件,#include <util/delay.h>,使用这个
头文件可以很方便的进行微秒级和毫秒级的延时,有兴趣的可以看一下 GCC 的使
用手册。这两个函数分别是:_delay_ms(ms)和_delay_us(us),将两个函数中的
将 PB0 置位那么相应的操作就应该是:PORTB |= (1<<PB0);在 GCC 中 PB0 的值为
1,1 左移 PB0 的结果是 0b00000001,PORTB 跟它相或的结果就是使 PB0 对应的位
变为了 1。同理,清零的操作是:PORTB &= ~(1<<PB0); ,0B00000001 取反的结
相关主题