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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的恒溫控制系統電路與程序源碼設計資料

  [復制鏈接]
跳轉到指定樓層
樓主
基于stc89c52恒溫控制系統電路原理圖如下:


引腳分配    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    //低溫指示燈   

單片機源程序如下:
  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.        
  22.         //LCD初始化顯示
  23.         LcdWriteCom(0x80);//第一行顯示
  24.         j=strlen(num1);
  25.         for(i=0; i<j; i++)
  26.         {
  27.                 LcdWriteData(num1[i]);       
  28.                 delay_ms(1);
  29.         }
  30.         LcdWriteCom(0x80+0x40);//第二行顯示
  31.         j=strlen(num2);
  32.         for(i=0; i<j; i++)
  33.         {
  34.                 LcdWriteData(num2[i]);       
  35.                 delay_ms(1);
  36.         }
  37.         LcdWriteCom(0x04);  //關閉寫一個指針加1
  38. }

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

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

  54.         datas[0] = temp % 10000 / 1000;
  55.         datas[1] = temp % 1000 / 100;
  56.         datas[2] = temp % 100 / 10;
  57.         datas[3] = temp % 10;

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

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

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

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

  66. }

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

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

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

  185.         if(temp1 < down_temp*100)//升溫函數
  186.         {
  187.                 heatting=0;//制熱       
  188.                 warning=0;
  189.                 delay_ms(10);
  190.                 warning=1;
  191.         }
  192.         else//正常
  193.         {
  194.                 heatting=1;//不制熱
  195.                

  196. ……………………

  197. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


所有資料51hei提供下載:
恒溫箱.rar (175.84 KB, 下載次數: 86)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:310363 發表于 2018-4-26 22:02 | 只看該作者
好帖子,值得學習。。。
回復

使用道具 舉報

板凳
ID:318451 發表于 2018-4-28 15:05 | 只看該作者
有實際應用意義的好帖。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一二三区精品 | 久久久国产一区 | 国产精品成人一区二区三区夜夜夜 | 国产精品夜间视频香蕉 | 国内精品久久精品 | jlzzxxxx18hd护士 | 久久久成 | 天堂一区二区三区 | 欧美日韩成人影院 | 国产做a爱免费视频 | 一级一级毛片免费看 | 久热精品视频 | 婷婷久久网 | 欧美在线一区二区三区 | 亚洲aⅴ精品 | 久色激情| 日韩免费在线视频 | 亚洲国产成人av好男人在线观看 | 国产激情视频在线免费观看 | 精品粉嫩aⅴ一区二区三区四区 | 日韩一区二区三区视频 | 久久99精品久久久久久国产越南 | 亚洲精品视频免费观看 | 操久久久 | 91高清在线观看 | 成人毛片视频免费 | 久久网一区二区三区 | 成人福利片 | 国产一二区视频 | 鸳鸯谱在线观看高清 | 一区二区精品 | www.干| 一本色道久久综合亚洲精品高清 | 国产精品久久久久久久久久久久冷 | 日韩在线第一 | 先锋av资源网 | 亚欧午夜| 国产一级片av | 国产成人精品一区二区三区在线观看 | 69热视频在线观看 | 欧美电影免费观看 |