標(biāo)題: 單片機(jī)驅(qū)動(dòng)數(shù)碼管有一段微亮,如何修改程序? [打印本頁]

作者: 389156621    時(shí)間: 2022-11-8 21:40
標(biāo)題: 單片機(jī)驅(qū)動(dòng)數(shù)碼管有一段微亮,如何修改程序?
共陰極數(shù)碼管做數(shù)字時(shí)鐘有一段微亮。仿真沒有問題,實(shí)物出現(xiàn)這樣現(xiàn)象,單片機(jī)程序如下:

單片機(jī)源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. sbit P0_0 = P0^0;
  4. sbit P0_1 = P0^1;
  5. sbit P0_2 = P0^2;
  6. sbit P0_3 = P0^3;
  7. sbit P0_4 = P0^4;
  8. sbit P0_5 = P0^5;

  9. sbit key_hour=P3^2;//s1
  10. sbit key_min=P3^3;//s2
  11. sbit key_sec=P3^4;//s3
  12. sbit key_rst=P3^5;//s4
  13. static unsigned char second,minute,hour;
  14. unsigned int tcount;
  15. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  16. void delay(uchar i)
  17. {
  18.   uchar j,k;
  19.   for(j=i;j>0;j--)
  20.     for(k=125;k>0;k--);
  21. }

  22. void display()
  23. {

  24.    P1=table[hour/10];
  25.    P0_0 = 0;
  26.    delay(5);
  27.    P0_0 = 1;

  28.    P1=(table[hour%10]|0x80);
  29.    P0_1 = 0;
  30.    delay(5);
  31.    P0_1 = 1;

  32.    P1=table[minute/10];
  33.    P0_2 = 0;
  34.    delay(5);
  35.    P0_2 = 1;

  36.    P1=(table[minute%10]|0x80);
  37.    P0_3 = 0;
  38.    delay(5);
  39.    P0_3 = 1;
  40.         
  41.          P1=table[second/10];
  42.    P0_4 = 0;
  43.    delay(5);
  44.    P0_4 = 1;

  45.    P1=table[second%10];
  46.    P0_5 = 0;
  47.    delay(5);
  48.    P0_5 = 1;

  49. }
  50. void main(void)
  51. {
  52.         
  53.                 TMOD=0x02;
  54.     TH0=0x06;
  55.     TL0=0x06;
  56.     TR0=1;
  57.     ET0=1;
  58.     EA=1;
  59. //hour=16,minute=48,second=0;        
  60. while(1)
  61. {
  62.         display();
  63.          
  64.                                          if(key_hour==0)
  65.                 {
  66.                         delay(10);
  67.                         if(key_hour==0)
  68.                         {
  69.                                 hour++;
  70.                                 if(hour==24)        hour=0;
  71.                         }
  72.                         while(!key_hour);
  73.                 }
  74.                                 if(key_min==0)
  75.                 {
  76.                         delay(10);
  77.                         if(key_min==0)
  78.                         {
  79.                                 minute++;
  80.                                 if(minute==60)        minute=0;
  81.                         }
  82.                         while(!key_min);
  83.                 }
  84.                                 if(key_sec==0)
  85.                 {
  86.                         delay(10);
  87.                         if(key_sec==0)
  88.                         {
  89.                                 second++;
  90.                                 if(second==24)        second=0;
  91.                         }
  92.                         while(!key_sec);
  93.                 }
  94.                         if(key_rst==0)
  95.                 {
  96.                         delay(10);
  97.                         if(key_rst==0)
  98.                         {
  99.                                 hour=0;
  100.                                 minute=0;
  101.                                 second=0;
  102.                         }
  103.                         while(!key_rst);
  104.                 }
  105. }
  106. }

  107. void t0(void) interrupt 1 using 0
  108.   {        
  109.                   tcount++;
  110.                            if(tcount==5000)
  111.           {
  112.                         tcount=0;
  113.             second++;
  114.                  if(second==60)
  115.                   {
  116.                                 second=0;
  117.                     minute++;
  118.                     if(minute==60)
  119.                          {
  120.                                  minute=0;
  121.                            hour++;
  122.                           if(hour==24)
  123.                            {
  124.                                  hour=0;minute=0;second=0;
  125.                            }
  126.                          }
  127.                   }
  128.           }
  129.         }
復(fù)制代碼

        

52f355ebcbe0952933359fef078141a.jpg (339.58 KB, 下載次數(shù): 102)

52f355ebcbe0952933359fef078141a.jpg

作者: 人中狼    時(shí)間: 2022-11-8 22:20
消隱時(shí)間不夠
作者: Hephaestus    時(shí)間: 2022-11-8 22:20
不太像是軟件問題,不做顯示代碼,看這個(gè)段是否還是微亮???
作者: 君工創(chuàng)    時(shí)間: 2022-11-8 22:31
用萬用表檢查一下硬件電路可以知道是不是硬件問題。
作者: 389156621    時(shí)間: 2022-11-8 23:22
這是讓它顯示全8的實(shí)物圖,還是這一段有問題,電路問題還是數(shù)碼管問題?

15e7375b4eaa72a8cdddf3528d0f51a.jpg (4.87 MB, 下載次數(shù): 98)

15e7375b4eaa72a8cdddf3528d0f51a.jpg

作者: 389156621    時(shí)間: 2022-11-8 23:38
讓它顯示全8還是有問題

15e7375b4eaa72a8cdddf3528d0f51a.jpg (4.87 MB, 下載次數(shù): 94)

15e7375b4eaa72a8cdddf3528d0f51a.jpg

作者: 輝芒微    時(shí)間: 2022-11-9 08:11
389156621 發(fā)表于 2022-11-8 23:38
讓它顯示全8還是有問題

有問題數(shù)碼管和其他位置的互換一下,確認(rèn)下是不是排除一下是不是硬件問題

作者: hgig    時(shí)間: 2022-11-9 08:15
軟件應(yīng)該是沒有太大問題,萬用表查一下硬件是否出現(xiàn)問題
作者: zhxiufan    時(shí)間: 2022-11-9 09:49
第一,沒有消隱處理。第二,延時(shí)函數(shù)放錯(cuò)了地方,應(yīng)該放在鎖存之后。
作者: yzwzfyz    時(shí)間: 2022-11-9 11:15
多為硬件不良。
作者: gongnn    時(shí)間: 2022-11-9 13:17
很大可能性是焊接時(shí)間過長,對(duì)應(yīng)引腳內(nèi)LED燈芯損壞了。
作者: 389156621    時(shí)間: 2022-11-9 16:32
我再試試,感謝各位大佬。




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