小5帶你飛(2)—AVR單片機IO口位操作的方法(2)

今天就寫幾個demo代碼,來更加深入的瞭解avr單片機的io口的操作。

1.流水燈的實現

方法一:(這是寫的第一個demo,就寫全一點,後面的demo代碼就只寫主要的部分了。)

小5帶你飛(2)—AVR單片機IO口位操作的方法(2)

簡單的說明一下程序:

注意我這個8個燈均是低電平點亮,這個程序是一個典型的操控總線的程序

首先,定義一個數組,注意數組的取值,其實就是8個燈的循環。

在操作io前,一定要初始化端口,這個在教程1中有詳細的講解。

直接用for循環,去操作數組裡面的數,就可以實現流水燈了,是不是特別的簡單呢。

方法二:

小5帶你飛(2)—AVR單片機IO口位操作的方法(2)

也簡單的說明一下程序吧:

BIT()這個函數,可用來對位(bit)的操作。這個函數在頭文件#include裡面

在for循環裡面,首先使用按位取反,其實就是清位,第一位就亮了

延遲一段時間後,按位或,其實就是置位,將電平拉高,燈其實就滅了。

就這樣其實就循環起來了。

方法三:

小5帶你飛(2)—AVR單片機IO口位操作的方法(2)

簡答的說明一下:

按位異或,其實就可以翻轉電平,兩個翻轉不就實現一次亮滅了嗎。

方法四:

小5帶你飛(2)—AVR單片機IO口位操作的方法(2)

這個其實也沒啥說明了,和方法三本質上一樣。

在說一個吧,語句DDRA |= BIT(DDRA3),這個語句是正確的

DDRA |= BIT(DDRAi) 這個就是錯誤的了,這個有很多人在循環那弄錯。

2.讀端口電平就不多說了,假如 a = PINA , 這就把A口的數據讀到a裡面了。

好了,io口的操作就說這麼多了。


分享到:


相關文章: