找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1538|回复: 3
收起左侧

请问大家为什么我的数码管显示的不正常啊,是程序哪出问题了吗

[复制链接]
ID:354521 发表于 2018-6-21 23:06 | 显示全部楼层 |阅读模式
    本来应该是应该显示几个数而且可调节,但是一直在抖动,这是程序
  1. #define uchar unsigned char
  2. #define uint unsigned int
  3. sbit DQ=P1^7;
  4. sbit key1=P1^3;
  5. sbit key2=P1^4;
  6. sbit dianji=P3^1;
  7. float ff;
  8. uint y3;
  9. uchar shi,ge,xiaoshu,sheding=20,gaonum,dinum;
  10. uchar code dispcode[]={    //∂Œ¬Î
  11. 0x3f,0x06,0x5b,0x4f,
  12. 0x66,0x6d,0x7d,0x07,  
  13. 0x7f,0x6f,0x77,0x7c,
  14. 0x39,0x5e,0x79,0x71};  
  15. uchar code tablel[]={ //¥ˉ–° ˝μ„μƒ∂Œ¬Î
  16. 0xbf,0x86,0xdb,0xcf,
  17. 0xe6,0xed,0xfd,
  18. 0x87,0xff,0xef};
  19. uchar dispbitcode[]={    //Œa—°
  20. 0xfe,0xfd,0xfb,0xf7,
  21. 0xef,0xdf,0xbf,0x7f};   
  22. uchar dispbuf[8]={0,0,0,0,0,0,0,0};  
  23. void Delay(uint num)// —” ±∫Ø ˝
  24. {
  25.          while(--num);
  26. }
  27. void digitalshow(uchar a4,uchar a3,uchar a2,uchar a1,uchar a0)
  28. {
  29.          dispbuf[0]=a0;  
  30.          dispbuf[1]=a1;
  31.           dispbuf[2]=a2;  
  32.         dispbuf[3]=a3;  
  33.         dispbuf[4]=a4;  
  34.          
  35.          P2=0xff;
  36.          P0=dispcode[dispbuf[0]];  
  37.         P2=dispbitcode[5];  
  38.         Delay(1);  
  39.   
  40.          P2=0xff;
  41.          P0=dispcode[dispbuf[1]];
  42.          P2=dispbitcode[4];
  43.          Delay(1);  
  44.          P2=0xff;
  45.          P0=dispcode[dispbuf[2]];
  46.          P2=dispbitcode[2];  
  47.         Delay(1);  

  48.          P2=0xff;
  49.          P0=tablel[dispbuf[3]];
  50.          P2=dispbitcode[1];  
  51.         Delay(1);
  52.          P2=0xff;
  53.          P0=dispcode[dispbuf[4]];  
  54.         P2=dispbitcode[0];  
  55.         Delay(1);
  56. }
  57. void dmsec(uint count)  
  58. {      
  59.          uint i;   // 1ms—” ±
  60.          while(count--)   
  61.         {  
  62.                 for(i=0;i<125;i++){}  
  63.         }
  64. }  
  65. void tmreset(void)
  66. {
  67.         DQ=0;
  68.         Delay(90);
  69.         DQ=1;
  70.         Delay(4);
  71. }
  72. void tmpre(void)
  73. {                    
  74.         while(DQ);
  75.          while(~DQ);
  76.          Delay(4);  
  77. }  
  78. bit tmrbit(void)
  79. {
  80.          uint i;  
  81.         bit dat;  
  82.         DQ=0;
  83.          i++;    // i++;¥Û∏≈1us  
  84.         DQ=1;  
  85.         i++;  
  86.         i++;      
  87.         dat=DQ;
  88.          Delay(8);              
  89.         return(dat);
  90. }  
  91. uchar tmrbyte(void)  //∂¡“a∏ˆ±»Ãÿ
  92. {           
  93.         uchar i,j,dat;  
  94.         dat=0;
  95.          for(i=1;i<=8;i++)   
  96.         {   
  97.                 j=tmrbit();   
  98.                 dat=(j<<7)|(dat>>1);  
  99.         }
  100.          return(dat);
  101. }  
  102. void tmwbyte(uchar dat)  //–¥“a∏ˆ±»Ãÿ
  103. {               
  104.         uint i;  
  105.         uchar j;  
  106.         bit testb;
  107.          for(j=1;j<=8;j++)   
  108.         {   
  109.                 testb=dat&0x01;   
  110.                 dat=dat>>1;  // ¥”μÕŒaø™ o   
  111.                 if(testb)       // Write 1   
  112.                 {   
  113.                         DQ=0;   // œ»¿≠μÕ     
  114.                         i++;   
  115.                         i++;  // >1us                              
  116.                         DQ=1;   
  117.                         Delay(4);              
  118.                 }   
  119.                 else            // Write 0   
  120.                 {   
  121.                         DQ=0;
  122.                            Delay(4);               
  123.                         DQ=1;   
  124.                         i++;   
  125.                         i++;   // ‘Ÿ¿≠∏fl                           
  126.                 }  
  127.         }
  128. }
  129. void tmstart(void)    //ds1820ø™ o◊™aa
  130. {   
  131.          dmsec(1);                  
  132.         tmreset();     
  133.         tmpre();     
  134.         dmsec(1);
  135.     tmwbyte(0xcc);   // skip rom      
  136.         tmwbyte(0x44);   // ◊™aa
  137. }
  138. uchar tmrtemp(void)     //∂¡»°Œ¬∂»
  139. {                    
  140.         uchar a,b;  
  141.         tmreset();  
  142.         tmpre();  
  143.         dmsec(1);
  144.          tmwbyte(0xcc);   // skip rom
  145.          tmwbyte(0xbe);   // ◊™aa  
  146.         a=tmrbyte();   // LSBμÕ8Œa  
  147.         b=tmrbyte();  // MSB∏fl8Œa  
  148.         y3=b;  
  149.         y3<<=8;  
  150.         y3=y3|a;
  151.          ff=y3*0.0625;  
  152.         y3=ff*10+0.5;  
  153.         return(y3);
  154. }
  155. void keyscan(void)
  156. {
  157.          if(key1==0)  
  158.         {   
  159.                 dmsec(5);   
  160.                 if(key1==0)   
  161.                 {   
  162.                         sheding++;   
  163.                         if(sheding==100)     
  164.                         sheding=20;   
  165.                 }
  166.                 while(!key1);  
  167.         }
  168.          else if(key2==0)  
  169.         {   
  170.                 dmsec(5);   
  171.                 if(key2==0)   
  172.                 {   
  173.                         sheding--;   
  174.                         if(sheding==0)     
  175.                         sheding=20;   
  176.                 }   
  177.                 while(!key2);   
  178.         }
  179. }
  180. void deal(uint tmp)   //Œ¬∂»¥¶¿ì
  181. {
  182.          if(tmp<=sheding)  
  183.         {   
  184.                 gaonum=0;   
  185.                 dinum=4;  
  186.         }
  187.          else if((tmp>sheding)&&(tmp<=(sheding+5)))  
  188.         {   
  189.                 gaonum=1;   
  190.                 dinum=3;  
  191.         }
  192.          else if((tmp>(sheding+5))&&(tmp<=(sheding+10)))  
  193.         {   
  194.                 gaonum=2;   
  195.                 dinum=2;  
  196.         }
  197.          else if((tmp>(sheding+10))&&(tmp<=(sheding+15)))  
  198.         {   
  199.                 gaonum=3;   
  200.                 dinum=1;  
  201.         }  
  202.         else  
  203.         {   
  204.                 gaonum=4;  
  205.                  dinum=0;  
  206.         }
  207. }
  208. void dianjik()    //μáa˙øÿ÷∆
  209. {
  210.          uchar q,i;
  211.          for(q=0;q<dinum;q++)  
  212.         {
  213.                   dianji=0;
  214.                  digitalshow(shi,ge,xiaoshu,sheding/10,sheding%10);   
  215.                 for(i=255;i>0;i--)   
  216.                 {
  217.                            digitalshow(shi,ge,xiaoshu,sheding/10,sheding%10);      
  218.                   }  
  219.         }
  220.          for(q=0;q<gaonum;q++)  
  221.         {
  222.                   dianji=1;
  223.                   digitalshow(shi,ge,xiaoshu,sheding/10,sheding%10);   
  224.                 for(i=255;i>0;i--)   
  225.                 {
  226.                            digitalshow(shi,ge,xiaoshu,sheding/10,sheding%10);      
  227.                   }  
  228.         }
  229. }
  230. void main(void)  
  231. {
  232.          uint last;  
  233.         dianji=0;  
  234.         tmstart();   
  235.         dmsec(450);   // ≥ı oaØds18b20  
  236.         while(1)  
  237.         {     
  238.                 tmstart();   // ds1820ø™ o◊™aa   
  239.                 dmsec(2);   
  240.                 last=tmrtemp()+256; // ∂¡»°Œ¬∂»   
  241.                 shi=last/100;   
  242.                 ge=(last%100)/10;   
  243.                 xiaoshu=(last%100)%10;   
  244.                 keyscan();   
  245.                 dmsec(2);   
  246.                 deal(last/10);   
  247.                 dianjik();  
  248.         }      
  249. }
复制代码


758A90FFBEB95D33EC1A062797E7875F-1.jpg
回复

使用道具 举报

ID:7485 发表于 2018-6-22 08:36 | 显示全部楼层
注释都是乱码。

电脑软件仿真正确吗?
回复

使用道具 举报

ID:320306 发表于 2018-6-22 08:38 | 显示全部楼层
延时长了!!!!!!!!!!!!!!!!
回复

使用道具 举报

ID:305987 发表于 2018-6-22 09:01 | 显示全部楼层
延时改短点,抖动是因为频率太低了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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