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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機四位一體數碼管顯示DS18B20測溫的項目工程

[復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 51黑電子會員 于 2020-5-19 11:12 編輯
  1. #include<reg52.h>//包含51單片機內部寄存器頭文件
  2. #define uchar unsigned char// 自定義uchar為unsigned char(即無符號字符型數據,數據范圍:0到255。)
  3. #define uint unsigned int//自定義uint為unsigned int(即無符號字符整數型數據,數據范圍:0到6355。)                    
  4. uchar code table0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40} ; //共陰數碼管字碼表
  5. uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};  //個位帶數點字碼表
  6. uchar code Wei[]={0xfe,0xfd,0xfb,0xf7};//數碼管位數碼表  
  7. //uchar Display_data[4];//顯示數據數組
  8. uint  Temperature_value;//溫度值  
  9. uint bai,shi,ge,xiaoshu;            
  10. uchar Temperature_flag;//溫度負標志  
  11. sbit DQ=P1^6;//DS18B20數據信號端口
  12. /*DS18B20的延時函數*/
  13.   void DS18B20_Delay(uint i)
  14. {
  15.   while(i--);
  16. }
  17. /*DS18B20的初始化函數*/   
  18.   void DS18B20_Init()              
  19. {
  20.    uchar x=0;
  21.    DQ = 1;//DS18B20數據信號端口DQ復位
  22.    DS18B20_Delay(4);            
  23.    DQ = 0;//DS18B20數據信號端口DQ拉低
  24.    DS18B20_Delay(100);//精確延于480us
  25.    DQ = 1;//DS18B20數據信號端口拉高
  26.    DS18B20_Delay(40);
  27.   }     
  28. /*DS18B20讀一個字節函數*/   
  29.   uchar DS18B20_ReadOneByte()      
  30. {
  31.    uchar i=0;
  32.    uchar j=0;
  33.    for (i=8;i>0;i--)
  34. {
  35.     DQ = 0;//給脈沖信號     
  36.     j>>=1;
  37.     DQ = 1;//給脈沖信號     
  38.     if(DQ)  
  39.     j|=0x80;     
  40.     DS18B20_Delay(10);
  41.    }
  42.    return(j);
  43.   }  
  44. /*DS18B20寫一個字節函數*/  
  45.   void DS18B20_WriteOneByte(uchar k)     
  46. {
  47.    uchar i=0;     
  48.    for (i=8; i>0; i--)//向DS18B20數據信號端口DQ寫入數據8次
  49. {
  50.     DQ = 0;//DS18B20數據信號端口DQ置低電平
  51.     DQ = k&0x01;//按從低位到高位的順序向DS18B20數據信號端口DQ發送字節(一次只發送一位)
  52.     DS18B20_Delay(10);      
  53.     DQ = 1;//DS18B20數據信號端口DQ置高電平
  54.     k>>=1;//重復以上的操作,直到所有的字節全部發送完為止。
  55.    }
  56. }  
  57. /*單片機讀取DS18B20當前溫度的函數*/   
  58.   DS18B20_ReadTemperature()            
  59. {
  60.    uchar a,b;
  61.    DS18B20_Init();//DS18B20初始化
  62.    DS18B20_WriteOneByte(0xcc);//跳讀序列號
  63.    DS18B20_WriteOneByte(0x44);//啟溫度轉換
  64.    DS18B20_Init();//DS18B20初始化
  65.    DS18B20_WriteOneByte(0xcc);//跳讀序列號
  66.    DS18B20_WriteOneByte(0xbe);//讀取溫度
  67.    a=DS18B20_ReadOneByte();//讀取到的第一個字節為溫度LS BYTE
  68.    b=DS18B20_ReadOneByte();//讀取到的第一個字節為溫度MS BYTE
  69.    Temperature_value=b;//先把高八位有效數據賦于Temperature
  70.    Temperature_value<<=8;
  71.    Temperature_value=Temperature_value|a;
  72.    if(Temperature_value<0x0fff)
  73.    Temperature_flag=0;
  74.    else
  75. {
  76.     Temperature_value=~Temperature_value+2;
  77.     Temperature_flag=1;//負溫度  
  78.    }
  79.    Temperature_value=Temperature_value*(0.625);//溫度值擴大10倍,并精確到1位數。
  80.    return(Temperature_value);
  81.   }
  82. /*DS18B20所測溫度值顯示函數*/  
  83.   void DS18B20_Display()                              
  84. {
  85.    uchar i;
  86.    bai=Temperature_value/1000;//百位數
  87.    shi=Temperature_value%1000/100;//十位數
  88.    ge=Temperature_value%100/10;//個位數
  89.    xiaoshu=Temperature_value%10;//小數位
  90.    if(Temperature_flag==0)
  91. {
  92.     if(bai==0x00)
  93.   {
  94.      bai=0x00;//百位數的0顯示   
  95.      if(shi==0x00)  
  96.      shi=0x00;//十位數的0顯示   
  97.     }
  98.   }
  99.    else //負溫度
  100. {   
  101.     bai=0x0b;//負溫度百位顯示負號:-
  102.     if(shi==0x00)  
  103.     shi=0x00;//十位數的0顯示   
  104.   }
  105.    for(i=0;i<10;i++)
  106. {
  107.     P2=Wei[0];
  108.     P0=table0[bai];//百位
  109.     DS18B20_Delay(20);
  110.     P2=Wei[1];
  111.     P0=table0[shi];//十位
  112.     DS18B20_Delay(20);
  113.     P2=Wei[2];
  114.     P0=table1[ge];//個位
  115.     DS18B20_Delay(20);
  116.     P2=Wei[3];
  117.     P0=table0[xiaoshu];//小數位
  118.     DS18B20_Delay(20);
  119.    
  120.    
  121.    }
  122. }
  123. /*主函數*/  
  124.   void main()                              
  125. {
  126.    DS18B20_Init();//DS18B20初始化顯示
  127.    while(1)
  128. {
  129.     DS18B20_ReadTemperature();//單片機讀取DS18B20當前溫度
  130.     DS18B20_Display();//共陰數碼管顯示DS18B20所測溫度
  131.    }
  132. }
復制代碼





評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品亚洲一区二区三区四区五区 | 一区二区视频在线观看 | 久久99久久 | 91免费入口 | 免费久久视频 | 在线观看黄视频 | 亚洲国产成人av好男人在线观看 | 久久99久久98精品免观看软件 | 精品入口麻豆88视频 | 日韩av在线不卡 | 中文字幕日韩一区二区 | 国产二区视频 | 亚洲一区视频在线 | 91精品亚洲 | 91精品无人区卡一卡二卡三 | 精品国产乱码久久久久久老虎 | 午夜视频网 | 美女在线一区二区 | 久久久蜜臀国产一区二区 | 日韩在线观看网站 | 婷婷不卡 | 99re6在线视频精品免费 | 亚洲日日夜夜 | 国产资源在线观看 | 欧美一区二区激情三区 | www.性色| 国产成人网 | 成人性视频免费网站 | 99国产在线 | 一区二区三区视频在线观看 | 国产日韩欧美另类 | 亚洲欧洲一区二区 | 日本一区二区高清视频 | 在线伊人| 国产97视频在线观看 | 天天影视色综合 | 高清色 | 嫩草影院黄 | 午夜久草| 成人国产精品免费观看 | 黄色大片视频 |