1

私は 99 までカウントする 2 桁の 7 セグメント ディスプレイ用にコーディングしています。これは十分に高速なタイマー関数で呼び出されているため、両方の数字が同時に表示され、ちらつきがありません。ただし、ディスプレイは正しい数値を出力していません。スコアが 0 ~ 9 の場合に、これを SSD の右側に表示したいのですが、10 に達すると、10 ではなく 11 と表示されるため、表示されています。左右両方の十の位。コードのエラーが何であるかわからないので、修正する必要があるため、右側のエラーの正しい番号が表示されます。ただし、左側の十の位は正しく表示されているので、問題は右側だけです。

// 0 = right digit; 1 = left digit.
volatile uint8_t seven_seg_cc = 0; 

    void seven_segment_display(){
        uint8_t score = get_score();
        seven_seg_cc = 1 ^ seven_seg_cc;

        if (score < 10){
            PORTC = seven_segment_display_one[score];
        }
        else if(score >= 10){
            if(seven_seg_cc == 0){
                //Display right dig
                PORTC = seven_segment_display_one[(score/10)%10];
            }else{
                //Display left dig
                PORTC = seven_segment_display_one[score/10];
            }
            PORTA = (seven_seg_cc << DDRA4);
        }
     }


4

1 に答える 1

3

右端の桁にはモジュラスだけが必要です

        if(seven_seg_cc == 0){
            //Display right dig
            //PORTC = seven_segment_display_one[(score/10)%10];
            PORTC = seven_segment_display_one[score%10];
        }else{
            //Display left dig
            PORTC = seven_segment_display_one[score/10];
        }
于 2020-06-09T07:00:14.060 に答える