Ghz2000's 14Segment LED Display Library
Dependents: Nucleo_Seg14Display
Ghz2000製 14セグ表示器
http://ghz2000.dip.jp/wordpress/?p=665
mbed用のサンプルプログラムです。 ライブラリ化してあるので、インポートして使用することが出来ます。
注意事項
一度に読み込めるテキストは30文字です。 それを超えると変な文字が表示されます。
今後
スクロールが終わった時のコールバックを作って、30文字以上の文字列も流せるようにしたいです。 スイッチサイエンスほかで販売予定。
Revision 0:e64e0d7aad81, committed 2016-07-05
- 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