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

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

QQ登錄

只需一步,快速開始

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

51單片機(jī)高壓開關(guān)柜溫度測(cè)控系統(tǒng)DS18B20

[復(fù)制鏈接]
ID:720305 發(fā)表于 2021-1-21 15:23 | 顯示全部樓層 |閱讀模式
51hei.png 51hei.png

*2021年1月15日10:19:01*/

  1. #include<reg51.h>
  2. #include"lcd.h"
  3. #include"temp.h"
  4. #include"general.h"
  5. #include"ds1302.h"

  6. /*******************************************************************************
  7. * 函數(shù)名         : main
  8. * 函數(shù)功能                   :進(jìn)入目標(biāo)溫度和報(bào)警溫度設(shè)置頁面后,需要返回溫度顯示頁面,必須先返回萬年歷頁面,此時(shí)再按溫度顯示鍵,方可進(jìn)入溫度顯示頁面
  9. * 輸入           : 無
  10. * 輸出                  : 無
  11. *******************************************************************************/
  12. //全局函數(shù)
  13. void LcdDisplay(int);
  14. void DS1302_LcdDisplay();
  15. void RES();//結(jié)果運(yùn)算函數(shù)
  16. void aim();
  17. void alarm();
  18. void change_temp();


  19. //--定義全局變量
  20. typedef unsigned int u16;
  21. unsigned char Runmodel = Calendar;
  22. unsigned char Temp[] = "Temperature";                           //溫度
  23. unsigned char Date[] = "calendar";                        //萬年歷
  24. unsigned char  Aim_tp[] = "AIM_TEMP";
  25. unsigned char Alarm_tp[] = "Alarm_tp";
  26. unsigned char Aim_temp = 27;                //目標(biāo)溫度初始值
  27. unsigned char Alarm_temp = 95;   //報(bào)警溫度初始值
  28. unsigned char Aim_h,Aim_l,Alarm_h,Alarm_l,Alarm_mh;
  29. int Now_temp;

  30. //IO口設(shè)定
  31. #define GPIO_KEY P1
  32. sbit K1 = P2^0;        //選擇按鍵1,進(jìn)入萬年歷模式
  33. sbit K2 = P2^1;        //選擇按鍵2,進(jìn)入溫度測(cè)量模式
  34. sbit K3 = P2^2; //選擇按鍵3,進(jìn)行目標(biāo)溫度和最高溫度警報(bào)設(shè)置
  35. sbit K4 = P1^0;        //自加按鍵
  36. sbit K5 = P1^1;        //自減按鍵
  37. sbit led = P2^3;
  38. sbit beep=P1^5;  //蜂鳴器響應(yīng)
  39. sbit reset = P3^2; //復(fù)位按鍵
  40. void delay(u16 i)
  41. {
  42.      while(i--);      
  43. }
  44.         
  45. void main()
  46. {
  47.         unsigned char i = 0;
  48.         Isrint();
  49.         LcdInit();                         //初始化LCD1602
  50.         while(1)
  51.         {
  52.                 Runmodel = Run_Model();
  53.                 if(K3 == PutDown)
  54.                 {
  55.                         Delay10ms(1);
  56.                         if(K3 == PutDown)
  57.                         {
  58.                                 LcdWriteCom(0x01);
  59.                                 LcdWriteCom(0x83);
  60.                                 for(i = 0;i<8;i++)
  61.                                 LcdWriteData(Aim_tp[i]);                        //第一次按下K3進(jìn)行目標(biāo)溫度設(shè)定
  62.                                 LcdWriteCom(0xc5);
  63.                                 aim();
  64.                                 LcdWriteData(Aim_h);
  65.                                 LcdWriteData(Aim_l);
  66.                                 LcdWriteData(0xdf);
  67.                                 LcdWriteData('C');
  68.                                 while(1)
  69.                                 {
  70.                                         Delay10ms(10);                                 //這里必須加個(gè)延遲,不然溫度會(huì)一下子加三下
  71.                                         if(K4 == PutDown)                        //設(shè)置目標(biāo)溫度進(jìn)行自加
  72.                                         {
  73.                                                 Delay10ms(2);
  74.                                                 if(K4 == PutDown)
  75.                                                 {        
  76.                                                         Aim_temp++;                   //設(shè)置目標(biāo)溫度進(jìn)行自加
  77.                                                         aim();
  78.                                                         LcdWriteCom(0xc5);
  79.                                                         LcdWriteData(Aim_h);
  80.                                                         LcdWriteData(Aim_l);
  81.                                                         LcdWriteData(0xdf);
  82.                                                         LcdWriteData('C');
  83.                                                 }
  84.                                         }
  85.                                        
  86.                                         if(K5 == PutDown)                  //設(shè)置目標(biāo)溫度進(jìn)行自減
  87.                                         {
  88.                                                 Delay10ms(1);
  89.                                                 if(K5 == PutDown)
  90.                                                 {
  91.                                                         Aim_temp--;
  92.                                                         aim();
  93.                                                         LcdWriteCom(0xc5);
  94.                                                         LcdWriteData(Aim_h);
  95.                                                         LcdWriteData(Aim_l);
  96.                                                 }
  97.                                         }
  98.                                        
  99.                                         if(K3 == PutDown)
  100.                                         {
  101.                                                 Delay10ms(1);
  102.                                                 if(K3 == PutDown)
  103.                                                 {
  104.                                                         LcdWriteCom(0x01); //清屏,進(jìn)入下一個(gè)警報(bào)溫度設(shè)置頁面
  105.                                                         LcdWriteCom(0x83);
  106.                                                         for(i = 0;i<8;i++)
  107.                                                         LcdWriteData(Alarm_tp[i]);
  108.                                                         LcdWriteCom(0xc5);
  109.                                                         alarm();
  110.                                                         LcdWriteData(Alarm_mh);
  111.                                                         LcdWriteData(Alarm_h);
  112.                                                 LcdWriteData(Alarm_l);
  113.                                                         LcdWriteData(0xdf);
  114.                                                         LcdWriteData('C');
  115.                                                         while(1)
  116.                                                         {
  117.                                                                 Delay10ms(10);
  118.                                                                 if(K4 == PutDown)
  119.                                                                 {
  120.                                                                         Delay10ms(1);
  121.                                                                         if(K4 == PutDown)
  122.                                                                         {
  123.                                                                                 Alarm_temp++;
  124.                                                                                 alarm();
  125.                                                                                 LcdWriteCom(0xc5);
  126.                                                                                 LcdWriteData(Alarm_mh);
  127.                                                                                 LcdWriteData(Alarm_h);
  128.                                                                         LcdWriteData(Alarm_l);
  129.                                                                                 LcdWriteData(0xdf);
  130.                                                                     LcdWriteData('C');
  131.                                                                         }
  132.                                                                 }
  133.                                                 
  134.                                                                 if(K5 == PutDown)
  135.                                                                 {
  136.                                                                         Delay10ms(1);
  137.                                                                         if(K5 == PutDown)
  138.                                                                         {
  139.                                                                                 Alarm_temp--;
  140.                                                                                 alarm();
  141.                                                                                 LcdWriteCom(0xc5);
  142.                                                                                 LcdWriteData(Alarm_mh);
  143.                                                                                 LcdWriteData(Alarm_h);
  144.                                                                         LcdWriteData(Alarm_l);
  145.                                                                                 LcdWriteData(0xdf);
  146.                                                                     LcdWriteData('C');
  147.                                                                         }
  148.                                                                 }

  149.                                                                 if(K1 == PutDown)
  150.                                                                 {
  151.                                                                         Delay10ms(1);
  152.                                                                         if(K1 == PutDown)
  153.                                                                         {
  154.                                                                                 Runmodel = Calendar;
  155.                                                                                 break;
  156.                                                                         }        
  157.                                                                 }
  158.                                                         }
  159.                                                 }
  160.                                         }
  161.                                         if(K1 == PutDown)
  162.                                         {
  163.                                                 Delay10ms(1);
  164.                                                 if(K1 == PutDown)
  165.                                                 {
  166.                                                         Runmodel = Calendar;
  167.                                                         break;
  168.                                                 }        
  169.                                         }           
  170.                                 }
  171.                         }
  172.                 }

  173.                 if(Runmodel == Calendar)                                        //萬年歷模式
  174.                 {
  175.                         LcdWriteCom(0x01);
  176.                         LcdWriteCom(0x83);
  177.                         for(i=0; i<8;i++)
  178.                         LcdWriteData(Date[i]);
  179.                         Ds1302Init();
  180.                         LcdWriteCom(0x01);
  181.                         while(1)
  182.                         {
  183.                           Ds1302ReadTime();
  184.                   DS1302_LcdDisplay();
  185.                           Runmodel = Run_Model();
  186.                           if(Runmodel == Temp_test|| K3 == PutDown)
  187.                           break;
  188.                         }
  189.                 }
  190.         
  191.             if(Runmodel == Temp_test)                //溫度測(cè)試模式
  192.                 {
  193.                         LcdWriteCom(0x01);
  194.                         LcdWriteCom(0x83);        
  195.                         for(i=0; i<11;i++)
  196.                         LcdWriteData(Temp[i]);
  197.                         LcdWriteCom(0xca);
  198.                         LcdWriteData(0xdf);
  199.                         LcdWriteData('C');                                                 //攝氏度
  200.                         while(1)
  201.                         {
  202.                           LcdDisplay(Ds18b20ReadTemp());
  203.         //                Delay1ms(1000);//1s鐘刷一次
  204.                   Now_temp = Ds18b20ReadTemp();
  205.                           change_temp();
  206.                           if(Now_temp< Aim_temp)                                          //如果目前溫度低于目標(biāo)溫度,那么將開啟加熱模式
  207.                           {
  208.                                 EA = 1;
  209.                           }
  210.                           if( Now_temp> Aim_temp)                         //如果目前溫度高于目標(biāo)溫度,那么將關(guān)閉加熱模式
  211.                           {
  212.                                   led =1;
  213.                                 EA = 0;
  214.                           }
  215.                           if(Now_temp >= Alarm_temp)
  216.                       {
  217.                                 while(1)
  218.                                 {
  219.                                          beep=~beep;
  220.                                      delay(10);
  221.                                          if(Now_temp < Alarm_temp)
  222.                                           break;
  223.                                 }
  224.                           }
  225.                           if(K1 == PutDown)
  226.                           {
  227.                                         Delay10ms(1);
  228.                                         if(K1 == PutDown)
  229.                                         {
  230.                                                 Runmodel = Calendar;
  231.                                                 LcdWriteCom(0x01);  //清屏,這里不能用初始化!
  232.                                                 break;
  233.                                         }
  234.                                        
  235.                                                             
  236.                                 }
  237.                           if(K3 == PutDown)
  238.                           {
  239.                                         Delay10ms(1);
  240.                                         if(K3 == PutDown)
  241.                                         {
  242.                                                 break;
  243.                                         }        
  244.                           }        
  245.                           
  246.                         }
  247.                 }

  248.                
  249.   }
  250. }

  251. /*******************************************************************************
  252. * 函數(shù)名         : LcdDisplay()
  253. * 函數(shù)功能                   : LCD顯示讀取到的溫度
  254. * 輸入           : v
  255. * 輸出                  : 無
  256. *******************************************************************************/

  257. void LcdDisplay(int temp)          //lcd顯示
  258. {

  259.           unsigned char datas[] = {0, 0, 0, 0, 0}; //定義數(shù)組
  260.           float tp;  
  261.           if(temp< 0)                                //當(dāng)溫度值為負(fù)數(shù)
  262.           {
  263.                   LcdWriteCom(0xc3);                //寫地址 80表示初始地址
  264.             LcdWriteData('-');                  //顯示負(fù)
  265.                 //因?yàn)樽x取的溫度是實(shí)際溫度的補(bǔ)碼,所以減1,再取反求出原碼
  266.                 temp=temp-1;
  267.                 temp=~temp;
  268.                 tp=temp;
  269.                 temp=tp*0.0625*100+0.5;        
  270.                 //留兩個(gè)小數(shù)點(diǎn)就*100,+0.5是四舍五入,因?yàn)镃語言浮點(diǎn)數(shù)轉(zhuǎn)換為整型的時(shí)候把小數(shù)點(diǎn)
  271.                 //后面的數(shù)自動(dòng)去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進(jìn)1了,小于0.5的就
  272.                 //算由?.5,還是在小數(shù)點(diǎn)后面。

  273.           }
  274.           else
  275.           {                        
  276.                   LcdWriteCom(0xc3);                //寫地址 80表示初始地址
  277.             LcdWriteData('+');                 //顯示正
  278.                 tp=temp;//因?yàn)閿?shù)據(jù)處理有小數(shù)點(diǎn)所以將溫度賦給一個(gè)浮點(diǎn)型變量
  279.                 //如果溫度是正的那么,那么正數(shù)的原碼就是補(bǔ)碼它本身
  280.                 temp=tp*0.0625*100+0.5;        
  281.                 //留兩個(gè)小數(shù)點(diǎn)就*100,+0.5是四舍五入,因?yàn)镃語言浮點(diǎn)數(shù)轉(zhuǎn)換為整型的時(shí)候把小數(shù)點(diǎn)
  282.                 //后面的數(shù)自動(dòng)去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進(jìn)1了,小于0.5的就
  283.                 //算加上0.5,還是在小數(shù)點(diǎn)后面。
  284.         }
  285.         datas[0] = temp / 10000;
  286.         datas[1] = temp % 10000 / 1000;
  287.         datas[2] = temp % 1000 / 100;
  288.         datas[3] = temp % 100 / 10;
  289.         datas[4] = temp % 10;

  290.         LcdWriteCom(0xc4);                  //寫地址 80表示初始地址
  291.         LcdWriteData('0'+datas[0]); //百位

  292.         
  293.         LcdWriteCom(0xc5);                 //寫地址 80表示初始地址
  294.         LcdWriteData('0'+datas[1]); //十位

  295.         LcdWriteCom(0xc6);                //寫地址 80表示初始地址
  296.         LcdWriteData('0'+datas[2]); //個(gè)位

  297.         LcdWriteCom(0xc7);                //寫地址 80表示初始地址
  298.         LcdWriteData('.');                 //顯示 ‘.’

  299.         LcdWriteCom(0xc8);                 //寫地址 80表示初始地址
  300.         LcdWriteData('0'+datas[3]); //顯示小數(shù)點(diǎn)  

  301.         LcdWriteCom(0xc9);                 //寫地址 80表示初始地址
  302.         LcdWriteData('0'+datas[4]); //顯示小數(shù)點(diǎn)  
  303. }

  304. void DS1302_LcdDisplay()
  305. {
  306.         LcdWriteCom(0x80+0X40);
  307.         LcdWriteData('0'+TIME[2]/16);                                //時(shí)
  308.         LcdWriteData('0'+(TIME[2]&0x0f));                                 
  309.         LcdWriteData(':');
  310.         LcdWriteData('0'+TIME[1]/16);                                //分
  311.         LcdWriteData('0'+(TIME[1]&0x0f));        
  312.         LcdWriteData(':');
  313.         LcdWriteData('0'+TIME[0]/16);                                //秒
  314.         LcdWriteData('0'+(TIME[0]&0x0f));

  315.         LcdWriteCom(0x80);
  316.         LcdWriteData('2');
  317.         LcdWriteData('0');
  318.         LcdWriteData('0'+TIME[6]/16);                        //年
  319.         LcdWriteData('0'+(TIME[6]&0x0f));
  320.         LcdWriteData('-');
  321.         LcdWriteData('0'+TIME[4]/16);                        //月
  322.         LcdWriteData('0'+(TIME[4]&0x0f));
  323.         LcdWriteData('-');
  324.         LcdWriteData('0'+TIME[3]/16);                        //日
  325.         LcdWriteData('0'+(TIME[3]&0x0f));
  326.         LcdWriteCom(0x8D);
  327.         LcdWriteData('0'+(TIME[5]&0x07));        //星期                        
  328. }

  329. void aim()
  330. {
  331.     Aim_h = (Aim_temp)/10 + '0';           //必選加個(gè)'0',不然沒用
  332.     Aim_l = Aim_temp%10 + '0';
  333. }

  334. void alarm()
  335. {
  336.         Alarm_mh = Alarm_temp/100 + '0';
  337.         Alarm_h = (Alarm_temp%100)/10 + '0';           //必選加個(gè)'0',不然沒用
  338.     Alarm_l = Alarm_temp%10 + '0';
  339. }

  340. void change_temp()                                                          //必要的轉(zhuǎn)換,將返回的tp進(jìn)行轉(zhuǎn)化
  341. {
  342.         Now_temp = Now_temp*0.0625*100+0.5;
  343.         Now_temp = (Now_temp/10000)*100+(Now_temp%10000/1000)*10+(Now_temp%1000/100);
  344. }
復(fù)制代碼

全部資料51hei下載地址:
高壓開關(guān)柜溫度測(cè)控系統(tǒng).zip (741.97 KB, 下載次數(shù): 36)

回復(fù)

使用道具 舉報(bào)

ID:848824 發(fā)表于 2021-1-24 11:02 | 顯示全部樓層
萬年歷怎么調(diào)
回復(fù)

使用道具 舉報(bào)

ID:720305 發(fā)表于 2021-1-25 09:32 | 顯示全部樓層

運(yùn)行后會(huì)在左邊彈出來
回復(fù)

使用道具 舉報(bào)

ID:896421 發(fā)表于 2021-4-19 13:25 來自觸屏版 | 顯示全部樓層
為啥我的程序錯(cuò)誤
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 午夜成人免费视频 | 97伦理电影网 | 91九色porny首页最多播放 | 国产视频2021 | 亚洲黄色成人网 | 国产一区 | 欧美久久一区二区 | 超级黄色一级片 | 激情欧美日韩一区二区 | 国产精品久久久久久久久久久久 | 三级国产三级在线 | 欧美日韩三级 | 午夜影院在线观看 | 国产三级大片 | 成人一级片在线观看 | www.国产91| 欧美在线国产精品 | 成年人免费看 | 亚洲精品一区二区三区蜜桃久 | 亚洲a网 | 国产羞羞视频在线观看 | 国产精品高潮呻吟久久久久 | 天天操 天天操 | 波多野结衣二区 | 国产成人av电影 | 成人av一区 | 亚洲高清av在线 | 中文日韩在线视频 | 国内激情av片 | 欧美一级二级在线观看 | 亚洲国产成人精品女人久久久 | 中文在线一区二区 | 日韩视频在线播放 | 精品国产乱码久久久久久蜜柚 | 久久激情五月丁香伊人 | 日韩中文字幕免费 | 九九久久国产 | 亚洲美女在线一区 | 中文字幕国产视频 | 国产成人精品免高潮在线观看 | 一区二区三区在线 |