新聞中心

        七彩燈綜合C程序

        作者: 時(shí)間:2016-11-29 來(lái)源:網(wǎng)絡(luò) 收藏
        /*此程序是一款普通的彩燈,它的功能主要有四種模式:

        第一種模式:開(kāi)機(jī)四種顏色以0.5秒速度循環(huán)1次,然后
        在白顏色上停止循環(huán),即顯示白光第二種模式:按下功
        能鍵后,它以1秒速度四種顏色不停的循環(huán)第三種模式:
        當(dāng)按鍵按下后,它會(huì)記住第二種模式的顏色,比如第二種
        模式現(xiàn)在亮得是綠色,你按下按鍵時(shí),它會(huì)先閃一下,然
        后在綠顏色上停下來(lái)第四模式:當(dāng)你再按下開(kāi)關(guān)時(shí),它
        自動(dòng)回到模式一下,(當(dāng)然還可以寫出三種顏色)
        本程序是第一個(gè)版本,第二版功能更強(qiáng)大參見(jiàn):
        http://www.51hei.com/mcu/1531.html*/
        #include
        #define uint unsigned int
        #define uchar unsigned char
        sbit RJ=P2^5;//紅燈IO口
        sbit GJ=P2^6;//綠燈IO口
        sbit BJ=P2^7;//蘭燈IO口
        sbit key=P1^4;//按鍵IO口
        uchar ding3,yin,x;//分別為定時(shí)器變量,標(biāo)志位變量,以及顏色標(biāo)志位變量
        bit a=1,b,c;//分別為模式1.2.3標(biāo)志位
        /*******************************/
        /***********延時(shí)子程序***********/
        /*******************************/
        void delay(uint z)
        {
        uint x,y;
        for(x=100;x>0;x--)
        for(y=z;y>0;y--);
        }
        /*******************************/
        /********按鍵處理子程序********/
        /*******************************/
        void sk()
        {
        switch(yin)//執(zhí)行一鍵多功能程序
        {
        case 0:if(key==0)//如果0與yin比較相等,則執(zhí)行break前的所有內(nèi)容
        {
        delay(100);//延時(shí)
        if(key==0)//再次確認(rèn)是否有按下
        {
        yin++;//將變量加1,此句很重要,作用是以使下次按下時(shí)好執(zhí)行下一開(kāi)關(guān)語(yǔ)句
        a=0;//將a變?yōu)?
        c=0;
        b=1;//將b變?yōu)?,即打開(kāi)按鍵程序中的第二段程序
        x=0;//清掉顏色計(jì)數(shù)變量,以便它從紅色開(kāi)始循環(huán)
        while(!key);//按鍵放開(kāi)了嗎?
        }
        }
        break;//退出開(kāi)關(guān)語(yǔ)句
        case 1: if(key==0)//如果1與yin比較相等,則執(zhí)行大括號(hào)內(nèi)容
        {
        delay(100);//延時(shí)
        if(key==0)//再次確認(rèn)是否有按下
        {
        yin++;//將變量加1,此句很重要,作用是以使下次按下時(shí)好執(zhí)行下一開(kāi)關(guān)語(yǔ)句
        b=0;
        c=1;//打開(kāi)第三種模式標(biāo)志位,即鎖定狀態(tài)
        a=0;
        x=0;//清掉顏色計(jì)數(shù)變量,以便它從紅色開(kāi)始循環(huán)
        while(!key);//按鍵放開(kāi)了嗎?
        }
        }
        break;//退出開(kāi)關(guān)語(yǔ)句
        case 2: if(key==0)//如果2與yin比較相等,則執(zhí)行大括號(hào)內(nèi)容
        {
        delay(100);//延時(shí)
        if(key==0)//再次確認(rèn)是否有按下
        {
        b=0;//將b變?yōu)?,即關(guān)閉上一次功能
        c=0;//關(guān)閉上前面的功能
        a=1;//打開(kāi)第1次功能,即0.5秒循環(huán)閃爍
        yin=0;
        x=0;//清掉顏色計(jì)數(shù)變量,以便它從紅色開(kāi)始循環(huán)
        while(!key);//按鍵放開(kāi)了嗎?
        }
        }
        break;//退出開(kāi)關(guān)語(yǔ)句
        }
        }
        /*******************************/
        /*******三種模式顯示子程序******/
        /*******************************/
        void xian()
        {
        uchar m;//模式3變量
        if(a!=0)//第一種模式以0.5秒速度循環(huán)閃爍一次,然后在白光處停下來(lái)
        {
        if(ding3>=10)//定時(shí)器到了0.5秒嗎?
        {
        ding3=0;
        x++;//將標(biāo)志位加1,以便進(jìn)入下一種顏色
        switch(x)
        {
        case 1:RJ=1;GJ=0;BJ=0;//亮紅光
        break;
        case 2:RJ=0;GJ=1;BJ=0;//亮綠光
        break;
        case 3:RJ=0;GJ=0;BJ=1;//亮蘭光
        break;
        case 4:RJ=1;GJ=1;BJ=1;a=0;//亮白光,//將標(biāo)志位a清0,以便再次循環(huán)
        break;
        }

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

        }
        }
        if(b!=0)//第二種模式以1秒速度一直循環(huán)閃爍。
        {
        if(ding3>=20)
        {
        ding3=0;
        x++;
        switch(x)
        {
        case 1:RJ=1;GJ=0;BJ=0;m=x;//將x變量?jī)?nèi)給m保存起來(lái),以便進(jìn)入模式三時(shí)能準(zhǔn)確的鎖定一種狀態(tài)
        break;
        case 2:RJ=0;GJ=1;BJ=0;m=x;
        break;
        case 3:RJ=0;GJ=0;BJ=1;m=x;
        break;
        case 4:RJ=1;GJ=1;BJ=1;m=x;x=0;
        break;
        }
        }
        }
        if(c!=0)//第三種模式記住模式二時(shí)按鍵按下的顏色,然后鎖定。
        {
        RJ=0;GJ=0;BJ=0;
        delay(550);
        switch(m)//判斷上一次模式三的狀態(tài),然后確定顯示哪種顏色
        {
        case 1:RJ=1;GJ=0;BJ=0;
        break;
        case 2:RJ=0;GJ=1;BJ=0;
        break;
        case 3:RJ=0;GJ=0;BJ=1;
        break;
        case 4:RJ=1;GJ=1;BJ=1;
        break;
        }
        c=0;//將標(biāo)志位清0,以便再次循環(huán)
        }
        }
        /*******************************/
        /*************主程序************/
        /*******************************/
        void main()
        {
        RJ=0;//將R LED關(guān)閉
        GJ=0;//將G LED關(guān)閉
        BJ=0;//將B LED關(guān)閉
        TMOD=0X01;//寄存器工作方式
        EA=1;//開(kāi)總中斷
        TR0=1;//開(kāi)定時(shí)器
        ET0=1;//開(kāi)定時(shí)器中斷
        TH0=(65536-50000)/256;//賦值給高位
        TL0=(65536-50000)%256;//賦值給低位
        while(1)
        {
        sk();//調(diào)用按鍵子程序
        xian();//調(diào)用顯示子程序
        }
        }
        void zhong() interrupt 1//T1中斷服務(wù)程序
        {
        TH0=(65536-50000)/256;//賦值給高位
        TL0=(65536-50000)%256;//賦值給低位
        ding3++;//將按鍵計(jì)數(shù)器加1
        }



        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 无为县| 诸暨市| 丹寨县| 宣城市| 治县。| 海城市| 城固县| 柳林县| 宁阳县| 徐闻县| 定边县| 特克斯县| 河北区| 和顺县| 巴彦淖尔市| 曲麻莱县| 于田县| 宣武区| 申扎县| 定日县| 剑川县| 峨眉山市| 凯里市| 温州市| 北宁市| 子洲县| 陆丰市| 平陆县| 安康市| 阜阳市| 克拉玛依市| 宝丰县| 弥渡县| 宝应县| 古丈县| 大港区| 安仁县| 石泉县| 鄂尔多斯市| 高州市| 大渡口区|