在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)-溫度控制器設(shè)計(jì)詳解+電路+代碼

            51單片機(jī)-溫度控制器設(shè)計(jì)詳解+電路+代碼

            作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏

            單片機(jī)通過(guò)引腳輸出 1 0來(lái)實(shí)現(xiàn)控制外圍電路,以P1^0[P1端口的第1位引腳]為例,當(dāng)P1^0輸出1的時(shí)候,引腳會(huì)產(chǎn)生一個(gè)5V的高電平.當(dāng)P1^0輸出0的時(shí)候,引腳會(huì)產(chǎn)生一個(gè)0V的低電平


            注:繼電器原理圖來(lái)自百度百科->http://baike.baidu.com/view/39560.htm繼電器原理:當(dāng)控制電路兩端有電流通過(guò)時(shí),電和金屬發(fā)生電磁感應(yīng),使得銜鐵被磁力吸引而控制工作電路的開(kāi)關(guān)

            繼電器和P1^0引腳之間的關(guān)系電路圖如下:


            當(dāng)P1^0輸出1[即5V]時(shí),控制電路兩端沒(méi)有電流通過(guò),因?yàn)闆](méi)有電壓差的緣故,所以繼電器還是把開(kāi)關(guān)B G 通路,但是當(dāng)P1^0輸出0的時(shí)候,左邊的電
            壓為5V,右邊的電壓位0V,于是電流就從左向右流過(guò),這個(gè)時(shí)候繼電器會(huì)把開(kāi)關(guān)K G 變?yōu)橥?/div>

            同理,主控芯片的工作指示燈也是這個(gè)原理,你可以去看看上面的EEPROM讀取數(shù)據(jù)代碼和主控芯片及外圍器件電路結(jié)合起來(lái)一起看看,相信你也
            會(huì)把這個(gè)原理給弄明白


            八路溫度控制器實(shí)物圖如下[八路只使用了其中一路,程序也實(shí)地運(yùn)行過(guò),由于室內(nèi)溫度調(diào)節(jié)問(wèn)題,繼電器沒(méi)有反應(yīng),因?yàn)榻oEEPROM設(shè)置30度報(bào)警

            溫度,而且還有零下報(bào)警代碼沒(méi)有寫(xiě)和報(bào)警溫度小數(shù)位判斷沒(méi)有寫(xiě)]:


            實(shí)物圖和電路原理圖基本一致,這個(gè)大家不用擔(dān)心



            代碼和大家分享,可以再這個(gè)基礎(chǔ)上再加以改進(jìn),也歡迎你們?cè)谑褂么a的時(shí)候找到BUG然后修改..

            代碼及其電路圖下載:http://www.51hei.com/f/DS18B20+EEPROM.rar

            下面是main.c 文件:
            #include
            #define uchar unsigned char
            #define uint unsigned int

            #define EEPROM_StartAddr 0x4E
            #define EEPROM_StartFlag 0xB0
            /*
            #define EEPROM_EndFlag 0xC0
            #define EEPROM_EndAddr 0x4E+2+24 //8個(gè)數(shù)據(jù)總數(shù)x3個(gè)數(shù)據(jù)位
            //EEPROM_EndAddr=0x4E+2+8x03 每個(gè)數(shù)據(jù)占3字節(jié)(兩個(gè)主要數(shù)據(jù)和一個(gè)NULL),0x49系獲得數(shù)據(jù)項(xiàng)目總數(shù)
            */
            typedef int CTRL_TOTAL;//列表總項(xiàng)目

            typedef struct EEPROM_DataList//EEPROM數(shù)據(jù)結(jié)構(gòu)
            {
            int AlarmTemp;//報(bào)警溫度
            int CtrlPort; //控制端口
            } CTRL_DATALIST;

            uint get_temp();
            void tmpchange(void);
            void delayb(uint count);
            void init();
            void write_add(uchar address,uchar date);
            uchar read_add(uchar address);

            void CtrlPort(int PortCode,int Ctrl);

            sbit Beep=P3^4; // 測(cè)試用,可略
            sbit LED=P2^7;

            sbit CtrlPort1=P1^0;
            sbit CtrlPort2=P1^1;
            sbit CtrlPort3=P1^2;
            sbit CtrlPort4=P1^3;
            sbit CtrlPort5=P1^4;
            sbit CtrlPort6=P1^5;
            sbit CtrlPort7=P1^6;
            sbit CtrlPort8=P1^7;

            CTRL_TOTAL ListTotal;
            CTRL_DATALIST CtrlList[8];
            void delayb(uint count) ;
            void main()
            {
            int BitData; // EEPROM位數(shù)據(jù)緩存
            int i;// 計(jì)數(shù)循環(huán)變量
            int TempData;// 當(dāng)前溫度值
            int CtrlListPort;// 將要控制的引腳
            int CtrlElec;// 將要控制的引腳輸出電平

            LED=1;
            init();
            BitData=read_add(EEPROM_StartAddr);

            if (BitData!=EEPROM_StartFlag){while(1);} // 卡住它,不要讓它重新運(yùn)行
            // 關(guān)于EEPROM獲取數(shù)據(jù)信息可以從同文件夾中圖片有指導(dǎo)
            ListTotal=read_add(EEPROM_StartAddr+1);
            for(i=0;i {
            CtrlList[i].AlarmTemp=read_add((EEPROM_StartAddr+2)+i*3);
            CtrlList[i].CtrlPort =read_add((EEPROM_StartAddr+2)+i*3+1);
            }
            tmpchange();

            for(i=0;i<=7;i++) CtrlPort(i,1);//輸出高電位
            LED=0;//工作指示燈開(kāi)啟

            while(1)
            {
            TempData=get_temp();
            BitData=(TempData%1000/100)*10;//十位溫度。
            BitData=(TempData%1000%100/10)+BitData;//個(gè)位溫度。
            for(i=0;i {
            CtrlElec=(CtrlList[i].AlarmTemp>=BitData)?0:1;
            CtrlListPort=CtrlList[i].CtrlPort;
            CtrlPort(CtrlListPort,CtrlElec); //符合條件輸出底電,不符合輸出高電
            delayb(100);
            }
            delayb(200);
            }
            }

            void CtrlPort(int PortCode,int Ctrl)//控制P1.0-P1-7
            {
            switch(PortCode)
            {
            case 1: CtrlPort1=Ctrl;
            case 2: CtrlPort2=Ctrl;
            case 3: CtrlPort3=Ctrl;
            case 4: CtrlPort4=Ctrl;
            case 5: CtrlPort5=Ctrl;
            case 6: CtrlPort6=Ctrl;
            case 7: CtrlPort7=Ctrl;
            case 8: CtrlPort8=Ctrl;
            }
            }


            上一頁(yè) 1 2 下一頁(yè)

            評(píng)論


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

            關(guān)閉