ATmega16a流水灯程序

  • 格式:rtf
  • 大小:41.71 KB
  • 文档页数:3
/*******************************************
文件:LED.C
环境:编译为 ICC AVR6.25A,仿真为 AVR Studio4.10
硬件:ATMEGA16 芯片
日期:2006 年 12 月 10 日
功能:驱动开发板上的 LED。1. 流水灯 2.闪烁指定的 LED
PORTB|=ALLLED;
//ALLLED=0xFF,使全部 LED 都灭
PORTA|=BIT(LEDLK); //输出数据
Delayms(5);
//调整时序
PORTA&=~BIT(LEDLK); //锁存数据
}
}
/*******************************************
返回值 : 无
/********************************************/
void One_led(uchar number,uchar light)
{uchar i;
if(light==TRUE)
//点亮操作
{
PORTB&=~BIT(number); //输出数据
PORTA|=BIT(LEDLK);
备注:参考《AVR 系列单片机 C 语言编程与应用实例》(清华大学出版社)
/******************************************/
#include <iom16v.h>
//包含型号头文件
#include <macros.h>
//包含"位"操作头文件
#include <stdio.h>
//标准输入输出头文件
#include <AVR_PQ1A.h>
//包含自定义常量头文件
/*******************************************
函数名称: One_led
功 能: 点亮或者熄灭指定的 LED
参 数: number--指定的 LED
light--为 TRUE 的时候为点亮 LED,为 FALSE 的时候为熄灭 LED
功 能: 闪烁指定的 LED(循环一次)
参 数: number--指定的 LED
MS--LED 闪烁的时间间隔
返回值 : 无
/********************************************/
void Flash_LED(uchar number,uchar MS)
{
One_led(number,TRUE);
函数名称: Flow_led
功 能: 流水灯(循环一次)
参 数: MS--点亮相邻 LED 的时间间隔,单位是毫秒
返回值 : 无
/********************************************/
void Flow_LED(uchar MS)
{
uchar i;
for(i=0;i<8;i++)
//循环 8 次,8 个 LED 依次点亮
{
All_led(FALSE);
//全部熄灭
One_led(i,TRUE); //点亮指定的 LED
Delayms(MS);
//延时指定的时间
}
}
/***************
函数名称: Flash_led
void All_led(uchar light)
{
if(light)
{
PORTB&=~ALLLED;
//ALLLED=0xFF,使全部 LED 都亮
PORTA|=BIT(LEDLK); //输出数据
Delayms(5);
//调整时序
PORTA&=~BIT(LEDLK); //锁存数据
}
else
{
//更新数据
Delayms(5);
//调整时序
PORTA&=~BIT(LEDLK); //锁存数据
}
else
{
PORTB|=BIT(number); //输出数据
PORTA|=BIT(LEDLK);
//更新数据
Delayms(5);
//调整时序
PORTA&=~BIT(LEDLK); //锁存数据
}
}
//bit 指定闪烁的 LED
Board_init( );
//初始化开发板
while(1)
{
switch(i)
{
case 0:
Flow_LED(200);
//i=0,以流水灯的方式显示
break;
case 1:
Flash_LED(bit,100); //i=1,以闪烁灯的方式显示
}
}
}
//点亮指定的 LED
Delayms(MS);
//延时指定的时间
All_led(FALSE);
//熄灭所有的 LED
Delayms(MS);
//延时指定的时间
One_led(number,FALSE);
//熄灭指定的 LED
}
/*******************************************
函数名称: main
功 能: 1. 流水灯 2.闪烁指定的 LED
参 数: 无
返回值 : 无
/********************************************/
void main(void)
{
uchar i,bit;
i=0;
//i=0 时为流水灯,i=1 时为闪烁灯
bit=0;
/*******************************************
函数名称: All_led
功 能: 点亮或者熄灭全部 LED
参 数: light--为 TRUE 的时候为点亮全部 LED,为 FALSE 的时候为熄灭全部 LED
返回值 : 无
/********************************************/