「キャラクターLCDはちょっと値段が高いし
壊したり、扱い切れないともったいないよなぁ・・・」
PSoC5LPなら
設定も簡単に、易しく、表現豊かに
扱うことができます。
さて、キャラクターLCDモジュールを使って
文字(アスキーコード)
数字(整数)
バーグラフ
をキャラクターLCDに表示させましょう。
使うキャラクターLCDモジュールは
HD44780互換のモジュール
(秋月だとSC1602***系のLCDモジュール、心配ならお店の人と相談しよう。)
つなぎ方が気になるかと思う。けれど先にPSoC5LPで使う
ポートを決めて置く方が先になります。
ポートを決めて置く方が先になります。
「ポート」と言うのは
「ある7本のピンを1つのカデゴリーとして表すこと」です。
「ある7本のピンを1つのカデゴリーとして表すこと」です。
ちょうど、住所を
緯度と経度で書くのか、
市区町村の番地で書くのか
だと近いかも??。
緯度と経度で書くのか、
市区町村の番地で書くのか
だと近いかも??。
LCDのデータ入出力用のピンが6本あるのですが
設定の時点で、ポートごとの設定となってしまいます。なので
今回は先に使うポートをザックリ決めておいてください。
さて、まずは「LEDチカチカしようの準備編」の状態から
「Character LCD」をドラックアンドドロップだけ
さて、ドラックアンドドロップしたら
ダブルクリックをして設定をしましょう。
ここで設定できるのは、
「バーグラフ」の設定で
「Vertical Bargraph」は、垂直棒グラフ
「Horizontal Bargrah」は、水平棒グラフ
今回は水平棒グラフを選びます。
そうしたら、「OK」ボタンを押して閉じましょう。
次にポートの設定をしましょう。
[****].cydwrをダブルクリックして
「Pin」のタブでつなぐポートの設定しましょう。
「Port」のプルダウンメニューを開くと不思議な表記になっていますね。
P*[6:0]とP*[7:1]と言うような表記ですね。
これは、ポート*の何番目から何番目まで使いますよ。
って言う表記です。
カッコの中のコロン(:)の右側が「X番目から」と言う意味で
コロンの左側が「Y番目まで」と言う意味なのです。
今回の表記だと、
「ポート*番の0番目~6番目まで」
もしくは
「ポート*番の1番目~7番目まで」
が選択できるようになっています。
ポートはどこでも良いのですがP*[6:0]と表記されているタイプが良いでしょう。
選んだら、一度コンパイル。
ここまで来たら、LCDモジュールの準備をしましょう。
まずは、LCDのバックライトが点灯する様に抵抗とジャンパーをはんだづけします。
(へたくそだったのでJ3のパターンを壊しただけです。)
PSoC5LPとキャラクターLCDのつなぎ方はコンポーネットの
データシートにあるのでそれを見ましょう。
つなぎ方を見やすくしたのでこれを参考にすると良いでしょう。
PSoC5LPとの接続ができたら、
「main.c」をダブルクリックして、main.cのタブを出しましょう。
まずは
Int main(){…の中に
LCD_Char_1_Start();
LCD_Char_1_Position(0,0);
LCD_Char_1_PrintString("Hello
PSoC5LP");
と書きましょう。
LCDモジュールに文字や数字を書くには
「LCDのここから書き始めて!」っと言うのをプログラムに書きます。
ディスプレイ内を行と列として扱うことで「LCDのここ!」を指定できます。
2列16行の場合このようになっていて
左上が「0行0列」となっています。
LCD_Char_1_Position(0,0);
が「ここから書き始めて」っという事です。
次の行に書いた
LCD_Char_1_PrintString(“Hello PSoC5LP”);
はStringとあるように「文字列」なんです。
表示させたいことを()の中“”の中に書きます。
残念ながら日本語の表示には対応していないので、
アスキーコードの中にあるものしか使えません。
数値の場合は
LCD_Char_1_PrintNumber();
となります。PrintNumber()の場合は“”は要りません。
ただし16bit整数しか使えません。つまり0~65536までしか扱えないので
注意してください。(小数点も使いたい場合、文字に変換するひと手間がいります。)
さてバーグラフは
uint8 Bar=0;
while(Bar <=80){
LCD_Char_1_DrawHorizontalBG(1,0,16,Bar);
CyDelay(200);
Bar++;
}
とこんな感じに書くと動きます。
LCDに書いている本体は
LCD_Char_1_CrawHorizontalBG(行,始めの列,終わりの列,ここまで書く);
となっていて、「ここまで書いて」と言うのは
LCD表示の1つのブロックを縦に5等分したものを「1個」としています。
「80」の場合、始めの列から縦に80個分という事になります。
今回は、プログラムが単純な割に長いので
私が書いたものをコピーしておきます。
int main()
{
/* Place
your initialization/startup code here (e.g. MyInst_Start()) */
LCD_Char_1_Start();
LCD_Char_1_Position(0,0);//0行0列に書く
LCD_Char_1_PrintString("Hello PSoC5LP");//書くのは文字列
CyDelay(2000);
LCD_Char_1_ClearDisplay();//ディスプレイをすべて消せ!
LCD_Char_1_Position(0,0);//0行0列に書く
LCD_Char_1_PrintString("print number");
LCD_Char_1_Position(1,0);//1行0列に書く
LCD_Char_1_PrintNumber(43210);//書くのは数値
CyDelay(2000);
LCD_Char_1_Position(0,0);
LCD_Char_1_PrintString("Downlod START");
uint8 Bar=0;//8bitの整数の箱
while(Bar <=80){
LCD_Char_1_DrawHorizontalBG(1,0,16,Bar);//水平バーグラフを書け
CyDelay(200);
Bar++;
}
LCD_Char_1_ClearDisplay();
LCD_Char_1_Position(0,0);
LCD_Char_1_PrintString("Exit Test");
LCD_Char_1_Position(1,0);
LCD_Char_1_PrintString("==Complete==");
/*
CyGlobalIntEnable; */ /* Uncomment this line to enable global interrupts. */
for(;;)
{
/* Place your application code here. */
}
}
これに書き替えたら、もう一度コンパイル。
LCDモジュールとPSoC5LPとの配線が比較的にややこしいかと思いますので
ゆっくり配線するのがいいでしょう。
~~2行のLCDと4行のLCD~~
HD44780互換のLCDモジュールには
2行16列のタイプと4行20列のタイプがあります。
どちらも動かすのが可能ですが、
0行19列を超えると1行0列となってしまいます。
2行16列のタイプを使う方が簡単なのでそちらを使うことを勧めます。
0 件のコメント:
コメントを投稿