それを高速に切り替える がある。

今回の場合 (上図のやつ)を用いる
※time_datは表示する数字を格納するグローバル変数。
dig何とかは上の図で言うところのCOM1 , COM2 …です。
接続したセグメントLEDに電流を流すか(表示するか)を決める
このプログラムの場合、ボタンが押されるたびにtime_datが増える。
main(void){
while(1){
if(SW1 == SW_ON){ //ボタンが押されたら
time_dat++;
timer(5); //簡易的なチャタリング対策
while(SW1 == SW_ON); //ボタンが離されるまで
}
}
}
void intTRB(void){ //タイマRB割り込み関数
static keta = 0; //どの桁を表示するか
disp_seg(keta , time_dat);
keta++;
if(keta > 3) keta = 0; //3という数字は何桁表示するかによって決まる
}
void dis_seg(int keta , int num){
dig0=dig1=dig2=dig3=OFF; //いったんすべてのLEDを消す
switch(keta){
case 0:
dig0 = ON;
p1 = seg[num%10];
break;
case 1:
dig1 = ON;
p1 = seg[(num/10)%10];
break;
case 2:
dig2 = ON;
p1 = seg[(num/100)%10];
break;
case 3:
dig3 = ON;
p1 = seg[(num/1000)%10];
break;
}
}