PICによる7セグLED3桁制御

このQ&Aのポイント
  • PICによる7セグLED3桁制御のプログラムに問題があり、想定とは異なる動作となっている。タイマー割り込み処理の部分を修正するためのアドバイスを求めている。
  • 現在、PICによる7セグLED3桁制御のプログラムを作成しているが、期待通りに動作しない。timer0割込みとtimer1割込みの処理が問題の可能性がある。アドバイスをいただけないだろうか。
  • PICによる7セグLED3桁制御のプログラムで問題が発生している。timer0とtimer1の割込み処理部分が正しく動いていないようだ。修正案を教えてほしい。
回答を見る
  • ベストアンサー

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){} } //// 以上宜しくお願いいたします。

  • kodoku
  • お礼率80% (101/125)

質問者が選んだベストアンサー

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.3

回答1の者です。的はずれな回答をしてしまってすみません。 > なぜ割込みを抜けると3桁目の表示のままになるのでしょうか? 1桁目・2桁目を消灯させずに、3桁とも表示した状態にしてしまっているからです。 質問者さんのコードの実行結果を順を追って説明すると、 > 15:output_b(LED_SEG[a]); > 16:output_high(PIN_C0);//1桁目ON ここで、1桁目のLEDのみONになり、1桁目のLEDに、aが表示されます。 > 17:output_b(LED_SEG[b]); ここで、1桁目のLEDの表示内容がbに変わります。 > 18:output_high(PIN_C1);//2桁目ON ここで、2桁目もONになり、1桁目もONにしたままですから、1桁目と2桁目に、bが表示されます。 > 19:output_b(LED_SEG[c]); ここで、1桁目と2桁目の表示内容がcに変わります。 ここまで、15~19は、μ秒オーダで起こりますから、まず視認できません。 > 20:output_high(PIN_C2);//3桁目ON ここで、3桁目もONになり、1桁目・2桁目もONにしたままですから、1桁目・2桁目・3桁目、全てのLEDにcが表示されます。 以上で、割り込みルーチンが終わりますから、次の割り込みまでの3.2m秒間はこの状態が続きます。 以上のながれで、「3桁めの数字だけが全桁表示された」状態が続くことになります。 一方、回答2のコードでは、 割り込みルーチン冒頭で全桁をOFFにしたあと、状態に応じて「1つだけをONに」していますから、 割り込みを抜けた時点では、点灯しているLEDは1つだけという状態になってます。

kodoku
質問者

お礼

評価に則したご回答頂き、ありがとうございます。 もう一度ハード側をじっくり眺めていると、7セグLED3個は マイコン側とは8本線で3桁が共通線として接続されている事に、今更気づきました。 ここが今回の、ポイントでした。 3個がそれぞれ8本ずつ、独立してマイコンに接続されているのなら 1ルーチン内でも、それぞれ違う表示が同時に可能になりますが、 ダイナミック点灯方式では、1つの表示方法をONとOFFより瞬時に切り替えて それぞれの桁を使い分けるところが、ミソのはず。 考えではダイナミック方式になっていると思っていたのですが、 実際には3.2msの一瞬に最後行までを実行、ルーチンを抜ける時 PIN_C2(3桁目)値の信号が1桁目、2桁目へも反映させた状態でルーチンを抜ける。 ということで、1桁目と2桁目が9・9までは0・0・0表示のままで、桁上がりで 1・0・0になると1・1・1になる。したがって その間のカウント時間は100秒になる事が、理解できました。 つぎにPIN_C2が変化するまで100秒間は3桁同じ表示のまま。 と言う風に自分で解釈一応溜飲が下がり完結となりましたので ありがとうございました。

その他の回答 (2)

  • tadys
  • ベストアンサー率40% (856/2135)
回答No.2

タイマー0の割り込みルーチンが駄目です。 このままでは一回の割り込みの中で1桁目、2桁目、3桁目の表示を行っていて、 割り込みから抜けると3桁目の表示のままになってしまいます。 下記のように一回の割り込みでは一桁だけ表示するようにしましょう。 コンパイルはしていないのでエラーが有るかもしれません。 なお、全角スペースを使用しているのでタブか半角スペースに修正してください。 4:#int_timer0 5:void isr() { 6:static int a,b,c = 0;     static int state=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;     switch( state ){     case 0 : state++ ; 15:output_b(LED_SEG[a]); 16:output_high(PIN_C0);//1桁目ON     break ;     case 1 : state++ ; 17:output_b(LED_SEG[b]); 18:output_high(PIN_C1);//2桁目ON     break ;     default : state=0 ; 19:output_b(LED_SEG[c]); 20:output_high(PIN_C2);//3桁目ON     break ;     } }

kodoku
質問者

補足

早速、検証からご回答いただきましてありがとうございました。 switch文の判定により、caseの処理へと、ご教示のとおりコード追加修正後 評価いたしましたところ、見事に、1ずつカウントアップ動作表示する事ができ 大変感激いたしております。 該当のcase定数式をプラス1して、break;よりルーチンを抜けることで、 1回の割込み毎に1桁のみ表示すると言う風に、理解いたしました。 ところが、問題は解決したのですが、自分の中ではまだ、疑問が残ります。 ご回答の中で、修正前のコードでは、なぜ割込みを抜けると3桁目の表示 のままになるのでしょうか?timer1では1秒間のcounterアップよりnumberを1つ変化させるまで、 timer0の方は3.2ms毎の割込み処理を繰返し続けていて、その後number値の変化に対して桁表示式より 各桁を表示するものと考えるのですが、100秒毎に3桁同時に1つインクリメントとなる事に、 どうしても、合点がいきません! ここのところが、疑問のままでは、これでスッキリとはいきません。 どうか、愚な私に、お許しの範囲で結構ですので、もう少しアドバイス頂けるなら幸いに思います。

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

ソフトウェア的には問題なさそうですが、ハードウェア側はどうなっていますか? 質問のような状況からすると、LEDが3桁ともC2で駆動されてるように見受けられます。

kodoku
質問者

お礼

お目に留めていただき、ご回答ありがとうござました。 ハードウェア的には、問題ない、とは言い切れませんが delay()関数を使った3桁表示テストでは、プログラムどおり 動作できましたので、ハードは問題ないのではと判断しています。 3桁同時表示の問題が今一つ解決出来ていません。

関連するQ&A

  • 3桁7SEG時計(PIC16F648A)を作りた…

    3桁7SEG時計(PIC16F648A)を作りたい・・ 3桁時計を作りたいです。 割り込みを使って1秒を作って0:00から9:59まで表示する時計。 私はプログラムの方はあんまり得意ではないので、 ご教授の方よろしくお願いいたします。 以下、必要と思われる情報です。 Device:PIC16F648A マイクロチップテクノロジ コンパイラ:CCS社製PICC MATLAB+CCSコンパイラの環境です。 このハードウェアで0~999までカウント するプログラムは動作しています。 クロック:内臓4MHzです。 ハードウェアポート仕様 PORTA_A1:7SEGLED Cathode Common制御 分(1の位)NPNトランジスタON/OF    A2:7SEGLED Cathode Common制御 分(10の位)NPNトランジスタON/OF    A3:7SEGLED Cathode Common制御 時(1の位)NPNトランジスタON/OF PORTB_B0:7SEGLED Anode 制御 7SEG_a PORTB_B1:7SEGLED Anode 制御  7SEG_b PORTB_B2:7SEGLED Anode 制御  7SEG_c PORTB_B3:7SEGLED Anode 制御  7SEG_d PORTB_B4:7SEGLED Anode 制御  7SEG_e PORTB_B5:7SEGLED Anode 制御  7SEG_f PORTB_B6:7SEGLED Anode 制御  7SEG_g PORTB_B7:7SEGLED Anode 制御  7SEG_h 下記のプログラムは0~600までカウントするプログラムです。 val値でカウントする値を可変できます。 #include <16f648a.h> #fuses INTRC_IO,NOWDT,NOLVP,NOMCLR //内部クロック、WDT,LVPなし #use delay(CLOCK=4000000) //クロック4MHz //#define TIME_OUT unsigned int const LED_SEG[]=      //7SEG表示用テーブル { 0b00111111, /* 0= "0" [1] */ 0b00000110, /* 1= "1" [2] */ 0b01011011, /* 2= "2" [3] */ 0b01001111, /* 3= "3" [4] */ 0b01100110, /* 4= "4" [5] */ 0b01101101, /* 5= "5" [6] */ 0b01111100, /* 6= "6" [7] */ 0b00100111, /* 7= "7" [8] */ 0b01111111, /* 8= "8" [9] */ 0b01101111, /* 9= "9" [10]*/ 0b10000000,   /* 10= "." [11]*/ 0b01000000, /* 11= "-" [12]*/ }; unsigned int ct; //数字の更新間隔 unsigned long val; //表示する数字 unsigned int digit; //表示する桁 unsigned char st[3]; void main(void) { set_tris_a(0b11110000); set_tris_b(0b00000000); digit=0; ct=1; //数字を更新する周期 val=0; //表示する値 while(1) { ct --; if(ct == 0) { //数字の更新 st[2]=val/100; // st[1]=val/10-st[2]*10; //計算 st[0]=val%10; //計算 val++; if(val==600) val=0; ct=20;          //200にすると                          //約1秒間隔の表示に                          //なります。 } if(digit== 2) { //第3桁の表示 output_b(LED_SEG[st[2]]); output_bit(PIN_A3,1);//3桁表示開始 delay_ms (5); //表示期間(ミリ秒) output_bit(PIN_A3,0); //表示を消す delay_us(100); } if(digit== 1) //第2桁の表示 { output_b(LED_SEG[st[1]]); output_bit(PIN_A2,1); delay_ms (5); output_bit(PIN_A2,0); delay_us(100); } if(digit == 0) //第1桁の表示 { output_b(LED_SEG[st[0]]); output_bit(PIN_A1,1); delay_ms (5); output_bit(PIN_A1,0); delay_us(100); } digit ++; if(digit == 3) digit=0;//表示桁を変更 } }

  • C言語でプログラミングし、PICマイコンでLEDを制御する

    現在PICを使ってLEDを制御する事を勉強しています。 3つのLEDを3秒間隔で点灯させ、それを無限に繰り返すプログラムを考えてみました。LEDは一つのポートに一つのLEDを割り振るのではなく、ICを使って制御しています。 これを発展させ、待ち時間の3秒間にRA2ポートに入力があるとLEDの点灯をその場所で停止させ、もう一度RA2ポートに入力するとループが再開するといった内容にしようと考えていますが、調べてもどうすればいいのか分かりません、分かる方は教えて頂けないでしょうか # include <16f84a.h> # fuses HS, NOWDT, NOPROTECT # use delay(clock=20000000) int flag, sec, count; main() //main関数の開始宣言 { set_tris_a(0x10); set_tris_b(0x10); #use fast_io(a) //port_aの高速処理を行う設定 #use fast_io(b) //port_bの高速処理を行う設定 while(1){ //無限ループのwhile文の宣言 output_low(PIN_A0); //RA0の出力 output_low(PIN_B5); //RB5の出力 output_low(PIN_B6); //RB6の出力 output_low(PIN_B7); //RB7の出力 //LED1が点灯 delay_ms( 3000 ) ; //3秒待つ   output_high(PIN_A0); //RA0の出力 output_low(PIN_B5); //RB5の出力 output_low(PIN_B6); //RB6の出力 output_low(PIN_B7); //RB7の出力 //LED2が点灯 delat_ms( 3000 ) ; //3秒待つ        output_low(PIN_A0); //RA0の出力 output_high(PIN_B5); //RB5の出力 output_low(PIN_B6); //RB6の出力 output_low(PIN_B7); //RB7の出力 //LED3が点灯 delay_ms( 3000 ) ; //3秒待つ }

  • PICでのプログラミングについて教えて下さい。

    現在電圧計を製作していて4桁の7セグダイナミック点灯で行き詰っております(超初心者です)。 PICは16F873Aを使用、コンパイラはCCS、書き込みはピックライタ、あとシリアルデバッカを使用しています。 外部から電圧をかけそれをAD変換し、AD変換結果(0~5V)を7セグに表示させようとしています。 一応今の状態でも電圧表示はできていることはできているのですが一桁目から4桁目まで目で追えるくらい遅いスピードでこれを改善したいです。ソースは下記のソースを製作しました。この状態で3日間悩んでおります...知恵をお貸しいただけないでしょうか。 よろしくお願いします。 #include <16F873a.h> #device ADC=10 //A/D変換10bitモード #use fast_io(A) /* TRISレジスタの設定が必要 */ #use fast_io(B) #use fast_io(C) #use delay (clock=10000000) //10MHz #use RS232( BAUD = 9600, XMIT = PIN_C6, RCV = PIN_C7, PARITY = N, BITS = 8 ) #fuses HS,NOWDT,PUT,NOPROTECT,NOBROWNOUT,NOLVP #define VOLTAGE PIN_A0 // (in) #define CORRENT PIN_A1 // (in) #define VREF1 PIN_A2 // (in) #define VREF2 PIN_A3 // (in) #define RESERVE1 PIN_A4 // (out) #define RESERVE2 PIN_A5 // (out) #define LED_DP PIN_B0 // (out) #define LED_A PIN_B1 // (out) #define LED_B PIN_B2 // (out) #define LED_C PIN_B3 // (out) #define LED_D PIN_B4 // (out) #define LED_E PIN_B5 // (out) #define LED_F PIN_B6 // (out) #define LED_G PIN_B7 // (out) #define DIG_0 PIN_C0 // (out) #define DIG_1 PIN_C1 // (out) #define DIG_2 PIN_C2 // (out) #define DIG_3 PIN_C3 // (out) #define INI_TRIS_A_VAL 0x0F // 7:x 6:x 5:out 4:out 3in 2:in 1:in 0:in #define INI_TRIS_B_VAL 0x00 // 7:out 6:out 5:out 4:out 3out 2:out 1:out 0:out #define INI_TRIS_C_VAL 0x80 // 7:in 6:out 5:out 4:out 3:out 2:out 1:out 0:out int ct;//数字の更新間隔 long val;//表示する数字 int digit;//表示する桁 //表示パターン int segment_data[]={0x81,0xF3,0x49,0x61,0x33,0x25,0x05,0xF1,0x01,0x31}; char st[4]; void main() { float ata1,data2,data3,data4; long data5; long val; SET_TRIS_A( INI_TRIS_A_VAL ); SET_TRIS_B( INI_TRIS_B_VAL ); SET_TRIS_C( INI_TRIS_C_VAL ); setup_adc_ports(AN0_AN1_VSS_VREF); setup_adc(ADC_CLOCK_DIV_32); //Fosc/32 最高速度 digit=0; ct=1;//数字を更新する周期 val=0;//表示する値 while(1) { output_low(RESERVE2); //動作ランプ //////////////////////電圧測定///////////////////////////////// set_adc_channel(0); delay_us(50); //アクイジションタイム待ち(マイクロ秒) data1 = read_adc(); //AD変換結果読み込み printf("ADC V %9.3f \r\n", data1 ); //AD変換データ表示 data2 = (data1 * 4.959695) / 1024; //BCDに変換 printf("Volt %6.3f \r\n", data2 ); //変換データ表示 data5 = data2 * 1000 ; //data2を整数に変換 val = data5 ; printf("val %ld \r\n", val); //整数にし表示 /////////////////////7SEG表示////////////////////////////////// ct --; if(ct == 0){//数字の更新 st[3]=val/1000; //4桁目数値取り出し st[2]=val/100-st[3]*10;//3桁目数値取り出し st[1]=val/10-((st[3]*100)+(st[2]*10));//2桁目数値取り出し st[0]=val%10;//あまり val++; if(val==1000) val=0; ct=20; } if(digit== 3){//第4桁の表示 output_b( segment_data[st[3]]); output_bit(DIG_0,1);  //4桁表示開始 output_low(LED_DP);  //小数点表示  delay_us (5); //表示期間(ミリ秒) output_bit(DIG_0,0); //表示を消す output_high(LED_DP); //小数点を消す delay_us(50); //待ち(マイクロ秒) } if(digit== 2){ output_b( segment_data[st[2]]); output_bit(DIG_1,1); delay_ms (5); output_bit(DIG_1,0); delay_us(50); } if(digit== 1){ output_b( segment_data[st[1]]); output_bit(DIG_2,1); delay_ms (5); output_bit(DIG_2,0); delay_us(50); } if(digit == 0){ output_b( segment_data[st[0]]); output_bit(DIG_3,1); delay_ms (5); output_bit(DIG_3,0); delay_us(50); } digit ++;//表示桁を変更 if(digit ==4 ) digit=0; } }

  • picのループ

    昨日、picの割り込みに関してご質問させていただいたものです。 割り込みに関しては皆様のおかげで解決できましたが、別の問題に直面いたしました。 while(1)を1回処理した後は、動作が停止してしまい、割り込みも受け付けなくなってしまいます。 #INT_RB//割り込み定義 void RB_isr(){         割り込み処理        } void main() { while(1) { output_low(PIN_C4); delay_ms(200); output_high(PIN_C4); delay_ms(200); //自動起動ボタンONで起動 if(input(PIN_B6) == 0) { 入力があった場合の処理          } } } 上記のように、while(1)の先頭部に動作確認用のled点滅プログラムをいれていますが、入力があった場合の処理が終了した後はledも点滅しません。 入力があった場合の処理の最後にリレーをoffしているのですが、その処理はきちんと行われています。 どうしてこのようなことがおこるのか分かる方がいらっしゃいましたら、ご教授ねがいます。

  • PIC I2C について

    8ビットのデータを送り、そのままスレーブのLEDに反映させるプログラムを組んでいます。 マスターからはリピートして何度もデータを送ります。 このとき、なぜか一瞬アドレスのビットデータをLEDに反映させてから本来のデータを表示します。 つまり、アドレスとデータを交互にLEDに表示する状況です。 たとえば、アドレスが 0b1111111 データが 0b00000000 だとします。 本来LEDは消灯状態にならなくてはいけないのですが、なぜか一瞬アドレスデータの内容で光ります 原因がお分かりの方はいらっしゃいますか? 使用PIC PIC16F873A //master #use i2c(MASTER, SDA=PIN_C4, SCL=PIN_C3, SLOW, RESTART_WDT, FORCE_HW) output_float(PIN_C3); output_float(PIN_C4); while (1) { i2c_start(); i2c_write(AddData << 1); i2c_write(sBitData); i2c_stop(); delay_ms(50); } //slave #use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, ADDRESS=0x00, SLOW, RESTART_WDT, FORCE_HW) output_float(PIN_C3); output_float(PIN_C4); while (1) { if (i2c_poll()) { indata = i2c_read(); output_b(indata); } }

  • LEDをタイマー機能を使って点滅させるプログラムです

    LEDをタイマー機能を使用し、点滅させるプログラムなのですが、 if(input(PIN_b0)){output_c(0b00001111);} delay_ms(20); {output_c(0b11110000);} : : と続ずいていくのですが、もっと点滅速度を速くするには どうすればよいのでしょうか? また、例えばスイッチ1が押されたら、そこのLEDだけを 繰り返し連続で点滅させるには、どのような感じで記述すればよいのでしょうか? 例えばでいいので、普通のC言語だったらどのように記述するのか 教えてください。

  • pic 16f84a割り込み処理について

    pic cともに初心者です。 至らないところなどございますが、よろしければご教授くださいm(__)m 現在pic 16f84aで、電球の明るさ(交流100v)を決まったタイミングでフェードインフェードアウトさせる回路を製作しています。 コンパイラはccs社のpcm、MPLAB使用です。 基本的なプログラムの構成についての疑問です。 まず (1)インターバルタイマを使用し、タイマを10msec(約)に再セット。 変数icount で秒数をはかり、 メイン関数では、それを元にduty という変数(0-255)を変化させます。 #int_timer0 void intval(){ set_timer0(0x3c); icount++; } その処理に平行して (2)ゼロクロスパルスの割り込みをRB0への入力から発生させます。 RB0にはハードから入力(H_to_L)がはいるように出来ており これも10msec毎です。 #int_EXT void isr(){ int i if((duty > 10) & (duty < 250)){ delay_us(200); for(i = 0; i <(255-duty); i++){ delay_us(38); output_low(PIN_C5); delay_us(100); output_high(PIN_C5); } else{ if(duty <= 10){ output_high(PIN_C5); } else{ output_low(PIN_C5); }} メイン関数では duty を icount(時間)によって、変化させる関数を書きます。 25秒かけて、消灯状態から(duty= 0)点灯(duty = 255)まで スムーズに変化させます。 疑問点は 上記の二つの割り込みは、ともに10msec 毎で、(2)の割り込みに至っては いちど割り込むとdelay が多いので10msecの間ほとんど割り込み禁止です。 こういう場合でも、問題なく二つの割り込みは動いてくれるのでしょうか?(1)のカウントがある程度正確に動いてくれないと、秒数が狂ってしまうので、不安です。 また、この段階で、考え方そのものが間違っていないかも わかりません。 よろしければ、ご意見などいただけると幸いです。 なにとぞ、よろしくお願いいたします。

  • LEDの点灯(C言語,PIC)

    PICを用いてLEDを点滅させます. #INT_RTCC rtcc_pulse() { counter++; if(counter == t){ counter = 0; LED1_ON(); delay_ms(10); } else{ LED1_OFF(); } この関数のtの値を変調させ,OFFの時間を徐々に増やしていき,それを繰り返したいのですが,やり方がわからず困ってます. tはfor(t=52;t<=152;t+=10)のように増やしていきたいです.

  • arduinoでの7セグ4桁表示について

    http://garretlab.web.fc2.com/arduino/introduction/beginning_with_7segment_led/#turn_on_four_digits こちらのサイトを参考に7セグ4桁表示に挑戦しています。 // 1桁の数字(n)を表示する void display_number (int n) { for (int i = 0; i < number_of_anode_pins; i++) { digitalWrite(anode_pins[i], digits[n] & (1 << i) ? HIGH : LOW); } } この部分の digits[n] & (1 << i) ? HIGH : LOW の 「&」 「?」 「:」 の意味はどのようなものですか?

  • 4桁7セグメントLEDのピン配置

    Panasonicの4桁7セグメントLEDのピン配置で私には理解出来ない所があります。 それは http://www.kazumi-kikou.com/pdf/LN543RAN.pdfの図面で、ピン配置表の Pin No.2の(Cothode Dig1)とPin No.5の(Cothode Dig2)です。 左のLEDの絵に対応しているとは思えません。どうなっているのでしょうか。不思議です。 ただ、私があほなだけでしょうか。 どちら様か、詳しい方教えて頂けないでしょうか。よろしくお願いします。

専門家に質問してみよう