[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.