Ghz2000's 14Segment LED Display Library
Dependents: Nucleo_Seg14Display
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
Generated on Wed Jul 13 2022 12:05:20 by 1.7.2