LCD・液晶ディスプレイに文字を表示するプログラムをいろいろやってみました。マイコン回路は「LCD表示テスト用回路」を使用します。
まずは普通に文字を表示させるプログラムです。上の行に「Breadboard Radio」、下の行に「Hello AVR World」と表示します。下の図のような感じになります。
プログラムは下記の通りです。BASCOM-AVRがインストールされたパソコンで下記リンクをクリックしてファイルをダウンロードすると、BASCOM-AVR IDEが自動的に立ち上がって画面内にプログラムが表示されます。
プログラムファイル lcd1a.bas
1 | $regfile = "at26def.dat" | ATtiny26Lを使用する。 | |
2 | $crystal = 1000000 | クロック周波数を1MHzに設定。 | |
3 | Config Lcdpin=Pin, Db4=Porta.4, Db5=Porta.5 | LCDのピン接続の設定。DB4=PA4, DB5=PA5。 | |
4 | Config Lcdpin=Pin, Db6=Porta.6, Db7=Porta.7 | LCDのピン接続の設定。DB6=PA6, DB7=PA7。 | |
5 | Config Lcdpin=Pin, E=Porta.3, Rs=Porta.2 | LCDのピン接続の設定。E=PA3, RST=PA2。 | |
6 | Config Lcd = 16 * 2 | 16文字×2行表示のLCDを使用する。。 | |
7 | Cursor Off | カーソルを表示しない。 | |
8 | Cls | LCDの表示を消去する。 | |
9 | Lcd "Breadboard Radio" | (上の行に)「Breadboard Radio」と表示する。 | |
10 | Lowerline | LCDの下の行に、 | |
11 | Lcd "Hello AVR World" | 「Hello AVR World」と表示する。 | |
12 | End | 終わり。 |
3行目から5行目はLCDのピンとマイコンICのピンの接続を設定するものです。対応するピンの名前を「=」で結んで列挙します。BASCOM-AVRのマニュアルではこれらの記述は改行せずに1行で書くようにとの注意書きがあります。でもそうするとこの行だけが横に長くなって見づらいです。こんなふうになります。
そういうわけで上のプログラムではこの部分を3行に分けて書きました。こういう書き方でいくつかのプログラムを試してみましたが、特に問題はなさそうです。なあんだって感じですが、もっと複雑なプログラムでは支障が出るかもしれません。
6行目「Config Lcd = 16 * 2」は、16文字×2行表示のLCDを使うという意味です。7行目「Cursor Off」はLCD画面にカーソルを表示しないようにする命令です。カーソルを表示したいときは「Cursor On」と書きますが、BASCOM-AVRは初期設定でカーソルを表示するようになっているので、何も書かなければカーソルが出ます。ここまではLCD表示のプログラムすべてに共通の書式です。
8行目「Cls」はLCD画面の表示をすべて消去する命令です。9行目「Lcd "Breadboard Radio"」はLCD画面に「Breadboard Radio」という文字列を表示する命令です。「Lcd」の後に表示したい文字を「" "」(引用符)で括って記述します。簡単ですね。位置の指定をしなければ上の行の左端から表示されます。
10行目「Lowerline」はLCDの下の行の左端から文字を表示する命令です。11行目「Lcd "Hello AVR World"」で下の行に「Hello AVR World」という文字が表示されます。先に下の行に文字を表示し、それから上の行の表示に移るときは「Upperline」という命令を使います。今回使用したLCDは1行の文字数が16文字ですが、「" "」の部分に17文字以上の文字列を入力しても、17文字目以降は表示されません。ただしうんと長い文字列を入力すると、41文字目以降が下の行に出てきます。
「Locate」命令を使ってLCD画面の任意の位置に文字を表示します。9行目「Locate 1, 6」と11行目「Locate 2, 4」が位置を指定するプログラムです。「Locate (行), (桁)」という書き方になります。
プログラムファイル lcd1b.bas
1 | $regfile = "at26def.dat" | ATtiny26Lを使用する。 | |
2 | $crystal = 1000000 | クロック周波数を1MHzに設定。 | |
3 | Config Lcdpin=Pin, Db4=Porta.4, Db5=Porta.5 | LCDのピン接続の設定。DB4=PA4, DB5=PA5。 | |
4 | Config Lcdpin=Pin, Db6=Porta.6, Db7=Porta.7 | LCDのピン接続の設定。DB6=PA6, DB7=PA7。 | |
5 | Config Lcdpin=Pin, E=Porta.3, Rs=Porta.2 | LCDのピン接続の設定。E=PA3, RST=PA2。 | |
6 | Config Lcd = 16 * 2 | 16文字×2行表示のLCDを使用する。。 | |
7 | Cursor Off | カーソルを表示しない。 | |
8 | Cls | LCDの表示を消去する。 | |
9 | Locate 1, 6 | 上の行の6桁目から、 | |
10 | Lcd "Hello" | 「Hello」と表示する。 | |
11 | Locate 2, 4 | 下の行の4桁目から、 | |
12 | Lcd "AVR World" | 「AVR World」と表示する。 | |
13 | End | 終わり。 |
「Wait」命令を使って、「Hello AVR World」を1語ずつ順に表示します。すべて表示した後1回点滅させます。
プログラムファイル lcd1c.bas
1 | $regfile = "at26def.dat" | ATtiny26Lを使用する。 | |
2 | $crystal = 1000000 | クロック周波数を1MHzに設定。 | |
3 | Config Lcdpin=Pin, Db4=Porta.4, Db5=Porta.5 | LCDのピン接続の設定。DB4=PA4, DB5=PA5。 | |
4 | Config Lcdpin=Pin, Db6=Porta.6, Db7=Porta.7 | LCDのピン接続の設定。DB6=PA6, DB7=PA7。 | |
5 | Config Lcdpin=Pin, E=Porta.3, Rs=Porta.2 | LCDのピン接続の設定。E=PA3, RST=PA2。 | |
6 | Config Lcd = 16 * 2 | 16文字×2行表示のLCDを使用する。。 | |
7 | Cursor Off | カーソルを表示しない。 | |
8 | Cls | LCDの表示を消去する。 | |
9 | Lcd "Hello " | 「Hello 」と表示する。 | |
10 | Waitms 500 | 0.5秒間そのまま。 | |
11 | Lcd "AVR " | 「Hello 」に続いて「AVR 」と表示する。 | |
12 | Waitms 500 | 0.5秒間そのまま。 | |
13 | Lcd "World" | 「Hello AVR 」に続いて「World」と表示する。 | |
14 | Waitms 500 | 0.5秒間そのまま。 | |
15 | Display Off | すべての文字を消す。 | |
16 | Waitms 500 | 0.5秒間そのまま。 | |
17 | Display On | 再び文字を表示する。 | |
18 | End | 終わり。 |
LED点灯のプログラムと同じく、LCD表示でも「Wait」命令が使えます。9行目の「"Hello "」と11行目の「"AVR "」は、単語の間を空けるため語尾に半角のスペースが1個入っています。11行目や13行目のように、「Cls」命令を書かずに「Lcd」命令を続けると、現在表示されている文字列の右隣に新しい文字列が表示されます。
15行目「Display Off」は画面の表示を消す命令ですが、「Cls」と違って、表示された文字列はLCD内部のメモリーに記憶されています。17行目「Display On」で再び表示することができます。