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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于單片機的溫度計仿真程序設計 達到門限溫度亮燈

[復制鏈接]
跳轉到指定樓層
樓主
ID:805923 發表于 2020-7-20 20:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖是關于單片機的溫度計顯示
傳感器用的是ds18b20,
采用數碼管動態顯示,可顯示3位數的溫度,第二位帶小數點
本實驗還包括蜂鳴器報警,溫度高于某值,蜂鳴器報警
附件包括仿真原理圖,proteus工程文件夾,txt格式的代碼

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
  • 實驗目的
熟練掌握C語言的設計和調試方法,了解與掌握數字溫度傳感器DS18B20的工作原理。
  • 實驗內容
利用數字溫度傳感器DS18B20與單片機結合來測量溫度控制器使用單片機AT89C51,測溫傳感器使用DS18B20,用3位LED數碼管以串口傳送數據,實現溫度顯示。且設置一個門限溫度,當傳感器溫度達到門限溫度后,發出提醒。
  • 實驗要求
要求完成實驗內容,LED數碼管成功顯示示數。設置報警門限,若溫度超限蜂鳴器報警。
  • 實驗硬件電路

圖1 硬件電路圖





  • 實驗結果及分析

圖 1未達門限溫度截過圖

圖 2達到門限溫度結果圖

  • 實驗總結及建議

實驗總結:通過這次實驗,我了解了DS13B20的基本原理和編程方法,更加熟悉了多位數碼管的動態顯示,自己的編寫代碼的能力也增強了許多。但這次實驗也反映了自己的一些問題,編寫基本的代碼還可以,稍微有些難度的代碼就編寫不出來了,以后會多加練習,克服這個問題。


單片機源程序如下:


  1. /* Main.c file generated by New Project wizard
  2. *
  3. * Created:   周一 7月 6 2020
  4. * Processor: AT89C52
  5. * Compiler:  Keil for 8051
  6. */

  7. #include <reg51.h>
  8. #include <stdio.h>
  9. #define uint unsigned int
  10. #define uchar unsigned char
  11. sbit X=P2^6;
  12. sbit Y=P2^7;
  13. sbit Z=P2^3;
  14. sbit DQ=P2^2;
  15. uchar code Data[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  16. void delay(uint count)      //delay        延時
  17. {
  18.   uint i;
  19.   while(count)
  20.   {
  21.     i=200;
  22.     while(i>0)
  23.     i--;
  24.     count--;
  25.   }
  26. }
  27. void dsreset(void)       //重置、初始化命令
  28. {
  29.   uint i;
  30.   DQ=0;                 //賦值
  31.   i=103;              //延時480us-960us
  32.   while(i>0)i--;
  33.   DQ=1;                  //賦值
  34.   i=4;
  35.   while(i>0)i--;         //延時15-60us
  36. }

  37. bit tmpreadbit(void)       //讀一位
  38. {
  39.    uint i;
  40.    bit dat;
  41.    DQ=0;
  42.    i++;          //i++ for delay 延時1us-15us
  43.    DQ=1;
  44.    i++;i++;      //釋放總線延時
  45.    dat=DQ;            //讀數賦值
  46.    i=8;
  47.    while(i>0)i--;
  48.    return (dat);//返回所獲得讀數
  49. }

  50. uchar tmpread(void)   //讀一個字節 8Bit
  51. {
  52.   uchar i,j,dat;
  53.   dat=0;
  54.   for(i=1;i<=8;i++)//連續讀取8位,1字節
  55.   {
  56.     j=tmpreadbit();       //調用讀1位的函數
  57.     dat=(j<<7|(dat>>1));   //讀出的數據最低位在最前面,動腦想如何設計
  58.   }
  59.   return(dat);//返回1字節的讀數
  60. }

  61. void tmpwritebyte(uchar dat)   //寫一個字節
  62. {
  63.   uint i;
  64.   uchar j;
  65.   bit testb;//寫入的數
  66.   for(j=1;j<=8;j++)//連續寫8位
  67.   {
  68.     testb=dat&0x01;//思考如何設計每次讀到的1bit
  69.      dat=dat>>1;
  70.     if(testb)     //write 1
  71.     {
  72.       DQ=0;//賦值
  73.       i++;i++;
  74.      DQ=1;//賦值
  75.       i=8;while(i>0)i--;
  76.     }
  77.     else              //write 0
  78.     {
  79.       DQ=0;//賦值      
  80.       i=8;while(i>0)i--;
  81.       DQ=1;//賦值
  82.       i++;i++;
  83.     }
  84.   }
  85. }

  86. void tmpchange(void)  //DS18B20 轉換溫度
  87. {
  88.   dsreset();//初始化
  89.   delay(1);
  90.   tmpwritebyte(0xcc);//跳過ROM
  91.   tmpwritebyte(0x44);//轉換溫度
  92. }
  93. void tempread(void)
  94. {
  95.   dsreset();  //寫入相關指令,思考要寫什么指令
  96.   delay(1);
  97.   tmpwritebyte(0xcc);//跳過RON
  98.   tmpwritebyte(0xbe);//讀取暫存器
  99.    }

  100. uint tmp()               //獲得溫度
  101. {
  102.   float tt;
  103.   uchar a,b;
  104.   uint temp;
  105.   tmpchange();
  106.   tempread();
  107.   a=tmpread();
  108.   b=tmpread();
  109.   temp=b;
  110.   temp<<=8;             //two byte  compose a int variable
  111.   temp=temp|a;
  112.   tt=temp*0.0625;
  113.   temp=tt*10+0.5;
  114.   return temp;
  115. }

  116. void display(uint temp)                        //顯示程序
  117. {
  118.    Y=0;
  119.    P0=0xfe;
  120.    Y=1;
  121.    Y=0;
  122.    X=0;
  123.    P0=Data[temp/100];
  124.    X=1;
  125.    X=0;
  126.    delay(1);

  127.    Y=0;
  128.    P0=0xfd;
  129.    Y=1;
  130.    Y=0;
  131.    X=0;
  132.    P0=Data[(temp%100)/10]+0x80;
  133.    X=1;
  134.    X=0;
  135.    delay(1);
  136.    
  137.    Y=0;
  138.    P0=0xfb;
  139.    Y=1;
  140.    Y=0;
  141.    X=0;
  142.    P0=Data[(temp%100)%10];
  143.    X=1;
  144.    X=0;
  145.    delay(1);
  146.    if(temp>=400)         
  147.      {
  148.        Z=0;
  149.           }  
  150.    else Z=1;
  151. }


  152. void main()
  153. {
  154.   uchar a,temp;
  155.   do
  156.   {
  157.     tmpchange();//溫度轉換
  158.     for(a=10;a>0;a--)  //避免閃爍
  159.     {   
  160.           display(tmp());//調用顯示函數
  161.       }

  162.   } while(1);
  163. }
復制代碼

所有資料51hei提供下載:

溫度計設計.zip (247.08 KB, 下載次數: 36)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:940398 發表于 2021-6-19 14:40 | 只看該作者
仿真工程是Proteus8.8版本的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级a毛片 | 99re国产| 婷婷综合网 | 国产精品视频综合 | 亚洲一级黄色 | 亚洲精品黑人 | 伊人久久综合影院 | 精品久久久久香蕉网 | 亚洲欧美日韩精品久久亚洲区 | 91亚洲国产成人久久精品网站 | 亚洲欧美国产精品一区二区 | 污污的网站在线观看 | 91免费在线播放 | 国产一区不卡 | 欧洲精品一区 | pacopacomama在线 | 国产视频久久久久 | 激情国产视频 | 亚洲高清视频一区二区 | 国产精品久久久久无码av | 青青草网站在线观看 | 亚洲精品99 | 国产精品国产三级国产aⅴ中文 | 欧美精品一区二区三区在线 | 亚洲国产成人精品久久 | 亚洲精品一区在线 | 欧美99 | 狠狠操电影 | 国产精品久久久久久久久久久久冷 | 久久免费国产 | 日韩在线视频一区二区三区 | av手机免费在线观看 | 国产小视频在线看 | 福利在线观看 | 一区二区三区四区免费观看 | a级毛片免费高清视频 | 少妇一级淫片免费放播放 | 91亚洲国产亚洲国产 | 91精品国产一区二区三区动漫 | 国产精品成人一区二区三区吃奶 | 日本高清精品 |