1. 求ATmega16流水燈程序
/*******************************************
文件:sld.C
環境:編譯為 AVR6.25A,模擬為AVR Studio4.14
硬體:ATMEGA16晶元
日期:2008年12月10日
功能:驅動開發板上的LED。流水燈
備註:
/******************************************/
#include <D:\開發板\OK100E\程序\avr程序\OK100E.H>
/*******************************************
函數名稱: One_led
功 能: 點亮或者熄滅指定的LED
參 數: number--指定的LED
light--為TRUE的時候為點亮LED,為FALSE的時候為熄滅LED
返回值 : 無
/********************************************/
void One_led(uchar number,uchar light)
{
uchar i;
if(light==TRUE) //點亮操作
{
PORTB&=~BIT(number); //輸出數據
PORTC|=BIT(LEDLK); //更新數據
Delayms(5); //調整時序
PORTC&=~BIT(LEDLK); //鎖存數據
}
else
{
PORTB|=BIT(number); //輸出數據
PORTC|=BIT(LEDLK); //更新數據
Delayms(5); //調整時序
PORTC&=~BIT(LEDLK); //鎖存數據
}
}
/*******************************************
函數名稱: All_led
功 能: 點亮或者熄滅全部LED
參 數: light--為TRUE的時候為點亮全部LED,為FALSE的時候為熄滅全部LED
返回值 : 無
/********************************************/
void All_led(uchar light)
{
if(light)
{
PORTB&=~ALLLED; //ALLLED=0xFF,使全部LED都亮
PORTC|=BIT(LEDLK); //輸出數據
Delayms(5); //調整時序
PORTC&=~BIT(LEDLK); //鎖存數據
}
else
{
PORTB|=ALLLED; //ALLLED=0xFF,使全部LED都滅
PORTC|=BIT(LEDLK); //輸出數據
Delayms(5); //調整時序
PORTC&=~BIT(LEDLK); //鎖存數據
}
}
/*******************************************
函數名稱: main
功 能: 流水燈
參 數: MS--點亮相鄰LED的時間間隔,單位是毫秒
返回值 : 無
/********************************************/
void main()
{
Board_init();
PORTC|=BIT(BEEP);
while(1)
{
uchar i;
for(i=0;i<8;i++) //循環8次,8個LED依次點亮
{
All_led(FALSE); //全部熄滅
One_led(i,TRUE); //點亮指定的LED
Delayms(200); //延時指定的時間
}
}
}