8章:LEDシフト表示(2)

    作成2014.03.02

  1. STEP09_ShiftRemodel
    (1)STEP09_ShiftRemodelソースプログラム
    STEP09_ShiftRemodelソースプログラムを以下に示します。
    /*****************************
     STEP09_ShiftRemodel.c
    *****************************/
    
    #define _LEGACY_HEADERS
    
    // インクルードファイルの読み込み
    #include <pic.h>
    // コンフィギュレーションワードの設定
    __CONFIG ( UNPROTECT & LVPDIS & BOREN & MCLREN & PWRTEN & WDTDIS & INTIO );
    
    // プロトタイプ宣言
    void WaitTime (int cnt);
    
    // メイン関数
    void main (void)
    {
    	// 1,2,17,18端子を入出力端子に設定
    	CMCON = 0x07;
    	
    	// 電圧レベルの初期設定
    	PORTA = 0xFF;
    	PORTB = 0xFF;
    	
    	// 入出力設定
    	TRISA = 0x20;
    	TRISB = 0x00;
    	
    	// LED1のみ点灯
    	PORTB = 0b11111110;
    	
    	// 永久ループ
    	while(1)
    	{
    		// 待ち時間関数の呼び出し
    		WaitTime(10000);
    		
    		// LEDの点灯箇所を左に1つずらす
    		PORTB = PORTB << 1;
    		
    		// PORTBレジスタが "0b11111110" ではない場合
    		if (PORTB != 0b11111110)
    		{
    			// PORTBレジスタに1プラスする(LED1消灯)
    			PORTB = PORTB + 1;
    		}
    	}
    }
    
    // 待ち時間関数
    void WaitTime (int cnt)
    {
    	while(cnt > 0)
    		cnt--;
    }
    


  2. STEP09_ShiftRemodelソースプログラム実行結果
    *実行結果はLEDの点滅で確認できるのですが、ここではRB0、RB1、RB2、RB3の電圧変化を測定します。RB0、RB1、RB2、RB3の電圧変化測定結果を図8-1に示します。

    *図8-1の電圧変化をみると、RB0、RB1、RB2、RB3の順に電圧が0Vに変化することが確認でします。RB4、RB5、RB6、RB7は測定していませんが同様に変化するはずです。
    *LEDではRB0、RB1、RB2、RB3、RB4、RB5、RB6、RB7の順に点灯することが確認でします。


  3. STEP09_ShiftReverse
    (1)STEP09_ShiftReverseソースプログラム
    STEP09_ShiftReverseソースプログラムを以下に示します。
    /*****************************
     STEP09_ShiftRemodel.c
    *****************************/
    
    #define _LEGACY_HEADERS
    
    // インクルードファイルの読み込み
    #include <pic.h>
    // コンフィギュレーションワードの設定
    __CONFIG ( UNPROTECT & LVPDIS & BOREN & MCLREN & PWRTEN & WDTDIS & INTIO );
    
    // プロトタイプ宣言
    void WaitTime (int cnt);
    
    // メイン関数
    void main (void)
    {
    	// 1,2,17,18端子を入出力端子に設定
    	CMCON = 0x07;
    	
    	// 電圧レベルの初期設定
    	PORTA = 0xFF;
    	PORTB = 0xFF;
    	
    	// 入出力設定
    	TRISA = 0x20;
    	TRISB = 0x00;
    	
    	// LED8のみ点灯
    	PORTB = 0b01111111;
    	
    	// 永久ループ
    	while(1)
    	{
    		// 待ち時間関数の呼び出し
    		WaitTime(10000);
    		
    		// LEDの点灯箇所を右に1つずらす
    		PORTB = PORTB >> 1;
    		
    		// PORTBレジスタが "0b01111111" ではない場合
    		if (PORTB != 0b01111111)
    		{
    			// PORTBレジスタに128プラスする(LED8消灯)
    			PORTB = PORTB + 128;
    		}
    	}
    }
    
    // 待ち時間関数
    void WaitTime (int cnt)
    {
    	while(cnt > 0)
    		cnt--;
    }
    


  4. STEP09_ShiftReverseソースプログラム実行結果ソースプログラム実行結果
    *実行結果はLEDの点滅で確認できるのですが、ここではRB0、RB1、RB2、RB3の電圧変化を測定します。RB0、RB1、RB2、RB3の電圧変化測定結果を図8-2に示します。

    *図8-2の電圧変化をみると、RB3、RB2、RB1、RB0電圧が0Vに変化することが確認でします。RB4、RB5、RB6、RB7は測定していませんが同様に変化するはずです。
    *LEDではRB7、RB6、RB5、RB4、RB3、RB2、RB1、RB0の順に点灯することが確認できます。










9章:LEDパターン表示に行く。

トップページに戻る。