新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 8位led呼吸程序代碼

        8位led呼吸程序代碼

        作者: 時間:2012-08-06 來源:網絡 收藏
        前幾天從視頻上看到一個的程序,看到自己筆記本上的led呼吸燈,感覺他們的算法要求差不多,于是寫下一下程序,我也得瑟一下,算是原創吧。有不正之處或者是有需要優化之處歡迎大家批評指正,相互學習(代碼中有138譯碼器的操作,已注釋,kingst的單片機開發板可直接實現)
        #includereg51.h>
        #define uchar unsigned char
        #define N 2 //定義的呼吸的速率
        #define T 700 //定義PWM的周期
        sbit ENLED = P1^4;//138譯碼器
        sbit ADDR0 = P1^0;//138譯碼器
        sbit ADDR1 = P1^1;//138譯碼器
        sbit ADDR2 = P1^2;//138譯碼器
        sbit ADDR3 = P1^3;//138譯碼器
        sbit led0=P0^0;
        sbit led1=P0^1;
        sbit led2=P0^2;
        sbit led3=P0^3;
        sbit led4=P0^4;
        sbit led5=P0^5;
        sbit led6=P0^6;
        sbit led7=P0^7;
        void pwm(int x)
        {
        while(x--);//延時函數
        }
        void main()
        {
        int t=0,i=0;
        char f=0;
        ENLED = 0;ADDR3 = 1; 譯碼器的打開
        ADDR0 = 0;ADDR1 = 1;ADDR2 = 1; 譯碼器的操作11111011
        while(1)
        {
        if(i=800)
        {
        i++;
        led0=0;
        pwm(t);//Toff,亮的時間
        led0=1;
        pwm(T-t);//Ton,暗的時間
        if(!f) t+=N+1;//亮速率較快,模擬呼吸
        else t-=N;//暗速率較慢
        if(t>T)
        {
        f=1;
        t=T;
        }//超過最大值時,返回最大值,此時燈滅
        if(t0)
        {
        f=0;
        t=0;
        }//超過最小值時,返回最小值,此時燈亮 以后的程序不再注釋。
        }
        if(i>=800i=1600)
        {
        i++;
        led1=0;
        pwm(t);
        led1=1;
        pwm(T-t);
        if(!f) t+=N+1;
        else t-=N;
        if(t>T)
        {
        f=1;
        t=T;
        }
        if(t0)
        {
        f=0;
        t=0;
        }
        }
        if(i>1600i2400)
        {
        i++;
        led2=0;
        pwm(t);
        led2=1;
        pwm(T-t);
        if(!f) t+=N+1;
        else t-=N;
        if(t>T)
        {
        f=1;
        t=T;
        }
        if(t0)
        {
        f=0;
        t=0;
        }
        }

        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 东乌珠穆沁旗| 高碑店市| 大庆市| 潞西市| 清新县| 沧州市| 莱西市| 洮南市| 平远县| 雷山县| 西和县| 庆阳市| 澳门| 绩溪县| 屏东市| 东乡| 大足县| 三穗县| 阳新县| 巴中市| 博罗县| 光山县| 长葛市| 阜新市| 大姚县| 荔浦县| 通榆县| 井陉县| 武穴市| 青铜峡市| 定南县| 南郑县| 张家港市| 拉孜县| 大同市| 钟祥市| 巫山县| 榕江县| 同德县| 隆化县| 太和县|