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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機DS18B20溫度上下限控制原理圖和源程序

[復制鏈接]
跳轉到指定樓層
樓主
這是DS18B20溫度上下限控制的原理圖和源程序

原理圖:

單片機源程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #include <DS18B20.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #define SMGIO P0

  7. sbit SET=P1^0;                   //定義設定上下限鍵
  8. sbit ADD=P1^1;                   //定義增加鍵
  9. sbit DEC=P1^2;                   //定義減小限鍵           
  10. sbit SMG1=P2^0;                   //定義數碼管第一位
  11. sbit SMG2=P2^1;                   //定義數碼管第二位
  12. sbit SMG3=P2^2;                   //定義數碼管第三位
  13. sbit SMG4=P2^3;                   //定義數碼管第四位
  14. sbit BEEP=P2^5;                   //定義蜂鳴器報警
  15. uint tempValue;                   //變量 存儲當前溫度值
  16. uint HI_Alarm=30;           //初始上限
  17. uint LO_Alarm=10;           //初始下限
  18. uchar SMG_CC[]={0x5f,0x44,0x9d,0xd5,0xc6,0xd3,0xdb,0x45,0xdf,0xd7};                  //共陰極數碼管0-9編碼
  19. uchar SMG_CC_DOT[]={0x7f,0x64,0xbd,0xf5,0xe6,0xf3,0xfb,0x65,0xff,0xf7};          //共陰極數碼管0-9編碼 帶小數點
  20. /********************************************************************/
  21. /*                                                1ms延時                                                                                */
  22. /********************************************************************/
  23. void delayms(uint x)
  24. {
  25. uchar i;
  26. while(x--)
  27. {
  28.   for(i=150;i>0;i--);
  29. }
  30. }

  31. void Display_Temperature()                   //顯示溫度
  32. {
  33.         char smg1,smg2,smg3,smg4;
  34.         smg1=tempValue/1000;                         //以下表示將溫度值拆分開
  35.         smg2=(tempValue-smg1*1000)/100;
  36.         smg3=(tempValue%100)/10;
  37.         smg4=tempValue%10;
  38.         if(tflag==1)                                         //負數顯示
  39.                 {
  40.                         SMGIO=SMG_CC[smg4];                //顯示小數位
  41.                         SMG4=0;
  42.                         delayms(1);
  43.                         SMG4=1;
  44.                         SMGIO=SMG_CC_DOT[smg3];         //顯示個數位
  45.                         SMG3=0;
  46.                         delayms(1);
  47.                         SMG3=1;
  48.                         if(smg2==0)
  49.                         {
  50.                                 SMGIO=0x40;                         //顯示十數位
  51.                                 SMG2=0;
  52.                                 delayms(1);
  53.                                 SMG2=1;
  54.                                 SMGIO=0x00;                         //顯示百數位
  55.                                 SMG1=0;
  56.                                 delayms(1);
  57.                                 SMG1=1;
  58.                         }
  59.                         else
  60.                         {
  61.                                 SMGIO=SMG_CC[smg2];         //顯示十數位
  62.                                 SMG2=0;
  63.                                 delayms(1);
  64.                                 SMG2=1;
  65.                                 SMGIO=0x40;                         //顯示十數位
  66.                                 SMG1=0;
  67.                                 delayms(1);
  68.                                 SMG1=1;                                       
  69.                         }
  70.                 }
  71.         else                                //正數顯示
  72.                 {
  73.                         SMGIO=SMG_CC[smg4];         //顯示小數位
  74.                         SMG4=0;
  75.                         delayms(1);
  76.                         SMG4=1;
  77.                         SMGIO=SMG_CC_DOT[smg3];         //顯示個數位
  78.                         SMG3=0;
  79.                         delayms(1);
  80.                         SMG3=1;
  81.                         if(smg1==0)                                 
  82.                         {
  83.                                 SMGIO=0x00;         
  84.                                 SMG1=0;
  85.                                 delayms(1);
  86.                                 SMG1=1;
  87.                                 if(smg2==0)
  88.                                 {
  89.                                         SMGIO=0x00;         
  90.                                         SMG1=0;
  91.                                         delayms(1);
  92.                                         SMG1=1;         
  93.                                 }
  94.                                 else
  95.                                 {
  96.                                         SMGIO=SMG_CC[smg2];         
  97.                                         SMG2=0;
  98.                                         delayms(1);
  99.                                         SMG2=1;               
  100.                                 }
  101.                         }
  102.                         else
  103.                         {
  104.                                 SMGIO=SMG_CC[smg1];
  105.                                 SMG1=0;
  106.                                 delayms(1);
  107.                                 SMG1=1;
  108.                                 SMGIO=SMG_CC[smg2];
  109.                                 SMG2=0;
  110.                                 delayms(1);
  111.                                 SMG2=1;
  112.                         }
  113.                         
  114.                 }
  115. }
  116. void Display_HI_Alarm()
  117. {
  118.         SMGIO=0xce;                //顯示H
  119.         SMG1=0;
  120.         delayms(1);
  121.         SMG1=1;
  122.         SMGIO=0x80;                //顯示-
  123.         SMG2=0;
  124.         delayms(1);
  125.         SMG2=1;

  126.         SMGIO=SMG_CC[HI_Alarm/10];        //顯示報警高值十位
  127.         SMG3=0;
  128.         delayms(1);
  129.         SMG3=1;
  130.         SMGIO=SMG_CC[HI_Alarm%10];        //顯示報警高值個數位
  131.         SMG4=0;
  132.         delayms(1);
  133.         SMG4=1;        
  134. }
  135. void Display_LO_Alarm()
  136. {
  137.         SMGIO=0x1a;                //顯示L
  138.         SMG1=0;
  139.         delayms(1);
  140.         SMG1=1;
  141.         SMGIO=0x80;                //顯示-
  142.         SMG2=0;
  143.         delayms(1);
  144.         SMG2=1;

  145.         SMGIO=SMG_CC[LO_Alarm/10];        //顯示報警高值十位
  146.         SMG3=0;
  147.         delayms(1);
  148.         SMG3=1;
  149.         SMGIO=SMG_CC[LO_Alarm%10];        //顯示報警高值個數位
  150.         SMG4=0;
  151.         delayms(1);
  152.         SMG4=1;        
  153. }
  154. void SET_KEY()
  155. {          bit SET_FLAG=1;
  156.         if(SET==0)                                         //設定按鍵按下
  157.                 {
  158.                 delayms(40);
  159.                 if(SET==1)                                 //延時去除抖動再次判斷是否按下按鍵
  160.                  {
  161.                         while(SET_FLAG==1)
  162.                         {
  163.                                 Display_HI_Alarm();           //設定上限溫度值
  164.                                 if(ADD==0)                                //增加按鍵
  165.                                         {
  166.                                                 delayms(40);          //延時去除抖動再次判斷是否按下按鍵
  167.                                                 if(ADD==1)
  168.                                                         HI_Alarm++;         //溫度值加一
  169.                                         }
  170.                                 if(DEC==0)                                  //減小按鍵
  171.                                         {
  172.                                                 delayms(40);
  173.                                                 if(DEC==1)                   //延時去除抖動再次判斷是否按下按鍵
  174.                                                         HI_Alarm--;           //溫度值減一
  175.                                         }
  176.                                 if(SET==0)                                 //以下表示 再次按下設定按鍵 進入設定下限程序        
  177.                                         {
  178.                                                 delayms(40);               
  179.                                                 if(SET==1)                                                            //延時去除抖動再次判斷是否按下按鍵
  180.                                                         {
  181.                                                                 while(1)
  182.                                                                 {
  183.                                                                         Display_LO_Alarm();                   //設定下限溫度值
  184.                                                                         if(ADD==0)                                   //增加按鍵
  185.                                                                                 {
  186.                                                                                         delayms(40);
  187.                                                                                         if(ADD==1)                    //延時去除抖動再次判斷是否按下按鍵
  188.                                                                                                 LO_Alarm++;                //溫度值加一
  189.                                                                                 }
  190.                                                                         if(DEC==0)                                        //減小按鍵
  191.                                                                                 {
  192.                                                                                         delayms(40);
  193.                                                                                         if(DEC==1)                    //延時去除抖動再次判斷是否按下按鍵
  194.                                                                                                 LO_Alarm--;                //溫度值減一
  195.                                                                                 }
  196.                                                                         if(SET==0)                                        //設定按鍵按下
  197.                                                                                 {
  198.                                                                                         delayms(40);
  199.                                                                                         if(SET==1)
  200.                                                                                                 {                                 //延時去除抖動再次判斷是否按下按鍵
  201.                                                                                                         SET_FLAG=0;         
  202.                                                                                                         break;                 //上下限設定完成 退出
  203.                                                                                                 }
  204.                                                                                 }                                       
  205.                                                                 }                                                               
  206.                                                         }
  207.                                         }                                                
  208.                         }
  209.                  }
  210. }        
  211. }
  212. void BJ_LED()
  213. ……………………

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

所有資料51hei提供下載:
程序.doc (37.5 KB, 下載次數: 61)
4、word原理圖.doc (21 KB, 下載次數: 35)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:59151 發表于 2017-6-16 21:25 | 只看該作者
好東西,前段時間自己做了一個,但總覺得代碼有些混亂,正好來參考和學習,謝謝分享!
回復

使用道具 舉報

板凳
ID:211726 發表于 2017-6-17 23:19 | 只看該作者
WORD可以畫原理圖嗎?
回復

使用道具 舉報

地板
ID:121836 發表于 2017-7-16 10:07 | 只看該作者
DS1820部分的程序呢
回復

使用道具 舉報

5#
ID:92231 發表于 2017-7-18 05:07 來自手機 | 只看該作者
下載來學習一下,主要是參考程序怎么寫
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: aa级毛片毛片免费观看久 | 日本成年免费网站 | 国产精品一区二区三区在线 | 欧美日韩精品区 | 日韩精品一区二区三区 | 97视频成人 | 国产精品一区二区不卡 | 一区二区三区免费观看 | 国产成人免费视频网站高清观看视频 | 国产精品久久av | 日本黄色大片免费 | 日韩毛片在线观看 | 犬夜叉在线观看 | 久久成人国产精品 | 久久久久久久av麻豆果冻 | 特一级毛片 | 国产做a爱免费视频 | 亚洲免费视频一区 | 国产精品亚洲欧美日韩一区在线 | 少妇一区二区三区 | 国产一级视频 | 一区二区在线不卡 | 国产亚洲欧美另类一区二区三区 | 亚洲欧美日本国产 | 欧美精三区欧美精三区 | 国产精品美女久久久 | 全部免费毛片在线播放网站 | www视频在线观看 | 中文字幕一区二区三区四区五区 | 日韩欧美在线视频 | 中文字幕亚洲视频 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 成人福利在线观看 | 在线欧美视频 | 另类二区 | 国产日韩欧美 | 欧美亚洲国产日韩 | 日本特黄a级高清免费大片 特黄色一级毛片 | 中文区中文字幕免费看 | 福利视频网址 | 凹凸日日摸日日碰夜夜 |