TA的每日心情 | 开心 2013-8-16 17:14 |
---|
签到天数: 3 天 连续签到: 1 天 [LV.2]偶尔看看I
|
本人移植了NOKia5110的程序到了pcduino上,用的是模拟IO实现,不过I2C协议也是可以的,在本版本还未实现。共三个文件LCD5110.cpp LCD5110.h LCD5110_Test.c,用的是c_environment 例程。- /* 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); // 使用扩展命令设置LCD模式
- WriteByte(0xc8, 0); // 设置偏置电压
- WriteByte(0x06, 0); // 温度校正
- WriteByte(0x13, 0); // 1:48
- WriteByte(0x20, 0); // 使用基本命令
- Clear(); // 清屏
- WriteByte(0x0c, 0); // 设定显示模式,正常显示
-
- //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][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++;
- }
- }
复制代码 ------------------------------------------------------------------------------------------------------------------------------------------------ /* 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_
复制代码 -------------------------------------------------------------------------------------------------------------------------------------------------- #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();
-
- }
复制代码 LCD5110.cpp LCD5110.h 我放在了/libraries 下面,LCD5110_Test.c我放在了/sample下面。修改两个Makefile就行了。 |
|