Files
2024-07-20 22:09:06 +08:00

128 lines
4.0 KiB
C++

/*
LCD5110_Graph.h - Arduino/chipKit library support for Nokia 5110 compatible LCDs
Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved
Basic functionality of this library are based on the demo-code provided by
ITead studio. You can find the latest version of the library at
http://www.RinkyDinkElectronics.com/
This library has been made to make it easy to use the Nokia 5110 LCD module
as a graphics display on an Arduino or a chipKit.
This library is free software; you can redistribute it and/or
modify it under the terms of the CC BY-NC-SA 3.0 license.
Please see the included documents for further information.
Commercial use of this library requires you to buy a license that
will allow commercial use. This includes using the library,
modified or not, as a tool to sell products.
The license applies to all part of the library including the
examples and tools supplied with the library.
*/
#ifndef LCD5110_Graph_h
#define LCD5110_Graph_h
#define LEFT 0
#define RIGHT 9999
#define CENTER 9998
#define LCD_COMMAND 0
#define LCD_DATA 1
// PCD8544 Commandset
// ------------------
// General commands
#define PCD8544_POWERDOWN 0x04
#define PCD8544_ENTRYMODE 0x02
#define PCD8544_EXTENDEDINSTRUCTION 0x01
#define PCD8544_DISPLAYBLANK 0x00
#define PCD8544_DISPLAYNORMAL 0x04
#define PCD8544_DISPLAYALLON 0x01
#define PCD8544_DISPLAYINVERTED 0x05
// Normal instruction set
#define PCD8544_FUNCTIONSET 0x20
#define PCD8544_DISPLAYCONTROL 0x08
#define PCD8544_SETYADDR 0x40
#define PCD8544_SETXADDR 0x80
// Extended instruction set
#define PCD8544_SETTEMP 0x04
#define PCD8544_SETBIAS 0x10
#define PCD8544_SETVOP 0x80
// Display presets
#define LCD_BIAS 0x03 // Range: 0-7 (0x00-0x07)
#define LCD_TEMP 0x02 // Range: 0-3 (0x00-0x03)
#define LCD_CONTRAST 0x46 // Range: 0-127 (0x00-0x7F)
#if defined(__AVR__)
#include "Arduino.h"
#include "hardware/avr/HW_AVR_defines.h"
#elif defined(__PIC32MX__)
#include "WProgram.h"
#include "hardware/pic32/HW_PIC32_defines.h"
#elif defined(__arm__)
#include "Arduino.h"
#include "hardware/arm/HW_ARM_defines.h"
#endif
struct _current_font
{
uint8_t* font;
uint8_t x_size;
uint8_t y_size;
uint8_t offset;
uint8_t numchars;
uint8_t inverted;
};
class LCD5110
{
public:
LCD5110(int SCK, int MOSI, int DC, int RST, int CS);
void InitLCD(int contrast=LCD_CONTRAST);
void setContrast(int contrast);
void enableSleep();
void disableSleep();
void update();
void clrScr();
void fillScr();
void invert(bool mode);
void setPixel(uint16_t x, uint16_t y);
void clrPixel(uint16_t x, uint16_t y);
void invPixel(uint16_t x, uint16_t y);
void invertText(bool mode);
void print(char *st, int x, int y);
void print(String st, int x, int y);
void printNumI(long num, int x, int y, int length=0, char filler=' ');
void printNumF(double num, byte dec, int x, int y, char divider='.', int length=0, char filler=' ');
void setFont(uint8_t* font);
void drawBitmap(int x, int y, uint8_t* bitmap, int sx, int sy);
void drawLine(int x1, int y1, int x2, int y2);
void clrLine(int x1, int y1, int x2, int y2);
void drawRect(int x1, int y1, int x2, int y2);
void clrRect(int x1, int y1, int x2, int y2);
void drawRoundRect(int x1, int y1, int x2, int y2);
void clrRoundRect(int x1, int y1, int x2, int y2);
void drawCircle(int x, int y, int radius);
void clrCircle(int x, int y, int radius);
protected:
regtype *P_SCK, *P_MOSI, *P_DC, *P_RST, *P_CS;
regsize B_SCK, B_MOSI, B_DC, B_RST, B_CS;
uint8_t SCK_Pin, RST_Pin; // Needed for for faster MCUs
_current_font cfont;
uint8_t scrbuf[504];
boolean _sleep;
int _contrast;
void _LCD_Write(unsigned char data, unsigned char mode);
void _print_char(unsigned char c, int x, int row);
void _convert_float(char *buf, double num, int width, byte prec);
void drawHLine(int x, int y, int l);
void clrHLine(int x, int y, int l);
void drawVLine(int x, int y, int l);
void clrVLine(int x, int y, int l);
};
#endif