1602 キャラクタディスプレイ データ4bit接続用ライブラリ STM32F103RB CUCLEOボードを想定
CharLcd4bit.cpp
- Committer:
- tshl
- Date:
- 2017-10-06
- Revision:
- 0:0e84781e64cf
File content as of revision 0:0e84781e64cf:
#include "CharLcd4bit.h" #define WAIT_E() wait_ms(1) #define CHAR_MAX_PER_LINE 16 #define LINE_MAX 2 /* コンストラクタ */ CharLcd4bit::CharLcd4bit( PinName rs, PinName rw, PinName e, PinName db4, PinName db5, PinName db6, PinName db7) : RS(rs), RW(rw), E(e), DB4(db4), DB5(db5), DB6(db6), DB7(db7) { } /* LCD初期化 */ void CharLcd4bit::Initialize(void) { lcd8(0x03, false);//8bit mode lcd8(0x03, false);//8bit mode lcd8(0x03, false);//8bit mode lcd8(0x02, false);//4bit mode lcd4(0x08);//2行表示モード lcd4(0x0c);//表示設定 lcd4(0x06);//entry mode lcd4(0x01);//clear } /* 1行出力 */ void CharLcd4bit::WriteLine(int line, char *str) { char *ad=0; // 文字位置指定 SetPosition(line, 0); ad = str; for(int i = 0; i < CHAR_MAX_PER_LINE; i++) { if(*ad) { WriteChar(*ad); ad++; } else { // 文字数が足りない時は空白で埋める WriteChar(' '); } } } /* 1行出力 */ void CharLcd4bit::WriteStr(char *str) { char *ad=0; ad = str; while(*ad) { WriteChar(*ad); ad++; } } /* 1文字出力 */ void CharLcd4bit::WriteChar(char c) { lcd8(c >> 4, true); lcd8(c, true); } /* 文字位置指定 */ void CharLcd4bit::SetPosition(int line, int position) { if(line==1) lcd4(0x80 + position); /*1行目*/ else if(line==2) lcd4(0xc0 + position); /*2行目*/ } void CharLcd4bit::Clear() { lcd4(0x01); } /* 8bitモード出力 -> 4bit接続に変換して出力 */ void CharLcd4bit::lcd8(char c, bool isData) { char temp = c; DB4 = temp & 0x01; temp = temp >> 1; DB5 = temp & 0x01; temp = temp >> 1; DB6 = temp & 0x01; temp = temp >> 1; DB7 = temp & 0x01; if(isData) RS = 1; E=1; WAIT_E(); E=0; if(isData) RS = 0; WAIT_E(); } /* 4bitモード出力 */ void CharLcd4bit::lcd4(char data) { lcd8(data >> 4, false); lcd8(data, false); }