Pi:Co Classic2 製作記(移行中)

2015年新人研修 マイクロマウス編(26)

こんにちは。

本日はC言語に出てくる記号(ビット演算子など)について勉強しました。
~ 反転
= イコール
& and
| or
^ EOR
! NOT
> > 右シフト
< 大なり
> 小なり

もう少し詳しく見ていきましょう。

A & B = Cという計算は以下のようになります。

&

andというのは図にすると以下のイメージになります。

図 あんど

これと反対のNANDというのがあり、A NAND B = Cという計算は以下のようになります。

NAND

A or B = Cという計算は以下のようになります。

or

orというのは図にすると以下のイメージになります。

図 or

これと反対のNORというのがあり、A NOR B = Cという計算は以下のようになります。

NOR

これとは別に^(EOR)というのがあります。
A ^ B = Cという計算は以下のようになります。

EOR

次に昨日の続きでプログラムの関数化をしました。

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)
でも何とかしたいと思います!

タイトルとURLをコピーしました