2014-07-02 27 views
0

我從來沒有使用過靜態常量字節,所以我不知道這是否是實現它的正確方法。所以,我就是這麼做的...這是頭文件:靜態const字節ASCII錯誤(可能是錯誤的實現)

#ifndef nokia5110lcd_h 
#define nokia5110lcd_h 

#include "Arduino.h" 

class NokiaLCD{ 
    public: 
     NokiaLCD(int RST, int CE, int DC, int DIN, int CLK); 
    void Write(byte dc, byte data); 
    void Init(); 
    void Character(char character); 
    void String(char *characters); 
     void Clear(); 
    void GotoXY(int x, int y); 

    private: 
     int _RST; 
     int _CE; 
    int _DC; 
    int _DIN; 
    int _CLK; 

    int _LCD_C; 
    int _LCD_D; 
    int _LCD_X; 
    int _LCD_Y; 

    char disp_tab[]; 
    static const byte ASCII[][5]; 
}; 

#endif 

,這是cpp文件:

static const byte ASCII[][5] = 
{ 
{0x00, 0x00, 0x00, 0x00, 0x00} // 20 
,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 ! 
,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 " 
,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 # 
,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $ 
,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 % 
,{0x36, 0x49, 0x55, 0x22, 0x50} // 26 & 
,{0x00, 0x05, 0x03, 0x00, 0x00} // 27 ' 
,{0x00, 0x1c, 0x22, 0x41, 0x00} // 28 (
,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29) 
,{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a * 
,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b + 
,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c , 
,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d - 
,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e . 
,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f/
,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0 
,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1 
,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2 
,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3 
,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4 
,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5 
,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6 
,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7 
,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8 
,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9 
,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a : 
,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b ; 
,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c < 
,{0x14, 0x14, 0x14, 0x14, 0x14} // 3d = 
,{0x00, 0x41, 0x22, 0x14, 0x08} // 3e > 
,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f ? 
,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @ 
,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A 
,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B 
,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C 
,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D 
,{0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E 
,{0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F 
,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G 
,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H 
,{0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I 
,{0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J 
,{0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K 
,{0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L 
,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M 
,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N 
,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O 
,{0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P 
,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q 
,{0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R 
,{0x46, 0x49, 0x49, 0x49, 0x31} // 53 S 
,{0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T 
,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U 
,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V 
,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W 
,{0x63, 0x14, 0x08, 0x14, 0x63} // 58 X 
,{0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y 
,{0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z 
,{0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [ 
,{0x02, 0x04, 0x08, 0x10, 0x20} // 5c ? 
,{0x00, 0x41, 0x41, 0x7f, 0x00} // 5d ] 
,{0x04, 0x02, 0x01, 0x02, 0x04} // 5e^
,{0x40, 0x40, 0x40, 0x40, 0x40} // 5f _ 
,{0x00, 0x01, 0x02, 0x04, 0x00} // 60 ` 
,{0x20, 0x54, 0x54, 0x54, 0x78} // 61 a 
,{0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b 
,{0x38, 0x44, 0x44, 0x44, 0x20} // 63 c 
,{0x38, 0x44, 0x44, 0x48, 0x7f} // 64 d 
,{0x38, 0x54, 0x54, 0x54, 0x18} // 65 e 
,{0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f 
,{0x0c, 0x52, 0x52, 0x52, 0x3e} // 67 g 
,{0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h 
,{0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i 
,{0x20, 0x40, 0x44, 0x3d, 0x00} // 6a j 
,{0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k 
,{0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l 
,{0x7c, 0x04, 0x18, 0x04, 0x78} // 6d m 
,{0x7c, 0x08, 0x04, 0x04, 0x78} // 6e n 
,{0x38, 0x44, 0x44, 0x44, 0x38} // 6f o 
,{0x7c, 0x14, 0x14, 0x14, 0x08} // 70 p 
,{0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q 
,{0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r 
,{0x48, 0x54, 0x54, 0x54, 0x20} // 73 s 
,{0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t 
,{0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u 
,{0x1c, 0x20, 0x40, 0x20, 0x1c} // 76 v 
,{0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w 
,{0x44, 0x28, 0x10, 0x28, 0x44} // 78 x 
,{0x0c, 0x50, 0x50, 0x50, 0x3c} // 79 y 
,{0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z 
,{0x00, 0x08, 0x36, 0x41, 0x00} // 7b { 
,{0x00, 0x00, 0x7f, 0x00, 0x00} // 7c | 
,{0x00, 0x41, 0x36, 0x08, 0x00} // 7d } 
,{0x10, 0x08, 0x08, 0x10, 0x08} // 7e ? 
,{0x78, 0x46, 0x41, 0x46, 0x78} // 7f ? 
}; 

    void NokiaLCD::Character(char character) 
    { 
     Write(_LCD_D, 0x00); 
     for (int index = 0; index < 5; index++) 
     { 
       Write(_LCD_D, ASCII[character - 0x20][index]); 
     } 
     Write(_LCD_D, 0x00); 
    } 

於是我用它在我的Arduino IDE這樣的:

#include <nokia5110lcd.h> 

NokiaLCD LCD(2, 3, 4, 5, 6); 

void setup(){ 
    LCD.Init(); 
    LCD.Clear(); 
} 

void loop(){ 
    LCD.String("test"); 
} 

而且我得到這個錯誤:

nokia5110lcd\nokia5110lcd.cpp.o: In function `NokiaLCD::Character(char)': 
C:\Program Files (x86)\Arduino\libraries\nokia5110lcd/nokia5110lcd.cpp:153: undefined reference to `NokiaLCD::ASCII' 
C:\Program Files (x86)\Arduino\libraries\nokia5110lcd/nokia5110lcd.cpp:153: undefined reference to `NokiaLCD::ASCII' 
C:\Program Files (x86)\Arduino\libraries\nokia5110lcd/nokia5110lcd.cpp:154: undefined reference to `NokiaLCD::ASCII' 
C:\Program Files (x86)\Arduino\libraries\nokia5110lcd/nokia5110lcd.cpp:154: undefined reference to `NokiaLCD::ASCII' 

如果有人能夠幫助我,我會很樂意,因爲我很確定我知道問題是什麼,但我不知道如何解決。在執行ASCII時,我可能在cpp文件中做錯了...請儘可能幫忙。

+0

將'static const byte ASCII'更改爲'const byte NokiaLCD :: ASCII' –

+0

寫入'static const byte NokiaLCD :: ASCII [] [5] = // ...'應該解決這個問題。在鏈接的複製中的答案涵蓋得很好。 –

回答

2

更換陣列的定義的第一行與這一個:

const byte NokiaLCD::ASCII[][5] = ... 

的編譯器需要知道成員變量在這裏被定義;否則,你會定義一個靜態全局變量。在C++中,靜態全局變量是一個在定義它的.cpp文件中可見的變量。它不同於靜態成員變量或靜態局部變量。這是一個不錯的tutorial

+0

謝謝,很多.. – user3795634