久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1560|回復(fù): 0
收起左側(cè)

單片機(jī)智能溫度檢測(cè)控制系統(tǒng)設(shè)計(jì)程序

[復(fù)制鏈接]
ID:826660 發(fā)表于 2020-10-7 20:54 | 顯示全部樓層 |閱讀模式
智能溫度檢測(cè)控制系統(tǒng)設(shè)計(jì)
下面直接給出源代碼:
/*參考LCD1602液晶顯示實(shí)驗(yàn)接線(開發(fā)攻略內(nèi)在對(duì)應(yīng)的實(shí)驗(yàn)章節(jié)內(nèi)實(shí)驗(yàn)現(xiàn)象有接線說明)
2,獨(dú)立按鍵模塊-->單片機(jī)管腳.
K1-->P34
K2-->P35
K3-->P32
3,蜂鳴器模塊-->單片機(jī)管腳
BEEP-->P15
4,LED模塊-->單片機(jī)管腳
D1-->P24
5,LED模塊-->單片機(jī)管腳
D1-->P24
6,繼電器模塊-->單片機(jī)管腳
RELAY-->P14
7,直流電機(jī)模塊-->單片機(jī)管腳
IN1-->P10 (參考直流電機(jī)實(shí)驗(yàn)接線)
8,EPROM模塊-->單片機(jī)管腳
參考EEPROM實(shí)驗(yàn)接線
9,DS18B20模塊-->單片機(jī)管腳
參考DS18B20溫度傳感器實(shí)驗(yàn)接線
實(shí)驗(yàn)現(xiàn)象:,
首先它能顯示環(huán)境的溫度并能設(shè)置上下限閥值,這是最基本的功能,系統(tǒng). 上電的時(shí)候顯示的是當(dāng)前環(huán)境溫度
和設(shè)定的溫度閥值,我們可以通過按鍵來修改溫度上下限閥值。我們看,按下這個(gè)K1鍵會(huì)進(jìn)入溫度閥值設(shè)置
界面,每按一下,切換一次閥值設(shè)置(上下閥值)界面,按第3次時(shí),會(huì)自動(dòng)回到主界面,如此循環(huán)。
在進(jìn)入溫度閥值設(shè)計(jì)界面時(shí),可以通過K2、K3鍵對(duì)閥值進(jìn)行加減,這里我們只對(duì)溫度整數(shù)部分進(jìn)行設(shè)置,
小數(shù)部分我們就不需要了,將設(shè)置好的上下限閥值保存到AT24C02 (EERROM) 內(nèi),當(dāng)下一次開啟系統(tǒng)時(shí)只需
從AT24C02內(nèi)讀取保存的閥值數(shù)據(jù),而不需要重復(fù)設(shè)置上下限閥值。這樣的話,我們用3個(gè)按鍵就實(shí)現(xiàn)了溫度上下
限閥值的設(shè)定,這是溫度檢測(cè)控制系統(tǒng)基本的功能。假如我們把溫度上限設(shè)置為32°C,下限設(shè)置 為30°C.
另外還有恒定溫度的功能。當(dāng)設(shè)定好上下限閥值時(shí),系統(tǒng)即會(huì)把當(dāng)前的溫度與設(shè)定的上下限閥值對(duì)比,
如果高于上限溫度,開啟散熱進(jìn)行降溫,同時(shí)報(bào)警:如果低于下限溫度,開啟加熱,同時(shí)報(bào)警:
如果當(dāng)前溫度處于'下限和,上限溫度之間時(shí),關(guān)閉散熱、加熱及報(bào)警。從而可將溫度控制在閥值的范圍內(nèi)。*/

#include "public.h"
#include "lcd.h"
#include "temp.h"
#include "i2c.h"


sbit k3=P3^2;   
sbit k1=P3^4;                  
sbit k2=P3^5;                  

sbit led=P2^4

sbit beep=P1^5;        
sbit relay=P1^4;
sbit moto=P1^0;  


char set_templ=22,set_temph=40;
u16 temp_val;
u8 mode;

void Temp_DataPros()
{
        short temp;
        u8 temp_buf[5];
        temp=Ds18b20ReadTemp();
        temp_val=temp;        
        if(temp<0)
        {
                temp=-temp;
                LCD_Dispstring(2+5,0,"-");
        }
        else
        {
                LCD_Dispstring(2+5,0," ");
        }

        temp_buf[0]=temp/100+0x30;
        temp_buf[1]=temp%100/10+0x30;
        temp_buf[2]='.';
        temp_buf[3]=temp%100%10+0x30;
        temp_buf[4]='\0';
        LCD_Dispstring(2+6,0,temp_buf);        

        temp_buf[0]=set_temph/10+0x30;
           temp_buf[1]=set_temph%10+0x30;
        temp_buf[2]='\0';
        LCD_Dispstring(5,1,temp_buf);        

        temp_buf[0]=set_templ/10+0x30;
           temp_buf[1]=set_templ%10+0x30;
        temp_buf[2]='\0';
        LCD_Dispstring(14,1,temp_buf);
}



#define  K1_MODE  1
#define  K2_ADD  2
#define  K3_DEC  3

u8 KEY_Scan(u8 mode)
{
        static u8 key=1;
        if(key&&(k1==0||k2==0||k3==0))
        {
                delay(1000);   //лֶ
                key=0;
                if(k3==0)
                {
                        return K1_MODE;
                }
                else if(k1==0)
                {
                        return K2_ADD;
                }
                else if(k2==0)
                {
                        return K3_DEC;        
                }
        }
        else if(k1==1&&k2==1&&k3==1)
        {
                key=1;        
        }
        if(mode)
        {
                key=1;
        }
        return 0;        
}

void KEY_Pros()
{
        u8 key;
        u8 temph_buf[3];

        key=KEY_Scan(0);
        
        if(key==K1_MODE)  
        {
                mode++;
                LCD_Clear();

                if(mode==1)
                {
                        LCD_Dispstring(0,0,"SETH:   C");               
                }
                else if(mode==2)
                {
                        LCD_Dispstring(0,1,"SETL:   C");        
                }
                else
                {
                        mode=0;
                        LCD_Dispstring(2,0,"Temp:     C");
                        LCD_Dispstring(0,1,"SETH:  ");
                        LCD_Dispstring(9,1,"SETL:  ");        
                }
        }
        if(mode==1)
        {
                switch(key)        
                {
                        case K2_ADD:         
                                                set_temph++;
                                                if(set_temph>=80)set_temph=80;
                                                break;
                        case K3_DEC:          //ݵ
                                                set_temph--;
                                                if(set_temph<=0)set_temph=0;
                                                break;
                }

                temph_buf[0]=set_temph/10+0x30;
                temph_buf[1]=set_temph%10+0x30;
                temph_buf[2]='\0';
                   LCD_Dispstring(6,0,temph_buf);
                At24c02Write(0,set_temph);
        }

        else if(mode==2)
        {
                switch(key)        
                {
                        case K2_ADD:         
                                                set_templ++;
                                                if(set_templ>=80)set_templ=80;
                                                break;
                        case K3_DEC:          //ݵ
                                                set_templ--;
                                                if(set_templ<=0)set_templ=0;
                                                break;
                }

                temph_buf[0]=set_templ/10+0x30;
                temph_buf[1]=set_templ%10+0x30;
                temph_buf[2]='\0';
                   LCD_Dispstring(6,1,temph_buf);
                At24c02Write(2,set_templ);
        }
        


}



void sound()
{
        u8 i=50;
        while(i--)
        {
                beep=!beep;
                delay(10);
        }
}
void TempData_Compare()
{
        if(temp_val>set_temph*10)
        {
                led=1;
                moto=1;
                relay=1;
                sound();               
        }
        else if(temp_val<set_templ*10)
        {
                led=1;
                moto=0;
                relay=0;
                sound();               
        }
        else                    
        {
                moto=0;
                led=0;
                relay=1;
        }
}

void kai_display()
{
        if(At24c02Read(255)!=18)
        {
                At24c02Write(0,set_temph);
                At24c02Write(2,set_templ);
                At24c02Write(255,18);        
        }
        else
        {
                set_temph=At24c02Read(0);
                set_templ=At24c02Read(2);        
        }

        LCD_Dispstring(2,0,"Temp:     C");
        LCD_Dispstring(0,1,"SETH:  ");
        LCD_Dispstring(9,1,"SETL:  ");
}

void main()
{
        moto=0;
        led=0;
        relay=1;

        LCD_Init();
        kai_display();
        while(1)
        {
                if(mode==0)
                        Temp_DataPros();
                KEY_Pros();        
                TempData_Compare();                                
        }
}





回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久毛片免费观看 | 日日射影院 | 黄色一级大片在线免费看产 | 久久精品一区 | 欧美一区二区免费视频 | 欧美视频二区 | 久久国产一区二区 | 福利片一区二区 | 一区二区中文 | 午夜三级在线观看 | 国产成人精品综合 | 午夜日韩视频 | 日本黄色一级片视频 | 国产黄色av网站 | 久优草| 91啪亚洲精品 | 狠狠色综合久久丁香婷婷 | 亚洲福利 | 欧美激情综合色综合啪啪五月 | 国产成人精品一区二区三区四区 | 天天操天天干天天透 | 青青草av在线播放 | 精品久久网 | 国产91av视频 | 成人免费观看视频 | 中文字幕 国产 | 精品欧美一区二区三区久久久 | 午夜免费观看网站 | 九九热九九 | 在线亚洲一区二区 | 国产欧美久久一区二区三区 | av一二三区 | 午夜免费在线 | 一级特黄在线 | 国产传媒视频在线观看 | 欧美成年网站 | 免费观看一级视频 | 性色av一区| 偷偷操视频| 亚洲 中文 欧美 日韩 在线观看 | 欧美国产视频 |