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




2014年10月より個人の方を対象に、Study C無料提供を開始しました。
C言語を勉強中の方は、学習・教育に最適なC言語インタープリタのStudy Cを使ってみてください(個人の方は無料です)。
大学・高専・高校などの教育機関での採用実績も多数あるロングセラー商品Study Cが、個人向けに無料提供を始めました。
インタープリタの手軽さに加え、ゲームや3Dタートルグラフィックで楽しく勉強したりと、C言語の学習を強力にサポートします。
ブロック崩しゲーム 3Dツリー クリスマスツリー
また、このようなボタンの用意されているページでは、掲載しているプログラムをStudy Cに直接ロードし実行したりすることができます。
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する
Study C無料利用についての詳細は、このページを参照してください。



このページのプログラムを実行するにはStudy C Ver2.2を使用する必要があります。
プリンタポートの制御には、I/Oポートへの出力が必要です。 Windows(NT以降)は、そのままではI/Oポートを制御することができません。 Study Cでは、フリーソフトのgiveio.sysを使用することで、I/Oポートの制御を可能としています。
giveio.sysインストール手順を参考にしてください。
※I/Oポート制御は、ご使用になるPCやOSによって正しく動作しない可能性があります。
I/Oポート制御の目的でご購入の場合は、ご使用になるPCと接続する装置の組み合わせで動作に問題ないことをStudy Cサンプル版でご確認ください。


今回もプリンタポートの制御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;
}

このページではStudy Cを使っての機器制御を説明しました。 しかし、通常は小さいマイコンボード内で動作するプログラムが機器制御を行います。 このような制御プログラムもほぼC言語で作成されています。 この領域のプログラムは「C言語、組み込み」と呼ばれています。 ほとんどがC言語なので単に「組み込み」とも言われます(横文字で「embedded=組み込み」と呼ばれることもあります)。
フリーランス、フリーエンジニアの為のIT求人【エンジニアナビ】
このリンク先を開いて「言語から探す」の「C C++」にチェックを入れて検索してみてください。 案件の何割かには、「組み込み」とかかれていると思います(本ページ執筆時には、〜80万円といった案件もあります)。 このページは、ほんのさわりですが「組み込み」系のプログラミングになります。当サイトの下記の関連ページも参考にしてください。
プリンタポート制御1(LED点灯)
プリンタポート制御2(LED点灯)
プリンタポート制御4(スイッチ検出)

実際のマイコンボードでの制御については、このサイトでは説明しておりません。 マイコンボードでの制御については、下記の書籍が分かり易いと思うので参考にしてみてください。

【送料無料】 ディジタル・デザイン・テクノロジ ハードウェアを制御するソフトウェアを書いて、動かして、理解する No.4 特集 組み込みC言語超入門 【単行本】

価格:1,890円
(2013/1/27 10:28時点)
感想(0件)

【1000円以上送料無料】赤外線制御で学ぶPICとC言語 組み込みシステムをステップアップ方式で理解する/竹内浩一

価格:2,940円
(2013/1/27 10:06時点)
感想(0件)

[an error occurred while processing this directive]