新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 玩轉單片機,你我都是菜鳥(續3)

        玩轉單片機,你我都是菜鳥(續3)

        作者: 時間:2016-11-25 來源:網絡 收藏
        好久沒有更新博文了,由于晚上回家沒有網所以很久沒更新了,好不容易寫的一篇突然斷電沒有保存,真夠杯具的。電來了又重新寫了。不知道最近還有沒有人關注我。其實這我都不惦記了,希望群里的朋友迷茫的盡快找到方向,盡快都成為高手。如果你還關注我不知道是因為我的經歷還是因為我前一篇的那些題目?前幾篇寫的一些我的經歷可能有些人看了,可能還會有同感,如果愿意可以跟著我的思路走,先完成我上篇博文提到的幾個題目。至于我的經歷,如果你還感興趣可以留言,我在后邊再說說。。。。。。
        下面開始第一個題目:流水燈
        硬件前提:用51的P1口控制8個LED,1點亮,0熄滅。
        (1)第1,3,5,7個燈半亮,其余的全亮。
        (2)第1個亮1/8,第2個亮2/8,第3個亮3/8,第4個亮4/8,第5個亮5/8,第6個亮6/8, 第7個亮7/8,第8個全亮。
        (3)所有的燈逐漸從暗到全亮,再由全亮到暗。
        (4)8個燈從第一個開始依次漸亮,直到最后一個。再從最后一個起漸暗,直 到 第一個。如此循環往復。這才是真正的流水燈。


        單片機初學者幾乎都做的一個實驗就是流水燈實驗,因為大家都做,所以就覺得很簡單,很多人對這個實驗幾乎不屑。其實要徹底的玩轉這個實驗也是很不簡單的事情,不信看看你能不能完成下面的實驗題,如果你能拿下它,那么你已經一只腳穩穩地踏入了單片機門檻,并且你一定不想再回頭了,此時已經有一部分人對你刮目相看了(包括我),因為就這幾個題目算起來我想了有整整一天了,總算有個結果,而且還有一些問題,尤其是第(2)個題目效果很不明顯。我把這幾個題目的程序貼出來,希望大家給點意見,我們互相交流,互相學習,互相指導。
        題目要求:第1,3,5,7個燈半亮,其余的全亮。
        (1)程序:
        #include
        #defineucharunsignedchar
        #defineledP1//led接在P1口
        #defineTon40//基準脈寬0.04ms
        ucharLEDflag=0;//全局變量,最大255,保存T0中斷次數

        voidinit();
        voidled_on();
        voidmain()
        {
        init();
        while(1)
        {

        led_on();

        }
        }
        voidinit()//定時器初始化
        {
        TMOD=0x02;//T0方式2,8位自動載入
        TH0=256-Ton;//T0初始值
        TL0=256-Ton;//重載值
        TR0=1;//啟動T0
        ET0=1;//開T0,T1中斷
        EA=1;//全局中斷允許
        }

        voidtime0_int()interrupt1using3//T0中斷函數,中斷1,使用工作組3
        {
        LEDflag++;//修改LEDflag
        }

        voidled_on()
        {

        if(LEDflag==0)//點亮8個燈
        {
        led=0x00;
        }
        if(LEDflag==12)//熄滅1,3,5,7燈
        {
        led=0x55;
        }
        }
        題目要求:第1個亮1/8,第2個亮2/8,第3個亮3/8,第4個亮4/8,第5個亮5/8,第6個亮 6/8, 第7個亮7/8,第8個全亮。
        (2)程序:
        #include
        #defineucharunsignedchar
        #defineledP1//led接在P1口
        #defineTon40//基準脈寬0.04ms
        uchari,LEDflag=0;//全局變量,最大255,保存T0中斷次數
        //ucharcodeled_off[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
        voidinit();
        voidled_on();
        voidmain()
        {
        init();
        while(1)
        {

        led_on();

        }
        }
        voidinit()//定時器初始化
        {
        TMOD=0x02;//T0方式2,8位自動載入
        TH0=256-Ton;//T0初始值
        TL0=256-Ton;//重載值
        TR0=1;//啟動T0
        ET0=1;//開T0,T1中斷
        EA=1;//全局中斷允許
        }

        voidtime0_int()interrupt1using3//T0中斷函數,中斷1,使用工作組3
        {
        LEDflag++;//修改LEDflag
        }

        voidled_on()
        {
        switch(LEDflag)
        {
        case32:led=0x00;
        //為真時語句
        break;
        case64:led=0x01;
        //為真時語句
        break;
        case96:led=0x03;
        //為真時語句
        break;
        case128:led=0x07;
        //為真時語句
        break;
        case160:led=0x0f;
        //為真時語句
        break;
        case192:led=0x1f;
        //為真時語句
        break;
        case224:led=0x3f;
        //為真時語句
        break;
        case255:led=0x7f;
        //為真時語句
        break;
        default:
        //冗余語句
        break;
        }

        }
        題目要求:所有的燈逐漸從暗到全亮,再由全亮到暗。
        (3)程序:
        #include
        #defineucharunsignedchar
        #defineledP1//led接在P1口
        #defineTon40//基準脈寬0.04ms
        ucharLEDflag=0;//全局變量,最大255,保存T0中斷次數
        voidinit();
        voidled_on_off();
        voidmain()
        {
        init();
        while(1)
        {

        led_on_off();

        }
        }

        上一頁 1 2 下一頁

        關鍵詞: 單片機流水

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 玛沁县| 武宣县| 西乌| 铜梁县| 长寿区| 桓台县| 西城区| 锡林郭勒盟| 长泰县| 长顺县| 科技| 林州市| 天柱县| 柞水县| 苏尼特右旗| 镶黄旗| 介休市| 大悟县| 吉安市| 通许县| 万载县| 车险| 彭水| 泾阳县| 安阳市| 北京市| 凤凰县| 大城县| 都兰县| 清丰县| 吴江市| 万山特区| 松江区| 宁南县| 霍山县| 壤塘县| 屯门区| 富裕县| 通海县| 哈巴河县| 桐庐县|