1602 キャラクタディスプレイ データ4bit接続用ライブラリ STM32F103RB CUCLEOボードを想定

Dependents:   CharacterLCD

Files at this revision

API Documentation at this revision

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