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

85 lines
3.1 KiB
C++

#ifndef _ZT16K33_H
#define _ZT16K33_H
#include <Arduino.h>
#include <Print.h>
#include <glcdfont.c>
#define LED_ON 2
#define LED_OFF 0
#define HT16K33_BLINK_CMD 0x80
#define HT16K33_BLINK_DISPLAYON 0x01
#define HT16K33_BLINK_OFF 0
#define HT16K33_BLINK_2HZ 1
#define HT16K33_BLINK_1HZ 2
#define HT16K33_BLINK_HALFHZ 3
#define HT16K33_CMD_BRIGHTNESS 0x0E
#define swap(a, b) { int16_t t = a; a = b; b = t; }
// this is the raw HT16K33 controller
class HT16K33 : public Print{
public:
HT16K33();
void begin(uint8_t _addr);
void setBrightness(uint8_t b);
void blinkRate(uint8_t b);
void writeDisplay(void);
void clear(void);
void drawStr(String);
uint16_t displaybuffer[8];
void drawPixel(int16_t x, int16_t y, uint16_t color);
void init(uint8_t a);
void constructor(int16_t w, int16_t h);
void invertDisplay(boolean i);
void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
void fillScreen(uint16_t color);
void drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
void drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint16_t color);
void fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
void fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, int16_t delta, uint16_t color);
void drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);
void fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);
void drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color);
void fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color);
// void drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color);
void drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size);
virtual size_t write(uint8_t);
void setCursor(int16_t x, int16_t y);
void setTextColor(uint16_t c);
void setTextColor(uint16_t c, uint16_t bg);
void setTextSize(uint8_t s);
void setTextWrap(boolean w);
int16_t height(void);
int16_t width(void);
void setRotation(uint8_t r);
uint8_t getRotation(void);
uint8_t SCL_pin,SDA_pin;
protected:
int16_t WIDTH, HEIGHT; // this is the 'raw' display w/h - never changes
int16_t _width, _height; // dependent on rotation
int16_t cursor_x, cursor_y;
uint16_t textcolor, textbgcolor;
uint8_t textsize;
uint8_t rotation;
boolean wrap; // If set, 'wrap' text at right edge of display
private:
uint8_t i2c_addr;
void IICbegin(uint8_t sdapin,uint8_t sclpin);
bool IICstart(uint8_t addr);
bool IICrestart(uint8_t addr);
void IICstop();
uint8_t IICread(uint8_t last);
bool IICwrite(uint8_t data);
};
#endif