newtx/ui/Lcd.h

92 lines
2.6 KiB
C++

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <sstream>
#include <time.h>
#include <unistd.h>
#include <uart/Gpio.h>
class Lcd
{
private:
Gpio spi_sck;
Gpio spi_sda;
Gpio spi_cs;
Gpio spi_reset;
Gpio spi_rs;
Gpio COM_BOOT0;
public:
Lcd();
/*=======写指令========*/
void Lcd_Transfer_Command(int data1);
/*--------写数据------------*/
void Lcd_Transfer_data(int data1);
/*LCD模块初始化*/
void Lcd_Initial_Lcd(bool biglcd);
void Lcd_Address(unsigned char page, unsigned char column);
/*全屏清屏*/
void Lcd_Clear_screen();
void Lcd_Clear_Half_Screen(bool top);
//===显示测试画面:例如全显示,隔行显示,隔列显示,雪花显示=====
void Lcd_Test_Display(unsigned char data1, unsigned char data2);
/*显示128x64点阵图像*/
void Lcd_Display_Graphic_128x64(unsigned char page, unsigned char column, unsigned char *dp);
/*显示32x32点阵图像、汉字、生僻字或32x32点阵的其他图标*/
void Lcd_Display_graphic_32x32(unsigned char page, unsigned char column, unsigned char *dp);
/*显示16x16点阵图像、汉字、生僻字或16x16点阵的其他图标*/
void Lcd_Display_Graphic_16x16_2(unsigned char reverse,unsigned char page,unsigned char column,unsigned char *dp);
/*显示16x16点阵图像、汉字、生僻字或16x16点阵的其他图标*/
void Lcd_Display_Graphic_16x16(unsigned char page, unsigned char column, unsigned char *dp,unsigned int wordcount);
/*显示8x16点阵图像、ASCII, 或8x16点阵的自造字符、其他图标*/
void Lcd_Display_Graphic_8x16(unsigned char page, unsigned char column,unsigned char *dp);
void Lcd_Display_String_8x16(unsigned int page, unsigned int column, const char *text);
void Lcd_Display_String_5x8(unsigned int page, unsigned int column, const char *text);
// New ...
enum
{
LCD_WIDTH = 128,
LCD_HEIGHT = 32,
LCD_LINE_PER_PAGE = 8,
};
// 32 lines devide into 4 pages and 8 lines per page
// size: 32lines x 1056px
void go_to(uint8_t page, uint8_t col);
void write(uint8_t val, bool data, uint8_t mask = 0);
void write_line(uint8_t** data, uint8_t cnt, int x = 0, int y = 0, uint8_t mask = 0);
void write_whole_line(uint8_t** data, uint8_t cnt, int x = 0, int y = 0, uint8_t mask = 0);
void clear(int x = 0, int y = 0, int w = -1, int h = -1);
void clear_pages(int* page_inds = nullptr, int count = 0);
private:
void set_data_type(bool data);
void write_before(void);
void write_char(uint8_t val, uint8_t mask = 0);
void write_end(void);
private:
typedef struct _page_range
{
int x;
int w;
}PAGERANGE;
PAGERANGE line_field_[LCD_HEIGHT / LCD_LINE_PER_PAGE];
};