1602 キャラクタディスプレイ データ4bit接続用ライブラリ STM32F103RB CUCLEOボードを想定
Revision 0:0e84781e64cf, committed 2017-10-06
- Comitter:
- tshl
- Date:
- Fri Oct 06 05:01:05 2017 +0000
- Commit message:
- ?????????
Changed in this revision
CharLcd4bit.cpp | Show annotated file Show diff for this revision Revisions of this file |
CharLcd4bit.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 0e84781e64cf CharLcd4bit.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CharLcd4bit.cpp Fri Oct 06 05:01:05 2017 +0000 @@ -0,0 +1,127 @@ +#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); +} \ No newline at end of file
diff -r 000000000000 -r 0e84781e64cf CharLcd4bit.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CharLcd4bit.h Fri Oct 06 05:01:05 2017 +0000 @@ -0,0 +1,65 @@ +#ifndef _CharLcd4bit_H +#define _CharLcd4bit_H + +#include "mbed.h" + +/** 1602LCD表示クラス 4bitモード */ +class CharLcd4bit +{ + public: + /** コンストラクタ */ + CharLcd4bit( + PinName rs, + PinName rw, + PinName e, + PinName d4, + PinName d5, + PinName d6, + PinName d7); + + /** LCD初期化 */ + void Initialize(); + + /** 1行出力 (1行の文字数満たない場合は空白で埋める) + * + * @param int line : ライン番号 + * @param char *str : 文字列 + */ + void WriteLine(int line, char *str); + + /** 文字列出力 + * + * @param char *str : 文字列 + */ + void WriteStr(char *str); + + /** 1文字出力 + * + * @param char c : 文字 + */ + void WriteChar(char c); + + /** 文字位置指定 + * + * @param int line : ライン番号 + * @param int position : 文字位置 + */ + void SetPosition(int line, int position); + + /** 表示クリア */ + void Clear(); + + private: + void lcd8(char c, bool isData); + void lcd4(char data); + + DigitalOut RS; + DigitalOut RW; + DigitalOut E; + DigitalOut DB4; + DigitalOut DB5; + DigitalOut DB6; + DigitalOut DB7; +}; + +#endif // _CharLcd4bit_H \ No newline at end of file