OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » AVR ATMEGA16 MCU DIY进程-LED流水灯

共6条 1/1 1 跳转至

AVR ATMEGA16 MCU DIY进程-LED流水灯

菜鸟
2011-12-13 18:13:47    评分
下面给大家演示下流水灯程序,我用的是AVR单片机,AVR单片机板载资源丰富,驱动能力较强。每个管脚可以驱动20ma的电流,所以驱动led灯没问题。led灯电流5-10ma左右,所以单片机管脚直接连接led加个电阻(自己算下,300欧就行)到地,就能直接驱动led灯。

程序比较简单,不过没用过avr的人要看懂程序估计还要熟悉avr atmega16的寄存器,这要看数据手册的,都是中文的,很方便。

编译环境是ICC AVR7.2

#include<iom16v.h>
#define uchar unsigned char
#define uint unsigned int

void Delay(uchar i)//延时函数
{
 uchar j;
 for(;i!=0;i--)
 {
  for(j=250;j!=0;j--);
 }
}

void Horse(uchar i)//流水模式选择
{
 switch(i)
 {
  case 0:PORTA=0x00;break;
  case 1:PORTA=0x01;break;
  case 2:PORTA=0x03;break;
  case 3:PORTA=0x07;break;
  case 4:PORTA=0x0f;break;
  case 5:PORTA=0x1f;break;
  case 6:PORTA=0x3f;break;
  case 7:PORTA=0x7f;break;
  case 8:PORTA=0xff;break;
  default:break;
 }
}

void main()
{
 uchar i;
 DDRA=0xff;//置为输出
 PORTA=0xff;//初始为高电平
 Delay(10);
 PORTA=0x00;
 while(1)
 {
  for(i=0;i<9;i++)
  {
   Horse(i);
   Delay(100);
  }
  for(i=8;i!=0;i--)
  {
   Horse(i);
   Delay(100);
  }
 }
}




关键词: ATMEGA16     进程     流水     PORTA     brea    

院士
2011-12-14 08:52:06    评分
2楼
谢谢分享~~~

菜鸟
2011-12-14 09:31:55    评分
3楼
谢谢分享!
你的代码还可以继续改进,void Horse(uchar i)函数可以用一句代码代替,用位运算符(左移,右移)实现会更简洁。

助工
2011-12-14 09:36:48    评分
4楼
哦,这样啊!

菜鸟
2011-12-14 10:51:19    评分
5楼

恩,看到3楼说到可以改进的,感谢他的意见。我本意是初学者能看的明白点,如果知道<<和>>的运算符,那下面就用左移来实现下跑马灯吧。
#include <iom16v.h>
#define uchar unsigned char
#define uint unsigned int

void Delay(uchar i)//延时函数,和晶振有关系的
{
 uchar j;
 for(;i!=0;i--)
 {
  for(j=250;j!=0;j--);
 }
}

void main(void)
{
 uchar i;
 DDRA=0xff;//置为输出
 PORTA=0xff;//初始为高电平
 Delay(10);
 PORTA=0x00;
while(1)
{
  for(i=0;i<8;i++)
{
  PORTA=PORTA&(1<<i);
 Delay(100);//延时长点,可看出效果,太短看不出来
}
 for(;i>0;i--)
{
 PORTA=PORTA &(1<<i) ;
Delay(100);
}

}

}


菜鸟
2012-01-28 14:01:22    评分
6楼

共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]