プリンタポートの制御3(LED点灯)
C言語ケーススタディ

Study C Ver2販売開始のお知らせ

 C言語の勉強や教育用に最適です。
 2004/8/23よりStudy C Ver2の販売を開始しました。
 Study C Ver2の新しい機能については
 こちらをご参照ください。
C言語でゲームプログラマーを目指す方へ
 ■C言語ゲームプログラミング講座
 C言語でのゲームプログラミングを解説する講座
 始めました。

このページのプログラムを実行するにはStudy C Ver2.2を使用する必要があります。
プリンタポートの制御には、I/Oポートへの出力が必要です。 Windows(NT以降)は、そのままではI/Oポートを制御することができません。 Study Cでは、フリーソフトのgiveio.sysを使用することで、I/Oポートの制御を可能としています。
giveio.sysインストール手順を参考にしてください。



今回もプリンタポートの制御1プリンタポートの制御2に引き続きLEDの点灯を行います。
今回は、赤色と黄色のLEDを同時に点灯させてみたいと思います。 実はプリンタポートの制御1の2番目のプログラム例で2色のLEDを同時に点灯させています。 しかし、今回は黄色と赤色のLEDで異なるパターンの点灯(赤色LED1/4、黄色LED2/5を点灯させます)を行ってみたいと思います。 この基板の回路から単純に考えると赤色と黄色で別々のパターンの点灯を行うことは不可能です(両方とも同じパターンで点灯してしまします)。

次のプログラムは、赤色LED1/4、黄色LED2/5を同時に点灯させています。 forループ内の下記の部分に注目してください。
 _outp(data_port, RED_SWITCH|LED1_4);
 _outp(data_port, YELLOW_SWITCH|LED2_5);
赤色LED1/4の点灯と黄色LED2/5の点灯をループ内で交互に行っています。 実は、赤色の表示パターンと黄色の表示パターンを高速で交互に表示すると両方の色のLEDが同時に点灯しているように見えるのです。
このような表示方法は、色々な表示装置で実際に使われております。


const unsigned short data_port    = 0x0378;                 
const unsigned short status_port  = 0x0379;
const unsigned short control_port = 0x037A;

//const unsigned short data_port    = 0x0278;
//const unsigned short status_port  = 0x0279;
//const unsigned short control_port = 0x027A;

//const unsigned short data_port    = 0x03BC;
//const unsigned short status_port  = 0x03BD;
//const unsigned short control_port = 0x03BE;

#define RED_SWITCH		0x80
#define YELLOW_SWITCH		0x40
#define GREEN_SWITCH		0x20
#define SWITCH_MASK		0xE0

#define LED1			0x1E	// 1-1110
#define LED2			0x1D	// 1-1101
#define LED3			0x1B	// 1-1011
#define LED4			0x17	// 1-0111
#define LED5			0x0F	// 0-1111
#define LED1_4			0x16	// 1-0110
#define LED2_5			0x0D	// 0-1101
#define LED_MASK		0x1F

#define ALL_OFF			0xFF


int main()
{
	_outp(control_port, 0xCC); //出力モードにする
	_outp(data_port, ALL_OFF);

	printf("何かキーを押すと赤色LED1/4、黄色LED2/5が点灯します.");
	getch();
	printf("\n");

	printf("何かキーを押すと終了します.");
	for (;;)
	{
		_outp(data_port, RED_SWITCH|LED1_4);
		_outp(data_port, YELLOW_SWITCH|LED2_5);
		if (kbhit())
		{
			getch();
			break;
		}
	}
	_outp(data_port, ALL_OFF);

	return 0;
}


お問い合わせ先 C言語のトップページに戻る Copyright(C) 2003 潟Iーキッド