1、AVR学习笔记之点亮LED.pdfVIP

  • 5
  • 0
  • 约3.01千字
  • 约 3页
  • 2017-06-09 发布于河南
  • 举报
1、AVR学习笔记之点亮LED

/index.php 转载请注明原作者:kidcao1987 AVR 学习笔记之从点亮 LED 开始 —基于 WINAVGCC) 在前面的笔记中我们详细讲述了WINAVR这个编程软件的使用,以及双龙的 ISP下载软件的使用,在这节开始我们将跟大家一起走进AVR真正的编程环境, 并动手编写第一个属于自己的AVR单片机程序。 在这次笔记中主要有两个主要内容:LED的硬件电路实现和GCC中的位操作。 1、 硬件实现 在我的实验板中,8个LED采用了共阳的接法,当然在AVR单片机中可以采 用共阴的接法,因为AVR单片机的引脚驱动能力足以驱动普通的发光二极管的。 很多初学单片机的人可能还不熟悉电阻的选择,这里大致解释一下。发光二极管 的压降在1.7~2.0V左右,我们取1.7V,要想点亮发光二极管需要的电流大概在 5~10毫安就可以了。所以我们在电阻上的压降为3.3V左右,那么电阻大概需要 3.3V/5MA=660 欧姆,在实际应用中我们可以选的稍微大一点,1K 的电阻也是可 欢迎转载、学习交流,杜绝商业用途 /index.php 转载请注明原作者:kidcao1987 以的。如果想要长时间点亮LED的话,限流电阻可以稍微大一点。电阻越小电流 越大,亮度也会越强,但是会影响使用寿命。 焊接电路的时候LED长的引脚是正极,短的是负极,不要搞错。我们把8个 LED连接到了M16单片机的PB口。这样在单片机的PB口给一个低电平的时候, LED会亮;高电平的时候,LED会暗。 2、 程序实现 在GCC中的位操作跟在给51单片机编程时使用的KEIL C是不同的,KEIL C 中可以直接进行位定义,在GCC中是通过与操作和或操作来实现的。比如我们要 将PB0置位那么相应的操作就应该是:PORTB |= (1PB0);在GCC中PB0的值为 1,1左移PB0的结果是0PORTB跟它相或的结果就是使PB0对应的位 变为了 1。同理,清零的操作是:PORTB = ~(1PB0); ,0取反的结 果是0b1111110,PORTB与他相与的结果就是让最低位清零了。其他的操作类似, 依此类推。 另外介绍一下 GCC 中的一个头文件,#include util/delay.h,使用这个 头文件可以很方便的进行微秒级和毫秒级的延时,有兴趣的可以看一下GCC的使 用手册。这两个函数分别是:_delay_ms(ms)和_delay_us(us),将两个函数中的 参数赋予相应的值可以获得较为准确的延时。比如我们要定时500毫秒,那么只 需要调用_delay_ms(500);即可。 下面是我们这次笔记的程序源代码的实现。 #include avr/io.h //头文件。必须包含 #include util/delay.h //延时函数的头文件 int main(void) //注意这里函数的类型和参数类型 { PORTB = 0XFF; //初始化 DDRB = 0XFF;//设置 PB 口为输出 while(1) { for(char i=0;i3;i++)//LED 闪烁 3 次 { PORTB = 0XFF; //LED 暗 _delay_ms(500); PORTB = 0X00; //LED 亮 _delay_ms(500); } for(char i=0;i8;i++)//依次点亮 { PORTB = (0xfei); _delay_ms(150); 欢迎转载、学习交流,杜绝商业用途 /index.php 转载请注明原作者:kidcao1987 }

文档评论(0)

1亿VIP精品文档

相关文档