新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AVR單片機(jī)綜合流水燈C程序

        AVR單片機(jī)綜合流水燈C程序

        作者: 時(shí)間:2016-11-29 來(lái)源:網(wǎng)絡(luò) 收藏
        自己焊了塊實(shí)驗(yàn)板,就是研究了一下AVR單片機(jī),因?yàn)榍懊嬉荒陼r(shí)間里一直苦戰(zhàn)51單片機(jī),有了一定的基礎(chǔ),所以看了一下視頻,原來(lái) AVR單片機(jī)主要有三個(gè)寄存器設(shè)置IO口,DDR(X)、PORT(X) BIT(X)等寄存器,至于其它的編程思想,我認(rèn)為和51那些差不多,看來(lái)前輩說(shuō)得對(duì)啊,“學(xué)會(huì)了一種單片機(jī),學(xué)其它的很容易入手”,今天總算得到了驗(yàn)證,于是寫(xiě)出了下面的流水燈程序!

        #include //AVR單片機(jī)頭文件包含
        #define uchar unsigned char//宏定義
        #define uint unsigned int//
        /*************************************************************/
        /*********************延時(shí)子程序******************************/
        /*************************************************************/
        void delay(uint z)//一個(gè)帶參數(shù),不帶返回值的子函數(shù)
        {
        uint x,y;//定義兩個(gè)變量
        for(x=0;x<100;x++)//外循環(huán)
        for(y=z;y>0;y--);//內(nèi)循環(huán)
        }
        /*************************************************************/
        /*********************左移流水燈******************************/
        /*************************************************************/
        void zouyi()
        {
        uchar shu,j;//定義兩個(gè)變量,shu表示要存的數(shù),j表示循環(huán)變量
        shu=0x01;//先將數(shù)變量賦值,即讓左邊第1顆燈亮起
        for(j=0;j<9;j++)//循環(huán)9次
        {
        PORTA=~shu;//將要顯示的數(shù)給寄存器
        delay(3550);//調(diào)用延時(shí)子程序
        shu<<=1;//將要顯示的數(shù)左移1位,這樣就形成了左移
        }
        }
        /*************************************************************/
        /*********************右移流水燈******************************/
        /*************************************************************/
        void youyi()
        {
        uchar shu,j;//定義兩個(gè)變量,shu表示要存的數(shù),j表示循環(huán)變量
        shu=0x80;//先將數(shù)變量賦值,即讓右邊第1顆燈亮
        for(j=0;j<9;j++)//循環(huán)9次
        {
        PORTA=~shu;//將要顯示的數(shù)給寄存器
        delay(3550);//調(diào)用延時(shí)子程序
        shu>>=1;//將要顯示的數(shù)右移1位,這樣就形成了右移
        }
        }
        /*************************************************************/
        /*********************左移跑馬燈******************************/
        /*************************************************************/
        void zoupao()
        {
        uchar shu,j;//定義兩個(gè)變量,shu表示要存的數(shù),j表示循環(huán)變量
        shu=0xfe;//先將數(shù)變量賦值,即讓左邊第1顆燈亮
        for(j=0;j<9;j++)//循環(huán)9次
        {
        PORTA=shu;//將要顯示的數(shù)給寄存器
        delay(1000);//調(diào)用延時(shí)子程序
        shu<<=1;//將要顯示的數(shù)左移1位,這樣就亮起2顆燈.....3顆燈
        }
        }
        /*************************************************************/
        /*********************右移跑馬燈******************************/
        /*************************************************************/
        void youpao()
        {
        uchar shu,j;//定義兩個(gè)變量,shu表示要存的數(shù),j表示循環(huán)變量
        shu=0x7f;//先將數(shù)變量賦值,即讓右邊第1顆燈亮
        for(j=0;j<9;j++)//循環(huán)9次
        {
        PORTA=shu;//將要顯示的數(shù)給寄存器
        delay(1000);//調(diào)用延時(shí)子程序
        shu>>=1;//將要顯示的數(shù)右移1位,這樣就亮起2顆燈.....3顆燈
        }
        }
        /*************************************************************/
        /******************中間到兩邊跑馬燈***************************/
        /*************************************************************/
        void zhongjian()
        {
        uchar shu,j;//定義兩個(gè)變量,shu表示要存的數(shù),j表示循環(huán)變量
        shu=0x08;//先將數(shù)變量賦值,即中間那顆LED
        for(j=0;j<6;j++)//循環(huán)6次
        {
        PORTA=~shu;//將要顯示的數(shù)給寄存器
        delay(2000);//調(diào)用延時(shí)子程序
        shu<<=1;//將要顯示的數(shù)左移1位,這樣就形成了從中間到左邊亮起
        }
        shu=0x08;//先將數(shù)變量賦值,即中間那顆LED亮
        for(j=0;j<5;j++)//循環(huán)5次
        {
        PORTA=~shu;//將要顯示的數(shù)給寄存器
        delay(2000);//調(diào)用延時(shí)子程序
        shu>>=1;//將要顯示的數(shù)右移1位,這樣就形成了從中間到右邊亮起
        }
        }
        /*************************************************************/
        /************************主程序*******************************/
        /*************************************************************/
        void main()
        {
        uchar shu,j;//定義兩個(gè)變量,shu表示要存的數(shù),j表示循環(huán)變量
        DDRA=0xff;//設(shè)置PA口全為輸出口
        while(1)//大循環(huán)
        {
        zouyi();//調(diào)用左流水燈子程序
        youyi();//調(diào)用右流水燈子程序
        zoupao();//調(diào)用左跑馬燈子程序
        youpao();//調(diào)用右跑燈子程序
        zhongjian();//調(diào)用從中間到兩邊流水燈子程序
        zoupao();//調(diào)用左跑馬燈子程序
        zhongjian();//調(diào)用從中間到兩邊流水燈子程序
        youyi();//調(diào)用右流水燈子程序
        zouyi();//調(diào)用左流水燈子程序
        zhongjian();//調(diào)用從中間到兩邊流水燈子程序
        }
        }

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


        關(guān)鍵詞: AVR單片機(jī)流水燈C程

        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 溧阳市| 城市| 商都县| 乐东| 阳东县| 新巴尔虎左旗| 黄冈市| 大邑县| 嘉义县| 游戏| 邯郸县| 鹤壁市| 社旗县| 城步| 南涧| 南开区| 望谟县| 龙山县| 土默特左旗| 新建县| 广灵县| 临洮县| 兰考县| 克什克腾旗| 依兰县| 广南县| 杭州市| 临洮县| 卢湾区| 北海市| 乌海市| 资溪县| 贺兰县| 定襄县| 安远县| 宣恩县| 刚察县| 北川| 峨山| 聂拉木县| 怀柔区|