• Home
  • pcDuino
  • WiKi
  • Store
  • Distributors
  • Home
  • pcDuino
  • WiKi
  • Store
  • Distributors
HomepcDuinoArduino-ish ProgramGPIODisplay by Nokia 5110
Previous Next

Display by Nokia 5110

Posted by: Alvin Jin , March 15, 2014

[vc_row][vc_column][vc_column_text]I ported NOKia5110 program to pcDuino, by using IO simulation to achieve., but I2C protocol is also possible, in this version has not been achieved. A total of three files LCD5110.cpp LCD5110.h LCD5110_Test.c, using c_environment routine.[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column width=”1/1″][vc_tour][vc_tab title=”LCD5110.cpp” tab_id=”1394878312-1-61″][vc_column_text]

/* File: LCD5110.cpp
* Version:A001
* Author:Jacob
* Date: 2013.8
* Contact:iamlvshijie@gmail.com
* Usage: this file has no relationship with mcu target,just need to modify LCD5110.h
* History:
* --A001:
*    Initial Release based on mcs-51 codes;
*    Only IO_MODE working;
* */
#include "LCD5110.h"
//LCD5110Class LCD5110();
/*------------Public Function ----------*/
LCD5110Class: LCD5110Class(void)
{
}
LCD5110Class::~LCD5110Class(void)
{
}
void LCD5110Class::Clear(void)
{
  unsigned int i;
  WriteByte(0x0c, 0);
  WriteByte(0x80, 0);
  for (i=0; i<504; i++)
    WriteByte(0, 1);
}
void LCD5110Class::Init(void)
{
  printf("Init OK!\n");
  LCD_IO_CONF;
  //Issue a reset pulse
  LCD_RST_LOW;
    DelayUs(10);
  LCD_RST_HIGH;
  //Enable LCD
  LCD_CE_LOW;
  DelayUs(1);
  //Disable LCD
  LCD_CE_HIGH;
  DelayUs(1);
  WriteByte(0x21, 0);        // Use the extended command to set LCD mode 
  WriteByte(0xc8, 0);        // Set the bias voltage
  WriteByte(0x06, 0);        // Temperature correction
  WriteByte(0x13, 0);        // 1:48
  WriteByte(0x20, 0);        // Use basic commands
  Clear();                    // Clear screen
  WriteByte(0x0c, 0);        // Setting display mode, the normal display
  //Enable LCD
  LCD_CE_LOW;
}
/*-------------Private Function ----------*/
void LCD5110Class::WriteByte(unsigned char dat, unsigned char command)
{
  unsigned char i;
  //Enable LCD
  LCD_CE_LOW;
  if (command == 0)
    //Command Mode
    LCD_DC_LOW;
  else
   //Data Mode
   LCD_DC_HIGH;
  //Send Data
  LCD_SEND_DATA;
  //Disable Lcd
  LCD_CE_HIGH;
}
void LCD5110Class::SendChar(unsigned char c)
{
    unsigned char line;
    c -= 32;
    for (line=0; line<6; line++)
      WriteByte(font6x8[c][/c][line], 1);
}
void LCD5110Class::SendString(unsigned char X,unsigned char Y,unsigned char *s)
{
  printf("send string!\n");
  //set axis: (x,y)
  WriteByte(0x40 | Y, 0);                // column
  WriteByte(0x80 | X, 0);              // row
  //send char
  while (*s)
  {
    SendChar(*s);
    s++;
  }
}

[color=rgb(51, 102, 153) !important]

[/vc_column_text][/vc_tab][vc_tab title=”LCD5110.h” tab_id=”1394878312-2-34″][vc_column_text]

* File: LCD5110.h
* Version:A001
* Author:Jacob
* Date: 2013.8
* Contact:iamlvshijie@gmail.com
* Usage:this file has relationship with mcu hardware target:
*       First,define or undefine to choose your boards;
*       then, modify gpio, i2c operations .etc
* History:
* --A001:
*    Initial Release based pcduino c_environment(https://github.com/pcduino/c_enviroment);
*    Only IO_MODE working;
* */
#ifndef _LCD5110_H_
#define _LCD5110_H_
class LCD5110Class{
public:
  LCD5110Class();
  ~LCD5110Class();
  void Clear();
  void Init(void);
  void SendChar(unsigned char c);
  void SendString(unsigned char X,unsigned char Y,unsigned char *s);
private:
  void WriteByte(unsigned char dat, unsigned char command);
};
//extern LCD5110Class LCD5110;
/*------------Board ----------------*/
#define PCDUINO
/*----------GPIO Settings-----------*/
#ifdef PCDUINO
#include <SPI.h>
#include "Arduino.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Wire.h>
#define IO_MODE
//#define SPI_MODE
#define LCD_CE_PIN    4
#define LCD_RST_PIN   7
#define LCD_DC_PIN    8
#ifdef IO_MODE
  #define LCD_SDA_PIN   15
  #define LCD_SCLK_PIN  14
#endif
#define LCD_CE_HIGH  digitalWrite(LCD_CE_PIN, HIGH)
#define LCD_CE_LOW   digitalWrite(LCD_CE_PIN, LOW)
#define LCD_RST_HIGH digitalWrite(LCD_RST_PIN,HIGH)
#define LCD_RST_LOW  digitalWrite(LCD_RST_PIN,LOW)
#define LCD_DC_HIGH  digitalWrite(LCD_DC_PIN,HIGH)
#define LCD_DC_LOW   digitalWrite(LCD_DC_PIN,LOW)
#ifdef  IO_MODE
  #define LCD_SDA_HIGH   digitalWrite(LCD_SDA_PIN, HIGH)
  #define LCD_SDA_LOW    digitalWrite(LCD_SDA_PIN, LOW)
  #define LCD_SCLK_HIGH  digitalWrite(LCD_SCLK_PIN, HIGH)
  #define LCD_SCLK_LOW   digitalWrite(LCD_SCLK_PIN,LOW)
#elif  SPI_MODE
  #define SerialSendData(x)  SPI.transfer(x, SPI_CONTINUE)
#endif
#ifdef IO_MODE
  #define LCD_IO_CONF  pinMode(LCD_RST_PIN , OUTPUT); \
                                           pinMode(LCD_DC_PIN , OUTPUT);  \
                                           pinMode(LCD_CE_PIN  , OUTPUT); \
                                           pinMode(LCD_SDA_PIN , OUTPUT); \
                       pinMode(LCD_SCLK_PIN  , OUTPUT)
#elif SPI_MODE
  #define LCD_IO_CONF  pinMode(LCD_RST_PIN , OUTPUT); \
                                           pinMode(LCD_DC_PIN , OUTPUT); \
                                           pinMode(LCD_CE_PIN  , OUTPUT); \
                                           SPI.begin(); \
                       SPI.setDataMode(SPI_MODE2); \
                       SPI.setBitOrder(MSBFIRST); \
                       SPI.setClockDivider(SPI_CLOCK_DIV32)
#elif I2C_MODE
#endif
#ifdef IO_MODE
#define LCD_SEND_DATA  for(i=0;i<8;i++)\
                                          { \
                                                if(dat&0x80) \
                                                        LCD_SDA_HIGH; \
                                                else \
                                                        LCD_SDA_LOW; \
                                                LCD_SCLK_LOW; \
                                                dat = dat << 1; \
                                                DelayUs(3);\
                                                LCD_SCLK_HIGH;\
                                          }
#elif SPI_MODE
#elif I2C_MODE
#endif
/*---------- Macro -----------------*/
#define DelayUs(x)  usleep(x)
/*---------- 6 x 8 font  -----------*/
// 1 pixel space at left and bottom
// index = ASCII - 32
const unsigned char font6x8[][6] =
{
    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },   // sp
    { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 },   // !
    { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
    { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
    { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
    { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 },   // %
    { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
    { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
    { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
    { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
    { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
    { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
    { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 },   // ,
    { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 },   // -
    { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
    { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
    { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
    { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
    { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
    { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
    { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
    { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
    { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
    { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
    { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
    { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
    { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
    { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
    { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
    { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
    { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
    { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
    { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
    { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },   // A
    { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
    { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
    { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
    { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
    { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
    { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
    { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
    { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
    { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
    { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
    { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
    { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
    { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
    { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
    { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
    { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
    { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
    { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
    { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
    { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
    { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
    { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
    { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
    { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
    { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
    { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
    { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // 55
    { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
    { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
    { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
    { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
    { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
    { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
    { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
    { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
    { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
    { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
    { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C },   // g
    { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
    { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
    { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 },   // j
    { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
    { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
    { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
    { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
    { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
    { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 },   // p
    { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC },   // q
    { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
    { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
    { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
    { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
    { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
    { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
    { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
    { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C },   // y
    { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 },   // z
    { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 }    // horiz lines
};
#endif //PCDUINO
#endif //_LCD5110_H_
[color=rgb(51, 102, 153) !important]

[/vc_column_text][/vc_tab][vc_tab title=”LCD5110_Test.c” tab_id=”1394879739801-2-6″][vc_column_text]

#include "LCD5110.h"
#include <core.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
unsigned char * s=(unsigned char *)"12345678901234";
LCD5110Class LCD5110;
void setup(void)
{
  LCD5110.Init();
}
void loop()
{
  LCD5110.SendString(0,0,s);
  LCD5110.SendString(0,1,s);
  LCD5110.SendString(0,2,s);
  LCD5110.SendString(0,3,s);
  LCD5110.SendString(0,4,s);
  LCD5110.SendString(0,5,s);
  LCD5110.Clear();
}

[color=rgb(51, 102, 153) !important]

Put LCD5110.cpp and LCD5110.h under /libraries, LCD5110_Test.c under /sample

[/vc_column_text][/vc_tab][/vc_tour][/vc_column][/vc_row]

Tags: GPIO

Share!
Tweet

Alvin Jin

About the author

Leave a Reply Cancel reply

You must be logged in to post a comment.

Category

  • Home
  • pcDuino
  • WiKi
  • Store
  • Distributors