標(biāo)題: 單片機(jī)驅(qū)動的數(shù)碼管顯示異常,有亂碼 [打印本頁]

作者: 恐懼古兔子    時間: 2018-6-13 14:40
標(biāo)題: 單片機(jī)驅(qū)動的數(shù)碼管顯示異常,有亂碼


同樣的數(shù)字,四位數(shù)碼管正常,二位數(shù)碼管有亂碼,同時,顯示的數(shù)字順序與實際要顯示的數(shù)字順序不符合,單片機(jī)代碼如下:

  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  5. uchar code table1[]={50,3,25};
  6. uchar code table2[]={55,20,3};
  7. uchar a=50,b=55,n=0,m=0;
  8. uchar j,k,c3,c2,c1,c0;
  9. uchar pp;

  10. void delay(unsigned int i)
  11. {
  12.         int j;
  13.         for(i;i>0;i--)
  14.                 for(j=20;j>0;j--);
  15. }

  16. void display(uchar x,uchar y,uchar o,uchar p)
  17. {
  18.         P2=0x01;
  19.         P0=table[p];
  20.         delay(10);
  21.       
  22.         P2=0x04;
  23.         P0=table[o];
  24.         delay(10);

  25.         P2=0x08;
  26.         P0=table[y];
  27.         delay(10);

  28.         P2=0x02;
  29.         P0=table[x];
  30.         delay(10);
  31. }

  32. void main()
  33. {
  34.         TMOD=0x01;                                                  
  35.         TH0=(65536-46080)/256;
  36.         TL0=(65536-46080)%256;
  37.         ET0=1;                        
  38.         EA=1;
  39.         TR0=1;                       
  40.         while(1)
  41.         {
  42.                 if(TF0==1)                       
  43.                 {
  44.                         TF0=0;
  45.                         pp++;
  46.                         TH0=(65536-46080)/256;
  47.                         TL0=(65536-46080)%256;
  48.                 }
  49.                 if(pp==20)
  50.                 {      
  51.                         pp=0;
  52.                         a--;
  53.                         b--;
  54.                         if(a==0)
  55.                         {
  56.                                 n++;
  57.                                 a=table1[n];                              
  58.                                 if(n==2)
  59.                                 {
  60.                                         n=-1;
  61.                                 }         
  62.                         }
  63.                         if(b==0)
  64.                         {                                                                       
  65.                                 m++;
  66.                                 b=table2[m];                       
  67.                                 if(m==2)
  68.                                 {
  69.                                         m=-1;
  70.                                 }
  71.                         }
  72.                 }
  73.                 c0=a%10;                 
  74.                 c1=a/10;
  75.                 c2=b%10;
  76.                 c3=b/10;
  77.                 display(c1,c0,c2,c3);
  78.         }
  79. }
復(fù)制代碼






作者: wc86110    時間: 2018-6-13 22:25
選用不同類型的數(shù)碼管顯示出現(xiàn)亂碼也正常,就算用相同的數(shù)碼管顯示相同內(nèi)容,有時軟件也可能出現(xiàn)一些小異常
作者: 似曾相識的味道    時間: 2018-6-14 01:49
顯示的時候還原下引腳原來狀態(tài),俗稱清屏。就好了。也就是在賦值端口顯示后全部口置1.然后再顯示下一位數(shù)。
作者: 1402187883    時間: 2018-6-14 09:14
顯示的時候還原下引腳原來狀態(tài),俗稱清屏。就好了。也就是在賦值端口顯示后全部口置1.然后再顯示下一位數(shù)。
作者: ctzs102    時間: 2018-6-14 09:43
顯示下一組數(shù)字前,先把之前的數(shù)字清了。亂碼這個現(xiàn)象就是視覺暫存
作者: zhb2004xp    時間: 2018-6-14 10:11
樓主的程序?qū)懙奶祚R行空,排序有點(diǎn)亂,我倒是擼了半天,82行為什么是“c1,c0,c2,c3”,而不是大家習(xí)慣的C0,C1,C2,C3 ?數(shù)碼管顯示的排序也是01H,04H,08H最后是02H,最后在4位的數(shù)碼管上顯示順序應(yīng)該是b的十位,a的十位,b的個位,a的個位,不知道這個是不是你想要的顯示結(jié)果?兩個兩位數(shù)碼管分別顯示b的十位,a的十位和b的個位,a的個位;
至于為什么顯示亂碼,可能是P0口電流過大的原因,建議樓主在P0口和數(shù)碼管位選中間也加上一個74HC593試試;
再問問樓主,為啥不寫中斷服務(wù)程序,而習(xí)慣用TF0的查詢法
作者: 恐懼古兔子    時間: 2018-6-15 08:59
zhb2004xp 發(fā)表于 2018-6-14 10:11
樓主的程序?qū)懙奶祚R行空,排序有點(diǎn)亂,我倒是擼了半天,82行為什么是“c1,c0,c2,c3”,而不是大家習(xí)慣的C0, ...

初學(xué)者,正在努力,我想顯示的其實是兩個倒計時,順序應(yīng)該是a的十位,a的個位,b的十位,b的個位,上面的二位數(shù)碼管a倒計時,下面那個b倒計時,圖中四位數(shù)碼管是正確的顯示順序,倒計時也是對的,但是如果程序按照我想的順序?qū),結(jié)果順序就是亂的,只有按上面代碼里的這個錯誤的順序,四位數(shù)碼管才有正確的順序。另外,我也試過加消影,就是在延時后加P0=0x00,或者P0=0xff,但是加前者,數(shù)碼管只顯示8和9,加后者只顯示”9“左下角缺的一節(jié),而如果加P2=0x00,就什么都不顯示了。實在想不明白,所以請求各路大神幫幫忙。
作者: 十尾丶    時間: 2018-6-15 09:50

顯示的時候還原下引腳原來狀態(tài),俗稱清屏。就好了。也就是在賦值端口顯示后全部口置1.然后再顯示下一位數(shù)。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1