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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

DS18B20溫度計 單片機仿真和代碼

[復制鏈接]
跳轉到指定樓層
樓主
DS18B20溫度計代碼

  1. #include<reg51.h>
  2. extern unsigned char code NumberData[12];
  3. typedef  unsigned char uchar;
  4. typedef  unsigned int uint;
  5. sbit BUS=P2^6;//溫度傳感器接口
  6. sbit LED_ONE = P2^0;//第一位數碼管位選端口
  7. sbit LED_TWO = P2^1;//第一位數碼管位選端口
  8. sbit LED_THREE = P2^2;//第一位數碼管位選端口
  9. sbit LED_FOUR = P2^3;//第一位數碼管位選端口
  10. volatile uchar GeWei,ShiWei,BaiWei,_Geiwei,_ShiWei;
  11. volatile bit Convert_yes_not=0;
  12. volatile char Negative=0;
  13. /**********************************
  14. 數碼管編碼
  15. **********************************/
  16. code unsigned char NumberData[12] ={
  17.       0x3f,//0
  18.           0x06,//1
  19.           0x5b,//2
  20.           0x4f,//3
  21.           0x66,//4
  22.           0x6d,//5
  23.           0x7d,//6
  24.           0x07,//7
  25.           0x7f,//8
  26.           0x6f,//9         
  27.           0x80,//DP
  28.           0x40 //negative
  29. };
  30. //延時子函數
  31. void Delay_4xN_US(uchar us)
  32. {
  33.     while(--us);
  34. }
  35. //初始化子函數
  36. void Timer0_Init()
  37. {
  38.         TMOD = 0x01;//定時器0模式1-16位定時器-
  39.         TCON = 0x00;//清零TCON
  40.         ET0  = 1;   //允許定時器0中斷
  41.         TH0  = 0x3c;//定時100ms
  42.         TL0  = 0xb0;
  43.         TR0  = 1;   //啟動定時器0
  44. }
  45. void DS18B20_Recover()
  46. {
  47.           BUS = 1;
  48.           Delay_4xN_US(200);//4us
  49.           BUS = 0;
  50.           Delay_4xN_US(200);//800us
  51.           BUS = 1;
  52.           Delay_4xN_US(200);//800us
  53.           BUS = 1;
  54. }
  55. void SendProc(uchar proc)
  56. {
  57.           bit T_bit;
  58.           uchar i=0;
  59.           for(;i<8;i++)
  60.           {
  61.                   T_bit = (proc>>i)&0x01;//單位數據
  62.                   BUS = 1;
  63.                   Delay_4xN_US(1);//4us
  64.                   BUS = 0;
  65.                   BUS = T_bit;//單位數據
  66.                   Delay_4xN_US(15);//60us等待時間
  67.                   BUS = 1;
  68.           }
  69. }
  70. uchar ReadOneByte()
  71. {
  72.           uchar i;
  73.           bit T_bit;
  74.           uchar dat=0;
  75.           for(i=0;i<8;i++)
  76.           {
  77.                    BUS = 1;
  78.                    Delay_4xN_US(1);//4us
  79.                    BUS = 0;
  80.                    BUS = 1;
  81.                    T_bit = BUS;
  82.                    Delay_4xN_US(15);//60us
  83.                    BUS = 1;
  84.                    dat |= ((uchar)T_bit)<<i;
  85.            }
  86.            return dat;
  87. }
  88. void LED_DATE_Convert(uchar T_L,uchar T_H)
  89. {
  90.           uchar ZhengShu,MiddleShu;
  91.         uint XiaoShu;
  92.         if((T_H>>4)>0)//負數
  93.         {
  94.              Negative = 0xff;
  95.                  MiddleShu =((~(T_L&0x0f))&0x0f)+1;
  96.                  if(MiddleShu>>4>0)//有進位
  97.                  {
  98.                           ZhengShu = (~T_H)*16+((~T_L)>>4)+1;
  99.                           XiaoShu =(MiddleShu&0x0f)*625;
  100.                  }
  101.                  else
  102.                  {
  103.                           ZhengShu = (~T_H)*16+((~T_L)>>4);
  104.                           XiaoShu =(MiddleShu&0x0f)*625;
  105.                  }
  106.                  GeWei  = ZhengShu%10;
  107.                  ShiWei = (ZhengShu/10)%10;
  108.                  _Geiwei= XiaoShu/1000;
  109.                  _ShiWei= (XiaoShu/100)%10;
  110.         
  111.         }
  112.         else//正數
  113.     {
  114.                 Negative = 0x00;
  115.                 ZhengShu = T_H*16+(T_L>>4);
  116.                 XiaoShu =(T_L&0x0f)*625;
  117.                 GeWei  = ZhengShu%10;
  118.                 ShiWei = (ZhengShu/10)%10;
  119.                 BaiWei = ZhengShu/100;
  120.                 _Geiwei= XiaoShu/1000;
  121.                 _ShiWei= (XiaoShu/100)%10;
  122.         }        
  123. }
  124. void LED_Show()
  125. {
  126.         switch(Negative)
  127.           {
  128.                 case 0x00:        //正數
  129.                                     if(BaiWei!=0)
  130.                                         {
  131.                                                  P0 = NumberData[BaiWei];
  132.                                                  LED_ONE = 0;
  133.                                                  Delay_4xN_US(100);//400us
  134.                                                  LED_ONE = 1;
  135.                                                  P0 = NumberData[ShiWei];
  136.                                                  LED_TWO = 0;
  137.                                                  Delay_4xN_US(100);//400us
  138.                                                  LED_TWO = 1;
  139.                                                  P0 = NumberData[GeWei]|NumberData[10];
  140.                                                  LED_THREE = 0;
  141.                                                  Delay_4xN_US(100);//400us
  142.                                                  LED_THREE = 1;
  143.                                                  P0 = NumberData[_Geiwei];
  144.                                                  LED_FOUR = 0;
  145.                                                  Delay_4xN_US(100);//400us
  146.                                                  LED_FOUR = 1;
  147.                                         }
  148.                                         else
  149.                                         {
  150.                                                 P0 = NumberData[ShiWei];
  151.                                                 LED_ONE = 0;
  152.                                                 Delay_4xN_US(100);//400us
  153.                                                 LED_ONE = 1;
  154.                                                 P0 = NumberData[GeWei]|NumberData[10];
  155.                                                 LED_TWO = 0;
  156.                                                 Delay_4xN_US(100);//400us
  157.                                                 LED_TWO = 1;
  158.                                                 P0 = NumberData[_Geiwei];
  159.                                                 LED_THREE = 0;
  160.                                                 Delay_4xN_US(100);//400us
  161.                                                 LED_THREE = 1;
  162.                                                 P0 = NumberData[_ShiWei];
  163.                                                 LED_FOUR = 0;
  164.                                                 Delay_4xN_US(100);//400us
  165.                                                 LED_FOUR = 1;
  166.                                         }
  167.                                         break;
  168.                 case 0xff:        //負數
  169.                                      if(ShiWei!=0)
  170.                                         {
  171.                                                  P0 = NumberData[11];
  172.                                                 LED_ONE = 0;
  173.                                                 Delay_4xN_US(100);//400us
  174.                                                 LED_ONE = 1;
  175.                                                 P0 = NumberData[ShiWei];
  176.                                                 LED_TWO = 0;
  177.                                                 Delay_4xN_US(100);//400us
  178.                                                 LED_TWO = 1;
  179.                                                 P0 = NumberData[GeWei]|NumberData[10];
  180.                                                 LED_THREE = 0;
  181.                                                 Delay_4xN_US(100);//400us
  182.                                                 LED_THREE = 1;
  183.                                                 P0 = NumberData[_Geiwei];
  184.                                                 LED_FOUR = 0;
  185.                                                 Delay_4xN_US(100);//400us
  186.                                                 LED_FOUR = 1;
  187.                                         }
  188.                                         else
  189.                                         {
  190.                                                 P0 = NumberData[11];
  191.                                                 LED_ONE = 0;
  192.                                                 Delay_4xN_US(100);//400us
  193.                                                 LED_ONE = 1;
  194.                                                 P0 = NumberData[GeWei]|NumberData[10];
  195.                                                 LED_TWO = 0;
  196.                                                 Delay_4xN_US(100);//400us
  197.                                                 LED_TWO = 1;
  198.                                                 P0 = NumberData[_Geiwei];
  199.                                                 LED_THREE = 0;
  200.                                                 Delay_4xN_US(100);//400us
  201.                                                 LED_THREE = 1;
  202.                                                 P0 = NumberData[_ShiWei];
  203.                                                 LED_FOUR = 0;
  204.                                                 Delay_4xN_US(100);//400us
  205.                                                 LED_FOUR = 1;
  206.                                         }
  207.                                         break;
  208.           }
  209. }
  210. void Timer_Interrupt() interrupt 1
  211. {
  212.     uchar T_dat_L,T_dat_H;
  213.         P0=0x00;
  214.         TH0  = 0x3c;//定時100ms
  215.     TL0  = 0xb0;
  216.         if(Convert_yes_not==0)
  217.         {
  218.                 DS18B20_Recover();//復位
  219.                 SendProc(0xcc);//ROM跳過指令
  220.                 SendProc(0x44);//數據轉換指令
  221.                 Convert_yes_not=1;
  222.         }
  223.         else
  224.         {
  225.                 DS18B20_Recover();//復位
  226.                 SendProc(0xcc);//ROM跳過指令
  227.                 SendProc(0xbe);//數據讀取指令
  228.                 T_dat_L = ReadOneByte();//讀取數據
  229.                 T_dat_H = ReadOneByte();//讀取數據
  230.                 LED_DATE_Convert(T_dat_L,T_dat_H);
  231.                 Convert_yes_not=0;
  232.         }
  233. }
  234. //主函數
  235. void main()
  236. {
  237.         P0=0x00;
  238.         P2=0xff;
  239.         DS18B20_Recover();//復位
  240.         Timer0_Init();
  241.         EA =1;//開放中斷
  242.         while(1)
  243.         {
  244.                    LED_Show();
  245.           }
  246. }
  247.         
復制代碼



溫度計.rar

46.36 KB, 下載次數: 38, 下載積分: 黑幣 -5

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天堂色| 成人福利电影 | 国产精久久久久久久 | 国产综合在线视频 | 欧美一区二区精品 | 蜜桃视频在线观看免费视频网站www | 国产精品久久久久久婷婷天堂 | 午夜影院| 蜜桃视频在线观看免费视频网站www | 蜜桃视频一区二区三区 | 亚洲国产精品久久人人爱 | 欧美综合国产精品久久丁香 | 在线欧美视频 | 一区二区蜜桃 | 久久在线免费 | 成人一区二区三区视频 | 亚洲国产成人精品女人久久久 | www国产亚洲精品 | 亚洲精品av在线 | 超碰超碰 | 一区二区三区四区在线 | 国产亚洲精品成人av久久ww | 欧美高清dvd | 日韩一区二区在线视频 | 成人av看片 | 亚洲视频国产 | 亚洲国产精品久久 | 中国美女av| 在线亚洲人成电影网站色www | 天天宗合网 | 精品一区二区电影 | 国产亚洲精品久久久久久牛牛 | 91久久网站| 中文字幕一区二区三区四区五区 | 不卡的av在线 | 国产玖玖 | 欧洲免费毛片 | 亚洲成人高清 | 日韩免费一区 | 九九精品在线 | 日本淫视频 |