Nokia 1112 LCD

Тема в разделе "Arduino & Shields", создана пользователем big-vl, 15 май 2014.

  1. big-vl

    big-vl Нуб

    PCF8814 Lcd(13,11,10,6); // LCD sets SPI SCLK: 7 pin, SDA: 8 pin, CS: 9 pin. RESET: 6 pin

    Вот написанно что 7 пин это SCL, но это на ардуино уно, у меня мега привожу код.
    Какой пин все таки, 20 или 7 втыкать на меге.

    Код (Text):
    //***************************************************************************
    //  File........: PCF8814.h
    //  Author(s)...: Chiper
    //  Porting.....: Igorok107
    //  URL(s)......: http://digitalchip.ru
    //  Description.: Драйвер LCD-контроллера от Nokia1100 с графическими функциями
    //  Data........: 07.11.13
    //  Version.....: 2.2.0
    //***************************************************************************
    #ifndef PCF8814_H
    #define PCF8814_H

    #if defined(ARDUINO) && ARDUINO >= 100
        #include "Arduino.h"
    #else
        #include "WProgram.h"
        #include "pins_arduino.h"
    #endif
    //******************************************************************************
    //******************************************************************************
    // Применять полный набор символов.
    #define FULL_CHARSET

    //******************************************************************************
    //#define SOFT_SPI // Включение програмного SPI, если LCD не справляется со скоростью
    //#define LCD_MIN_DELAY    50 // *****!!!!! Минимальная задержка, при которой работает LCD-контроллер
    // *****!!!!! Подбирается экспериментально под конкретный контроллер

    // Макросы, определения, служебные переменные
    #define RST_LCD_SET    digitalWrite(LCD_RST,HIGH)
    #define RST_LCD_RESET  digitalWrite(LCD_RST,LOW)
    #ifdef SOFT_SPI
        #define SCLK_LCD_SET    digitalWrite(LCD_SCLK,HIGH)
        #define SDA_LCD_SET    digitalWrite(LCD_SDA,HIGH)
        #define CS_LCD_SET      digitalWrite(LCD_CS,HIGH)
        #define SCLK_LCD_RESET  digitalWrite(LCD_SCLK,LOW)
        #define SDA_LCD_RESET  digitalWrite(LCD_SDA,LOW)
        #define CS_LCD_RESET    digitalWrite(LCD_CS,LOW)
    #else
        #define SPI_CLOCK_DIV    0x01 // Делитель SPI, определяет скорость. Значения [0-6] = Fosc/[4,16,64,128,2,8,32]
        #define SCLK_LCD_SET    PORTB |= _BV(PB5)
        #define SDA_LCD_SET    PORTB |= _BV(PB3)
        #define CS_LCD_SET        PORTB |= _BV(PB2)
        #define SCLK_LCD_RESET    PORTB &= ~_BV(PB5)
        #define SDA_LCD_RESET    PORTB &= ~_BV(PB3)
        #define CS_LCD_RESET    PORTB &= ~_BV(PB2)
    #endif

    // Макросы для работы с битами
    #define ClearBit(reg, bit)      reg &= (~(1<<(bit)))
    #define SetBit(reg, bit)        reg |= (1<<(bit))
    #define InvBit(reg, bit)        reg ^= 1<<bit

    #define CMD_LCD_MODE    0
    #define DATA_LCD_MODE    1

    #define PIXEL_ON    0
    #define PIXEL_OFF    1
    #define PIXEL_INV    2

    #define FILL_OFF    0
    #define FILL_ON        1

    #define INV_MODE_ON    0
    #define INV_MODE_OFF    1

    #define ON    1
    #define OFF    0

    // Разрешение дисплея в пикселях
    #define LCD_X_RES    96        // разрешение по горизонтали
    #define LCD_Y_RES    68        // разрешение по вертикали

    //******************************************************************************
    class PCF8814 {
        public:
            PCF8814(uint8_t _LCD_SCLK = 13, uint8_t _LCD_SDA = 11, uint8_t _LCD_CS = 10, uint8_t _LCD_RST = 9);
            void Init(void);
            void Clear(void);
            void Mirror(uint8_t x, uint8_t y);
            void Contrast(uint8_t c = 0x0D);
            void SendByte(char mode,unsigned char c);
            void Putc(unsigned char c);
            void PutcWide(unsigned char c);
            void Print(const char * message);
            void PrintF(char * message);
            void PrintWide(char * message);
            void GotoXY(uint8_t x = 0,uint8_t y = 0);
            void Inverse(uint8_t mode);
            void Pixel (uint8_t x,uint8_t y, uint8_t pixel_mode);
            void Line  (uint8_t x1,uint8_t y1, uint8_t x2,uint8_t y2, uint8_t pixel_mode);
            void Circle(uint8_t x, uint8_t y, uint8_t radius, uint8_t fill, uint8_t pixel_mode);
            void Rect  (uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint8_t fill, uint8_t pixel_mode);
            void Pict  (uint8_t x, uint8_t y, uint8_t * picture);
        private:
            void GotoXY_pix(uint8_t x,uint8_t y);
            uint8_t SPI_write(uint8_t cData);
    };
    #endif /* PCF8814_H */
     
  2. Mitrandir

    Mitrandir Гуру

    Для меги
    SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS).
     
  3. big-vl

    big-vl Нуб

    [​IMG]

    экран 2 -> мега 51

    остальное не понял, я новичёк второй день только ковыряюсь с ардуино.
     
  4. big-vl

    big-vl Нуб

    код не нужно менять будет или код тоже править?
     
  5. Mitrandir

    Mitrandir Гуру

    Да но судя по напряжениям 2.5 и 2.8 вольт этот экран 5 вольт примет?
     
  6. big-vl

    big-vl Нуб

    не думаю, но 3,5 думаю примет.
     
  7. big-vl

    big-vl Нуб

    из файла библиотеки если
    PCF8814(uint8_t _LCD_SCLK = 13, uint8_t _LCD_SDA = 11, uint8_t _LCD_CS = 10, uint8_t _LCD_RST = 9);

    уже указаны пины то он их не переназначает?
     
  8. big-vl

    big-vl Нуб

    Ребят подскажите, а?
     
  9. Mitrandir

    Mitrandir Гуру

    Нет эта запись охначает значения по умодчанию если не переданы параметры
     
  10. big-vl

    big-vl Нуб

    а если они указаны то он их переназначает? и куда тогда подсоединять
    CS, CLK, reset от экрана к плате.
     
  11. big-vl

    big-vl Нуб

    Вот сам скетч.

    Код (Text):
    #include <PCF8814.h>

    PCF8814 Lcd(13,11,10,6); // LCD sets SPI SCLK: 7 pin, SDA: 8 pin, CS: 9 pin. RESET: 6 pin

    void setup() {
      Lcd.Init();
      Lcd.GotoXY(6,2);
      Lcd.Print("Hello");
      Lcd.GotoXY(4,4);
      Lcd.PrintWide("WORLD");
      Lcd.Rect(0,0,95,67,FILL_OFF,PIXEL_ON);
      Lcd.Circle(48,34,32,FILL_OFF,PIXEL_ON);
    }

    void loop() {
    }