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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2098|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

ds18b20數(shù)碼管顯示開機溫度一直是-0.06,數(shù)碼管不能實時顯示溫度,請大家?guī)兔纯词?..

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:910047 發(fā)表于 2021-6-23 09:15 來自手機 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
程序在這里
#include<reg51.h>
extern unsigned char code NumberData[12];
typedef  unsigned char uchar;
typedef  unsigned int uint;
sbit BUS=P2^6;//溫度傳感器接口
sbit LED_ONE = P2^0;//第一位數(shù)碼管位選端口
sbit LED_TWO = P2^1;//第一位數(shù)碼管位選端口
sbit LED_THREE = P2^2;//第一位數(shù)碼管位選端口
sbit LED_FOUR = P2^3;//第一位數(shù)碼管位選端口
volatile uchar GeWei,ShiWei,BaiWei,_Geiwei,_ShiWei;
volatile bit Convert_yes_not=0;
volatile char Negative=0;
/**********************************
數(shù)碼管編碼
**********************************/
code unsigned char NumberData[12] ={
      0x3f,//0
          0x06,//1
          0x5b,//2
          0x4f,//3
          0x66,//4
          0x6d,//5
          0x7d,//6
          0x07,//7
          0x7f,//8
          0x6f,//9         
          0x80,//DP
          0x40 //negative
};
//延時子函數(shù)
void Delay_4xN_US(uchar us)
{
    while(--us);
}
//初始化子函數(shù)
void Timer0_Init()
{
        TMOD = 0x01;//定時器0模式1-16位定時器-
        TCON = 0x00;//清零TCON
        ET0  = 1;   //允許定時器0中斷
        TH0  = 0x3c;//定時100ms
        TL0  = 0xb0;
        TR0  = 1;   //啟動定時器0
}
void DS18B20_Recover()
{
          BUS = 1;
          Delay_4xN_US(200);//4us
          BUS = 0;
          Delay_4xN_US(200);//800us
          BUS = 1;
          Delay_4xN_US(200);//800us
          BUS = 1;
}
void SendProc(uchar proc)
{
          bit T_bit;
          uchar i=0;
          for(;i<8;i++)
          {
                  T_bit = (proc>>i)&0x01;//單位數(shù)據(jù)
                  BUS = 1;
                  Delay_4xN_US(1);//4us
                  BUS = 0;
                  BUS = T_bit;//單位數(shù)據(jù)
                  Delay_4xN_US(15);//60us等待時間
                  BUS = 1;
          }
}
uchar ReadOneByte()
{
          uchar i;
          bit T_bit;
          uchar dat=0;
          for(i=0;i<8;i++)
          {
                   BUS = 1;
                   Delay_4xN_US(1);//4us
                   BUS = 0;
                   BUS = 1;
                   T_bit = BUS;
                   Delay_4xN_US(15);//60us
                   BUS = 1;
                   dat |= ((uchar)T_bit)<<i;
           }
           return dat;
}
void LED_DATE_Convert(uchar T_L,uchar T_H)
{
          uchar ZhengShu,MiddleShu;
        uint XiaoShu;
        if((T_H>>4)>0)//負(fù)數(shù)
        {
             Negative = 0xff;
                 MiddleShu =((~(T_L&0x0f))&0x0f)+1;
                 if(MiddleShu>>4>0)//有進位
                 {
                          ZhengShu = (~T_H)*16+((~T_L)>>4)+1;
                          XiaoShu =(MiddleShu&0x0f)*625;
                 }
                 else
                 {
                          ZhengShu = (~T_H)*16+((~T_L)>>4);
                          XiaoShu =(MiddleShu&0x0f)*625;
                 }
                 GeWei  = ZhengShu%10;
                 ShiWei = (ZhengShu/10)%10;
                 _Geiwei= XiaoShu/1000;
                 _ShiWei= (XiaoShu/100)%10;
        
        }
        else//正數(shù)
    {
                Negative = 0x00;
                ZhengShu = T_H*16+(T_L>>4);
                XiaoShu =(T_L&0x0f)*625;
                GeWei  = ZhengShu%10;
                ShiWei = (ZhengShu/10)%10;
                BaiWei = ZhengShu/100;
                _Geiwei= XiaoShu/1000;
                _ShiWei= (XiaoShu/100)%10;
        }        
}
void LED_Show()
{
        switch(Negative)
          {
                case 0x00:        //正數(shù)
                                    if(BaiWei!=0)
                                        {
                                                 P0 = NumberData[BaiWei];
                                                 LED_ONE = 0;
                                                 Delay_4xN_US(100);//400us
                                                 LED_ONE = 1;
                                                 P0 = NumberData[ShiWei];
                                                 LED_TWO = 0;
                                                 Delay_4xN_US(100);//400us
                                                 LED_TWO = 1;
                                                 P0 = NumberData[GeWei]|NumberData[10];
                                                 LED_THREE = 0;
                                                 Delay_4xN_US(100);//400us
                                                 LED_THREE = 1;
                                                 P0 = NumberData[_Geiwei];
                                                 LED_FOUR = 0;
                                                 Delay_4xN_US(100);//400us
                                                 LED_FOUR = 1;
                                        }
                                        else
                                        {
                                                P0 = NumberData[ShiWei];
                                                LED_ONE = 0;
                                                Delay_4xN_US(100);//400us
                                                LED_ONE = 1;
                                                P0 = NumberData[GeWei]|NumberData[10];
                                                LED_TWO = 0;
                                                Delay_4xN_US(100);//400us
                                                LED_TWO = 1;
                                                P0 = NumberData[_Geiwei];
                                                LED_THREE = 0;
                                                Delay_4xN_US(100);//400us
                                                LED_THREE = 1;
                                                P0 = NumberData[_ShiWei];
                                                LED_FOUR = 0;
                                                Delay_4xN_US(100);//400us
                                                LED_FOUR = 1;
                                        }
                                        break;
                case 0xff:        //負(fù)數(shù)
                                     if(ShiWei!=0)
                                        {
                                                 P0 = NumberData[11];
                                                LED_ONE = 0;
                                                Delay_4xN_US(100);//400us
                                                LED_ONE = 1;
                                                P0 = NumberData[ShiWei];
                                                LED_TWO = 0;
                                                Delay_4xN_US(100);//400us
                                                LED_TWO = 1;
                                                P0 = NumberData[GeWei]|NumberData[10];
                                                LED_THREE = 0;
                                                Delay_4xN_US(100);//400us
                                                LED_THREE = 1;
                                                P0 = NumberData[_Geiwei];
                                                LED_FOUR = 0;
                                                Delay_4xN_US(100);//400us
                                                LED_FOUR = 1;
                                        }
                                        else
                                        {
                                                P0 = NumberData[11];
                                                LED_ONE = 0;
                                                Delay_4xN_US(100);//400us
                                                LED_ONE = 1;
                                                P0 = NumberData[GeWei]|NumberData[10];
                                                LED_TWO = 0;
                                                Delay_4xN_US(100);//400us
                                                LED_TWO = 1;
                                                P0 = NumberData[_Geiwei];
                                                LED_THREE = 0;
                                                Delay_4xN_US(100);//400us
                                                LED_THREE = 1;
                                                P0 = NumberData[_ShiWei];
                                                LED_FOUR = 0;
                                                Delay_4xN_US(100);//400us
                                                LED_FOUR = 1;
                                        }
                                        break;
          }
}
void Timer_Interrupt() interrupt 1
{
    uchar T_dat_L,T_dat_H;
        P0=0x00;
        TH0  = 0x3c;//定時100ms
    TL0  = 0xb0;
        if(Convert_yes_not==0)
        {
                DS18B20_Recover();//復(fù)位
                SendProc(0xcc);//ROM跳過指令
                SendProc(0x44);//數(shù)據(jù)轉(zhuǎn)換指令
                Convert_yes_not=1;
        }
        else
        {
                DS18B20_Recover();//復(fù)位
                SendProc(0xcc);//ROM跳過指令
                SendProc(0xbe);//數(shù)據(jù)讀取指令
                T_dat_L = ReadOneByte();//讀取數(shù)據(jù)
                T_dat_H = ReadOneByte();//讀取數(shù)據(jù)
                LED_DATE_Convert(T_dat_L,T_dat_H);
                Convert_yes_not=0;
        }
}
//主函數(shù)
void main()
{
        P0=0x00;
        P2=0xff;
        DS18B20_Recover();//復(fù)位
        Timer0_Init();
        EA =1;//開放中斷
        while(1)
        {
                   LED_Show();
          }
}

1624410902521.jpg (1.25 MB, 下載次數(shù): 46)

1624410902521.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:739545 發(fā)表于 2021-6-23 10:35 | 只看該作者
18b20為啥接那么多電阻
回復(fù)

使用道具 舉報

板凳
ID:123289 發(fā)表于 2021-6-23 16:29 | 只看該作者
先把R3改為100歐。
回復(fù)

使用道具 舉報

地板
ID:213173 發(fā)表于 2021-6-23 22:56 | 只看該作者
主要是時序問題


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



回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 最新高清无码专区 | 一级a爱片久久毛片 | 国产三级电影网站 | 精品免费国产一区二区三区四区介绍 | 精品国产欧美一区二区 | 中文字幕av一区 | 超碰导航 | 青青艹在线视频 | 欧美精品影院 | 精品少妇v888av | 日本三级精品 | 香蕉国产在线视频 | 999精品视频 | 丁香六月激情 | 99精品欧美一区二区三区 | 91亚洲免费 | 亚洲精品乱码久久久久久蜜桃 | 亚洲国产精品成人久久久 | 亚欧精品 | 蜜桃毛片| caoporn国产| 亚洲欧美视频在线观看 | 国产在线精品一区二区 | av影音资源 | 午夜激情在线视频 | 日韩av美女电影 | 日韩成人在线视频 | 综合久| 日韩在线中文 | 亚洲精品久久久久中文字幕欢迎你 | 三级av在线 | 不卡一二区 | 久久久久久久久一区 | 九九热免费在线观看 | 久久在线看 | 亚洲日本激情 | 日韩中文在线视频 | 91爱爱·com| 91国语清晰打电话对白 | 91精品国产91久久综合桃花 | 国产91在线 | 欧美 |