Ghz2000's 14Segment LED Display Library

Dependents:   Nucleo_Seg14Display

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers lib14Seg.cpp Source File

lib14Seg.cpp

00001 #include "lib14Seg.hpp"
00002 #include "mbed.h"
00003 
00004 C14Segment::C14Segment(){
00005 //  bitSet(TIMSK2, TOIE2);
00006   
00007 //  SPI.begin();
00008 //  SPI.setBitOrder(MSBFIRST);
00009 //  SPI.setClockDivider(SPI_CLOCK_DIV64);
00010 //  SPI.setDataMode(SPI_MODE0);
00011 
00012   m_speed = 0;
00013 }
00014 
00015 C14Segment LED14Seg;
00016 Ticker ticker;
00017 
00018 void C14Segment::init(PinName MOSI,PinName MISO, PinName SCK, PinName RCK, int kido, int ViewLength){
00019   setSPI(MOSI, MISO, SCK, RCK);
00020   setBlight(kido);
00021   setViewLength(ViewLength);
00022   
00023   //タイマー割り込みを設定
00024   ticker.attach_us( &LED14Seg, &C14Segment::update, 1000);
00025 }
00026 
00027 void C14Segment::setSPI(PinName MOSI, PinName MISO, PinName SCK, PinName RCK){
00028   m_MOSI = MOSI;
00029   m_MISO = MISO;
00030   m_SCK = SCK;
00031   m_RCK = RCK;
00032   
00033   mp_SPIdevice = new SPI(m_MOSI, m_MISO, m_SCK);
00034   mp_DigitalOutRCK = new DigitalOut(m_RCK);
00035 }
00036 
00037 void C14Segment::setBlight(int kido){
00038   m_kido = kido;
00039 }
00040 
00041 void C14Segment::setScrollSpeed(int scrollSpeed){
00042   m_speed = scrollSpeed;
00043 }
00044 
00045 void C14Segment::setViewLength(int ViewLength){
00046   m_ViewLength = ViewLength-1;
00047 }
00048 
00049 void C14Segment::setChar(char *input){
00050   int i=0;
00051   memset(m_str, 0, __LEN * 2);
00052   for(; i<__LEN -1 && input[i]!=NULL; i++){
00053     m_str[i] = ascii[ input[i] - ' '+1];    //変な文字が来た時対策をしてない
00054   }
00055   m_str[i] = 0x8000;
00056 }
00057 
00058 void C14Segment::showStop(){
00059   for(int i=0; i<m_ViewLength +1; i++){
00060     m_view[m_ViewLength - i] = m_str[i];  //文字が少ない時にバグるんじゃないかな
00061   }
00062   m_speed = 0;
00063 }
00064 
00065 void C14Segment::scroll(){
00066   static int scroll;
00067   for(int i=0; i<m_ViewLength +1; i++){
00068     
00069     //スクロールするときは桁数分ずらして空白からスタートする。
00070     if(i + scroll < m_ViewLength){
00071       //空白を入れる
00072       m_view[m_ViewLength - i] = 0x00;
00073     }else{
00074       //文字をスクロール用にセットする
00075       m_view[m_ViewLength - i] = m_str[i+scroll-m_ViewLength];  //文字が少ない時にバグるんじゃないかな
00076 
00077       //全部通り過ぎたところと 0x8000(表示用終端文字)を比較して一致したらスクロールをリセット
00078 //      if(m_str[i+scroll-m_ViewLength-m_ViewLength] == 0x8000) scroll=-m_ViewLength-1;
00079       if(m_str[i+scroll-m_ViewLength-m_ViewLength] == 0x8000) scroll=-m_ViewLength;
00080     }
00081   }
00082   scroll++;
00083 }
00084 
00085 void C14Segment::putnum(){
00086 }
00087 
00088 void C14Segment::cls(){
00089 }
00090 
00091 uint16_t cycleX[8] = {0x1000, 0x2000, 0x0400, 0x0002, 0x0004, 0x0008, 0x0010, 0x0800 };
00092 uint16_t cycleO[6] = {0x0200, 0x4000, 0x0001, 0x0020, 0x0080, 0x0100 };
00093 
00094 //割り込みルーチン
00095 void C14Segment::update(){
00096   static uint8_t row;
00097   static int count;
00098 
00099  
00100     *mp_DigitalOutRCK = 0;
00101 
00102 
00103 //    SPI.transfer(m_kido << 4 | (0x0F & ~(1<<row)) );
00104     mp_SPIdevice->write((0xFF & ~(1<<row)) );
00105     mp_SPIdevice->write(m_view[row] >> 8 & 0xFF );
00106     mp_SPIdevice->write(m_view[row] & 0xFF );
00107 
00108     *mp_DigitalOutRCK = 1;
00109     
00110     if(m_speed){
00111       if(m_speed < count){
00112         scroll();
00113         count = 0;
00114       }
00115       count++;
00116     }
00117     
00118     row++;
00119 //    row &=0x03;  //4桁
00120     row &=0x07;  //8桁
00121 }
00122 
00123 const uint16_t C14Segment::ascii[] = { sign_,
00124   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,
00125   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 ,
00126   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,
00127   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 ,
00128   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,
00129   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};
00130