新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Linglong之AVR程例3 流水燈

Linglong之AVR程例3 流水燈

作者: 時間:2016-11-22 來源:網(wǎng)絡(luò) 收藏
下面我們寫流水燈的程序。LED程序的書寫是我們學(xué)習(xí)單片機很基礎(chǔ)的,但我是我覺的還是很重要的。能寫好LED程序?qū)ξ覀兝斫釧VR IO口的操作很有好處呀。

先這里簡單的介紹下我的硬件,8個LED接到PA口上,公共端接地。

本文引用地址:http://www.2s4d.com/article/201611/319946.htm

程序:

#include <avr/io.h> //調(diào)用AVR IO口頭文件

#include //調(diào)用GCC本身的調(diào)時程序。

int main(void) //主程序

{

unsigned char i = 0; //定義循環(huán)變量

DDRA = 0xff; //定義PA口為輸出態(tài)

while(1) //主程序循環(huán)語句

{

PORTA=0x01<//循環(huán)點亮IO口的燈

if(++i>=8)i=0; //對循環(huán)變量的控制,讓其循環(huán)8次

_delay_ms(1000); //延時程序

}

}
這里我們主要講講while(1)語句部分。

第一句:PORTA = 0x01<

在主函數(shù)中我們定義了i變量,我們并對其賦值為0.(這里其實賦不賦0,效果都是一樣的,但是我還是希望大家賦值,這樣比較規(guī)范)

這一句第一次執(zhí)行的意思就是0x01左移0次,并將左移后的結(jié)果賦結(jié)PA口。0x01就是二進值的0000 0001,左移0位還是0000 0001.那么這樣就是第一個LED點亮了。

第二句:if(++i>=8)i=0;

這里用的是一個if語句,這句話的意思就是如果i的值大于等于8了,那么將其清0;如果沒有i就是其本身的值。

這里一個要重點注意的地方就是++i,而不是i++。這兩個的區(qū)別就是是先加再執(zhí)行,還是執(zhí)行了再加。這是有不同的,大家可以試著改一下,體會下這兩個的不一樣。

第三句就是延時了沒有什么好說的。

現(xiàn)在我們再重新的回顧下這個while(1)語句的一個執(zhí)行過程。首先0x01左移0位,將0x01賦給PA口,點亮第一個LED。再對i進行自加0+1=1,1〈 8則不對其進行清0操作,最后是延時一會。

第二次執(zhí)行PORTA=0x01<

如此循環(huán)下去,當(dāng)循環(huán)8次后i被清0,再從第一個LED亮起。

這樣流水燈的效果就出來了。



關(guān)鍵詞: AVR程例流水

評論


技術(shù)專區(qū)

關(guān)閉