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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 40844|回復: 66
收起左側

基于51單片機的恒溫控制系統

  [復制鏈接]
ID:68513 發表于 2016-3-3 20:39 | 顯示全部樓層 |閱讀模式
1.顯示當前才起的室內溫度;
2.恒定溫度在20C——25C之間,溫度在此范圍內外設不工作;如低于20C自動啟動加熱繼電器升溫;
超過25C則自動啟動降溫繼電器降溫;
3.溫度超過恒定值會有不同顏色的指示燈報警提示;測溫精度0.1C。

引腳分配    lcd    lcddata:    P0
            lcd_e:        P2^7
            lcd_rs:        P2^6
            lcd_rw:        P2^5
        
        設置按鍵    limit_choise:        P    //溫度上下限選擇按鍵
                increase_temperature        P    //增加溫度限值按鍵
                reduce_temperature        P    //減少溫度限值按鍵
        
        蜂鳴器報警    warning        P   

        溫度傳感器    temperature_sensor    P

        制熱    heatting    P

        制冷    refrigerating    P

        LED顯示        normal        P    //正常溫度指示燈
                high_temperature    P    //高溫指示燈
                low_temperature        P    //低溫指示燈   

詳細代碼及原理圖見附件!!!!!!!!!!!!!!
343087629296337574.jpg
407156072252723955.jpg
727834607737966332.jpg

基于51單片機的恒溫控制系統.zip

576.64 KB, 下載次數: 715, 下載積分: 黑幣 -5

代碼+原理圖

評分

參與人數 7黑幣 +96 收起 理由
Cliff + 3 感謝分享,希望我能借鑒它完成末末的實習課.
15119714985 + 3 贊一個!
無證駕駛 + 5 共享資料的黑幣獎勵!
send + 10 很給力!
wxc19960311 + 10 很給力!
lizhuoxiao + 5 很給力!
admin + 60 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:107189 發表于 2016-3-4 00:02 | 顯示全部樓層
很棒的制作。值得收藏以后有時間做一個.
下面是樓主的電路圖和主程序:
0.png
  1. #include <main.h>

  2. void main()//主函數
  3. {
  4.         init();//初始化函數
  5.   while(1)
  6.         {
  7.                 temp_control();//控制按鍵函數
  8.                 unnormal_proccessing(get_temp(Ds18b20ReadTemp()),up_limit_temp,down_limit_temp);//恒溫控制函數
  9.         }               
  10. }

  11. void init()//初始化函數
  12. {
  13.         uint i,j;
  14.         //函數初始化
  15.         LcdInit();//LCD初始化函數
  16.         Ds18b20Init();
  17.        
  18.         //I/O口初始化
  19.         heatting=1;//不制熱
  20.         refrigerating=1;//不制冷
  21.         normal=1;//正常溫度指示燈不顯示
  22.         unnormal=1;//不正常溫度指示燈不顯示
  23.         warning=1;//蜂鳴器不報警
  24.        
  25.         //LCD初始化顯示
  26.         LcdWriteCom(0x80);//第一行顯示
  27.         j=strlen(num1);
  28.         for(i=0; i<j; i++)
  29.         {
  30.                 LcdWriteData(num1[i]);       
  31.                 delay_ms(1);
  32.         }
  33.         LcdWriteCom(0x80+0x40);//第二行顯示
  34.         j=strlen(num2);
  35.         for(i=0; i<j; i++)
  36.         {
  37.                 LcdWriteData(num2[i]);       
  38.                 delay_ms(1);
  39.         }
  40.         LcdWriteCom(0x04);  //關閉寫一個指針加1
  41. }

  42. uint get_temp(uint temp)//計算溫度函數
  43. {
  44.         float tp;
  45.        
  46.         tp=temp;//因為數據處理有小數點所以將溫度賦給一個浮點型變量
  47.         //如果溫度是正的那么,那么正數的原碼就是補碼它本身
  48.         temp=tp*0.0625*100+0.5;       
  49.         //留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
  50.         //后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
  51.         //算加上0.5,還是在小數點后面。
  52.         return temp;
  53. }

  54. void display_real_tenp(uint temp)//實時溫度顯示函數
  55. {
  56.         uchar datas[] = {0, 0, 0, 0}; //定義數組

  57.         datas[0] = temp % 10000 / 1000;
  58.         datas[1] = temp % 1000 / 100;
  59.         datas[2] = temp % 100 / 10;
  60.         datas[3] = temp % 10;

  61.         LcdWriteCom(0x80+0x0a);                 //寫地址 80表示初始地址
  62.         LcdWriteData('0'+datas[0]); //十位

  63.         LcdWriteCom(0x80+0x0b);        //寫地址 80表示初始地址
  64.         LcdWriteData('0'+datas[1]); //個位

  65.         LcdWriteCom(0x80+0x0d);         //寫地址 80表示初始地址
  66.         LcdWriteData('0'+datas[2]); //顯示小數點  

  67.         LcdWriteCom(0x80+0x0e);                 //寫地址 80表示初始地址
  68.         LcdWriteData('0'+datas[3]); //顯示小數點  

  69. }

  70. void temp_control()//控制溫度上下限函數
  71. {
  72.         if(limit_choise==0)//選擇按鍵
  73.         {
  74.                 delay_ms(5);
  75.                 if(limit_choise==0)
  76.                 {
  77.                         while(!limit_choise);
  78.                         limit_choise_num++;
  79.                         if(limit_choise_num>=3)
  80.                         {
  81.                                 limit_choise_num=0;
  82.                         }
  83.                 }
  84.         }
  85.         if(limit_choise_num==0)//正常顯示
  86.         {
  87.                 LcdWriteCom(0x0c);//關閉光標
  88.                 display_real_tenp(get_temp(Ds18b20ReadTemp()));//顯示函數
  89.         }
  90.                        
  91.         if(limit_choise_num==1)//調節上限溫度
  92.         {
  93.                 LcdWriteCom(0x80+0X40+2);
  94.                 LcdWriteCom(0x0f);//開啟光標
  95.                 if(increase_temperature==0)//增加溫度
  96.                 {
  97.                         delay_ms(5);
  98.                         if(increase_temperature==0)
  99.                         {
  100.                                 while(!increase_temperature);
  101.                                 up_limit_temp++;
  102.                                 if(up_limit_temp>=100)
  103.                                 {
  104.                                         up_limit_temp=0;
  105.                                 }
  106.                                 //寫入新數據
  107.                                 LcdWriteCom(0x80+0X40+0x03);
  108.                                 LcdWriteData('0'+up_limit_temp/10);
  109.                                 LcdWriteCom(0x80+0X40+0x04);
  110.                                 LcdWriteData('0'+up_limit_temp%10);
  111.                                 LcdWriteCom(0x80+0X40+2);//光標回寫
  112.                         }
  113.                 }
  114.                 if(reduce_temperature==0)//減少溫度
  115.                 {
  116.                         delay_ms(5);
  117.                         if(reduce_temperature==0)
  118.                         {
  119.                                 while(!reduce_temperature);
  120.                                 up_limit_temp--;
  121.                                 if(up_limit_temp<0)
  122.                                 {
  123.                                         up_limit_temp=99;
  124.                                 }
  125.                                 //寫入新數據
  126.                                 LcdWriteCom(0x80+0X40+0x03);
  127.                                 LcdWriteData('0'+up_limit_temp/10);
  128.                                 LcdWriteCom(0x80+0X40+0x04);
  129.                                 LcdWriteData('0'+up_limit_temp%10);
  130.                                 LcdWriteCom(0x80+0X40+2);//光標回寫
  131.                         }
  132.                 }
  133.         }
  134.        
  135.         if(limit_choise_num==2)//調節下限溫度
  136.         {
  137.                 LcdWriteCom(0x80+0X40+12);
  138.                 LcdWriteCom(0x0f);//開啟光標
  139.                 if(increase_temperature==0)//增加溫度
  140.                 {
  141.                         delay_ms(5);
  142.                         if(increase_temperature==0)
  143.                         {
  144.                                 while(!increase_temperature);
  145.                                 down_limit_temp++;
  146.                                 if(down_limit_temp>=100)
  147.                                 {
  148.                                         down_limit_temp=0;
  149.                                 }
  150.                                 //寫入新數據
  151.                                 LcdWriteCom(0x80+0X40+0x0d);
  152.                                 LcdWriteData('0'+down_limit_temp/10);
  153.                                 LcdWriteCom(0x80+0X40+0x0e);
  154.                                 LcdWriteData('0'+down_limit_temp%10);
  155.                                 LcdWriteCom(0x80+0X40+12);//光標回寫
  156.                         }
  157.                 }
  158.                 if(reduce_temperature==0)//減少溫度
  159.                 {
  160.                         delay_ms(5);
  161.                         if(reduce_temperature==0)
  162.                         {
  163.                                 while(!reduce_temperature);
  164.                                 down_limit_temp--;
  165.                                 if(down_limit_temp<0)
  166.                                 {
  167.                                         down_limit_temp=99;
  168.                                 }
  169.                                 //寫入新數據
  170.                                 LcdWriteCom(0x80+0X40+0x0d);
  171.                                 LcdWriteData('0'+down_limit_temp/10);
  172.                                 LcdWriteCom(0x80+0X40+0x0e);
  173.                                 LcdWriteData('0'+down_limit_temp%10);
  174.                                 LcdWriteCom(0x80+0X40+12);//光標回寫
  175.                         }
  176.                 }
  177.         }       
  178. }

  179. void unnormal_proccessing(uint temp,uint up_temp,uint down_temp)//恒溫控制函數
  180. {
  181.         uchar datas[] = {0, 0, 0, 0}; //定義數組
  182.         uint temp1=0;

  183.         datas[0] = temp % 10000 / 1000;
  184.         datas[1] = temp % 1000 / 100;
  185.         datas[2] = temp % 100 / 10;
  186.         datas[3] = temp % 10;
  187.         temp1=datas[0]*1000+datas[1]*100+datas[2]*10+datas[3];//實際的溫度乘以100

  188.         if(temp1 < down_temp*100)//升溫函數
  189.         {
  190.                 heatting=0;//制熱
  191.                 refrigerating=1;//不制冷
  192.                
  193.                 unnormal=0;//不正常溫度指示燈顯示
  194.                 normal=1;//正常溫度指示燈不顯示
  195.                
  196.                 //蜂鳴器報警
  197.                 warning=0;
  198.                 delay_ms(10);
  199.                 warning=1;
  200.         }
  201.         else if(temp1 > up_temp*100)//降溫函數
  202.         {
  203.                 heatting=1;//不制熱
  204.                 refrigerating=0;//制冷
  205.                
  206.                 unnormal=0;//不正常溫度指示燈顯示
  207.                 normal=1;//正常溫度指示燈不顯示
  208.                
  209.                 //蜂鳴器報警
  210.                 warning=0;
  211.                 delay_ms(10);
  212.                 warning=1;
  213.         }
  214.         else//正常
  215.         {
  216.                 heatting=1;//不制熱
  217.                 refrigerating=1;//不制冷
  218.                
  219.                 unnormal=1;//不正常溫度指示燈不顯示
  220.                 normal=0;//正常溫度指示燈顯示
  221.                
  222.                 //蜂鳴器不報警
  223.                 warning=1;
  224.         }
  225. }




復制代碼

評分

參與人數 2黑幣 +13 收起 理由
天籟游子 + 10 很給力!
15119714985 + 3 很給力!

查看全部評分

回復

使用道具 舉報

ID:104763 發表于 2016-3-4 12:30 | 顯示全部樓層
樓主威武,學習了
回復

使用道具 舉報

ID:89217 發表于 2016-3-4 12:55 | 顯示全部樓層
謝謝分享。
回復

使用道具 舉報

ID:114742 發表于 2016-5-7 21:09 | 顯示全部樓層
少函數呀
回復

使用道具 舉報

ID:10075 發表于 2016-7-6 09:17 | 顯示全部樓層
樓主威武,學習了
回復

使用道具 舉報

ID:137247 發表于 2016-9-7 11:18 | 顯示全部樓層
不是很理解,不需要封閉嗎,我想要做一個恒溫箱,用制冷模塊和加熱模塊
回復

使用道具 舉報

ID:70785 發表于 2016-9-11 07:47 | 顯示全部樓層
學習了……
回復

使用道具 舉報

ID:151343 發表于 2016-11-30 22:40 | 顯示全部樓層
DS18B20測溫
回復

使用道具 舉報

ID:185484 發表于 2017-4-1 23:06 | 顯示全部樓層
可以啊謝謝樓主
回復

使用道具 舉報

ID:104838 發表于 2017-4-2 07:41 | 顯示全部樓層
很 好很需要,,51需要你
回復

使用道具 舉報

ID:186203 發表于 2017-4-5 10:31 | 顯示全部樓層
51黑tt 發表于 2016-3-4 00:02
很棒的制作。值得收藏以后有時間做一個.
下面是樓主的電路圖和主程序:

剛想怎么下載呢,你都貼出來了。贊一個
回復

使用道具 舉報

ID:186130 發表于 2017-4-5 11:49 | 顯示全部樓層
51黑tt 發表于 2016-3-4 00:02
很棒的制作。值得收藏以后有時間做一個.
下面是樓主的電路圖和主程序:

請問這是不是用PROTEL軟件畫的啊,用PROTUSE能畫嗎?
回復

使用道具 舉報

ID:186341 發表于 2017-4-5 16:18 | 顯示全部樓層
多謝分享~學習一下!
回復

使用道具 舉報

ID:186341 發表于 2017-4-5 16:19 | 顯示全部樓層
樓主威武~!!!
回復

使用道具 舉報

ID:1 發表于 2017-4-5 16:57 | 顯示全部樓層
weichen 發表于 2017-4-5 11:49
請問這是不是用PROTEL軟件畫的啊,用PROTUSE能畫嗎?
0.png
我剛看了 這個原理圖是用ad畫的 里面有ad的工程文件
回復

使用道具 舉報

ID:186130 發表于 2017-4-6 10:07 | 顯示全部樓層
admin 發表于 2017-4-5 16:57
我剛看了 這個原理圖是用ad畫的 里面有ad的工程文件

這樣啊,謝謝!
回復

使用道具 舉報

ID:186203 發表于 2017-4-10 11:26 | 顯示全部樓層
問什么感覺程序上的端口和原理圖上的端口對不上號么。有做出來的嗎?原理圖給看一下。謝謝了、、、
回復

使用道具 舉報

ID:161033 發表于 2017-4-10 21:12 | 顯示全部樓層
感謝分享,,,
回復

使用道具 舉報

ID:187129 發表于 2017-4-12 10:18 來自手機 | 顯示全部樓層
原理圖是用AD畫的
回復

使用道具 舉報

ID:187129 發表于 2017-4-12 10:19 來自手機 | 顯示全部樓層
weichen 發表于 2017-4-5 11:49
請問這是不是用PROTEL軟件畫的啊,用PROTUSE能畫嗎?

可以,這里是用AD畫的,proteus一樣可以
回復

使用道具 舉報

ID:185854 發表于 2017-4-12 20:25 | 顯示全部樓層
希望全寄托在你身上了!試一試
回復

使用道具 舉報

ID:185854 發表于 2017-4-12 22:18 | 顯示全部樓層
沒有仿真圖呢?只有原理圖沒有完整的工程文件沒什么用啊,PCB圖和元件封裝呢
回復

使用道具 舉報

ID:185854 發表于 2017-4-13 22:05 | 顯示全部樓層
誰有完整的工程文件分享給我,有現金酬謝
回復

使用道具 舉報

ID:189466 發表于 2017-4-14 11:58 | 顯示全部樓層
多謝分享~學習一下!
回復

使用道具 舉報

ID:189466 發表于 2017-4-14 11:59 | 顯示全部樓層
曉天狼星10 發表于 2017-4-13 22:05
誰有完整的工程文件分享給我,有現金酬謝

如何聯系!
回復

使用道具 舉報

ID:185854 發表于 2017-4-15 22:18 | 顯示全部樓層

QQ 1337935880
回復

使用道具 舉報

ID:185854 發表于 2017-4-15 22:20 | 顯示全部樓層

要全部的AD工程文件,包括原理圖,PCB圖,以及元器件封裝
回復

使用道具 舉報

ID:200048 發表于 2017-5-12 19:21 | 顯示全部樓層
大拿就出來吧,看樓上說的多真誠,助人為樂,希望繼續發揚。我也是初級水平,希望曉天狼星10也自力更生,自己多努力,才是硬道理,你有那么多黑必,多下載一些例子。看明白,適當改一下就行了。
回復

使用道具 舉報

ID:102702 發表于 2017-5-13 00:48 | 顯示全部樓層
做得不錯,我也想做一個,可以參考一下樓主做法
回復

使用道具 舉報

ID:102702 發表于 2017-5-16 22:47 | 顯示全部樓層
你好,請問一下樓主你那電路圖是不是有些地方沒標好呀
這里J1是接哪里的?
3.1.PNG


下面兩個R2接哪里的?另外兩個8550都是要接上P0^8引腳嗎?
2.1.PNG


這三個按鈕接哪個引腳的?
1.PNG




我看了一下你的說明文件怎么和程序、電路有出入的?

LCD 2.PNG



程序里定義的引腳和說明文件不一樣呀?說明文件和你電路應該是對應上的,但程序的PIN口定義不一樣呀!哪個是對的?
LCD 1.PNG



回復

使用道具 舉報

ID:202745 發表于 2017-5-20 06:07 | 顯示全部樓層
raymondau 發表于 2017-5-16 22:47
你好,請問一下樓主你那電路圖是不是有些地方沒標好呀
這里J1是接哪里的?

貼出來的程序,少函數,用不了。
回復

使用道具 舉報

ID:230054 發表于 2017-8-30 14:51 | 顯示全部樓層
能用嗎
回復

使用道具 舉報

ID:82765 發表于 2017-8-30 17:01 | 顯示全部樓層

你好!如果不能用,也是可以修改的
回復

使用道具 舉報

ID:230177 發表于 2017-9-1 12:59 | 顯示全部樓層
很好 很有收獲
回復

使用道具 舉報

ID:253272 發表于 2017-12-13 00:41 | 顯示全部樓層
  內容我看不懂,但把洞洞板搞到那模樣,實在是不得了。
回復

使用道具 舉報

ID:267794 發表于 2017-12-27 15:54 | 顯示全部樓層
謝謝分享。
回復

使用道具 舉報

ID:266106 發表于 2017-12-27 16:24 | 顯示全部樓層
不錯的創意,學習了
回復

使用道具 舉報

ID:287655 發表于 2018-3-19 10:42 | 顯示全部樓層
這個太棒了!對于學習價值高啊
回復

使用道具 舉報

ID:294022 發表于 2018-3-19 15:03 | 顯示全部樓層
做得不錯,我也想做一個,可以參考一下樓主做法
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲福利在线观看 | 日本中文字幕日韩精品免费 | 欧美一a一片一级一片 | 亚洲精品中文字幕在线观看 | caoporn免费在线视频 | 色久伊人 | 亚洲乱码国产乱码精品精98午夜 | 中文字幕av亚洲精品一部二部 | 日韩电影免费在线观看中文字幕 | 欧美日韩国产精品激情在线播放 | 欧美多人在线 | 激情欧美日韩一区二区 | 欧美在线观看一区 | 99久久久久久久 | 午夜免费观看网站 | 国产ts一区 | 日日干日日操 | 欧美成人一区二免费视频软件 | 日韩中文字幕在线观看 | 中文字幕成人在线 | 久草新在线 | 中文字幕视频在线观看 | 精品一区在线免费观看 | 亚洲日韩中文字幕一区 | 午夜影院| 亚洲色图综合 | 黄色国产在线视频 | 久久国产精品免费 | 亚洲日本乱码在线观看 | 久久久久亚洲精品 | wwwxxx国产| 欧美a级成人淫片免费看 | 91精品国产91久久久久久最新 | 免费看国产片在线观看 | 视频二区 | 一区二区三区不卡视频 | 97caoporn国产免费人人 | 99精品国自产在线 | 亚洲欧美成人在线 | 一区精品视频在线观看 | 亚洲成人精品 |