前のチュートリアルでは、16 * 2LCDをPICマイクロコントローラーとインターフェースする方法を学びました。PICマイクロコントローラの初心者の場合は、先に進む前にそれを確認することをお勧めします。以前は、PICマイクロコントローラーのLED点滅プログラムとタイマーを使用してPICの基本も学びました。MPLABXおよびXC8コンパイラを使用したPICマイクロコントローラの学習に関するすべてのチュートリアルをここで確認できます。
このチュートリアルでは、独自のカスタムキャラクターを作成し、 PIC16F877APICマイクロコントローラーを使用してLCD画面に表示することでさらに面白くしましょう。また、HD44780A IC自体によって提供される、事前定義された主に使用されるカスタム文字がいくつかあります。それらの使用方法についても説明します。前のチュートリアルで説明したように、LCDにはHitachi HD44780コントローラーが埋め込まれており、文字の表示に役立ちます。表示する各文字は、HD44780ICのROM内で事前定義されています。LCDに文字を表示する前に、LCDコントローラーICHD44780について学習します。
16x2ドットマトリックスLCDコントローラーICHD44780:
カスタムキャラクターを表示するには、なんとかしてカスタムキャラクターがどのように見えるかをICに伝える必要があります。そのためには、HD44780LCDコントローラーIC内に存在する3種類のメモリーについて知っておく必要があります。
文字ジェネレータROM(CGROM): 読み取り専用メモリであり、前述のように、内部に事前定義された文字のすべてのパターンが含まれています。このROMは、インターフェイスICのタイプごとに異なり、事前定義されたカスタム文字が含まれている場合があります。
ディスプレイデータRAM(DDRAM):これはランダムアクセスメモリです。文字を表示するたびに、そのパターンがCGROMからフェッチされ、DDRAMに転送されてから、画面に配置されます。簡単に言うと、DDRAMには、現在LCD画面に表示されているすべての文字のパターンが含まれます。このように、各サイクルでICはCGROMからデータをフェッチする必要がなく、短い更新頻度を取得するのに役立ちます
字幕生成機RAM(CGRAM):これはランダムアクセスメモリでもあるので、そこからデータを読み書きできます。名前が示すように、このメモリはカスタム文字を生成するために使用できるメモリになります。キャラクターのパターンを作成してCGRAMに書き込む必要があります。このパターンは、必要に応じて読み取り、画面に表示できます。
さて、HD44780インターフェースICに存在するメモリの種類の基本を理解したので。もう少し理解するために、そのデータシートを見てみましょう。
データシートが示すように、HD44780 ICはカスタムパターンをCGRAMに保存するための8つの場所として提供されています。また、右側には、LCD画面にも表示できる事前定義された文字がいくつかあることがわかります。どうすればそれができるか見てみましょう。
16x2 LCDでのカスタム文字の表示:
カスタム文字を表示するには、最初にそのパターンを生成してから、CGRAMに保存する必要があります。すでにライブラリ関数を持っているので、いくつかの簡単なコマンドでこれを行うのは簡単なはずです。これがLCD関数のライブラリですが、ここではすべてのライブラリ関数をプログラム自体にコピーして貼り付けたので、このヘッダーファイルをプログラムにインクルードする必要はありません。基本的なLCDの動作とそのピン配列についても、この記事を確認してください。
最初のステップは、パターンまたはカスタム文字を生成することです。私たちが知っているように、各文字は5 * 8ドットの組み合わせです。どのドット(ピクセル)を高くし、どれを低く保つかを選択する必要があります。以下のようなボックスを描画し、キャラクターに基づいて領域に陰影を付けるだけです。ここでの私のキャラクターは棒人間です(それが1人のように見えることを願っています)。シェーディングされたら、以下に示すように、各バイトの同等のバイナリ値を単純に書き込みます。
各バイトの影付きの領域に「1」を置き、影のない領域に「0」を置くだけで、カスタムパターンの準備が整います。同様に、CGROMを表示する8つのメモリスペース用に8つのカスタムパターンコードを作成しました。それらは以下の表にリストされています。
S.NO: |
カスタムキャラクター |
パターンコード |
1 |
0b01110、 0b01110、 0b00100、 0b01110、 0b10101、 0b00100、 0b01010、 0b01010 |
|
2 |
0b00000、 0b00000、 0b01010、 0b00100、 0b00100、 0b10001、 0b01110、 0b00000 |
|
3 |
0b00100、 0b01110、 0b11111、 0b11111、 0b01110、 0b01110、 0b01010、 0b01010 |
|
4 |
0b01110、 0b10001、 0b10001、 0b11111、 0b11011、 0b11011、 0b11111、 0b00000 |
|
5 |
0b01110、 0b10000、 0b10000、 0b11111、 0b11011、 0b11011、 0b11111、 0b00000 |
|
6 |
0b00000、 0b10001、 0b01010、 0b10001、 0b00100、 0b01110、 0b10001、 0b00000 |
|
7 |
0b00000、 0b00000、 0b01010、 0b10101、 0b10001、 0b01110、 0b00100、 0b00000 |
|
8 |
0b11111、 0b11111、 0b10101、 0b11011、 0b11011、 0b11111、 0b10001、 0b11111 |
注:CGRAMで提供される8つのスペースすべてをロードする必要はありません。
プログラミングと作業の説明:
これでパターンコードの準備ができました。LCDのCGRAMにロードし、PICマイクロコントローラーを使用して表示するだけです。それらをCGRAMにロードするには、要素の5 * 8配列を形成し、「 forループ 」を使用して各バイトをロード します 。パターンコードの配列を以下に示します。
const unsigned short Custom_Char5x8 = {0b01110,0b01110,0b00100,0b01110,0b10101,0b00100,0b01010,0b01010、// CGRAMメモリスペースのコード10b00000,0b00000,0b01010,0b00100,0b00100,0b10001,0b01110,0b00000 CGRAMメモリスペース20b00100,0b01110,0b11111,0b11111,0b01110,0b01110,0b01010,0b01010、// CGRAMメモリスペースのコード30b01110,0b10001,0b10001,0b11111,0b11011,0b11011,0b11111,0b00000、// CGRAMメモリのコードスペース40b01110,0b10000,0b10000,0b11111,0b11011,0b11011,0b11111,0b00000、// CGRAMメモリスペースのコード50b00000,0b10001,0b01010,0b10001,0b00100,0b01110,0b10001,0b00000、// CGRAMメモリスペースのコード6 0b00000,0b00000,0b01010,0b10101,0b10001,0b01110,0b00100,0b00000、// CGRAMメモリスペースのコード70b11111,0b11111,0b10101,0b11011,0b11011,0b11111,0b10001,0b11111 // CGRAMメモリスペースのコード8};
各メモリスペースには、尊重される文字パターンがロードされます。このパターンをHD44780ICにロードするには、HD44780のデータシートを参照する必要がありますが、CGRAMのアドレスを設定するために使用できるのはコマンド行だけです。
// ***カスタム文字をCGROMにロードします*** ////// Lcd_Cmd(0x04); // CGRAMアドレスを設定しますLcd_Cmd(0x00); //.. CGRAMアドレスを(i = 0; i <= 63; i ++)に設定Lcd_Print_Char(Custom_Char5x8); Lcd_Cmd(0); //ホームに戻るLcd_Cmd(2); //..ホームに戻る// ***カスタム文字の読み込みが完了しました*** //////
ここでは、「 forループ」内で 各バイナリ値がCGROMにロードされます。パターンがロードされると、以下に示すように、 void Lcd_Print_Char(char data) 関数を使用してパターンの場所を呼び出すだけで、カスタム文字を表示できます。
Lcd_Print_Char(0); //カスタム文字0を表示しますLcd_Print_Char(1); //カスタム文字1を表示しますLcd_Print_Char(2); //カスタム文字2を表示しますLcd_Print_Char(3); //カスタム文字3を表示しますLcd_Print_Char(4); //カスタム文字4を表示しますLcd_Print_Char(5); //カスタム文字5を表示しますLcd_Print_Char(6); //カスタム文字6を表示しますLcd_Print_Char(7); //カスタムキャラクター7を表示
事前定義された特殊文字の印刷:
HD44780 ICには、DDROMに格納されているいくつかの事前定義された特殊文字があります。これらの文字は、データシートのバイナリ値を参照することにより、画面に直接印刷できます。
例:文字「ALPHA」のバイナリ値は0b11100000です。これを取得する方法は、下の図から理解できます。同様に、ICで事前定義されている特殊文字の値を取得できます。
バイナリ値が わかれ ば、 次に 示すように void Lcd_Print_Char(char data) 関数を使用するだけで、対応する文字を画面に 出力でき ます。
Lcd_Print_Char(0b11100000); //データシートからのアルファのバイナリ値
このプロジェクトの完全なコードは、以下のコードセクションに記載されています。また、このチュートリアルの最後にある詳細なビデオの説明も確認してください。
回路接続とテスト:
このプロジェクトには追加のハードウェア要件はありません。前のLCDインターフェイスチュートリアルと同じ接続を使用し、LED点滅チュートリアルで作成したものと同じボードを使用しました。いつものように、Proteusを使用してプログラムをシミュレートし、出力を確認しましょう。
シミュレーションが期待どおりに実行されたら、コードをハードウェアセットアップに直接書き込みます。プログラムの出力は次のようになります。
これが、MPLABXおよびXC8コンパイラを備えたPICマイクロコントローラを使用して16x2LCDにカスタム文字を表示する方法です。また、ここで完全なPICマイクロコントローラーラーニングシリーズを確認してください。