首页 > 代码库 > AVR第3课:点亮发光二极管
AVR第3课:点亮发光二极管
和51单片机不同,51单片机的驱动能力比较弱,而AVR单片机的驱动能力比较强,可以直接驱动继电器和发光二极管,所以不需要外接上拉电阻。51单片机的引脚电流只有几十微安,而AVR单片机有40mA左右。电路图如下所示。
代码1:先让所有灯灭,延时一会儿,再让所有灯亮,再延时,这样一直循环。
<span style="font-size:18px;">#include <iom16v.h> #include <macros.h> #define uchar unsigned char #define uint unsigned int //定义延时函数 void delay(uint ms) { uint i,j; for(i=0;i<ms;i++) for(j=0;j<10;j++); } void main() { while(1) { DDRA = 0xff;<span style="white-space:pre"> </span>//设置PA口为输出模式 <span style="white-space:pre"> </span>PORTA = 0x00;<span style="white-space:pre"> </span>//设置PA口输出低电平 delay(2000); PORTA = 0xff;<span style="white-space:pre"> </span>//设置PA口输出为高电平 delay(2000); } }</span>值得注意的是AVR单片机的IO口作为通用数字IO口的时候,每个引脚都具有3个寄存器,DDRxn、PORTxn和PINxn。DDRxn用来设置IO口的输入输出模式,1表示输出,0表示输入,默认状态为高阻态,这里和51单片机是不一样的,因为51单片机就只有两种电平,高电平和低电平,而AVR单片机有3种电平,除了高低电平之外还有高阻态;PORTxn表示是否设置带上拉电阻,也可以理解为输出高电平还是低电平;PINxn只能读不能写,用来读取IO口的高低电平。
代码2:让PA口的最低位的灯闪烁,其他的灯保持不变,是什么状态就是什么状态,不管他,代码如下。
<span style="font-size:18px;">#include <iom16v.h> #include <macros.h> #define uchar unsigned char #define uint unsigned int void delay(uint ms) { uint i,j; for(i=0;i<ms;i++) for(j=0;j<10;j++); } void main() { while(1) { DDRA = DDRA | BIT(0);//设置PA口的最低位为输出模式 PORTA = PORTA & (~BIT(0));//让PA口的最低位输出低电平 delay(2000); PORTA = ~(PORTA & (~BIT(0)));//让PA口的最低位输出为高电平 delay(2000); } }</span>这里又有一个新的知识点要注意,就是AVR单片机的常用位操作。BIT(x)表示将二进制1(0000 0001)左移x位,例如BIT(0) = 0000 0001、BIT(2) = 0000 0100、BIT(7) = 1000 0000,所以x为几,那么1后面就有x个0,这样便于记忆。同时~表示按位取反,例如:~BIT(2) = 1111 1011。DDRA = DDRA | BIT(0)表示高7位保持不变,保持之前的状态,有可能是低电平,也有可能是高电平,还有可能是高阻态,最低位设为高电平,表示输出。请读者好好剩下的几句话。
另外还有的朋友可能遇到这种情况,那就是你将程序烧写之后,没有反应,如果你用的是51转AVR板的话,有可能是复位的问题,这个时候你只要长按开发板上的复位键不动,就会发现正常了,为什么会这样呢?由于初学者很难发现这个问题,在这里我就多说几句,全是luluc我自己的想法,如果有不对的地方,请指出交流。因为51单片机复位需要保持24个时钟周期的高电平才能复位,而AVR单片机需要一段时间低电平才能复位,估计是转接板没有做好的缘故。
好吧,今天就到这里吧,希望初学者好好消化上面的知识,也希望上面的两个例子对你有用。由于不可能将知识点写的足够详细,所以功夫全部在课下。一起交流一起进步。由于之前51单片机的课程写的不太好,我尽量在AVR课程里面能够有所提高,有个好的开始,也希望有个好的结尾。明天我们将讲解“流水灯”课程,这一节课程的知识点有点多,也需要不断练习并且熟悉,请大家好好复习这一课,明天我们继续!
AVR第3课:点亮发光二极管
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。