0

カスケード接続された 2 つのシフト レジスタを使用して SSD ディスプレイをコーディングしています。PIC コンパイラに mikroC を使用しています。コードで最大 4 桁の数字の静的シーケンスを表示できます 4つの数字の静的表示

    #define SHIFT_CLOCK PORTB.F1    //Clock Connection of 74HC595 SSD Driver
    #define SHIFT_LATCH PORTB.F3    //Latch Connection of 74HC595 SSD Driver
    #define SHIFT_DATA PORTB.F2    //Data Connection of 74HC595 SSD Driver

    char array4[4] = {6, 91, 79, 102};           //Display 1234 on SSD
    char digit[4] = {0xFE, 0xFD, 0xFB, 0xF7};   //Switch on the SSD digits one by one

    char i,j,temp,flag1,flag2;

    void InitTimer0()
    {
     OPTION_REG     = 0x86;
     TMR0           = 6;
     INTCON         = 0xA0;
    }

    void latch595()
    {
     SHIFT_LATCH = 1;
     Delay_us(1);
     SHIFT_LATCH = 0;
    }

    void shiftdata595(unsigned char _shiftdata)
    {
     int i;
     unsigned char temp;
     temp = _shiftdata;
     i=8;
     while (i>0)
     {
      if (temp.F7==0)
       {
        SHIFT_DATA = 0;
       }
       else
       {
        SHIFT_DATA = 1;
       }
       temp = temp<<1;
       SHIFT_CLOCK = 1;
       SHIFT_CLOCK = 0;
       i--;
     }
    }

    void Interrupt()
    {
     if (TMR0IF_bit)
     {
      TMR0IF_bit  = 0;
      TMR0        = 6;
      flag1 = 1;
      flag2 = 1;
     }
    }

    void main()
    {
     TRISB = 0;
     TRISC.F1 = 1;
     InitTimer0();
     while (1)
     {
      if (PORTC.F1==0)
      {
       if (flag2==1)
       {
        shiftdata595(digit[i]);
        i++;
        if(i==4)
        {
         i=0;
        }
        if (flag1==1)
        {
         shiftdata595(array4[j]);
         latch595();
         j++;
         if (j==4)
         {
          j=0;
         }
        }
       }
      }
      else if(PORTC.F1==1)
      {
       shiftdata595(0);
       shiftdata595(0);
       latch595();
      }
     }
    }

array4[] にさらに数字を追加する場合 (最大 9 まで)、数字を順番に左にスクロールする必要があります。配列をシフトしてみました

temp = array4[0];
for (n=1; n<8; n++)
{
 array4[j-1] = array[j];
}
array[9] = temp;

このコードが配列を左シフトし、表示がスクロールすることを望んでいましたが、表示がごちゃごちゃになっているだけです。遅延を追加すると、スクロールせずに数字が表示されることがわかります。

基本的なアルゴリズムが間違っているか、コードを変更することで使用できますか?

4

1 に答える 1