You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

274 lines
8.4 KiB
C

#ifndef __DRIVER_ST7735S_H__
#define __DRIVER_ST7735S_H__
#include <stdint.h>
#include "main.h"
#ifdef __cplusplus
extern "C"
{
#endif
#define LCD_CS_1() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET)
#define LCD_CS_0() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET)
#define LCD_RESET_0() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_RESET)
#define LCD_RESET_1() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_SET)
#define LCD_RS_0() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET)
#define LCD_RS_1() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET)
//#define LCD_ENABLE_BACKLIGHT() gpio_write_pin(GPIO_A, GPIO_PIN_5, GPIO_PIN_CLEAR)
//#define LCD_DISABLE_BACKLIGHT() gpio_write_pin(GPIO_A, GPIO_PIN_5, GPIO_PIN_SET)
#define LCD_W 80
#define LCD_H 160
#define LCD_Maker_A 0 //量产LCD屏 上海华尔升
#define LCD_Maker_B 1 //第二供应商 力美拖
#define LCD_Maker LCD_Maker_B
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
#define WHITE 0xFFFF
#define BLACK 0x0000
#define BLUE 0x001F
#define BRED 0xF81F
#define GRED 0xFFE0
#define GBLUE 0x07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define GREEN 0x07E0
#define CYAN 0x7FFF
#define YELLOW 0xFFE0
#define BROWN 0xBC40
#define BRRED 0xFC07
#define GRAY 0x8430
#define DARK_GRAY 0x6B4D
// 5x7 ASCII字体 (95个可打印字符)
static const uint8_t Font5x7_Data[] = {
// 空格(32)
0x00, 0x00, 0x00, 0x00, 0x00,
// !(33)
0x00, 0x00, 0x5F, 0x00, 0x00,
// "(34)
0x00, 0x07, 0x00, 0x07, 0x00,
// #(35)
0x14, 0x7F, 0x14, 0x7F, 0x14,
// $(36)
0x24, 0x2A, 0x7F, 0x2A, 0x12,
// %(37)
0x23, 0x13, 0x08, 0x64, 0x62,
// &(38)
0x36, 0x49, 0x55, 0x22, 0x50,
// '(39)
0x00, 0x05, 0x03, 0x00, 0x00,
// ((40)
0x00, 0x1C, 0x22, 0x41, 0x00,
// )(41)
0x00, 0x41, 0x22, 0x1C, 0x00,
// *(42)
0x08, 0x2A, 0x1C, 0x2A, 0x08,
// +(43)
0x08, 0x08, 0x3E, 0x08, 0x08,
// ,(44)
0x00, 0x50, 0x30, 0x00, 0x00,
// -(45)
0x08, 0x08, 0x08, 0x08, 0x08,
// .(46)
0x00, 0x60, 0x60, 0x00, 0x00,
// /(47)
0x20, 0x10, 0x08, 0x04, 0x02,
// 数字0-9(48-57)
0x3E, 0x51, 0x49, 0x45, 0x3E, // 0
0x00, 0x42, 0x7F, 0x40, 0x00, // 1
0x42, 0x61, 0x51, 0x49, 0x46, // 2
0x21, 0x41, 0x45, 0x4B, 0x31, // 3
0x18, 0x14, 0x12, 0x7F, 0x10, // 4
0x27, 0x45, 0x45, 0x45, 0x39, // 5
0x3C, 0x4A, 0x49, 0x49, 0x30, // 6
0x01, 0x71, 0x09, 0x05, 0x03, // 7
0x36, 0x49, 0x49, 0x49, 0x36, // 8
0x06, 0x49, 0x49, 0x29, 0x1E, // 9
// :(58)
0x00, 0x36, 0x36, 0x00, 0x00,
// ;(59)
0x00, 0x56, 0x36, 0x00, 0x00,
// <(60)
0x00, 0x08, 0x14, 0x22, 0x41,
// =(61)
0x14, 0x14, 0x14, 0x14, 0x14,
// >(62)
0x41, 0x22, 0x14, 0x08, 0x00,
// ?(63)
0x02, 0x01, 0x51, 0x09, 0x06,
// @(64)
0x32, 0x49, 0x79, 0x41, 0x3E,
// 大写字母A-Z(65-90)
0x7C, 0x12, 0x11, 0x12, 0x7C, // A
0x7F, 0x49, 0x49, 0x49, 0x36, // B
0x3E, 0x41, 0x41, 0x41, 0x22, // C
0x7F, 0x41, 0x41, 0x22, 0x1C, // D
0x7F, 0x49, 0x49, 0x49, 0x41, // E
0x7F, 0x09, 0x09, 0x09, 0x01, // F
0x3E, 0x41, 0x49, 0x49, 0x7A, // G
0x7F, 0x08, 0x08, 0x08, 0x7F, // H
0x00, 0x41, 0x7F, 0x41, 0x00, // I
0x20, 0x40, 0x41, 0x3F, 0x01, // J
0x7F, 0x08, 0x14, 0x22, 0x41, // K
0x7F, 0x40, 0x40, 0x40, 0x40, // L
0x7F, 0x02, 0x0C, 0x02, 0x7F, // M
0x7F, 0x04, 0x08, 0x10, 0x7F, // N
0x3E, 0x41, 0x41, 0x41, 0x3E, // O
0x7F, 0x09, 0x09, 0x09, 0x06, // P
0x3E, 0x41, 0x51, 0x21, 0x5E, // Q
0x7F, 0x09, 0x19, 0x29, 0x46, // R
0x46, 0x49, 0x49, 0x49, 0x31, // S
0x01, 0x01, 0x7F, 0x01, 0x01, // T
0x3F, 0x40, 0x40, 0x40, 0x3F, // U
0x1F, 0x20, 0x40, 0x20, 0x1F, // V
0x3F, 0x40, 0x38, 0x40, 0x3F, // W
0x63, 0x14, 0x08, 0x14, 0x63, // X
0x07, 0x08, 0x70, 0x08, 0x07, // Y
0x61, 0x51, 0x49, 0x45, 0x43, // Z
// [(91)
0x00, 0x7F, 0x41, 0x41, 0x00,
// \(92)
0x02, 0x04, 0x08, 0x10, 0x20,
// ](93)
0x00, 0x41, 0x41, 0x7F, 0x00,
// ^(94)
0x04, 0x02, 0x01, 0x02, 0x04,
// _(95)
0x40, 0x40, 0x40, 0x40, 0x40,
// `(96)
0x00, 0x01, 0x02, 0x04, 0x00,
// 小写字母a-z(97-122)
0x20, 0x54, 0x54, 0x54, 0x78, // a
0x7F, 0x48, 0x44, 0x44, 0x38, // b
0x38, 0x44, 0x44, 0x44, 0x20, // c
0x38, 0x44, 0x44, 0x48, 0x7F, // d
0x38, 0x54, 0x54, 0x54, 0x18, // e
0x08, 0x7E, 0x09, 0x01, 0x02, // f
0x08, 0x14, 0x54, 0x54, 0x3C, // g
0x7F, 0x08, 0x04, 0x04, 0x78, // h
0x00, 0x44, 0x7D, 0x40, 0x00, // i
0x20, 0x40, 0x44, 0x3D, 0x00, // j
0x7F, 0x10, 0x28, 0x44, 0x00, // k
0x00, 0x41, 0x7F, 0x40, 0x00, // l
0x7C, 0x04, 0x18, 0x04, 0x78, // m
0x7C, 0x08, 0x04, 0x04, 0x78, // n
0x38, 0x44, 0x44, 0x44, 0x38, // o
0x7C, 0x14, 0x14, 0x14, 0x08, // p
0x08, 0x14, 0x14, 0x18, 0x7C, // q
0x7C, 0x08, 0x04, 0x04, 0x08, // r
0x48, 0x54, 0x54, 0x54, 0x20, // s
0x04, 0x3F, 0x44, 0x40, 0x20, // t
0x3C, 0x40, 0x40, 0x20, 0x7C, // u
0x1C, 0x20, 0x40, 0x20, 0x1C, // v
0x3C, 0x40, 0x30, 0x40, 0x3C, // w
0x44, 0x28, 0x10, 0x28, 0x44, // x
0x0C, 0x50, 0x50, 0x50, 0x3C, // y
0x44, 0x64, 0x54, 0x4C, 0x44, // z
// {(123)
0x00, 0x08, 0x36, 0x41, 0x00,
// |(124)
0x00, 0x00, 0x7F, 0x00, 0x00,
// }(125)
0x00, 0x41, 0x36, 0x08, 0x00,
// ~(126)
0x08, 0x08, 0x2A, 0x1C, 0x08
};
void LCD_Fill(uint16_t x_s, uint16_t x_e, uint16_t y_s, uint16_t y_e,uint16_t *color);
void LCD_Clear(uint16_t Color);
void LCD_WR_DATA(uint8_t dat);
void LCD_WR_DATAHalfWord(uint16_t dat);
void LCD_WR_DATA2(uint16_t dat);
void st7745s_display_on(void);
void st7745s_display_off(void);
void LCDDrawImage(uint8_t *p);
void LCD_PutStr(uint8_t x, uint8_t y, const char *str, uint16_t color);
void LCD_Show16BYTE(uint16_t *In,uint32_t len);
void LCDSetPointColor(uint8_t XPoint,uint8_t YPoint,uint16_t Color);
//*****************************************************************************
//
// External function definitions
//
//*****************************************************************************
void LCD_DrawPoint(uint16_t x,uint16_t y,uint16_t color);
/************************************************************************************
* @fn st7735s_init
*
* @brief Initial SPI, GPIO and DMA used by gc9c01, and init gc9c01 registers.
*/
void st7735s_init(void);
/************************************************************************************
* @fn st7735s_set_window
*
* @brief used to define area of frame memory where MCU can access.
*
* @param x_s: SC.
* x_e: EC.
* y_s: SP.
* y_e: EP.
*/
void st7735s_set_window(uint16_t x_s, uint16_t x_e, uint16_t y_s, uint16_t y_e);
/************************************************************************************
* @fn st7735s_display_wait_transfer_done
*
* @brief Used to wait for all data have been sent to gc9c01 when DMA is used.
*/
void st7735s_display_wait_transfer_done(void);
/************************************************************************************
* @fn st7735s_display
*
* @brief Receive an amount of data in blocking mode.(Dual<61><6C>Quad mode)
*
* @param pixel_count: total pixels count to be sent.
* data: pointer to data buffer
* callback: used to notify caller after DMA transfer is done.
*/
void st7735s_display(uint32_t pixel_count, uint16_t *data, void(*callback)(void));
/************************************************************************************
* @fn st7735s_display_gather
*
* @brief used to send left or right part of frame with DMA gather mode
*
* @param pixel_count: total pixels count to be sent.
* data: address of first pixel to be sent
* interval: lcd width
* count: data to be sent in a single line
*/
void st7735s_display_gather(uint32_t pixel_count, uint16_t *data, uint16_t interval, uint16_t count);
/************************************************************************************
* @fn st7735s_dma_isr
*
* @brief DMA isr handler for gc9c01.
*/
void st7735s_dma_isr(void);
void LCD_ENABLE_BACKLIGHT(void);
void LCD_DISABLE_BACKLIGHT(void);
#ifdef __cplusplus
}
#endif
#endif /* __DRIVER_GC9C01_H__ */