こんにちは。
本日はC言語に出てくる記号(ビット演算子など)について勉強しました。
~ 反転
= イコール
& and
| or
^ EOR
! NOT
> > 右シフト
< 大なり
> 小なり
もう少し詳しく見ていきましょう。
A & B = Cという計算は以下のようになります。
andというのは図にすると以下のイメージになります。
これと反対のNANDというのがあり、A NAND B = Cという計算は以下のようになります。
A or B = Cという計算は以下のようになります。
orというのは図にすると以下のイメージになります。
これと反対のNORというのがあり、A NOR B = Cという計算は以下のようになります。
これとは別に^(EOR)というのがあります。
A ^ B = Cという計算は以下のようになります。
次に昨日の続きでプログラムの関数化をしました。
LED0 = LED1 = LED2 = LED3 = 1; //LED点灯 for(i = 0; i < L; i++); //時間待ち(空ループ) LED0 = LED1 = LED2 = LED3 = 0; //LED消灯 for(i = 0; i < H; i++); //時間待ち(空ループ)
上記のプログラムを関数化し、少し変更しました。
void LED(int A){ if(A & 0x01){ LED0=1; }else{ LED0=0; } if(A & 0x02){ LED1=1; }else{ LED1=0; } if(A & 0x04){ LED2=1; }else{ LED2=0; } if(A & 0x08){ LED3=1; }else{ LED3=0; } } void PWM_LED(int H,int L,int A){ int j,i; for(j=0; j<0xff; j++){ // LED0 = LED1 = LED2 = LED3 = 1; //LED点灯 LED(A); for(i = 0; i < L; i++); //時間待ち(空ループ) // LED0 = LED1 = LED2 = LED3 = 0; //LED消灯 LED(0x00); for(i = 0; i < H; i++); //時間待ち(空ループ) } } 以下のwhileはmain関数内 while(1) //無限ループ { PWM_LED(1000,9000,0x0f); PWM_LED(2500,7500,0x0c); PWM_LED(5000,5000,0x06); PWM_LED(7500,2500,0x03); PWM_LED(9000,1000,0x09); } }
とりあえずできましたが、うーん・・・
理解できたかというとちょっと・・・といった感じでした。
難しいです(T_T)
でも何とかしたいと思います!