📄 glcd_spi_stm32.c
字号:
wr_reg(0x51, (HEIGHT-1)); /* 水平结束坐标*/
wr_reg(0x52, 0x0000); /* 垂直开始坐标*/
wr_reg(0x53, (WIDTH-1)); /* 垂直结束 */
wr_reg(0x60, 0xA700); /* 扫描行 */
if (driverCode == 0x5408) /* LCD&触摸屏设备号*/
wr_reg(0x60, 0xA700); /* 扫描行*/
if (driverCode == 0xC990) /* LCD&触摸屏设备号*/
wr_reg(0x60, 0x2700); /* 扫描行*/
wr_reg(0x61, 0x0001); /* NDL,VLE, REV*/
wr_reg(0x6A, 0x0000); /* 设置滚动一行*/
/* 显示控制部分 -------------------------------------------------*/
wr_reg(0x80, 0x0000);
wr_reg(0x81, 0x0000);
wr_reg(0x82, 0x0000);
wr_reg(0x83, 0x0000);
wr_reg(0x84, 0x0000);
wr_reg(0x85, 0x0000);
/* 面板控制 -----------------------------------------------------------*/
wr_reg(0x90, 0x0010);
wr_reg(0x92, 0x0000);
wr_reg(0x93, 0x0003);
wr_reg(0x95, 0x0110);
wr_reg(0x97, 0x0000);
wr_reg(0x98, 0x0000);
/* Set GRAM write direction
I/D=10 (Horizontal : increment, Vertical : increment)
AM=1 (address is updated in vertical writing direction) */
wr_reg(0x03, 0x1038);
wr_reg(0x07, 0x0137); /* 262K彩色显示*/
GPIOB->ODR= 0x0 ;
delay(5);
GPIOB->ODR= 0x1 ;
delay(5);
GPIOB->ODR= 0x0 ;
delay(5);
GPIOB->ODR= 0x1 ;
}
/*******************************************************************************
*函数名:GLCD_WindowMax()
功能描述:将整屏区域设置绘制窗口
*******************************************************************************/
void GLCD_WindowMax (void) {
wr_reg(0x50, 0); /* 水平开始坐标*/
wr_reg(0x51, HEIGHT-1); /* 水平结束坐标(-1)*/
wr_reg(0x52, 0); /* 垂直开始坐标*/
wr_reg(0x53, WIDTH-1); /* 垂直结束坐标(-1) */
}
/*******************************************************************************
*函数名:GLCD_PutPixel()
*功能描述:绘制一个像素
*输入: 水平坐标, 垂直坐标
*返回: 无 *
*******************************************************************************/
void GLCD_PutPixel (unsigned int x, unsigned int y) {
wr_reg(0x20, y);
wr_reg(0x21, WIDTH-1-x);
wr_cmd(0x22);
wr_dat(TextColor);
}
/*******************************************************************************
*函数名:GLCD_SetTextColor()
*功能描述:设置字体色
*******************************************************************************/
void GLCD_SetTextColor (unsigned short color) {
TextColor = color;
}
/*******************************************************************************
* 函数名:GLCD_SetBackColor()
*功能描述:设置背景色
*******************************************************************************/
void GLCD_SetBackColor (unsigned short color) {
BackColor = color;
}
/*******************************************************************************
*函数名:GLCD_Clear()
*功能描述:清屏
*******************************************************************************/
void GLCD_Clear (unsigned short color) {
unsigned int i;
GLCD_WindowMax();
wr_reg(0x20, 0);
wr_reg(0x21, 0);
wr_cmd(0x22);
wr_dat_start();
for(i = 0; i < (WIDTH*HEIGHT); i++)
wr_dat_only(color);
wr_dat_stop();
}
/*******************************************************************************
*函数名:GLCD_DrawChar()
功能描述:在给定的区域绘制字符
*输入:水平坐标,垂直坐标,字符位图指针
*******************************************************************************/
void GLCD_DrawChar (unsigned int x, unsigned int y, unsigned short *c) {
int idx = 0, i, j;
x = WIDTH-x-CHAR_W;
wr_reg(0x50, y); /* 水平开始坐标*/
wr_reg(0x51, y+CHAR_H-1); /* 水平结束坐标(-1) */
wr_reg(0x52, x); /* 垂直开始坐标*/
wr_reg(0x53, x+CHAR_W-1); /* 垂直结束坐标(-1) */
wr_reg(0x20, y);
wr_reg(0x21, x);
wr_cmd(0x22);
wr_dat_start();
for (j = 0; j < CHAR_H; j++) {
for (i = CHAR_W-1; i >= 0; i--) {
if((c[idx] & (1 << i)) == 0x00) {
wr_dat_only(BackColor);
} else {
wr_dat_only(TextColor);
}
}
c++;
}
wr_dat_stop();
}
/*******************************************************************************
* 函数名:GLCD_DisplayChar()
* 功能描述:在给定的行显示字符
* 输入: 行号,列号,ASCII码字符
*******************************************************************************/
void GLCD_DisplayChar (unsigned int ln, unsigned int col, unsigned char c) {
c -= 32;
GLCD_DrawChar(col * CHAR_W, ln * CHAR_H, &Font_24x16[c * CHAR_H]);
}
/*******************************************************************************
*函数名:GLCD_DisplayString()
*功能描述:在给定的区域显示字串
*输入:行号,列号,字串指针
*******************************************************************************/
void GLCD_DisplayString (unsigned int ln, unsigned int col, unsigned char *s) {
GLCD_WindowMax();
while (*s) {
GLCD_DisplayChar(ln, col++, *s++);
}
}
/*******************************************************************************
*函数名:GLCD_ClearLn()
*功能描述:清指定的行
*输入:行号
*******************************************************************************/
void GLCD_ClearLn (unsigned int ln) {
GLCD_WindowMax();
GLCD_DisplayString(ln, 0, " ");
}
/*******************************************************************************
* 函数名:GLCD_Bargraph()
* 功能描述:绘制柱形图
* 输入:水平坐标,垂直坐标,柱形图宽度, 有效值
*******************************************************************************/
void GLCD_Bargraph (unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned int val) {
int i,j;
x = WIDTH-x-w;
wr_reg(0x50, y); /* 水平开始坐标*/
wr_reg(0x51, y+CHAR_H-1); /* 水平结束坐标(-1) */
wr_reg(0x52, x); /* 垂直开始坐标*/
wr_reg(0x53, x+w-1); /* 垂直结束坐标(-1) */
val = (val * w) >> 10; /* 扫描24X12字符值 */
wr_reg(0x20, y);
wr_reg(0x21, x);
wr_cmd(0x22);
wr_dat_start();
for (i = 0; i < h; i++) {
for (j = w-1; j >= 0; j--) {
if(j >= val) {
wr_dat_only(BackColor);
} else {
wr_dat_only(TextColor);
}
}
}
wr_dat_stop();
}
/*******************************************************************************
* 在垂直和水平位置显示位图
* 输入: x: 水平位置 *
* y: 垂直位置 *
* w: 位图宽度 *
* h: 位图高度 *
* bitmap: 位图数据地址 *
* 返回: 无 *
*******************************************************************************/
void GLCD_Bitmap (unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned char *bitmap) {
unsigned int i, j;
unsigned short *bitmap_ptr = (unsigned short *)bitmap;
x = WIDTH-x-w;
wr_reg(0x50, y); /* 设置水平显示开始坐标 */
wr_reg(0x51, y+h-1); /* 设置水平显示结束坐标 */
wr_reg(0x52, x); /* 设置垂直显示开始坐标 */
wr_reg(0x53, x+w-1); /* 设置垂直显示结束坐标 */
wr_reg(0x20, y);
wr_reg(0x21, x);
wr_cmd(0x22);
wr_dat_start();
for (j = 0; j < h; j++) {
bitmap_ptr += w-1;
for (i = 0; i < w; i++) {
wr_dat_only(*bitmap_ptr--);
}
bitmap_ptr += w+1;
}
wr_dat_stop();
}
/*******************************************************************************
* 在水平和垂直位置显示图片文件
* 输入: x: 水平坐标
* y: 垂直坐标
* w: 宽度
* h: 高度
* bmp: 地址*
* 返回:
*******************************************************************************/
void GLCD_Bmp (unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned char *bmp) {
unsigned int i, j;
unsigned short *bitmap_ptr = (unsigned short *)bmp;
x = WIDTH-x-w;
wr_reg(0x50, y); /* 设置水平显示开始坐标 */
wr_reg(0x51, y+h-1); /* 设置水平显示结束坐标 */
wr_reg(0x52, x); /* 设置垂直显示开始坐标 */
wr_reg(0x53, x+w-1); /* 设置垂直显示结束坐标 */
wr_reg(0x20, y);
wr_reg(0x21, x);
wr_cmd(0x22);
wr_dat_start();
bitmap_ptr += (h*w)-1;
for (j = 0; j < h; j++) {
for (i = 0; i < w; i++) {
wr_dat_only(*bitmap_ptr--);
}
}
wr_dat_stop();
}
/******************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -