キャラクタ液晶の制御プログラム

1、AVRマイコンを使用したキャラクタ液晶の制御プログラムの作成。

ATMEL社から販売されている8bitワンチップ・マイコン「AVR」シリーズは、Z8(知ってます?)ライクな素直な構成で 個人的には使い易いと思っているのですが、雑誌の広告などを見るとマイクロチップ社の「PIC」シリーズの影に隠れてしまうマイナーなマイコンです。
今回は、20ピン・パッケージの「AT90S2313」を使って、秋月電子で購入した16×2行 キャラクタ液晶「SC1602BS」を制御するプログラムを作成してみました。

アセンブラ・ソース


AT90S2313は、ポートB(8bit)とポートD(7bit)の15本のI/Oを持っていますが、このプログラムでは ポートDの6本のI/Oを使ってLCDを4bitインターフェースで制御します。4bitのデータバスとEおよびRS信号のみを使用し、R/WピンはGNDに落としたままにします。(読込みはしない)

表1:LCD端子接続一覧
SC1602 AT90S2313 備考
R/W GND 常に書込み状態
E PD5
RS PD4 レジスタ選択信号
DB3 PD3 データバス
DB2 PD2
DB1 PD1
DB0 PD0

このプログラムでは、処理を簡単にするためデータバスをbit0からbit3に割り当てています。RS信号とE信号は、リスト冒頭の定義部を変える事で好きなピンに割り当てる事が可能です。
また、外来ノイズによる誤動作を防ぐため、一旦RAMに書込んだ値(pdd)でLCDの制御をしています。

以下に主要なサブルーチンの解説をまとめます。
(1)LCD_INIT (LCDの初期化ルーチン)
冒頭の定義部に従ってLCDを初期化します。
(2)CLR_SCREEN (LCDの表示のクリア)
LCDの表示をクリアします。
カーソルの位置やシフトの状態も初期化されます。
このルーチン実行後は、1.64mSec以上経ってからLCDを制御して下さい。
(3)LOCATE (文字の表示位置設定)
R17に設定された位置情報をLCDに設定します。
 ・$00〜:1行目に表示
 ・$40〜:2行目に表示
(4)LCD_DATA (LCDに1文字表示)
R17に設定された文字データをLCDに表示します。
(5)PRINT (LCDにROM内のメッセージを表示)
R31:R30で示されるプログラムメモリ内のメッセージをLCDに表示します。
メッセージは、$0dで終わらなければなりません。
AVRのバイト・データは必ず「偶数個」にする必要があるので、注意してください。
各サブルーチンは 特に指定のない限り、次のLCD制御ルーチンを実行するまで40uSec以上 時間をあけてください。