找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于protues 数码管的显示

[复制链接]
跳转到指定楼层
楼主
显示温度 有的时候 会显示 一些乱的数  
是不是 延时的问题?  


按键 设置上下限 温度时   不能调成负数    和这个让我头皮发麻  完全不知道原因
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit d1=P2^2;
  5. sbit d2=P2^1;
  6. sbit d3=P2^0;
  7. sbit d4=P2^3;
  8. sbit key1=P3^0;
  9. sbit key2=P3^1;
  10. sbit key3=P3^2;
  11. sbit beep=P3^3;
  12. sbit DS=P1^2;
  13. sbit ACC_7=ACC^7;
  14. uint count=700,alarm=-300;
  15. uchar shu;
  16. uchar shi,fen,ri,yue,nian,xq,miao,ss;      
  17. uint temp;             // ??????
  18. uchar flag;
  19. uchar code tab[]=
  20. {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  21. uchar code tab1[]=//С???????
  22. {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

  23. void delay(uint z)
  24. {
  25.    uint x,y;
  26.    for(x=z;x>0;x--)
  27.    for(y=120;y>0;y--);
  28. }
  29. void dsreset()//????λ
  30. {     

  31.    uint i;
  32.    DS=0;
  33.    i=103;
  34.    while(i>0)i--;
  35.    DS=1;
  36.    i=4;
  37.    while(i>0)i--;
  38. }
  39. uchar tmpread()   //???????
  40. {
  41.               uchar j,k,dat;
  42.               uint i;
  43.     for(j=1;j<=8;j++)
  44.    {
  45.    DS=0;i++;          //???
  46.    DS=1;i++;i++;
  47.    k=DS;
  48.    i=8;while(i>0)i--;
  49.    dat=(k<<7)|(dat>>1);//?????????????λ????????????????DAT??
  50.     }
  51.     return(dat);

  52. }

  53. void tmpwritebyte(uchar dat)   //д??????
  54. {
  55.    uint i;
  56.    uchar j;
  57.    bit testb;
  58.    for(j=1;j<=8;j++)
  59.     {
  60.    testb=dat&0x01;
  61.    dat=dat>>1;
  62.    if(testb)     //д 1
  63.    {
  64.      DS=0;
  65.      i++;i++;
  66.      DS=1;
  67.      i=8;while(i>0)i--;
  68. }
  69. else
  70.     {
  71.    DS=0;       //д 0
  72.    i=8;while(i>0)i--;
  73.    DS=1;
  74.    i++;i++;
  75.     }
  76.   }

  77. }
  78. void tmpchange()  //DS18B20???任
  79. {
  80.     dsreset();
  81.     delay(1);
  82.     tmpwritebyte(0xcc);  //??????????rom
  83.     tmpwritebyte(0x44);  //??????
  84. }

  85. uint tmp()               //??????
  86. {
  87.      float tt;
  88.      uchar a,b;
  89.      dsreset();
  90.      delay(1);
  91.      tmpwritebyte(0xcc);
  92.      tmpwritebyte(0xbe);
  93.      a=tmpread(); //a??????8λ
  94.      b=tmpread(); //b??????8λ
  95.      temp=b;     //temp?????UINT 16bit
  96.      temp<<=8;             //??????????????
  97.      temp=temp|a;   
  98.      if(b>127)
  99.      {
  100.       flag=1;
  101.       ss=flag;
  102.       temp=~temp+1;
  103. }
  104.      tt=temp*0.0625; // temp/16 ????????????tt.7λ????,4λС??
  105.      temp=tt*10+0.5; // ??????????????λС??
  106.      return(temp);
  107. }

  108. void displayTemp(uint temp)   //?????????

  109. {
  110.      uchar ge,shi,bai,qian,ser;
  111.      d1=0;
  112.      d1=0;
  113.      d3=0;
  114.      d4=0;
  115.      dsreset();
  116.      ser=temp/10;     //???????λ??????????
  117.      SBUF=ser;
  118.      qian=temp/1000;
  119.      bai=temp/100%10; // ??λ????
  120.      shi=temp/10%10;   // ?λ????
  121.      ge=temp%10;   // ??λ????

  122.      if(flag==1)
  123. {
  124.      flag=0;
  125.      P0=0xbf;
  126.      d1=1;
  127.      delay(2);
  128.       d1=0;
  129. }
  130. if(qian!=0)
  131. {
  132.      P0=tab[qian];
  133.      d1=1;
  134.      delay(2);
  135.      d1=0;            
  136. }
  137. else
  138. {
  139.      P0=0xff;
  140.      d1=1;
  141.      delay(2);
  142.      d1=0;            
  143. }
  144. if(temp>99)
  145. {
  146.       P0=tab[bai];
  147.       d2=1;
  148.       delay(2);
  149.       d2=0;
  150. }
  151.       P0=tab1[shi];
  152.       d3=1;
  153.       delay(2);
  154.       d3=0;
  155.       P0=tab[ge];
  156.       d4=1;
  157.       delay(2);
  158.       d4=0;
  159. }
  160. uint keyscan()
  161. {
  162.       if(key1==0)
  163.     {
  164.       delay(5);
  165.       if(key1==0)
  166.         {
  167.       while(!key1);
  168.       shu++;
  169. }
  170.     }
  171. if(key2==0)
  172.    {
  173.       delay(5);
  174.       if(key2==0)
  175. {
  176.       while(!key2);
  177.       count=count+10;
  178.       if(shu==2)
  179.      {
  180.       alarm+=10;
  181. }                                                                  
  182. }
  183. }
  184.       if(key3==0)
  185. {
  186.       delay(5);
  187.       if(key3==0)
  188.    {
  189.       while(!key3);
  190.       count=count-10;
  191.       if(shu==2)
  192.       {
  193.        alarm-=10;
  194. }
  195. }
  196. }
  197. return(count);
  198. }
  199. void main()
  200. {
  201.     beep=0;
  202.     delay(10);
  203.     while( 1 )
  204. {
  205.     tmpchange();
  206.     if(shu==0)
  207. {
  208.     displayTemp(tmp( ));
  209. }
  210.     keyscan();
  211.     if(shu==1)
  212. {
  213.     displayTemp(count);
  214. }
  215.      if(shu==2)
  216. {
  217.      displayTemp(alarm);
  218.                             }
  219. if(shu==3)
  220. {
  221.       shu=0;            
  222. }
  223.      if(temp>count||(temp<alarm))
  224. {
  225.      beep=0;
  226. }
  227.      else
  228.      beep=1;
  229. }
  230. }
复制代码
temp.zip (103.74 KB, 下载次数: 16)




评分

参与人数 1黑币 +1 收起 理由
jscsd226 + 1 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:234075 发表于 2018-6-25 12:57 | 只看该作者
如果读取数据有误会显示不正确的数字,但如果显示多余的小数点时,就应该是你的数码管显示数组问题。protues大多用的共阴极,你uchar code tab[]=定义的是共阳极代码
回复

使用道具 举报

板凳
ID:273292 发表于 2018-6-25 13:33 | 只看该作者
动态显示,扫描时间控制问题吧
回复

使用道具 举报

地板
ID:358231 发表于 2018-6-25 13:41 | 只看该作者
延时时间加长一点试一下
回复

使用道具 举报

5#
ID:358386 发表于 2018-6-25 13:45 | 只看该作者
延时有问题
回复

使用道具 举报

6#
ID:266660 发表于 2018-6-25 14:37 | 只看该作者
延时最好500ms
回复

使用道具 举报

7#
ID:234075 发表于 2018-6-25 14:39 | 只看该作者
zhb2004xp 发表于 2018-6-25 12:57
如果读取数据有误会显示不正确的数字,但如果显示多余的小数点时,就应该是你的数码管显示数组问题。protue ...

不好意思,看的不仔细
回复

使用道具 举报

8#
ID:358475 发表于 2018-6-25 14:56 | 只看该作者
应该是延时的问题
回复

使用道具 举报

9#
ID:358699 发表于 2018-6-25 18:51 | 只看该作者
可以改变延时时间再调调
回复

使用道具 举报

10#
ID:326301 发表于 2018-6-25 19:07 | 只看该作者
如果只是最高位显示有问题的话,看看是不是超数值了
回复

使用道具 举报

11#
ID:357189 发表于 2018-6-25 20:28 | 只看该作者
zhb2004xp 发表于 2018-6-25 12:57
如果读取数据有误会显示不正确的数字,但如果显示多余的小数点时,就应该是你的数码管显示数组问题。protue ...

好的 我试一试 共阴极
回复

使用道具 举报

12#
ID:357189 发表于 2018-6-25 20:29 | 只看该作者
穆刃离 发表于 2018-6-25 14:56
应该是延时的问题

好嘞 谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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