1

我正在为一个计数为 99 的两位数七段显示器编码,它在一个足够快的计时器函数中被调用,因此两个数字同时显示而没有闪烁。但是,对于分数为 0 到 9 的情况,显示器没有输出我想要的正确数字,它显示在 SSD 的右侧,但是一旦达到 10,它就会显示 11 而不是 10,所以它正在显示左右两边的十位数字。我不确定我的代码中的错误是什么,因此我需要修复它以显示右侧数字的正确数字。我得到了左侧十位数的正确显示,所以唯一的问题是右侧。

// 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 回答