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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1442|回復: 0
打印 上一主題 下一主題
收起左側

基于51單片機熱水器控制系統(tǒng)-proteus仿真-程序

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:190577 發(fā)表于 2023-11-8 15:35 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
一、系統(tǒng)方案  
系統(tǒng)設計將軟件設計內(nèi)容分為了六大模塊,分別是蜂鳴器報警、水位檢測、DS18B20模塊、液晶顯示、加熱模塊、按鍵模塊,系統(tǒng)將其進行分別設計,接通電源之后,單片機分別向LCD1602液晶顯示器、DS18B20模塊、和按鍵發(fā)出初始化指令,初始化結束后,進行按鍵掃描,若檢測到按鍵信號,處理按鍵對應操作,無論是否有按鍵信號,都會繼續(xù)進行下一步,讀取DS18B20轉(zhuǎn)換值,在LCD1602液晶顯示器上,根據(jù)水位大小,啟動加水或停止加水,根據(jù)溫度大小決定是加熱還是停止加熱,之后返回到LCD1602液晶顯示器、DS18B20模塊、和按鍵初始化,繼續(xù)這個流程,直到斷開電源結束。


二、硬件設計
原理圖如下:
三、單片機軟件設計
1、首先是系統(tǒng)初始化
/***********************lcd1602初始化設置************************/
void init_1602()
{
        write_com(0x38);  //顯示模式設置:16×2顯示,5×7點陣,8位數(shù)據(jù)接口 不檢測忙信號
        write_com(0x0c);  //開顯示 不顯示光標
        write_com(0x06);  //當寫一個字符是,地址指針加 1
         write_string(1,0,"0 T:  .   00:00 0");          //初始化1602顯示
        write_string(2,0,"H:  .   L:  .    ");  //初始化1602顯示
        write_lcd3_18B20(2,2,t_high);    //顯示上限報警值
        write_lcd3_18B20(2,10,t_low);                //顯示溫度下限報警值        
        write_zifu(1,8,0xdf);  //顯示度        
        write_zifu(2,6, 0xdf);  //顯示度
        write_zifu(2,14,0xdf);  //顯示度

}
2、液晶顯示程序
void delay_uint(uint q)
{
        while(q--);
}

/********************************************************************
* 名稱 : write_com(uchar com)
* 功能 : 1602指令函數(shù)
* 輸入 : 輸入的指令值
* 輸出 : 無
***********************************************************************/
void write_com(uchar com)
{
         rs=0;             //寫指令
        rw=0;             //對1602寫操作
        P0=com;             //P0口對1602寫指令數(shù)據(jù)
        delay_uint(25);
        e=1;                 //e=1使能信號
        delay_uint(100);   //延時一下等1602完成操作
        e=0;
}

/********************************************************************
* 名稱 : write_data(uchar dat)
* 功能 : 1602寫數(shù)據(jù)函數(shù)
* 輸入 : 需要寫入1602的數(shù)據(jù)
* 輸出 : 無
***********************************************************************/
void write_data(uchar dat)
{
         rs=1;             //寫數(shù)據(jù)
        rw=0;             //對1602寫操作
        P0=dat;                  //P0口對1602寫數(shù)據(jù)
        delay_uint(25);
        e=1;                 //e=1使能信號
        delay_uint(100);   //延時一下等1602完成操作
        e=0;        
}
3、按鍵程序
/****************按鍵顯示函數(shù)***************/
void key_with()
{
        if(menu_1 == 0)
        {
                if(key_can == 2)   //手動打開斷電器
                        relay1 = ~relay1;     //打開關閉加熱繼電器
                if(key_can == 3)
                        relay2 = ~relay2;     //打開關閉抽水繼電器
        }
         if(key_can == 1)           //設置鍵
        {
                menu_1 ++;
                if(menu_1 > 4)
                {
                        menu_1 = 0;                 //menu_1 = 0 退出設置了,在正常顯示界面下
                        init_1602();     //1602初始化
                }
         }
        if(menu_1 == 1)                        //設置溫度上限報警值
        {
                 if(key_can == 2)         //加鍵
                {
                        if(flag_lj_en <= 3)
                                t_high ++ ;                //按鍵按下未松開加1 加三次        
                        else
                                t_high += 10;        //按鍵按下未松開加三次后加10
                        if(t_high > 999)
                                t_high = 999;
                }
                if(key_can == 3)          //減鍵
                {
                         if(flag_lj_en <= 3)
                                t_high -- ;                //按鍵按下未松開減1 減三次
                        else
                                t_high -= 10;        //按鍵按下未松開減三次后減10
                        if(t_high <= t_low)               
                                t_high = t_low + 1;         //限制溫度上限不能低于溫度下限
                }
                write_lcd3_18B20(2,2,t_high);    //顯示上限報警值
                write_com(0x80+0x40+2);          //將光標移動到第2行第2位
                write_com(0x0f);                 //顯示光標并且閃爍        
        }        
        if(menu_1 == 2)                        //設置溫度下限報警值
        {
                 if(key_can == 2)          //加鍵
                {
                        if(flag_lj_en <= 3)
                                t_low ++ ;                        //按鍵按下未松開加1 加三次
                        else
                                t_low += 10;                //按鍵按下未松開加三次后加10
                        if(t_low >= t_high)               
                                t_low = t_high - 1;         //限制溫度下限不能高于溫度上限
                }
                if(key_can == 3)           //減鍵
                {
                        if(flag_lj_en <= 3)
                                t_low -- ;                        //按鍵按下未松開減1 減三次        
                        else
                                t_low -= 10;                //按鍵按下未松開減三次后減10
                        if(t_low <= 10)
                                t_low = 10;
                }
                write_lcd3_18B20(2,10,t_low);                //顯示溫度下限報警值        
                write_com(0x80+0x40+10);            //將光標移動到第2行第10位
                write_com(0x0f);                    //顯示光標并且閃爍        
        }
        if(menu_1 == 3)                        //設置時鐘
        {
                 if(key_can == 2)         //加鍵
                {
                        if(flag_lj_en <= 3)
                                shi ++ ;                //按鍵按下未松開加1 加三次        
                        else  
                                shi += 5;           //按鍵按下未松開加三次后加5
                        if(shi > 23)
                                shi = 0;
                }
                if(key_can == 3)           //減鍵
                {
                        if(flag_lj_en <= 3)
                        {
                                if(shi == 0)
                                        shi = 24;
                                shi -- ;                        //按鍵按下未松開減1 減三次        
                        }                        
                        else
                        {
                                if(shi < 5)
                                        shi = 28;                                
                                shi -= 5;                           //按鍵按下未松開減三次后減5
                        }                        
                 }
                 write_lcd2(1,10,shi);                           //顯示時
                write_com(0x80+10);              //將光標移動到第1行第10位
                write_com(0x0f);                 //顯示光標并且閃爍        
        }        
        if(menu_1 == 4)                        //設置分鐘
        {
                  if(key_can == 2)         //加鍵
                {
                        if(flag_lj_en <= 3)
                                fen ++ ;                //按鍵按下未松開加1 加三次        
                        else  
                                fen += 5;           //按鍵按下未松開加三次后加5
                        if(fen > 60)
                                fen = 0;
                }
                if(key_can == 3)           //減鍵
                {
                        if(flag_lj_en <= 3)
                        {
                                if(fen == 0)
                                        fen = 60;
                                fen -- ;                        //按鍵按下未松開減1 減三次        
                        }                        
                        else
                        {
                                if(fen < 5)
                                        fen = 65;                                
                                fen -= 5;                           //按鍵按下未松開減三次后減5
                        }                        
                 }
                 write_lcd2(1,13,fen);                 //顯示分鐘
                write_com(0x80+13);          //將光標移動到第1行第13位
                write_com(0x0f);             //顯示光標并且閃爍        
        }        
        delay_1ms(400);               
}

4、核心算法程序
        /****************主函數(shù)***************/
void main()
{        
        beep = 0;                                //蜂鳴器響一聲   
        delay_1ms(150);
        P0 = P1 = P2 = P3 = 0xff;                //所有單片機IO口輸出高電平
        init_1602();                    //1602初始化
        time_init();                    //初始化定時器         
        temperature = read_temp();        //先讀出溫度的值
        delay_1ms(750);                                
        while(1)
        {
                 if(flag_250ms == 1)                //250ms 處理一次溫度程序
                {        
                        flag_250ms = 0;        
                        temperature = read_temp();        //先讀出溫度的值
                        shuiwei_dis() ;                                //水位顯示
                        clock_h_l();                //報警函數(shù)
                        if(menu_1 == 0)
                        {
                                write_lcd3_18B20(1,4,temperature);         //顯示溫度
                                dingshi_dis();  //定時控制
                                write_lcd1(1,0,dengji);                 //顯示水位
                        }
                }
                key();                                        //按鍵程序
                if(key_can > 0)
                {
                         key_with();                            //設置溫度        
                }
         }
}


四、 proteus仿真設計
Proteus軟件是一款應用比較廣泛的工具,它可以在沒有硬件平臺的基礎上通過自身的軟件仿真出硬件平臺的運行情況,這樣就可以通過軟件仿真來驗證我們設計的方案有沒有問題,如果有問題,可以重新選擇器件,連接器件,直到達到我們設定的目的,避免我們搭建實物的時候,如果當初選擇的方案有問題,我們器件都已經(jīng)焊接好了,再去卸載下去,再去焊接新的方案的器件,測試,這樣會浪費人力和物力,也給開發(fā)者帶來一定困惑,Proteus仿真軟件就很好的解決這個問題,我們在設計之初,就使用該軟件進行模擬仿真,測試,選擇滿足我們設計的最優(yōu)方案。最后根據(jù)測試沒問題的仿真圖紙,焊接實物,調(diào)試,最終完成本設計的作品。


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久国产精品免费免费狐狸 | 天天操网| 日本一级淫片免费啪啪3 | 亚洲欧美视频 | 日本不卡一区二区三区在线观看 | 成人久久久 | 人人干人人干人人干 | 欧美精品1区2区3区 精品国产欧美一区二区 | 国产精品欧美一区二区三区不卡 | 欧美手机在线 | 精品国产精品一区二区夜夜嗨 | 国产精品视频免费看 | 日韩在线播放视频 | 精品国产鲁一鲁一区二区张丽 | 91精品国产91久久久久游泳池 | 久久精品屋 | 亚洲v日韩v综合v精品v | 欧美日韩高清一区 | 久久网一区二区三区 | 国产视频精品免费 | 999国产精品视频免费 | 一区二区成人在线 | 欧美性大战久久久久久久蜜臀 | 久久精品亚洲精品国产欧美 | 男人天堂视频在线观看 | 天天夜天天操 | 日本午夜免费福利视频 | 在线视频成人 | 国产成人精品久久二区二区 | 在线观看av网站永久 | 国产在线a | 亚洲国产精品视频一区 | 成人免费一级 | 亚洲欧美一区二区三区国产精品 | 91亚洲精品在线 | 亚洲精品一区在线 | 二区三区在线观看 | 特级做a爰片毛片免费看108 | 欧美一区免费在线观看 | 99久久免费精品国产男女高不卡 | 成年人免费网站 |