1-3.キャラクタ型LCDを使う[SC1602BSLB-SO-GB-K]

2015/03/20

●キャラクタ型LCDを使う[SC1602BSLB-SO-GB-K]は下記のとおり

LCDはGPIOのbit[0]~[5]を使用する。

LED:GPIO7
SW:GPIO21

pinアサイン
SC1602BSLB-SO-GB-K raspberrypi pin
DB4 (11pin) GPIO0 (11pin)
DB5 (12pin) GPIO1 (12pin)
DB6 (13pin) GPIO2 (13pin)
DB7 (14pin) GPIO3 (15pin)
R/W (5pin) Low固定
RS (4pin) GPIO4 (16pin)
E (6pin) GPIO5 (18pin)
D0~D3 Low固定

●lcd.c
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>

#define LCD_D7 3
#define LCD_D6 2
#define LCD_D5 1
#define LCD_D4 0 // ここまでがデータ用
#define LCD_EN 5 // リード/ライト イネーブル信号
#define LCD_RS 4 // レジスタ選択信号
#define LCD_RW 0

int main(void){

// WiringPi初期化
wiringPiSetup();

// GPIOポートの設定
pinMode(LCD_D7,OUTPUT);
pinMode(LCD_D6,OUTPUT);
pinMode(LCD_D5,OUTPUT);
pinMode(LCD_D4,OUTPUT);
pinMode(LCD_EN,OUTPUT);
pinMode(LCD_RS,OUTPUT);

// 液晶リセット
LCD_RES();

}

int LCD_RES(void){

LCD_SET(0,0,0,0,1,1); // 8bitモードに設定
delay(4.1);
LCD_SET(0,0,0,0,1,1); // 8bitモードに設定
usleep(100);
LCD_SET(0,0,0,0,1,1); // 8bitモードに設定
LCD_SET(0,0,0,0,1,0); // 4bitモードに設定

LCD_SET(0,0,0,0,1,0);LCD_SET(0,0,1,0,0,0); // 2行 普通フォントに設定
LCD_SET(0,0,0,0,0,0);LCD_SET(0,0,1,0,0,0); // 液晶表示OFF
LCD_SET(1,0,0,0,1,1);LCD_SET(1,0,0,0,0,0); // データクリア
LCD_SET(0,0,0,0,0,0);LCD_SET(0,0,0,1,1,0); // カーソル右移動 左シフトに設定
LCD_SET(0,0,0,0,0,0);LCD_SET(0,0,1,1,0,0); // 液晶表示ON

}

int LCD_SET(int rs,int rw,int db7,int db6,int db5,int db4){

// 一旦全ポートに0を書き込む
digitalWrite(LCD_RW,0);
digitalWrite(LCD_RS,0);
digitalWrite(LCD_EN,0);
nanosleep(60);
digitalWrite(LCD_D7,0);
digitalWrite(LCD_D6,0);
digitalWrite(LCD_D5,0);
digitalWrite(LCD_D4,0);
usleep(40);

// データ転送
digitalWrite(LCD_RW,rw);
digitalWrite(LCD_RS,rs);
nanosleep(60);
digitalWrite(LCD_EN,1);
nanosleep(60);
digitalWrite(LCD_D7,db7);
digitalWrite(LCD_D6,db6);
digitalWrite(LCD_D5,db5);
digitalWrite(LCD_D4,db4);
digitalWrite(LCD_EN,0);

// 表示クリア、初期位置復帰命令の実行時間が
// 1.52msと長いので、RSとR/Wの数値が0の命令は
// 待ち時間を長く設定する。
if((rw+rs)==0)usleep(1520);
if((rw+rs)!=0)usleep(40);
}




●コンパイル
pi@raspberrypi ~ $ gcc ./lcd.c -o lcdtest -lwiringPi