PICによる7セグLED3桁制御
PICによる7セグLED3桁制御
度々こちらに、お世話になっております。
今回は、3桁のLEDを1から999までカウント表示する
プログラムに取組んでいるところ希望通りに、動いてはくれません。
このソースのベースは2桁(1から99までカウントUP)の
ソースコードを変更して、3桁表示させる様にしてみました。
コード概要はtimer0割込みで3.2msのインターバルタイムの間、
LEDをダイナミック点灯させ、timer1では、100msのインターバルタイムを
10回繰り返し(1秒毎に)counterを1プラスしてLEDの表示を1ずつ
増して999まで表示後、また000から繰返すと言う単純な動作のものです。
main()関数内はtimer0とtimer1の割込み設定及び
割込み開始、許可を繰返すだけです。
問題の#timer0,#timer1割込み関数処理部分における実行結果は、
000から111と言う具合に3桁が同時にカウント表示されてしまい、
しかも繰り上がる時間は1秒毎の筈が、100秒毎になります。
このコードはCCS-Cコンパイラに準拠していて、
標準Cとは多少異なる部分があり解りにくいと思いますが
どうかどなた様からも検証より不具合コード部分のご指摘と修正を
頂くことが出来るなら、大変光栄に思います。
そこで、PICにおけるconfigu部分は省き、概ねのコードを記します。
////
1:static long int number;
2:static int counter;
3:int const LED_SEG[11]= {0x7E,0xCC,...略}
4:#int_timer0
5:void isr()
{
6:static int a,b,c = 0;
7:int x;
8:out_low(PIN_C0); // LED 1桁目off
9:out_low(PIN_C1); // LED 2桁目0ff
10:out_low(PIN_C2);// LED 3桁目0ff
11:a = number % 10;
12:x = number/10;
13:b = x % 10;
14:c = x / 10;
15:output_b(LED_SEG[a]);
16:output_high(PIN_C0);//1桁目ON
17:output_b(LED_SEG[b]);
18:output_high(PIN_C1);//2桁目ON
19:output_b(LED_SEG[c]);
20:output_high(PIN_C2);//3桁目ON
}
21:#int_timer1
22:void isr()
{
23:set_timer1(0x0BDC);//100ms再設定
24:counter++;
25:if(counter>9)//10回か
{
26:counter = 0;
27:number++;
}
28:if(number>1000)
{
29:number = 0;
}
}
30:void main()
{
略
31:setup_timer0(3.2msセット)
32:setup_timer1(100msセット)
33:timer0割り込み許可
34:timer1割り込み許可
35:GLOBAL全体割り込み許可
36:while(1){}
}
////
以上宜しくお願いいたします。
お礼
すごく気になる本ですね! 1ヶ月前に2が出てるみたいなので、 本屋でまずどんな本なのかを見て購入を検討したいと思います。 貴重な情報ありがとうございます。