標(biāo)題: 單片機(jī)動(dòng)態(tài)數(shù)碼管問題 [打印本頁]

作者: Yuri0105    時(shí)間: 2020-2-3 15:59
標(biāo)題: 單片機(jī)動(dòng)態(tài)數(shù)碼管問題
看了普中的教學(xué)視頻,想顯示20.20.720.6
改了一下LSA的值,但是顯示變成了如圖
以下是代碼
小白求答!
#include "REG52.H"
typedef unsigned char u8;
typedef unsigned int u16;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                          0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

       
        void delay(u16 i)
        {
                while(i--);
        }
        void DigDisplay()
        {
                u8 i;
                for(i=0;i<8;i++)
                {
                        switch(i)
                        {
                                case(0):
                                        LSA=0;LSB=1;LSC=0;break;
                                case(1):
                                        LSA=0;LSB=0;LSC=0;break;
                                case(2):
                                        LSA=0;LSB=1;LSC=0;break;
                                case(3):
                                        LSA=0;LSB=0;LSC=0;break;
                                case(4):
                                        LSA=1;LSB=1;LSC=1;break;
                                case(5):
                                        LSA=0;LSB=1;LSC=0;break;
                                case(6):
                                        LSA=0;LSB=0;LSC=0;break;
                                case(7):
                                        LSA=0;LSB=1;LSC=1;break;
                        }
                        P0=smgduan[i];
                        delay(100);
                        P0=0x00;
                }
        }
        void main()
        {
                while(1)
                {
                        DigDisplay();
                }
        }

1580716609743.jpg (798.41 KB, 下載次數(shù): 132)

1580716609743.jpg

作者: wulin    時(shí)間: 2020-2-3 17:29
位碼不可以隨意改動(dòng),想改變顯示字符只能改段碼。
  1. #include "REG52.H"
  2. typedef unsigned char u8;
  3. typedef unsigned int u16;

  4. sbit LSA=P2^2;
  5. sbit LSB=P2^3;
  6. sbit LSC=P2^4;

  7. u8 code smgduan[]={0x3f|0x80,/*0+點(diǎn)*/0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  8.                           0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

  9. u8 data dis_buf[8]={2,0,2,0,7,2,0,6};//20.20.720.6
  10.         
  11. void delay(u16 i)
  12. {
  13.         while(i--);
  14. }
  15. void DigDisplay()
  16. {
  17.         u8 i;
  18.         for(i=0;i<8;i++)
  19.         {
  20.                 switch(i)
  21.                 {
  22.                         case(0):
  23.                                 LSA=1;LSB=1;LSC=1;break;
  24.                         case(1):
  25.                                 LSA=0;LSB=1;LSC=1;break;
  26.                         case(2):
  27.                                 LSA=1;LSB=0;LSC=1;break;
  28.                         case(3):
  29.                                 LSA=0;LSB=0;LSC=1;break;
  30.                         case(4):
  31.                                 LSA=1;LSB=1;LSC=0;break;
  32.                         case(5):
  33.                                 LSA=0;LSB=1;LSC=0;break;
  34.                         case(6):
  35.                                 LSA=1;LSB=0;LSC=0;break;
  36.                         case(7):
  37.                                 LSA=0;LSB=0;LSC=0;break;
  38.                 }
  39.                 P0=smgduan[dis_buf[i]];
  40.                 delay(100);
  41.                 P0=0x00;
  42.         }
  43. }
  44. void main()
  45. {
  46.         while(1)
  47.         {
  48.                 DigDisplay();
  49.         }
  50. }
復(fù)制代碼





作者: odfggf    時(shí)間: 2020-2-3 20:20
switch的case幾種狀態(tài)都重復(fù)了,顯示不亂才怪
作者: csmyldl    時(shí)間: 2020-2-3 20:58
把20.20.720.6對應(yīng)的段碼:0x5b,0xbf,0x5b,0xbf,0x07,0x5b,0xbf,0x7d作為數(shù)組,
                              case(0):
                                        LSA=0;LSB=0;LSC=0;break;
                                case(1):
                                        LSA=1;LSB=0;LSC=0;break;
                                case(2):
                                        LSA=0;LSB=1;LSC=0;break;
                                case(3):
                                        LSA=1;LSB=1;LSC=0;break;
                                case(4):
                                        LSA=0;LSB=0;LSC=1;break;
                                case(5):
                                        LSA=1;LSB=0;LSC=1;break;
                                case(6):
                                        LSA=0;LSB=1;LSC=1;break;
                                case(7):
                                        LSA=1;LSB=1;LSC=1;break;
                        }
這樣改了就可實(shí)現(xiàn)
作者: guangshi_wq    時(shí)間: 2020-2-3 22:56
我?guī)湍闩昧?#include "REG52.H"
typedef unsigned char u8;
typedef unsigned int u16;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 a=0,b=1,c=2,d=3,e=4,f=5,g=6,h=7;//使用八個(gè)數(shù)進(jìn)行位置確定

u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                          0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};


void delay(u16 i)
{
        while(i--);
}
void DigDisplay()
{
        u8 i;
        for(i=0;i<8;i++)
        {
                switch(i)
                {
                        case(0):
                                LSA=0;LSB=1;LSC=0;break;
                        case(1):
                                LSA=0;LSB=0;LSC=0;break;
                        case(2):
                                LSA=0;LSB=1;LSC=0;break;
                        case(3):
                                LSA=0;LSB=0;LSC=0;break;
                        case(4):
                                LSA=1;LSB=1;LSC=1;break;
                        case(5):
                                LSA=0;LSB=1;LSC=0;break;
                        case(6):
                                LSA=0;LSB=0;LSC=0;break;
                        case(7):
                                LSA=0;LSB=1;LSC=1;break;
                }
                P0=smgduan[i];
                delay(100);
                P0=0x00;
        }
}

void display()
{
        u8 j;
        for(j=0;j<8;j++)
        {
        switch(j)         //位選,選擇點(diǎn)亮的數(shù)碼管,
        {
            case(0):
                    LSA=0;LSB=0;LSC=0;P0=smgduan[a] ;break;//
            case(1):
                    LSA=1;LSB=0;LSC=0; P0=smgduan[b];break;//
            case(2):
                    LSA=0;LSB=1;LSC=0; P0=smgduan[c];break;
            case(3):
                    LSA=1;LSB=1;LSC=0; P0=smgduan[d];break;//
            case(4):
                    LSA=0;LSB=0;LSC=1; P0=smgduan[e];break;//
            case(5):
                    LSA=1;LSB=0;LSC=1; P0=smgduan[f];break;//
            case(6):
                    LSA=0;LSB=1;LSC=1; P0=smgduan[g];break;//
            case(7):
                    LSA=1;LSB=1;LSC=1; P0=smgduan[h];break;//
        }
                delay(100);
                P0=0x00;
        }
}

void main()
{
        while(1)
        {
             display();
              //  DigDisplay();
        }
}

問題顯示.JPG (34.48 KB, 下載次數(shù): 128)

你開發(fā)板上的結(jié)果

你開發(fā)板上的結(jié)果

正確的顯示.JPG (45.17 KB, 下載次數(shù): 132)

改好后的效果

改好后的效果

作者: guangshi_wq    時(shí)間: 2020-2-3 23:12
wulin 發(fā)表于 2020-2-3 17:29
位碼不可以隨意改動(dòng),想改變顯示字符只能改段碼。

0加點(diǎn)真是經(jīng)典,站在初學(xué)者的角度,別太搞好了,給他啟發(fā)就可以了.




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