ピン番号 記号 I/O 機能 1 Vcc - 電源(5V) 2 Vss

2.2
LCD【組込みソフトウェアテキスト(AVR編)→1参考資料 液晶ディスプレイ(LCD)の使い方】
(1)使用するLCDモジュールについて
実習ボードに搭載されているLCDモジュールは,SUNLIKE社製のSC1602BS*B(16文字×2行の文字
表示が可能)です.このLCDモジュールにはキャラクタフォントのROMが内蔵されていて,カーソル位
置と文字コードを送信するだけで文字の表示が可能です.
LCDモジュールには14ピンのコネクタがあり,各ピンの概要を表2-5に示します.
図2-11
LCDモジュール (SC1602BS*B)外観
SC1602BS*B
表2-5
ピン番号
記号
1 Vcc
2 Vss
3 Vee
-
4 RS
I
5 R/W
I
6
7
8
9
10
11
12
13
14
E
DB0
DB1
DB2
DB3
DB4
DB5
DB6
DB7
ピンアサイン表
I/O
I
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
機能
電源(5V)
グランド
コントラスト調整
0:命令入力
1:データ入力
0:LCDモジュールへの書き込み
1:LCDモジュールからの読み出し
信号許可
データバスライン0(LSB)
データバスライン1
データバスライン2
データバスライン3
データバスライン4
データバスライン5
データバスライン6
データバスライン7(MSB)
制御命令は次の11種類である.なお,~は負論理を表し,xは無効ビットを表す.
RSはレジスタ選択信号(0:制御用レジスタ,1:データレジスタ),R/~Wは読み出し/書き込み選択信号,
DB7-0はデータ信号,BFはビジーフラグである.
表2-6
制御命令一覧
制御命令
RS R/~W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 実効時間
表示クリア
0
0
0
0
0
0
0
0
0
1
1.64ms
カーソルホーム
0
0
0
0
0
0
0
0
1
x
1.64ms
エントリーモードセット
0
0
0
0
0
0
0
1 I/D S
40us
表示オン/オフコントロール
0
0
0
0
0
0
1
D
C
B
40us
カーソル/表示シフト
0
0
0
0
0
1 S/C R/L x
x
40us
ファンクションセット
0
0
0
0
1
DL N
F
x
x
40us
CGRAMアドレス
CGRAMアドレスセット
0
0
0
1
40us
DDRAMアドレス
DDRAMアドレスセット
0
0
1
40us
アドレスカウンタ
BF/アドレス読み出し
0
1
BF
40us
書き込みデータ
CGRAM/DDRAMへの書き込み 1
0
40us
読み出しデータ
CGRAM/DDRAMから読み出し 1
1
40us
CGRAM:ユーザ文字パターン定義用メモリ,DDRAM:表示用メモリ,BF:Busy Flag
DDRAMは,1行目:H'00-H'27,2行目:H'40-H'67となっており,1行に40文字分の領域が用意されている.
- 24 -
・エントリーモードセット
I/D:文字コードをDDRAM/CGRAMに書き込みまたは読み出ししたときのアドレス増減方向
(I/D=1:+,I/D=0:-)
S:S=1のとき,書き込み時の表示シフトあり.(I/D=1:左シフト,I/D=0:右シフト)
・表示ON/OFFコントロール
D:1で表示ON,0で表示OFF.DDRAMの内容は保持.
C:1でカーソル表示ON,0でOFF.
B:1でカーソル位置ブリンクON,0でOFF.ブリンクは全ドット黒と文字の切り換え.
・カーソル/表示シフト
DDRAMの内容を変えずにカーソルの移動と表示シフトを行う.
R/L:1で右シフト,0で左シフト.
S/C:1で表示全体,0でカーソル位置.S/C=1ではカーソルも一緒に移動.
・ファンクションセット
DL:インタフェースデータ長設定.1で8ビット(DB7-0使用),0で4ビット(DB7-4使用).
N:表示行数設定.1で2行,0で上1行のみ.
F:文字フォントセット.通常F=0で使用.
ファンクションセットは他の制御命令より先に実行しなければならない.
LCDに表示する文字情報は表示データRAM(DDRAM)に格納されます.16文字×2行の座標とその
位置の文字を格納するDDRAMのアドレスとの関係を下図に示します.1行目はアドレス0x00~0x0F,
2行目はアドレス0x40~0x4Fとなっており,1行目と2行目の間にアドレスの開きがあることに注意してく
ださい.
表2-7 液晶表示器の内部アドレス
桁
行
1
2
1
0
40
2
1
41
3
2
42
4
3
43
5
4
44
6
5
45
7
6
46
8
7
47
9
8
48
10
9
49
11 12 13 14 15
0A 0B 0C 0D 0E
4A 4B 4C 4D 4E
16
0F
4F
DDRAMに格納する文字は8ビットの文字コードで表現されます.文字コードに対応する文字パターン
はキャラクタジェネレータROM(CGROM)に格納されています.ユーザが自由に設計した文字パターン
を格納するキャラクタジェネレータRAM(CGRAM)もあります.文字コードと文字パターンの対応をを以
下の表に示します.表中の(1)~(8)はCGRAMの領域となります.
表2-8
上位4ビット
下位4ビット
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
****0000
****0001
****0010
****0011
****0100
****0101
****0110
****0111
****1000
****1001
****1010
****1011
****1100
****1101
****1110
****1111
文字コードと文字パターンの対応
0
2
3
4
5
6
7
A
B
0000 0010 0011 0100 0101 0110 0111 1010 1011
(1)
0
@
P
`
p
(2)
!
1
A
Q
a
q
。
ア
(3)
”
2
B
R
b
r
「
イ
(4)
#
3
C
S
c
s
」
ウ
(5)
$
4
D
T
d
t
、
エ
(6)
%
5
E
U
e
u
.
オ
(7)
&
6
F
V
f
v
ヲ
カ
(8)
’
7
G
W
g
w
ァ
キ
(1)
(
8
H
X
h
x
ィ
ク
(2)
)
9
I
Y
i
y
ゥ
ケ
(3)
*
:
J
Z
j
z
ェ
コ
(4)
+
;
K
[
k
{
ォ サ
(5)
‚
<
L
¥
l
|
ャ
シ
(6)
=
M
]
m
}
ュ
ス
(7)
.
>
N
ˆ
n
→
ョ
セ
(8)
/
?
O
_
o
←
ッ
ソ
- 25 -
C
1100
タ
チ
ツ
テ
ト
ナ
ニ
ヌ
ネ
ノ
ハ
ヒ
フ
ヘ
ホ
マ
D
1101
ミ
ム
メ
モ
ヤ
ユ
ヨ
ラ
リ
ル
レ
ロ
ワ
ン
゙
゚
E
1110
α
ä
ß
ε
μ
σ
ρ
√
¬
¡
¢
ö
F
1111
ρ
Θ
∞
Ω
ü
Σ
π
μ
千
万
円
÷
■
最低限必要な設定は,
ファンクションセット
表示コントロール
エントリーモードセット
である.
初期設定の手順は,
1)VDDが4.5Vに達してから15ms以上待つ
2)ファンクションセット(DB=H'3x)
3)4.1ms以上待つ
4)ファンクションセット(DB=H'3x)
5)100us以上待つ (これで初期設定が可能になる)
6)インタフェースデータ長8ビット設定(ファンクションセット:DB=H'3x)
7)(インタフェース長4ビットなら改めてファンクションセット:DB=H'2x)
8)ファンクションセット(その他の設定)
9)表示コントロール
10)エントリーモードセット
となる.
必要に応じて,表示クリア,カーソル/表示シフトの設定を行う.
インタフェイスデータ長が4ビットに設定された場合は,DB7-4の4ビットを使って,DB7-4,DB3-0の順
に2回のデータ転送が必要になる.
※初期設定ではBFチェック使用不可
(2)LCDモジュールとAVRとの配線
LCDモジュールとAVRとの配線を下図に示します.今回は各信号線の意味については省略しますが,
AVRのポートFの2~7ビットがLCDモジュールと接続されていることだけ理解しておいてください.
図2-12
LCDモジュールとAVRとの配線
(3)LCD表示プログラム
LCDモジュールをAVRで使用するためのライブラリを準備しました.ライブラリとヘッダファイルをダウン
ロードして,LCDを使用したい Atmel Studio の親ディレクトリにコピーしてください.
以降は Atmel Studio での作業です.まずはダウンロードしたライブラリの設定から行います.
Atmel Studio のメニューから,Project => useliblcd Propaties を選択します.プロジェクトのオプションを
指 定 す る ウ ィ ン ド ウ が 開 く の で , ウ ィ ン ド ウ 左 に 表 示 さ れ た 項 目 か ら "Toolchain"を ク リ ッ ク し て,
AVR/GNU Linker の下の "Libraries" を選択します.次図のようにライブラリに関するオプションを指定
する画面になります.
- 26 -
図2-13
Atmel Studio の設定
上図の Libraries に,ダウンロードしたLCDライブラリ名 "liblcd",ライブラリへのパスを新規に登録しま
す.これでプロジェクトをビルドするときにリンクされるようになります.
LCDライブラリに含まれる関数を以下の表に示します.
表2-9
関数プロトタイプ
void lcd_io_init(void);
void lcd_init(void);
void lcd_put_ch(char ch);
void lcd_put_str(char *str);
void lcd_position(char tx ,char ty);
LCDライブラリの関数
説明
LCDモジュールを使用できるようにポートFを初期化.
LCDモジュール初期化.
1文字表示.
引数: ch:1文字データ
文字列表示.
引数: str:文字列データの先頭ポインタ
LCD表示位置の設定.
引数: tx :x座標, ty :y座標
LCDを使用するには,プログラムの最初で,lcd_io_init(),lcd_init()を呼び出してポートの設定,LCDの
初期設定を行います.その後はLCDの座標をlcd_position()で指定し,文字や文字列を,lcd_put_ch(),
lcd_put_str()でLCDに表示します.LCD使用例を以下のプログラムに示します(useliblcd).
- 27 -
リスト2-4
LCD表示プログラム(useliblcd)
LCDライブラリを使用するので, lcd.h を,パスも含めてインクルードします.プログラムはmain 関数の
みで,最初に lcd_io_init(),lcd_init() を呼び出してLCDを使用するための初期設定をして,その後
lcd_position(0,0) でカーソルを(0,0)(LCDの左上)に移動し,lcd_put_str("Welcome to") でLCD上段
に "Welcome to" の文字列を表示します.LCDのカーソルは文字を表示する度に1文字分右にシフト
するので,この時点でのカーソルの位置は表示した文字列の最後の文字 "o" の右隣りとなります.
lcd_position(0,1) でLCDの左下に移動し,lcd_put_str("LCD World!!")で,LCD下段に"LCD World!!"
の文字列を表示します.
LCDモジュールに関する記述は以上で,プログラム内のその他の記述は特に難しい点はないと思うの
で解説は省略します.実際に実習ボードにダウンロードして実行すると,下図のようにLCDにメッセー
ジが表示されます.
コントラストは左側の半固定抵抗で調整して下さい.
図2-14
プログラム実行結果
○練習問題3
1.組込みソフトウェアテキスト(AVR編)→1参考資料 液晶ディスプレイ(LCD)の使い方内のサンプルプロ
グラム(useliblcd)を打ち込み,実習ボード上で動作を確認せよ.
2.トグルスイッチ8ビットを入力とし,以下のようにLCDに表示するプログラムを作成せよ.
Switch Input
???????? 0x??
2進表示 16進表示
- 28 -
○練習問題3-2の考え方
1)全体
①入力はsimpleioを流用
②8ビット変数を文字列に変換
8ビット変数→2進数8桁の文字列
8ビット変数→16進数2桁の文字列
の二つに分ける
③文字列は char ???[14]
2進数8桁+‘ ’+2桁(0x)+16進数2桁+¥0
(¥0:終端文字)
2)8ビット変数→2進数8桁の文字列
①1ビットずつ文字列に変換
②変換法を考える
例えば
ⅰ.MSBで判断
・必要数シフト,0x80でマスク
・==0とそれ以外で’0’か’1’をセット
ⅱ.LSBで判断
・必要数シフト,0x01でマスク
・==0とそれ以外で’0’か’1’をセット あるいは ==0か==1で’0’か’1’をセット
ⅲ.LSBを直接アスキーコードに変換
・必要数シフト,0x01でマスク
・0x30を加算
3)8ビット変数→16進数2桁の文字列
①4ビットずつ文字列に変換
②変換法を考える
例えば
ⅰ.下位4ビットで判断1
・上位なら4ビット右シフト,0x0Fでマスク
・switchで個々に文字列をセット
ⅱ.下位4ビットで判断2
・上位なら4ビット右シフト,0x0Fでマスク
・0x00~0x09か0x0A~0x0Fで判断→+0x30か+0x37
ⅲ.下位4ビットを直接アスキーコードに変換
・上位なら4ビット右シフト,0x0Fでマスク
・0x30を加算
・>0x39なら+0x07
- 29 -