找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 669|回复: 4
打印 上一主题 下一主题
收起左侧

基于单片机ds18b20锁存数码管温度显示问题

[复制链接]
跳转到指定楼层
楼主
为啥我的数码管的第一位不能显示“1”和“4”,其他都正常,求大佬救命,已经卡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空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 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 发表于 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 发表于 2022-12-18 15:02 | 只看该作者
回复

使用道具 举报

5#
ID:693230 发表于 2022-12-18 15:02 | 只看该作者
lkc8210 发表于 2022-12-18 13:20
消影不用那么复杂
以下是一个位的输出代码
duan = 1;

谢谢大佬
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表