私は 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);
}
}