- 16x2LCDディスプレイの動作
- LCDをSTM8マイクロコントローラーとインターフェースするための回路図
- STM8 LCDライブラリ–STM8S103F3P6のヘッダーファイル
- STM8Sマイクロコントローラー用のLCDプログラム
- LCD付きSTM8–動作中
16x2英数字LCDディスプレイは、愛好家や愛好家の間で最も一般的に使用されているディスプレイです。この表示は、基本的な情報をユーザーに表示する場合に非常に便利であり、コードのテストやデバッグにも役立ちます。この特定の16x2LCDモジュールは簡単に入手でき、長い間人気があります。リンク先の記事で、16x2LCDモジュールの基本について詳しく知ることができます。
一連のSTM8マイクロコントローラーチュートリアルを続けるために、このチュートリアルでは、LCDをSTM8マイクロコントローラーとインターフェースする方法を学習します 。以前、16x2 LCDを他の多くのマイクロコントローラーとインターフェースしました。チュートリアルを以下に示します。興味があれば、それらを確認できます。
STM8を初めて使用する場合は、STM8マイクロコントローラーの使用開始の記事を確認して、コントローラーボードとプログラミング環境の基本を理解してください。このチュートリアルでは、基本については説明しません。
16x2LCDディスプレイの動作
名前が示すように、16x2LCDには16列と2行があります。したがって、このディスプレイには合計32文字を表示できます。これらの文字は、アルファベット、数字、または記号にすることができます。このチュートリアルで使用する簡単な16x2LCDピン配置を以下に示します-
ご覧のとおり、ディスプレイには16個のピンがあり、次の表に示すように、電源ピン、コントラストピン、制御ピン、データピン、バックライトピンの5つのカテゴリに分類できます。このチュートリアルの回路図について説明するときに、各ピンの詳細について説明します。
カテゴリー | ピン番号 | ピン名 | 関数 |
電源ピン | 1 | VSS | アースに接続されたアースピン |
2 | VDDまたはVcc | 電圧ピン+ 5V | |
コントラストピン | 3 | V0またはVEE | 可変抵抗器を介してVccに接続されたコントラスト設定。 |
コントロールピン | 4 | RS | レジスタ選択ピン、RS = 0コマンドモード、RS = 1データモード |
5 | RW | 読み取り/書き込みピン、RW = 0書き込みモード、RW = 1読み取りモード | |
6 | E | 有効にする、LCDを有効にするために高パルスから低パルスが必要 | |
データピン | 7-14 | D0-D7 | データピン、LCDまたはコマンド命令に表示されるデータを格納します |
バックライトピン | 15 | LED +またはA | バックライト+ 5Vに電力を供給する |
16 | LEDまたはK | バックライトグラウンド |
LCDの裏側には、下の画像に示すように、2つの黒い点があり、その中にHD44780 LCDドライバーIC(赤で囲まれています)があります。私たちのマイクロコントローラーはこのICと通信する必要があり、このICはLCDに表示されているものを制御します。これらすべてがどのように正確に機能するかを知りたい場合は、LCDがどのように機能するかについてすでに詳しく説明した16x2LCDディスプレイの機能を確認する必要があります。
このチュートリアルでは、単純な LCD_print _char コマンドと LCD_print_string コマンドを使用して、16x2 LCDディスプレイに英字(アルファベットと数字)を表示するための回路図とコードについて説明します。これらのコマンドは、ヘッダーファイルをインクルードした後、プログラムで直接使用できます。ヘッダーファイルはほとんどすべてのものを処理するため、ディスプレイまたはHD44780ドライバーICがどのように機能するかを知る必要はありません。
LCDをSTM8マイクロコントローラーとインターフェースするための回路図
完全なSTM8LCD回路は、以下の画像にあります。LCD付きSTM8S103F3P6コントローラーの接続は非常に簡単であることがわかるように、LCDディスプレイはボードに直接接続されており、STリンクもボードをプログラムするために接続されています。
電源ピンVssとVccはSTM8Sボードの5Vピンに接続されています。LCDの動作電圧は5Vであり、3.3Vで動作するように接続されていることに注意してください。したがって、STM8S103F3P6マイクロコントローラーは3.3Vで動作し、LCDに5V電源を供給する必要がありますが、充電コントローラーICを使用することでこれを回避できますが、このチュートリアルでは説明しません。
次に、LCDのコントラストを設定するために使用されるコントラストピンがあります。これをポテンショメータに接続して、コントラストを制御できるようにします。 10kポットを使用しましたが、他の近くの値を使用することもできます。ポットは分圧器として機能し、コントラストピンに0〜5 Vを供給します。通常、抵抗を直接使用して、妥当なコントラストを得るために約2.2Vを供給することもできます。値。次に、リセット(RS)、読み取り/書き込み(RW)、およびイネーブル(E)ピンがあります。 LCDから何も読み取らないため、読み取り/書き込みピンは接地されます。書き込み操作のみを実行します。他の2つの制御ピンRsとEは、それぞれPA1ピンとPA2ピンに接続されています。
次に、データピンDB0からDB7があります。16x2 LCDは2つのモードで動作できます。1つはLCDの8つのデータピン(DB0〜DB7)すべてを使用する必要がある8ビット動作モードで、もう1つは4つだけが必要な4ビット動作モードです。データピン(DB4-DB7)。4ビットモードは、コントローラーからのGPIOピンが少なくて済むため、一般的に使用されます。このチュートリアルでも4ビットモードを使用し、ピンDB4、DB5、DB6、およびDB7のみをピンPD1、PD2、PD3に接続しました。 、およびPD4それぞれ。
最後の2つのピンBLAとBLKは、内部バックライトLEDに電力を供給するために使用され、電流制限抵抗として560オームの抵抗を使用しました。ST-Linkプログラマーは、前のチュートリアルと同じように接続されています。ブレッドボードで完全に接続しました。セットアップは次の画像のようになります。
STM8 LCDライブラリ–STM8S103F3P6のヘッダーファイル
回路図に進む前に、次のリンクを使用してGitHubからSTM8LCDヘッダーファイルを取得しましょう-
STM8S 16x2LCDヘッダーファイル
完全なリポジトリをダウンロードして stm8s103_LCD_16x2.h ファイルを取得するか、上記のリンクからコードを単純化することができます。プロジェクトを設定するときは、必要なすべてのヘッダーファイルをこのヘッダーファイルと一緒にincディレクトリにインクルードしてください。
ヘッダーファイルを追加してプログラムをコンパイルする方法がわからない場合は、このページの下部にあるビデオに従ってください。また、ヘッダーファイル内のコードがどのように機能するかについて知りたい場合は、LCDチュートリアルでPICを確認できます。このプロジェクトで使用されるヘッダーファイルは、そこで説明されているものと非常に似ているため、詳細については説明しません。
STM8Sマイクロコントローラー用のLCDプログラム
デモンストレーションでは、「Circuit Digest」のような単純な文字列を表示するようにSTM8Sコントローラーをプログラムし、2行目で1秒ごとに「Test」値をインクリメントします。完全なプログラムは、このページの下部にあります。説明は以下の通りです。
ピンを定義し、いつものように必要なヘッダーファイルを追加することからプログラムを開始します。上記の回路図では、 LCD_RS をPA1に接続しているため、 LCD_RS GPIOA、GPIO_PIN_1 として定義してい ます。 同様に、他のピンについても同じことを行いました。それらが異なる回路をたどっている場合は、それに応じてこれらの値を変更してください。
#define LCD_RS GPIOA、GPIO_PIN_1 #define LCD_EN GPIOA、GPIO_PIN_2 #define LCD_DB4 GPIOD、GPIO_PIN_1 #define LCD_DB5 GPIOD、GPIO_PIN_2 #define LCD_DB6 GPIOD、GPIO_PIN_3 #define LCD_DB7 GPIOD、GPIO_PIN_4#define LCD_DB7 GPIOD、GPIO_PIN_4#include
次にメインプログラム内で、このサンプルコードに必要な変数を宣言しました。ゼロに初期化される test_var というテスト変数があります。変数をインクリメントしてLCDに表示します。LCDはint値を直接表示できないため、文字d1からd4はテスト変数の4桁を表し、文字に変換する必要があります。
//変数宣言inttest_var = 0; char d4、d3、d2、d1;
LCD_Begin() 関数は、LCDを初期化するために使用されます。この関数は、必要なすべてのGPIOピンを初期化し、LCDを16x2LCDモードに設定します。次に、LCDのすべての値をクリアするために使用される LCD_Clear() 関数があります。これにより、LCDのすべてが消去されるため、新しい値を書きやすくなります。次に、 LCD_Set_Cursor(x、y) 関数があります。ここで、xとyは、新しい文字を書き込む必要がある位置です。たとえば、(1,1)は最初の行と最初の列を意味し、同様に(2,12)は2番目の行12列を意味します。前に説明したように、ここには2行16列があることに注意してください。
Lcd_Begin(); Lcd_Clear(); Lcd_Set_Cursor(1,1);
これで、LCDが設定、クリアされ、カーソルがその場所にあります。次は、画面に何かを印刷することです。 LCD_Print_String(“ Sample String”) を使用して文字列をLCDに出力し、 LCD_Print_Char(a) を使用して文字値をLCDに出力できます。ここでのプログラムでは、「STM8S103F3P3 LCD」を印刷し、以下のコードを使用して5秒の遅延を作成しました。
Lcd_Print_String( "STM8S103F3P3 LCD"); delay_ms(5000);
5秒の遅延の後、LCDを再度クリアし、最初の行に「Circuit Digest」を表示し、2番目の行に「Test:」を表示します。
Lcd_Clear(); Lcd_Set_Cursor(1,1); Lcd_Print_String( "Circuit Digest"); Lcd_Set_Cursor(2,1); Lcd_Print_String( "テスト:");
while ループ内で、整数変数 test_varの 値を個々の文字に分割し、単純な除算演算子と剰余演算子を使用してLCDに表示できるようにします。また、ASCII値を文字に変換するために「0」を追加しました。
d4 = test_var%10 + '0'; d3 =(test_var / 10)%10 + '0'; d2 =(test_var / 100)%10 + '0'; d1 =(test_var / 1000)+ '0';
次に、6文字の2行目に「Test:」と既に記述しているため、カーソルを(2,6)に設定しました。上書きすると、LCD上で既存の文字が新しい文字に置き換えられます。また、1秒の遅延を追加し、変数をインクリメントします。
Lcd_Set_Cursor(2,6); Lcd_Print_Char(d1); Lcd_Print_Char(d2); Lcd_Print_Char(d3); Lcd_Print_Char(d4); delay_ms(1000); test_var ++;
LCD付きSTM8–動作中
プログラムをテストするには、コードをコントローラーにアップロードし、マイクロUSBポートで電源を入れます。LCDが機能するには5Vが必要であるため、USBポートからボードに電力を供給する必要があることに注意してください。以前は、5V電源が必要なかったため、STリンクから直接電力を供給していました。
ご覧のとおり、LCDは期待どおりに機能しており、テスト変数の値は約1秒ごとに増加しています。また、タイマーを使用しておらず、この遅延を作成するために遅延関数のみを使用しているため、遅延期間が正確であるとは思わないことに注意してください。この目的のために、後で別のチュートリアルでタイマーを使用します。
プロジェクトの完全な動作は、以下にリンクされているビデオで見つけることができます。チュートリアルを楽しんで、何か役立つことを学んだことを願っています。ご不明な点がございましたら、コメントセクションに残すか、フォーラムを使用して他の技術的な質問をしてください。