[vc_row][vc_column width=”1/1″][vc_column_text]I transplant Nokia 5110 program on the pcduino, achieved by simulated IO, but also can use I2C protocol, has not been implemented in this version. A total of three files LCD5110. CPP LCD5110. H LCD5110_Test. C, using c_environment routines.
/* 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 extension command to set the LCD model
WriteByte(0xc8, 0); // Set bias voltage
WriteByte(0x06, 0); // temperature correction
WriteByte(0x13, 0); // 1:48
WriteByte(0x20, 0); // Using the basic command
Clear(); // Clear Screen
WriteByte(0x0c, 0); // Set the display mode
//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, 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++;
}
}
-----------------------------------------------------------------------------------------------------------------------------------------------/* 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[] =
{
{ 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_
-------------------------------------------------------------------------------------------------------------------------------------------------#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();
}
I put LCD5110.cpp LCD5110.h under /libraries, LCD5110_Test.c under /sample. Modify these 2 makerfiles.[/vc_column_text][/vc_column][/vc_row]

Leave a Reply
You must be logged in to post a comment.