| 命令 | RS | R〜W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 |
|---|---|---|---|---|---|---|---|---|---|---|
| 表示クリヤ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| カーソルホーム | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | X |
| エントリモード | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | X |
| ディスプレー ON/OFF |
0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B |
| カーソル表示 ディスプレーシフト |
0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | X | X |
| ファンクションセット | 0 | 0 | 0 | 0 | 1 | DL | N | F | X | X |
| CGRAMセット | 0 | 0 | 0 | 1 | CGRAMアドレス | |||||
| DDRAMセット | 0 | 0 | 1 | DDRAMアドレス | ||||||
| BFアドレス 読み出し |
0 | 1 | BF | アドレスカウンタ | ||||||
| CGRAM/DDRAM 書き込み |
1 | 0 | DDRAM/CGRAMへの書き込みデータ | |||||||
| CGRAM/DDRAM 読み出し |
1 | 1 | DDRAM/CGRAMからの読み込みデータ | |||||||
下記のようになっています。表示は4ビットモードで行っています。
| LCD側 | R8C/M12A側 |
|---|---|
| VDD | |
| VSS | |
| VO(コントラスト) | |
| RS | P1_b4 |
| R/W | GND |
| E | P1_b5 |
| DB0 | |
| DB1 | |
| DB2 | |
| DB3 | |
| DB4 | P1_b0 |
| DB5 | P1_b1 |
| DB6 | P1_b2 |
| DB7 | P1_b3 |
Rは液晶画面の明るさを調節する可変抵抗です。1kΩを付けています。
◎プログラムを実行したLCD表示画面

(4)プログラムの作成
HEWを立ち上げ、新規プロジェクトワークスペースの作成でワークスペース名を「M12_LCD」とします。
下のメインプログラムを打ち込んで作成します。
1)メインプログラム M12_LCD.c
#include "sfr_r8m12a.h"
#include "lcd_ctrl.h"
void main(void)
{
unsigned int i;
unsigned char str1[16]; // LCD1行目表示配列
unsigned char str2[16]; // LCD2行目表示配列
init();
lcd_init();
lcd_clear();
for(i=0;i<16;i++){
str1[i]=' '; // LCD1行目表示配列初期化
str2[i]=' '; // LCD2行目表示配列初期化
}
lcd_cursor_off();
lcd_str("0123456789abcdef",1);
str2[0]='モ';str2[1]='シ';str2[2]='ノ';str2[3]='ヒ';str2[4]='ョ';
str2[5]='ウ';str2[6]='シ';str2[7]='テ';str2[8]='ス';str2[9]='ト';
lcd_str(str2,2);
}
2)LCD制御関数 lcd_ctrl.c
次の液晶表示制御関数 lcd_ctrl.cを別ファイルとして、エディター等で作成してメインファイルと
同じフォルダに保存します。
RS命令を送るときはRS_Low、データを送るときはRS_Highにセット
RS=0 R/W=0 Control Command 出力
RS=1 R/W=0 書き込みデータ出力
str1[i] 1行目に表示する文字を格納する配列 i=0〜15
str2[i] 2行目に表示する文字を格納する配列 i=0〜15
LCD表示の仕方は
1) lcd_str(str1,line) 配列str1[i]に表示する文字を記入して文字str1をlineで指定した行に表示する
2) lcd_str("文字列\0",line) 表示したい文字列を直接"文字列"に記入してlineで指定した行に表示する
#include "sfr_r8m12a.h"
#include "lcd_ctrl.h"
/* I/O初期化関数 */
void init(void)
{
int i;
/**** 高速オンチップオシレータで動作する場合 ****/
prc0 = 1;// プロテクトレジスタ解除
hocoe = 1;// 高速オンチップオシレータ発振開始
for(i=0;i<50;i++);//発振安定まで待つ
hscksel =1;// 高速オンチップオシレータ選択ビットを1にする
scksel =1;// システム基準クロックを高速にする
prc0 = 0;// プロテクトレジスタ禁止
pd1 = 0x7f;// ポートディレクションレジスタ p0〜p6出力ポート設定
p1 = 0x00;
}
/* us単位のwait関数 */
void wait_us(unsigned long usec)
{
usec = (usec * CLOCK) / 45000;
while(usec --);{}
}
/* データ出力関数 */
void lcd_out(unsigned char code,unsigned char flag)
{
p1=code & 0x0f;
if( flag == 0)
RS_High;
else
RS_Low;
asm("NOP");
E_High;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
E_Low;
}
/* 画面消去関数 */
void lcd_clear(void)
{
lcd_cmd(0x01);
}
/* カーソル表示OFF */
void lcd_cursor_off(void)
{
lcd_cmd(0x0c);
}
/* 1文字出力関数 */
void lcd_data(unsigned char asci)
{
lcd_out(asci>>4,0); // 上位4ビット出力
lcd_out(asci,0); // 下位4ビット出力
wait_us( 50 );
}
/* コマンド出力関数 */
void lcd_cmd(unsigned char cmd)
{
lcd_out(cmd >>4,1);
lcd_out(cmd,1);
if((cmd == 0x01) || (cmd == 0x02))
wait_us(2000);
else
wait_us(50);
}
/* 文字列出力関数 */
void lcd_str(unsigned char *str,unsigned char line)
{
if(line==1)
lcd_cmd(0x02);
else
lcd_cmd(0xc0);
while(*str != 0x00){
lcd_data(*str);
str++;
}
}
/* LCD初期化関数 */
void lcd_init(void)
{
wait_us(20000);
lcd_out(0x03,1); // LCD初期化1回目 0010 0011 E=1,RS=0 8ビット転送
wait_us(5000);
lcd_out(0x03,1); // LCD初期化2回目 0010 0011 E=1,RS=0 8ビット転送
wait_us(4000);
lcd_out(0x03,1); // LCD初期化3回目 0010 0011 E=1,RS=0 8ビット転送
wait_us(4000);
lcd_out(0x02,1); // LCD初期化4回目 0010 0010 E=1,RS=0 8ビット転送 データ長4ビットに設定
wait_us(4000);
lcd_cmd(0x28); // 001 0 1000 セットファンクション b4=0:転送長4ビット,b3=1:表示数2行,b2=0:表示ドット5x7
wait_us(4000);
lcd_cmd(0x08); // 0000 1000 ディスプレイOFF,D=C=B=0
wait_us(4000);
lcd_cmd(0x0e); // 0000 1110 b2=1:ディスプレイON,b1=1:カーソルON,b0=0:ブリンクOFF
wait_us(4000);
lcd_cmd(0x06); // 0000 01 10 エントリーモード b1=1:カーソル移動方向インクリメント,b0=0:ディスプレイシフトしない
wait_us(4000);
lcd_cmd(0x01); // 0000 000 1 クリアディスプレイ
wait_us(4000);
}
lcd_ctrl.cは分割コンパイルの構成ファイルとして作成しますが、作成したけではHEW立ち上げ画面の左側の
プロジェクト一覧の中には組み込まれません。手動で追加してやる必要があります。「C source file」の
「M12_LCD.c」の上でマウスを右クリックすると、サブメニューが出てくる。その項目の4段目のファイルの追加を
選択して、「M12_LCD.c」と同じフォルダに保存してある「lcd_ctrl.c」を追加するとプロジェクト欄に表示され
るようになります。