新聞中心

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

        Linglong之AVR程例3 流水燈

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

        先這里簡(jiǎn)單的介紹下我的硬件,8個(gè)LED接到PA口上,公共端接地。

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

        程序:

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

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

        int main(void) //主程序

        {

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

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

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

        {

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

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

        _delay_ms(1000); //延時(shí)程序

        }

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

        第一句:PORTA = 0x01<

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

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

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

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

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

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

        現(xiàn)在我們?cè)僦匦碌幕仡櫹逻@個(gè)while(1)語句的一個(gè)執(zhí)行過程。首先0x01左移0位,將0x01賦給PA口,點(diǎn)亮第一個(gè)LED。再對(duì)i進(jìn)行自加0+1=1,1〈 8則不對(duì)其進(jìn)行清0操作,最后是延時(shí)一會(huì)。

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

        如此循環(huán)下去,當(dāng)循環(huán)8次后i被清0,再?gòu)牡谝粋€(gè)LED亮起。

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



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

        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 广南县| 西安市| 丘北县| 黔东| 介休市| 清镇市| 额济纳旗| 常宁市| 东乡族自治县| 澄迈县| 永平县| 莫力| 石阡县| 南投县| 家居| 九龙城区| 澄城县| 文昌市| 偃师市| 枞阳县| 嘉定区| 玉溪市| 开化县| 岫岩| 隆回县| 台湾省| 浦县| 彭泽县| 英吉沙县| 西和县| 德惠市| 泌阳县| 襄汾县| 江油市| 搜索| 互助| 铜山县| 五河县| 枞阳县| 胶南市| 赣州市|