新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 用51單片機做的小旋磁美容儀

        用51單片機做的小旋磁美容儀

        作者: 時間:2012-12-01 來源:網絡 收藏

        //以下為按鍵檢測子程序
        void key(void)
        {
        uchar num,num1=0;
        uint a;
        P1=0xfc;
        num=P1;
        if(num!=0xfc)
        { fmqbit=0; //檢測按鍵有輸入鍵值時使蜂鳴器鳴叫
        if(openbit!=0)
        {

        for(a=17;a>0;a--)
        {
        display(time,hotled,xuanled);
        }
        }
        else
        {
        for(a=200;a>0;a--)
        {
        duan=0xfe; //此處隨便加入值
        shila=0;
        gela=0;
        hotla=0;
        xuanla=0;//打開四路數碼管位顯示控制
        delay(1);
        }
        hotla=1;
        shila=1;
        gela=1;
        xuanla=1;//關閉四路數碼管位顯示控制
        }
        P1=0xfc;
        num=P1;
        if(num!=0xfc)
        { P1=0xfe;
        num=P1;
        if(num!=0xfe)
        {
        switch(num)
        {
        case 0xfa: num1=7; break;//旋轉減
        case 0xf6: num1=5; break;//hot 減
        case 0xee: num1=3; break;//時間減
        case 0xde:
        if(openbit!=0)
        {
        for(a=40;a>0;a--)
        display(time,hotled,xuanled);
        }
        else
        {
        for(a=400;a>0;a--)
        {
        duan=0xfe; //此處隨便加入值
        hotla=0;
        shila=0;
        gela=0;
        xuanla=0;//打開四路數碼管位顯示控制
        delay(2);
        }
        hotla=1;
        shila=1;
        gela=1;
        xuanla=1;//關閉四路數碼管位顯示控制
        }
        openbit=~openbit;//改變開關機標志位
        default:break;
        }

        }
        else
        {
        P1=0xfd;
        num=P1;
        switch(num)
        {
        case 0xf9: num1=6; break;
        case 0xf5: num1=4; break;
        case 0xed: num1=2; break;
        default: break;
        } }
        if(openbit!=0)
        bianlian(num1);//開機即可改變相關變量值,條件為開機后使能 }
        } P1=0xfc;
        }//以下為定時0中斷程序,定時時間為50MS
        void time0_int(void) interrupt 1
        {
        TH0=0x3c;
        TL0=0xb0; //進入裝初值
        d++;
        fmq=~fmq;
        if(d%10==0)
        xsd=~xsd;
        if(d==1200)
        {
        d=0;
        if(time!=0)
        time--; //此處停機變量處理已OK了。
        else
        openbit=0;

        }
        }//以下為定時1中斷程序,定時時間為1000US
        void time1_int(void) interrupt 3
        {
        TH1=0xff;
        TL1=0xe0;//進入裝初值if(openbit!=0)
        {

        if(hot1)
        {
        hot1--;
        if(hot1==0)
        {
        hotoff1=hotoff;
        if(biaobit0!=0)
        hotout=0;
        else hotout=1;
        }
        }
        if(hotoff1)
        {
        hotoff1--;
        if(hotoff1==0)
        {
        hot1=hot;
        if(biaobit1!=0)
        hotout=1;
        else hotout=0;
        }
        } if(xuan1)
        {
        xuan1--;
        if(xuan1==0)
        {
        xuanoff1=xuanoff;
        if(biaobit2!=0)
        xuanout=0;
        else xuanout=1;
        }
        }

        if(xuanoff1)
        {
        xuanoff1--;
        if(xuanoff1==0)
        {
        xuan1=xuan;
        if(biaobit3!=0)
        xuanout=1;
        else xuanout=0;
        }
        }



        }
        }
        void main(void)
        {
        P1=0xfc;
        openbit=0;//使起始狀態為停機等待狀態
        TMOD=0x11; //定義定時器工作模式
        IP=0x08; //定時器1設置為最高中斷級別
        TH0=0x3c;
        TL0=0xb0; //進入裝初值
        TH1=0xff;
        TL1=0xe0;//進入裝初值
        ET0=1;
        ET1=1;
        EA=1; //定時中斷至此全部打開開始運作。
        while(1)
        {
        hotout=1;
        xuanout=1;//將輸出都置為0輸出狀態,待機狀態 TR0=0;
        TR1=0;//將返回的定時器全部關閉,避免不必要的誤動作
        duan=0xfe; //待機時顯示的筆段控制
        hotla=0;
        shila=0;
        gela=0;
        xuanla=0;//打開四路數碼管位顯示控制
        delay(1); //顯示維持時間設定
        hotla=1;
        shila=1;
        gela=1;
        xuanla=1;//關閉四路數碼管位顯示控制

        if(P1!=0xfc)
        fmqbit=0;
        else fmqbit=1; //對按鍵掃描進行檢測,得出判斷蜂鳴器的鳴叫結果。 key(); //按鍵檢測函數調用
        if(openbit!=0)
        {

        d=0; //秒鐘計時值置0狀態
        TR0=1;
        TR1=1;
        hot=0;
        hot1=hot;
        hotoff=t-hot;
        hotoff1=hotoff; //將熱控制的初值給予設定 xuan=0;
        xuan1=xuan;
        xuanoff=t-xuan;
        xuanoff1=xuanoff; //將旋轉控制的初值給予設定 biaobit0=0;
        biaobit1=1;
        biaobit2=0;
        biaobit3=1; hotled=0; //將熱輸出顯示值及狀態設置為0狀態
        xuanled=0; //旋轉,效果同上 time=30; //時間初值設置為30分鐘整
        while(openbit!=0)
        {
        key(); //按鍵檢測函數
        if((time==0)(d>=1000))
        {fmqbit=xsd;} //倒計至最后10秒時進行鳴叫
        else
        {
        if(P1==0xfc)
        fmqbit=1;
        else fmqbit=0; //對按鍵掃描進行檢測,得出判斷蜂鳴器的鳴叫結果。
        }
        display(time,hotled,xuanled);//調用顯示函數
        }
        }
        }}
        與hotandxuan10區別于bing1 和bing0兩個變量取消,同時定時中斷1的程序體全部加以代碼優化,解決掉原程序執行過程中中斷停留時間過長,影響數碼管顯示,閃爍的問題,同時處理掉按鍵在開至最高檔時檢測靈敏度下降問題.

        蜂鳴器相關文章:蜂鳴器原理

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 玉门市| 肥西县| 涿州市| 澳门| 曲松县| 达州市| 镇远县| 绵阳市| 淮滨县| 涪陵区| 临邑县| 威海市| 滁州市| 英吉沙县| 清原| 湛江市| 周宁县| 屏东市| 锦屏县| 临泉县| 大方县| 平谷区| 新津县| 历史| 盐城市| 来凤县| 侯马市| 汝南县| 乌鲁木齐县| 连山| 长治县| 霍州市| 睢宁县| 嵊州市| 南丰县| 四平市| 微博| 昭通市| 广宁县| 济南市| 安徽省|