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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機+18B20實現溫度檢測并用數碼管顯示

[復制鏈接]
跳轉到指定樓層
樓主
ID:556720 發表于 2019-6-13 20:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
一個簡單的18B20溫度計
  1. #include <reg52.h>
  2. #include "temp.h"
  3. #define u8 unsigned char
  4. #define u16 unsigned int
  5.         
  6. /*……按鍵接線……*/
  7. sbit key1=P1^0;   //開始
  8. sbit key2=P1^1;                //停止
  9. sbit key3=P1^2;                //小數點轉換
  10. sbit key4=P1^3;                //顯示平均值及轉換


  11. /*……三八譯碼器接線……*/
  12. sbit LSA=P2^2;
  13. sbit LSB=P2^3;
  14. sbit LSC=P2^4;

  15. uchar count,second,occuar,temp;

  16. uchar temp_av[3];

  17. uchar dat[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  18.                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

  19. /*……定時器初始化……*/
  20. void InitTimer1(void)
  21. {
  22.     TMOD = 0x10;
  23.     TH1 = 0x0EC;
  24.     TL1 = 0x78;
  25.     EA = 1;
  26.     ET1 = 1;
  27.     TR1 = 1;
  28. }

  29. void delay(u16 i)
  30. {
  31.         while(i--);        
  32. }

  33. void shumaguan_stop()
  34. {
  35.         u8 i;
  36.         for(i=0;i<8;i++)
  37.         {
  38.                 switch(i)         //位選,選擇點亮的數碼管,
  39.                 {
  40.                         case(0):
  41.                                 LSA=0;LSB=0;LSC=0; break;//顯示第0位
  42.                         case(1):
  43.                                 LSA=1;LSB=0;LSC=0; break;//顯示第1位
  44.                         case(2):
  45.                                 LSA=0;LSB=1;LSC=0; break;//顯示第2位
  46.                         case(3):
  47.                                 LSA=1;LSB=1;LSC=0; break;//顯示第3位
  48.                         case(4):
  49.                                 LSA=0;LSB=0;LSC=1; break;//顯示第4位
  50.                         case(5):
  51.                                 LSA=1;LSB=0;LSC=1; break;//顯示第5位
  52.                         case(6):
  53.                                 LSA=0;LSB=1;LSC=1; break;//顯示第6位
  54.                         case(7):
  55.                                 LSA=1;LSB=1;LSC=1; break;//顯示第7位        
  56.                 }
  57.                 P0=0x00;//發送段碼
  58.                 delay(100); //間隔一段時間掃描        
  59.                 P0=0x00;//消隱
  60.         }
  61. }


  62. /*……數碼管顯示溫度值……*/

  63. void shumaguan(uchar Data)
  64. {
  65.         uchar i,j;
  66.         for(i=0;i>8;i++)
  67.         {
  68.                 j=(Data*100)|0xff;
  69.                 Data=Data >> 16;
  70.                 switch(i)         //位選,選擇點亮的數碼管,
  71.                 {
  72.                         case(7):
  73.                                 LSA=0;LSB=0;LSC=0; break;//顯示第0位
  74.                         case(6):
  75.                                 LSA=1;LSB=0;LSC=0; break;//顯示第1位
  76.                         case(5):
  77.                                 LSA=0;LSB=1;LSC=0; break;//顯示第2位
  78.                         case(4):
  79.                                 LSA=1;LSB=1;LSC=0; break;//顯示第3位
  80.                         case(3):
  81.                                 LSA=0;LSB=0;LSC=1; break;//顯示第4位
  82.                         case(2):
  83.                                 LSA=1;LSB=0;LSC=1; break;//顯示第5位
  84.                         case(1):
  85.                                 LSA=0;LSB=1;LSC=1; break;//顯示第6位
  86.                         case(0):
  87.                                 LSA=1;LSB=1;LSC=1; break;//顯示第7位        
  88.                 }
  89.                 if(i==5)                //是否小數點位
  90.                 {
  91.                         P0=dat[j]&0x01;
  92.                         delay(100); //間隔一段時間掃描        
  93.                         P0=0x00;                //消隱
  94.                 }
  95.                 else
  96.                 {
  97.                         if(i==7)                        //是否第七位
  98.                         {
  99.                                 if(!key3)
  100.                                 {
  101.                                         P0=dat[0];
  102.                                         delay(100); //間隔一段時間掃描        
  103.                                         P0=0x00;                //消隱
  104.                                 }
  105.                                 else
  106.                                 {
  107.                                         P0=dat[j];        //顯示溫當前度值
  108.                                         delay(100); //間隔一段時間掃描        
  109.                                         P0=0x00;                //消隱
  110.                                 }
  111.                         }
  112.                         else
  113.                         {
  114.                                         P0=dat[j];        //顯示溫當前度值
  115.                                         delay(100); //間隔一段時間掃描        
  116.                                         P0=0x00;                //消隱
  117.                         }
  118.                 }
  119.         }
  120. }


  121. /*……主函數……*/
  122. void main()
  123. {        
  124.         uchar j;
  125.         InitTimer1();                //定時器初始化
  126.         while(1)
  127.         {
  128.                 if(!key1) //按鍵開始
  129.                 {
  130.                         found1:
  131.                            shumaguan(temp);
  132.                         if(!key4) goto found2;
  133.                 }
  134.                 if(!key2)   //按鍵停止
  135.                 {
  136.                         shumaguan_stop();
  137.                 }
  138.                 found2:
  139.                         for(j=0;j<5;)
  140.                         {
  141.                                 if(!key4)
  142.                                 {        
  143.                                         if(j==4) goto found1;
  144.                                         else shumaguan(temp_av[j]);
  145.                                         while(!key4)
  146.                                         j++;
  147.                                 }
  148.                         }
  149.                   
  150.         }
  151. }
  152. /*……定時器中斷……*/
  153. void Timer1Interrupt(void) interrupt 3
  154. {
  155.     TH1 = 0x0EC;
  156.     TL1 = 0x78;
  157.           count++;
  158.           count=count%1000;
  159.           if(count==0)
  160.                 {
  161.                         temp=Ds18b20ReadTemp();
  162.                         occuar+=temp;
  163.                         second++;
  164.                         second=second%20;
  165.                         if(second==5)
  166.                         {
  167.                                 temp_av[0]=occuar/5;
  168.                         }
  169.                         if(second==10)
  170.                         {
  171.                                 temp_av[1]=occuar/10;
  172.                         }
  173.                         if(second==0)
  174.                         {
  175.                                 temp_av[2]=occuar/20;
  176.                                 occuar=0;
  177.                         }
  178.                 }               
  179. }

復制代碼

ds18b20.rar

35.85 KB, 下載次數: 19, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:360174 發表于 2019-11-1 16:15 來自觸屏版 | 只看該作者
樓主,有原理圖嗎?
回復

使用道具 舉報

板凳
ID:690838 發表于 2020-2-7 15:54 | 只看該作者
有proteus仿真圖嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品国产一区二区 | 久久久久亚洲视频 | 日韩在线一区二区三区 | 九九色综合| 亚洲一区二区三区在线观看免费 | www久久久| 亚州午夜精品 | 亚洲深夜福利 | 色播av| 噜久寡妇噜噜久久寡妇 | 香蕉视频1024 | 中国一级特黄真人毛片 | 国产高清视频 | 国产成人在线一区二区 | 亚洲一区视频在线 | 亚洲色图综合网 | 日本在线视频一区二区 | 粉嫩av久久一区二区三区 | 日韩欧美综合 | 久久99精品久久久久久青青日本 | 日韩精品免费 | 99精品视频网 | 黄色在线免费播放 | 国产传媒视频在线观看 | 国产亚洲日本精品 | 国产91精品网站 | 国产一区999| 国产视频福利在线观看 | 久久99精品久久久久久琪琪 | 国产视频第一页 | 国产人成精品一区二区三 | 国产91丝袜在线熟 | 人人干人人超 | 理论片免费在线观看 | 日韩av啪啪网站大全免费观看 | 久久免费电影 | 国产精品99久久久久久久久久久久 | 亚洲男人天堂2024 | 一区二区三区四区不卡 | 国产一区二区麻豆 | 亚洲成人国产综合 |