読者です 読者をやめる 読者になる 読者になる

バックライト付8桁14セグメントLCDをArduinoで使用する

Arduino 電子部品

概要

この記事について

ジャンク品のバックライト付8桁14セグメントLCDを制御するライブラリを作成したので、紹介も兼ねてArduinoでの使用方法を説明します。

ジャンク品のバックライト付8桁14セグメントLCDについて

共立エレショップで購入できるジャンク品です。
8桁の14セグメントと10種のマークが表示できます。

参考

また、ライブラリ作成時に下記の記事を参考にさせていただきました。
配線をフレキシブルケーブルを使わずに直接はんだ付けする箇所も書かれているので、フレキシブルケーブルの購入が手間な場合は手早く試せます。

回路

部品

  • バックライト付8桁14セグメントLCD (共立エレショップ)
  • FFC フレキシブルケーブル 0.5mmピッチ 10Pin 150mm (せんごくネット通販)
  • フレキコネクタDIP化キット(0.5mm10P) (秋月電子通商)
  • Arduino Uno
  • ブレッドボード
  • ジャンパピン

LCDのピン配置

共立エレショップ提供の簡易資料/PDFに下記のピンが記載されています。

信号名 機能概要
1 VCC 電源入力 (5V DC)
2 _LE ラッチイネーブル (「L」でデータラッチ)
3 DIN シリアルデータ入力
4 SCK 転送クロック入力(立ち上がりエッジで取り込み)
5 GND グラウンド
6 NC ノンコネクション
7 LED-A1 バックライトLED アノード(L)
8 LED-A2 バックライトLED アノード®
9 LED-K バックライトLED 共通カソード
10 NC ノンコネクション

LCDの表向きにした状態の左から、裏向きにした状態の右から表の番号順にピンが並んでいます。
この記事では1〜5のピンのみ使用します。

接続表

フレキコネクタDIP化キットを経由して、LCDとArduinoの各ピンを接続します。

  • LCDのVCC -> Arduinoの5V
  • LCDの_LE -> Arduinoの11ピン
  • LCDのDIN -> Arduinoの9ピン
  • LCDのSCK -> Arduinoの12ピン
  • LCDのGND -> ArduinoのGND

接続例

下記の写真のように接続します。

f:id:jakalada:20160401053051j:plain

ライブラリのインクルード

下記よりArduinoライブラリをダウンロードして、開発環境にインクルードしてください。

マークを表示

下記のサンプルスケッチを書き込んでください。
10種のマークが順に表示されます。

#include <AM50288H.h>

const int lePin = 11;
const int dinPin = 9;
const int sckPin = 12;

AM50288H lcd(lePin, dinPin, sckPin);

void setup() {
  Serial.begin(9600);
  lcd.begin();

  // すべて消灯する
  lcd.clear();
  lcd.refresh();
  delay(1000);
}

void loop() {
  // 各マークを順に表示する

  // バッテリーを表示
  lcd.setMarkBit(MARK_BATTERY, HIGH);
  lcd.refresh();
  delay(1000);
  lcd.setMarkBit(MARK_BATTERY, LOW);

  // スピーカーを表示
  lcd.setMarkBit(MARK_SPEAKER, HIGH);
  lcd.refresh();
  delay(1000);
  lcd.setMarkBit(MARK_SPEAKER, LOW);

  // アンテナを表示
  lcd.setMarkBit(MARK_ANNTENA, HIGH);
  lcd.refresh();
  delay(1000);
  lcd.setMarkBit(MARK_ANNTENA, LOW);

  // 音符を表示
  lcd.setMarkBit(MARK_NOTE, HIGH);
  lcd.refresh();
  delay(1000);
  lcd.setMarkBit(MARK_NOTE, LOW);

  // 四角形を表示
  lcd.setMarkBit(MARK_SQUARE, HIGH);
  lcd.refresh();
  delay(1000);
  lcd.setMarkBit(MARK_SQUARE, LOW);

  // サイクルを表示
  lcd.setMarkBit(MARK_CYCLE, HIGH);
  lcd.refresh();
  delay(1000);
  lcd.setMarkBit(MARK_CYCLE, LOW);

  // ダイヤを表示
  lcd.setMarkBit(MARK_DIAMOND, HIGH);
  lcd.refresh();
  delay(1000);
  lcd.setMarkBit(MARK_DIAMOND, LOW);

  // ベルを表示
  lcd.setMarkBit(MARK_BELL, HIGH);
  lcd.refresh();
  delay(1000);
  lcd.setMarkBit(MARK_BELL, LOW);

  // アスタリスクを表示
  lcd.setMarkBit(MARK_ASTERISK, HIGH);
  lcd.refresh();
  delay(1000);
  lcd.setMarkBit(MARK_ASTERISK, LOW);

  // >を表示
  lcd.setMarkBit(MARK_NEXT, HIGH);
  lcd.refresh();
  delay(1000);
  lcd.setMarkBit(MARK_NEXT, LOW);

  lcd.clear();
  lcd.refresh();
  delay(1000);
}

セグメントに文字を表示

下記のサンプルスケッチを書き込んでください。
1から8の数字が表示されます。

文字を指定すると表示してくれるような便利な関数は用意できていないので、配列でお好きに作ってみてくださいm( )m

#include <AM50288H.h>

const int lePin = 11;
const int dinPin = 9;
const int sckPin = 12;

AM50288H lcd(lePin, dinPin, sckPin);

// AM50288H-SLY-DJKの購入時に付属している簡易資料に記載されている
// "ビット位置と表示セグメントの関係"を参考にして、各セグメントの表示/非表示を
// アルファベット順に配列で定義する(A, B, C, D, E, F, G1, G2, J, K, L, M, N, P)。
// 簡易資料: http://www.kyohritsu.jp/eclib/DIGIT/JNK/am50288hsly.pdf

// 数字 1
const byte segment1[14] = {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

// 数字 2
const byte segment2[14] = {1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0};

// 数字 3
const byte segment3[14] = {1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0};

// 数字 4
const byte segment4[14] = {0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0};

// 数字 5
const byte segment5[14] = {1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0};

// 数字 6
const byte segment6[14] = {1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0};

// 数字 7
const byte segment7[14] = {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

// 数字 8
const byte segment8[14] = {1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0};

void setup() {
  Serial.begin(9600);
  lcd.begin();

  // すべて消灯する
  lcd.clear();
  lcd.refresh();
  delay(1000);
}

void loop() {
  // 1桁目の14セグメントの表示内容を設定
  lcd.setSegmentBits(0, segment1);

  // 2桁目の14セグメントの表示内容を設定
  lcd.setSegmentBits(1, segment2);

  // 3桁目の14セグメントの表示内容を設定
  lcd.setSegmentBits(2, segment3);

  // 4桁目の14セグメントの表示内容を設定
  lcd.setSegmentBits(3, segment4);

  // 5桁目の14セグメントの表示内容を設定
  lcd.setSegmentBits(4, segment5);

  // 6桁目の14セグメントの表示内容を設定
  lcd.setSegmentBits(5, segment6);

  // 7桁目の14セグメントの表示内容を設定
  lcd.setSegmentBits(6, segment7);

  // 8桁目の14セグメントの表示内容を設定
  lcd.setSegmentBits(7, segment8);

  // 設定した表示内容をLCDに反映
  lcd.refresh();

  delay(3000);
}