新聞中心

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

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

        作者: 時間:2016-11-25 來源:網絡 收藏

        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_off()
        {
        uchari;//i初始化
        i=0;//i初始化
        while(i!=255)//由暗變亮
        {
        if(LEDflag==0)//點亮
        {
        led=0x00;
        }
        if(LEDflag==i)//熄滅
        {
        led=0xff;
        }
        if(LEDflag==255)//修改變量
        {
        i++;
        }


        }
        i=0;//i初始化
        while(i!=255)//由暗變亮
        {
        if(LEDflag==0)//點亮
        {
        led=0xff;
        }
        if(LEDflag==i)//熄滅
        {
        led=0x00;
        }
        if(LEDflag==255)//修改變量
        {
        i++;
        }


        }
        }
        題目要求:8個燈從第一個開始依次漸亮,直到最后一個。再從最后一個起漸暗,直到第一個。如此循環往復。這才是真正的流水燈。
        (4)程序:
        #include
        #defineucharunsignedchar
        #defineledP1//led接在P1口
        #defineTon40//基準脈寬0.04ms
        ucharLEDflag=0;//全局變量,最大255,保存T0中斷次數
        ucharcodeled_off[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
        voidinit();
        voidled_on_off();
        voidmain()
        {
        init();
        while(1)
        {

        led_on_off();

        }
        }
        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_off()
        {
        uchari=0,j=0;//i初始化
        for(j=0;j<8;j++)
        {
        i=0;//i初始化
        while(i!=255)//由暗變亮
        {
        if(LEDflag==0)//點亮
        {
        led=led_off[j];
        }
        if(LEDflag==i)//熄滅
        {
        led=0xff;
        }
        if(LEDflag==255)//修改變量
        {
        i++;
        }


        }
        }
        for(j=8;j>0;j--)
        {
        i=0;//i初始化
        while(i!=255)//由暗變亮
        {
        if(LEDflag==0)//點亮
        {
        led=0xff;
        }
        if(LEDflag==i)//熄滅
        {
        led=led_off[j-1];
        }
        if(LEDflag==255)//修改變量
        {
        i++;
        }


        }
        }


        }

        上面是這幾個題目的程序,全部是我自己寫的或是參考別人程序寫的,全部通過調試都能完成題目要求,只是第二個題目不是很完美,效果不是很明顯。我這個人很追求完美,但是第二個題目想了很久也沒想到更好的思路,也許是思維受到別人程序的限制了,希望能得到你們的指導,也許你會有不一樣的思路。其實流水燈的控制很多,但是只要能掌握其原理,變來變去也就那么幾種,控制總在你的掌握之中。無論控制什么,個人看法還是掌握原理,只要原理明白,就完全在你的控制之中,俗話說“萬變不離其中”嗎!就是這個道理。

        上一頁 1 2 下一頁

        關鍵詞: 單片機流水

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 溆浦县| 桂东县| 睢宁县| 昭觉县| 新和县| 邹平县| 兴安盟| 德保县| 鸡泽县| 蒙阴县| 兴文县| 陕西省| 曲阜市| 桑植县| 茶陵县| 汉川市| 小金县| 疏附县| 岑巩县| 桑植县| 宜都市| 海宁市| 精河县| 楚雄市| 青岛市| 永嘉县| 武乡县| 开江县| 上杭县| 贡觉县| 无锡市| 安岳县| 晋江市| 黔西县| 科尔| 襄垣县| 太和县| 玉林市| 余庆县| 台中市| 灵寿县|