找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于單片機ds18b20鎖存數(shù)碼管溫度顯示問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:693230 發(fā)表于 2022-12-17 20:24 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
為啥我的數(shù)碼管的第一位不能顯示“1”和“4”,其他都正常,求大佬救命,已經(jīng)卡bug三天了


  1. #include"reg51.h"
  2. #include"intrins.h"
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit wei=P2^0;
  6. sbit duan=P2^1;
  7. sbit DQ=P3^7;
  8. sbit bep=P3^0;               
  9. uchar  k=0;
  10. uchar smg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  11. uint delay5(uchar n)
  12. {
  13.         do
  14.         {
  15.                 _nop_();
  16.                 _nop_();
  17.                 _nop_();
  18.                 n--;
  19.         }
  20.         while(n);
  21. }

  22. void init_ds18b20(void)
  23. {
  24.         uchar x=0;
  25.         DQ =0;
  26.         delay5(120);
  27.         DQ =1;
  28.         delay5(16);
  29.         delay5(80);
  30. }

  31. uchar readbyte(void)
  32. {
  33.         uchar i=0;
  34.         uchar date=0;
  35.         for(i=8;i>0;i--)
  36.         {
  37.                 DQ =0;
  38.                 delay5(1);
  39.                 DQ =1;
  40.                 date>>=1;
  41.                 if(DQ)
  42.                 date|=0x80;
  43.                 delay5(11);
  44.         }
  45.         return(date);
  46. }

  47. void writebyte(uchar dat)
  48. {
  49.         uchar i=0;
  50.         for(i=8;i>0;i--)
  51.         {
  52.           DQ =0;
  53.                 DQ =dat&0x01;
  54.                 delay5(12);
  55.                 DQ = 1;
  56.                 dat>>=1;
  57.                 delay5(5);
  58.         }
  59. }
  60. uint retemp(void)
  61. {
  62.         uchar a,b;
  63.         uint tt;
  64.         uint t;
  65.         init_ds18b20();
  66.         writebyte(0xcc);
  67.         writebyte(0x44);
  68.         init_ds18b20();
  69.         writebyte(0xcc);
  70.         writebyte(0xbe);
  71.         a=readbyte();
  72.         b=readbyte();
  73.         t=b;
  74.         t<<=8;
  75.         t=t|a;
  76.         tt=t*0.0625*10;
  77.          k=1;
  78.         return(tt);
  79. }


  80. void Display(uint temp)
  81. {
  82. uchar A1,A2,A3;
  83. A1 = temp/100;    //百位
  84. A2 = temp%100/10;   //十位
  85. A3 = temp%10;    //個位
  86.        
  87. wei = 1;      //消隱
  88. P0 = 0xff;
  89. wei = 0;
  90. delay5(255);
  91. duan = 1;
  92. P0 = 0x00;
  93. duan = 0;
  94. delay5(255);
  95.        
  96.        
  97. wei = 1;      
  98. P0 = 0xfe;
  99. wei = 0;
  100. delay5(255);
  101. duan = 1;                       
  102. P0 = smg[A1];                
  103. duan = 0;
  104. delay5(255);
  105.        
  106. wei = 1; //消隱
  107. P0 = 0xff;
  108. wei = 0;
  109. delay5(255);
  110. duan = 1
  111. P0 = 0x00
  112. duan = 0;
  113. delay5(255);
  114.        

  115. wei = 1;  
  116. P0 = 0xfd;  
  117. wei=0;
  118.         delay5(255);
  119. duan = 1;
  120. P0 = smg[A2]|0x80;
  121. duan = 0;  
  122. delay5(255);

  123. wei = 1; //消隱
  124. P0 = 0xff;
  125. wei = 0;
  126. delay5(255);
  127. duan = 1;
  128. P0 = 0x00;                
  129. duan = 0;
  130. delay5(255);
  131. wei = 1;
  132. P0 = 0xfb;
  133. wei=0;  
  134. delay5(255);
  135. duan=1;
  136. P0 = smg[A3];    //顯示個位
  137. duan = 0;
  138. delay5(255);

  139. wei = 1; //消隱
  140. P0 = 0xff;
  141. wei = 0;
  142. delay5(255);
  143. duan = 1;
  144. P0 = 0x00;
  145. duan = 0;
  146. delay5(255);
  147. }

  148. void main(void)
  149.   {
  150.     uchar i;
  151.                 uint temp;
  152.     delay5(100);
  153.        
  154.     while(1)
  155.                 {
  156.                         temp=retemp();
  157.                         if(k==1)
  158.                         {k=0;
  159.                 Display(temp);
  160.                                    if(temp>=300)
  161.                         {bep=1;}
  162.                         else
  163.                         {bep=0;}
  164.                         }
  165.                        
  166.                 }
  167.         }
復制代碼




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

使用道具 舉報

沙發(fā)
ID:213173 發(fā)表于 2022-12-18 06:39 | 只看該作者
  1. void Display(uint temp)
  2. {
  3.         uchar A1,A2,A3;
  4.         A1 = temp/100;    //百位
  5.         A2 = temp%100/10;   //十位
  6.         A3 = temp%10;    //個位
  7.                
  8.         wei = 1;
  9.         P0 = 0xff;      //消隱
  10.         wei = 0;

  11.         duan = 1;
  12.         P0 = 0x00;                //送段碼
  13.         duan = 0;
  14.         wei = 1;      
  15.         P0 = 0xfe;                //送位碼
  16.         wei = 0;
  17.         delay5(255);
  18.                
  19.         wei = 1;
  20.         P0 = 0xff;      //消隱
  21.         wei = 0;

  22.         duan = 1;                       
  23.         P0 = smg[A1];        //送段碼
  24.         duan = 0;
  25.         wei = 1;      
  26.         P0 = 0xfd;                //送位碼
  27.         wei = 0;
  28.         delay5(255);
  29.        
  30.         wei = 1;
  31.         P0 = 0xff;      //消隱
  32.         wei = 0;

  33.         duan = 1;
  34.         P0 = smg[A2]|0x80;//送段碼
  35.         duan = 0;  
  36.         wei = 1;
  37.         P0 = 0xfb;                //送位碼
  38.         wei = 0;
  39.         delay5(255);
  40.        
  41.         wei = 1;
  42.         P0 = 0xff;      //消隱
  43.         wei=0;  

  44.         duan=1;
  45.         P0 = smg[A3];   //顯示個位
  46.         duan = 0;
  47.         wei = 1;
  48.         P0 = 0xf7;                //送位碼
  49.         wei=0;
  50.         delay5(255);
  51. }
復制代碼
回復

使用道具 舉報

板凳
ID:161164 發(fā)表于 2022-12-18 13:20 | 只看該作者
消影不用那么復雜
以下是一個位的輸出代碼
duan = 1;
P0 = 0x00;//關段輸出
duan = 0;
//delay5(255);不用延時
wei = 1;      
P0 = 0xfe;
wei = 0;
delay5(255);
duan = 1;                       
P0 = smg[A1];               
duan = 0;
delay5(255);
回復

使用道具 舉報

地板
ID:693230 發(fā)表于 2022-12-18 15:02 | 只看該作者
回復

使用道具 舉報

5#
ID:693230 發(fā)表于 2022-12-18 15:02 | 只看該作者
lkc8210 發(fā)表于 2022-12-18 13:20
消影不用那么復雜
以下是一個位的輸出代碼
duan = 1;

謝謝大佬
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表