Ghz2000's 14Segment LED Display Library

Dependents:   Nucleo_Seg14Display

Ghz2000製 14セグ表示器

http://ghz2000.dip.jp/wordpress/?p=665

mbed用のサンプルプログラムです。 ライブラリ化してあるので、インポートして使用することが出来ます。

注意事項

一度に読み込めるテキストは30文字です。 それを超えると変な文字が表示されます。

今後

スクロールが終わった時のコールバックを作って、30文字以上の文字列も流せるようにしたいです。 スイッチサイエンスほかで販売予定。

Files at this revision

API Documentation at this revision

Comitter:
ghz2000
Date:
Tue Jul 05 05:59:05 2016 +0000
Child:
1:ad058e8ade73
Child:
2:eb91996f0a20
Commit message:
Ver.1.0; ????????????

Changed in this revision

lib14Seg.cpp Show annotated file Show diff for this revision Revisions of this file
lib14Seg.hpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib14Seg.cpp	Tue Jul 05 05:59:05 2016 +0000
@@ -0,0 +1,130 @@
+#include "lib14Seg.hpp"
+#include "mbed.h"
+
+C14Segment::C14Segment(){
+//  bitSet(TIMSK2, TOIE2);
+  
+//  SPI.begin();
+//  SPI.setBitOrder(MSBFIRST);
+//  SPI.setClockDivider(SPI_CLOCK_DIV64);
+//  SPI.setDataMode(SPI_MODE0);
+
+  m_speed = 0;
+}
+
+C14Segment LED14Seg;
+Ticker ticker;
+
+void C14Segment::init(PinName MOSI,PinName MISO, PinName SCK, PinName RCK, int kido, int ViewLength){
+  setSPI(MOSI, MISO, SCK, RCK);
+  setBlight(kido);
+  setViewLength(ViewLength);
+  
+  //タイマー割り込みを設定
+  ticker.attach_us( &LED14Seg, &C14Segment::update, 1000);
+}
+
+void C14Segment::setSPI(PinName MOSI, PinName MISO, PinName SCK, PinName RCK){
+  m_MOSI = MOSI;
+  m_MISO = MISO;
+  m_SCK = SCK;
+  m_RCK = RCK;
+  
+  mp_SPIdevice = new SPI(m_MOSI, m_MISO, m_SCK);
+  mp_DigitalOutRCK = new DigitalOut(m_RCK);
+}
+
+void C14Segment::setBlight(int kido){
+  m_kido = kido;
+}
+
+void C14Segment::setScrollSpeed(int scrollSpeed){
+  m_speed = scrollSpeed;
+}
+
+void C14Segment::setViewLength(int ViewLength){
+  m_ViewLength = ViewLength-1;
+}
+
+void C14Segment::setChar(char *input){
+  int i=0;
+  memset(m_str, 0, __LEN * 2);
+  for(; i<__LEN -1 && input[i]!=NULL; i++){
+    m_str[i] = ascii[ input[i] - ' '+1];    //変な文字が来た時対策をしてない
+  }
+  m_str[i] = 0x8000;
+}
+
+void C14Segment::showStop(){
+  for(int i=0; i<m_ViewLength +1; i++){
+    m_view[m_ViewLength - i] = m_str[i];  //文字が少ない時にバグるんじゃないかな
+  }
+  m_speed = 0;
+}
+
+void C14Segment::scroll(){
+  static int scroll;
+  for(int i=0; i<m_ViewLength +1; i++){
+    
+    //スクロールするときは桁数分ずらして空白からスタートする。
+    if(i + scroll < m_ViewLength){
+      //空白を入れる
+      m_view[m_ViewLength - i] = 0x00;
+    }else{
+      //文字をスクロール用にセットする
+      m_view[m_ViewLength - i] = m_str[i+scroll-m_ViewLength];  //文字が少ない時にバグるんじゃないかな
+
+      //全部通り過ぎたところと 0x8000(表示用終端文字)を比較して一致したらスクロールをリセット
+//      if(m_str[i+scroll-m_ViewLength-m_ViewLength] == 0x8000) scroll=-m_ViewLength-1;
+      if(m_str[i+scroll-m_ViewLength-m_ViewLength] == 0x8000) scroll=-m_ViewLength;
+    }
+  }
+  scroll++;
+}
+
+void C14Segment::putnum(){
+}
+
+void C14Segment::cls(){
+}
+
+uint16_t cycleX[8] = {0x1000, 0x2000, 0x0400, 0x0002, 0x0004, 0x0008, 0x0010, 0x0800 };
+uint16_t cycleO[6] = {0x0200, 0x4000, 0x0001, 0x0020, 0x0080, 0x0100 };
+
+//割り込みルーチン
+void C14Segment::update(){
+  static uint8_t row;
+  static int count;
+
+ 
+    *mp_DigitalOutRCK = 0;
+
+
+//    SPI.transfer(m_kido << 4 | (0x0F & ~(1<<row)) );
+    mp_SPIdevice->write((0xFF & ~(1<<row)) );
+    mp_SPIdevice->write(m_view[row] >> 8 & 0xFF );
+    mp_SPIdevice->write(m_view[row] & 0xFF );
+
+    *mp_DigitalOutRCK = 1;
+    
+    if(m_speed){
+      if(m_speed < count){
+        scroll();
+        count = 0;
+      }
+      count++;
+    }
+    
+    row++;
+//    row &=0x03;  //4桁
+    row &=0x07;  //8桁
+}
+
+const uint16_t C14Segment::ascii[] = { sign_,
+  sign_,  sign_Exclamation,  sign_Wquot,  sign_Sharp,  sign_Doll,  sign_Percent,  sign_And,  sign_Quot,  sign_RoundBracketS,  sign_RoundBracketE,  sign_Asta,  sign_Plus,  sign_Comma,  sign_Minus,  sign_dot,  sign_Slash,
+  sign_0, sign_1, sign_2, sign_3, sign_4, sign_5, sign_6, sign_7, sign_8, sign_9, sign_Colon , sign_SemiColon , sign_AngleS , sign_Equal , sign_AngleE , sign_Question ,
+  sign_At,  sign_A, sign_B, sign_C, sign_D, sign_E, sign_F, sign_G, sign_H, sign_I, sign_J, sign_K, sign_L, sign_M, sign_N, sign_O,
+  sign_P, sign_Q, sign_R, sign_S, sign_T, sign_U, sign_V, sign_W, sign_X, sign_Y, sign_Z, sign_BoxS , sign_En , sign_BoxE , sign_Hat , sign_Underbar ,
+  sign_Grave,  sign_a, sign_b, sign_c, sign_d, sign_e, sign_f, sign_g, sign_h, sign_i, sign_j, sign_k, sign_l, sign_m, sign_n, sign_o,
+  sign_p, sign_q, sign_r, sign_s, sign_t, sign_u, sign_v, sign_w, sign_x, sign_y, sign_z, sign_CurlyBracketS, sign_Tate, sign_CurlyBracketE, sign_Child};
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib14Seg.hpp	Tue Jul 05 05:59:05 2016 +0000
@@ -0,0 +1,158 @@
+
+/***********
+***********/
+
+#ifndef _lib14Seg_
+#define _lib14Seg_
+
+#include "mbed.h"
+
+
+//correct
+#define sign_A 0x4791
+#define sign_B 0x13B4
+#define sign_C 0x4221
+#define sign_D 0x13A4
+#define sign_E 0x4631
+#define sign_F 0x4611
+#define sign_G 0x42B1
+#define sign_H 0x4591
+#define sign_I 0x1224
+#define sign_J 0x01A1
+#define sign_K 0x4C09
+#define sign_L 0x4021
+#define sign_M 0x6981
+#define sign_N 0x6189
+#define sign_O 0x43A1
+#define sign_P 0x4711
+#define sign_Q 0x43A9
+#define sign_R 0x4719
+#define sign_S 0x46B0
+#define sign_T 0x1204
+#define sign_U 0x41A1
+#define sign_V 0x4803
+#define sign_W 0x418B
+#define sign_X 0x280A
+#define sign_Y 0x2804
+#define sign_Z 0x0A22
+
+//incorrect
+#define sign_Exclamation 0x01C0
+#define sign_Wquot       0x1100
+#define sign_Sharp       0x1594
+#define sign_Doll        0x56B4
+#define sign_Percent     0x4882
+#define sign_And         0x3629
+#define sign_Quot        0x0800
+#define sign_RoundBracketS 0x0818
+#define sign_RoundBracketE 0x2402
+#define sign_Asta        0x3C1E
+#define sign_Plus        0x1414
+#define sign_Comma       0x0002
+#define sign_Minus       0x0410
+#define sign_Slash       0x0802
+#define sign_Colon       0x1004
+#define sign_SemiColon   0x1002
+#define sign_AngleS      0x0808
+#define sign_Equal       0x0430
+#define sign_AngleE      0x2002
+#define sign_Question    0x4314
+#define sign_At          0x5331
+#define sign_BoxS        0x2222
+#define sign_En          0x2C14
+#define sign_BoxE        0xA28
+#define sign_Hat         0x0900
+#define sign_Underbar    0x0020
+#define sign_Grave       0x2000
+#define sign_CurlyBracketS 0x2622
+#define sign_CurlyBracketE 0x0A38
+#define sign_Tate        0x4001
+#define sign_Child       0x0200
+
+
+#define sign_a 0x07B1
+#define sign_b 0x44B1
+#define sign_c 0x0431
+#define sign_d 0x05B1
+#define sign_e 0x0423
+#define sign_f 0x4601
+#define sign_g 0x23B0
+#define sign_h 0x4405
+#define sign_i 0x0004
+#define sign_j 0x01A0
+#define sign_k 0x180C
+#define sign_l 0x1004
+#define sign_m 0x0495
+#define sign_n 0x0405
+#define sign_o 0x04B1
+#define sign_p 0x4E01
+#define sign_q 0x2390
+#define sign_r 0x0401
+#define sign_s 0x0038
+#define sign_t 0x4421
+#define sign_u 0x00A1
+#define sign_v 0x0003
+#define sign_w 0x008B
+#define sign_x 0x280A
+#define sign_y 0x11B0
+#define sign_z 0x0422
+
+#define sign_0 0x43A1
+#define sign_1 0x0980
+#define sign_2 0x0731
+#define sign_3 0x07B0
+#define sign_4 0x4590
+#define sign_5 0x46B0
+#define sign_6 0x46B1
+#define sign_7 0x4380
+#define sign_8 0x47B1
+#define sign_9 0x4790
+
+#define sign_dot 0x0040
+
+#define sign_ 0x0000
+
+//#define sign_  0x
+// 0x8000 表示用終端文字
+
+
+#define __LEN 30
+
+class C14Segment{
+private:
+  uint16_t m_view[8];
+  uint16_t m_str[__LEN];
+  static const uint16_t ascii[];
+  PinName m_RCK;
+  PinName m_MOSI;
+  PinName m_MISO;
+  PinName m_SCK;
+  int m_kido;
+  int m_ViewLength;
+  int m_speed;
+  
+  SPI *mp_SPIdevice;
+  DigitalOut *mp_DigitalOutRCK;
+  
+
+public:
+  C14Segment();
+  void init(PinName SPI_MOSI, PinName SPI_MISO, PinName SPI_SCK, PinName RCK, int kido, int ViewLength);
+  void update();
+  void setChar(char *);
+  void putnum();
+  void cls();
+  void showStop();
+  void scroll();
+  void setSPI(PinName MOSI, PinName MISO, PinName SCK, PinName RCK);
+  void setBlight(int kido);
+  void setViewLength(int ViewLength);
+  void setScrollSpeed(int scrollSpeed);
+  void showCycleX();
+  void showCycleO();
+
+};
+
+extern C14Segment LED14Seg;
+
+#endif
\ No newline at end of file