9章:LEDパターン表示

    作成2014.03.02

  1. STEP10_Pattern
    (1)STEP10_Patternソースプログラム
    STEP10_Patternソースプログラムを以下に示します。
    /*****************************
     STEP10_Pattern.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;
    	
    	// 永久ループ
    	while(1)
    	{
    		// LED8,7,2,1のみ点灯
    		PORTB = 0b00111100;
    		
    		// 待ち時間関数の呼び出し
    		WaitTime(10000);
    		
    		// LED6,5,4,2,1のみ点灯
    		PORTB = 0b11000100;
    		
    		// 待ち時間関数の呼び出し
    		WaitTime(10000);
    		
    		// LED7,5,2,1のみ点灯
    		PORTB = 0b10101100;
    		
    		// 待ち時間関数の呼び出し
    		WaitTime(10000);
    		
    		// LED8,6,4,2のみ点灯
    		PORTB = 0b01010101;
    		
    		// 待ち時間関数の呼び出し
    		WaitTime(10000);
    		
    		// LED8,1のみ点灯
    		PORTB = 0b01111110;
    		
    		// 待ち時間関数の呼び出し
    		WaitTime(10000);
    		
    		// LED5,4,3のみ点灯
    		PORTB = 0b11100011;
    		
    		// 待ち時間関数の呼び出し
    		WaitTime(10000);
    	}
    }
    
    // 待ち時間関数
    void WaitTime(int cnt)
    {
    	while(cnt > 0)
    		cnt--;
    }
    

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

    *図9-1の電圧変化をみると、RB0、RB1、RB2、RB3の電圧が0Vに変化することが確認でします。RB4、RB5、RB6、RB7は測定していませんが同様に変化するはずです。
    *LEDの点滅は設定パターンに依存します。


  2. STEP10_PatternRemodel
    (1)STEP10_PatternRemodelソースプログラム
    STEP10_PatternRemodelソースプログラムを以下に示します。
    /*****************************
     STEP10_PatternRemodel.c
    *****************************/
    
    #define _LEGACY_HEADERS
    
    // インクルードファイルの読み込み
    #include <pic.h>
    // コンフィギュレーションワードの設定
    __CONFIG ( UNPROTECT & LVPDIS & BOREN & MCLREN & PWRTEN & WDTDIS & INTIO );
    
    // プロトタイプ宣言
    void WaitTime (int cnt);
    
    // メイン関数
    void main (void)
    {
    	// 点灯パターン配列
    	unsigned char a_ledptn[6] = { 0b00111100, 0b11000100, 0b10101100, 0b01010101, 0b01111110, 0b11100011};
    	
    	// 点灯パターン配列の添え字用変数
    	unsigned char i = 0;
    	
    	// 1,2,17,18端子を入出力端子に設定
    	CMCON = 0x07;
    	
    	// 電圧レベルの初期設定
    	PORTA = 0xFF;
    	PORTB = 0xFF;
    	
    	// 入出力設定
    	TRISA = 0x20;
    	TRISB = 0x00;
    		
    	// 永久ループ
    	while(1)
    	{
    		// 指定した点灯パターンでLEDを点灯
    		PORTB = a_ledptn[i];
    		
    		// 待ち時間関数の呼び出し
    		WaitTime(10000);
    		
    		// 添え字が5よりも小さい場合
    		if(i < 5)
    		{
    			// 添え字に1プラスする
    			i++;
    		}
    		// その他の場合(添え字が5の場合)
    		else
    		{
    			// 添え字を0にする
    			i = 0;
    		}
    	}
    }
    
    // 待ち時間関数
    void WaitTime(int cnt)
    {
    	while(cnt > 0)
    		cnt--;
    }
    

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

    *図9-2の電圧変化をみると、RB0、RB1、RB2、RB3の電圧が0Vに変化することが確認でします。RB4、RB5、RB6、RB7は測定していませんが同様に変化するはずです。
    *LEDの点滅は設定パターンに依存します。


  3. STEP10_VerseWriter
    (1)STEP10_VerseWriterソースプログラム
    STEP10_VerseWriterソースプログラムを以下に示します。
    /*****************************
     STEP10_VerseWriter.c
    *****************************/
    
    #define _LEGACY_HEADERS
    
    // インクルードファイルの読み込み
    #include <pic.h>
    // コンフィギュレーションワードの設定
    __CONFIG ( UNPROTECT & LVPDIS & BOREN & MCLREN & PWRTEN & WDTDIS & INTIO );
    
    // プロトタイプ宣言
    void WaitTime (int cnt);
    
    // メイン関数
    void main (void)
    {
    	// 点灯パターン配列
    	unsigned char ledptn[8] = { 0b11111100, 0b11110011, 0b11001011, 0b00111011, 0b11001011, 0b11110011, 0b11111100, 0b11111111 };
    	
    	// 点灯パターン配列の添え字用変数
    	unsigned char i = 0;
    	
    	// 1,2,17,18端子を入出力端子に設定
    	CMCON = 0x07;
    	
    	// 電圧レベルの初期設定
    	PORTA = 0xFF;
    	PORTB = 0xFF;
    	
    	// 入出力設定
    	TRISA = 0x20;
    	TRISB = 0x00;
    		
    	// 永久ループ
    	while(1)
    	{
    		// 指定した点灯パターンでLEDを点灯
    		PORTB = ledptn[i];
    		
    		// 待ち時間関数の呼び出し
    		WaitTime(600);
    		
    		// 添え字が7よりも小さい場合
    		if(i < 7)
    		{
    			// 添え字に1プラスする
    			i++;
    		}
    		// その他の場合(添え字が7の場合)
    		else
    		{
    			// 添え字を0にする
    			i = 0;
    		}
    	}
    }
    
    // 待ち時間関数
    void WaitTime(int cnt)
    {
    	while(cnt > 0)
    		cnt--;
    }
    

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

    *図9-3の電圧変化をみると、RB0、RB1、RB2、RB3の電圧が0Vに変化することが確認でします。RB4、RB5、RB6、RB7は測定していませんが同様に変化するはずです。
    *LEDの点滅は設定パターンに依存します。










10章:スイッチ(1)に行く。

トップページに戻る。