📄 glcd.c
字号:
#include "glcd.h"
#include "base.h"
#include "glcd.h"
extern GPIO_Handle hgpio5_;
void LCD_Write_CMD(uint32_t CMD)
{
GPIO_pinWrite(hgpio5_,GPIO_PIN7,0);
LCD_CMD_W = CMD >> 8;
LCD_CMD_W = CMD;
}
void LCD_Write_DATA(uint32_t DATA)
{
GPIO_pinWrite(hgpio5_,GPIO_PIN7,1);
LCD_DATA_W = DATA >> 8;
LCD_DATA_W = DATA;
}
void LCD_Write_IMG(uint8_t DATA)
{
GPIO_pinWrite(hgpio5_,GPIO_PIN7,1);
LCD_DATA_W = DATA;
}
void TFTLCD_init(void)
{
delay_us(1000);
GPIO_pinWrite(hgpio5_,GPIO_PIN4,0);
delay_us(1000);
GPIO_pinWrite(hgpio5_,GPIO_PIN4,1);
LCD_Write_CMD(0x0110); //Start oscillation
LCD_Write_CMD(0x00A0); //Standby mode cancel
LCD_Write_CMD(0x0301); //Reset register 1
delay_us(10000);
LCD_Write_CMD(0x0300);
LCD_Write_CMD(0x2B02); //Osc resistance control
LCD_Write_CMD(0x5901); //Test register setting enable
LCD_Write_CMD(0x6022); //Test register setting
LCD_Write_CMD(0x5900); //Test register setting disable
LCD_Write_CMD(0x2818); //DC/DC clock frequency adjust setting
LCD_Write_CMD(0x1A05); //Step up circuit frequency adjust setting
LCD_Write_CMD(0x2518); //Step up factor in step up circuit 3 setting
LCD_Write_CMD(0x1900); //VR1 and VR2 regulator factor setting
LCD_Write_CMD(0x1C33); //Step up circuit operating current setting
LCD_Write_CMD(0x2474); //V18 and VCOM regulator current setting
LCD_Write_CMD(0x1E01); //Extra step up circuit 1 operation
LCD_Write_CMD(0x18C1); //V18 and VCOM regulator on
delay_us(10000);
LCD_Write_CMD(0x18E1); //VCL turn on
LCD_Write_CMD(0x18F1); //VGH and VGL turn on
delay_us(60000);
LCD_Write_CMD(0x18F5); //DDVDH turn on
delay_us(60000);
LCD_Write_CMD(0x1B09); //VS/VDH turn on and set
delay_us(10000);
LCD_Write_CMD(0x1F13); //VCOM amplitude voltage setting
LCD_Write_CMD(0x2011); //VCOMH voltage setting 2011
LCD_Write_CMD(0x1E81);
delay_us(10000);
LCD_Write_CMD(0x9D00); //Extend mode register
LCD_Write_CMD(0xC101); //off mode register
LCD_Write_CMD(0x0510);
LCD_Write_CMD(0xC101); //RGB mode rsgister
LCD_Write_CMD(0x0E00); //Partial non-display area color register 1
LCD_Write_CMD(0x0F00); //Partial non-display area color register 2
LCD_Write_CMD(0x1000); //First display window area starting register 1
LCD_Write_CMD(0x1100); //First display window area starting register 2
LCD_Write_CMD(0x1200); //Second display window area starting register 1
LCD_Write_CMD(0x1300); //Second display window area starting register 2
LCD_Write_CMD(0x1400); //First display window area display line number 1
LCD_Write_CMD(0x1500); //First display window area display line number 2
LCD_Write_CMD(0x1600); //second display window area display line number 1
LCD_Write_CMD(0x1700); //second display window area display line number 2
LCD_Write_CMD(0x3401); //Partial gate register 1
LCD_Write_CMD(0x3500); //Partial gate register 2
LCD_Write_CMD(0x4B00); //Scroll area start register 1
LCD_Write_CMD(0x4C00); //Scroll area start register 2
LCD_Write_CMD(0x4E00); //Scroll area line number register 2
LCD_Write_CMD(0x4F00); //Scroll area step number register 1
LCD_Write_CMD(0x5000); //Scroll area step number register 2
LCD_Write_CMD(0x3C00); //RGB start line register 1
LCD_Write_CMD(0x3D00); //RGB start line register 2
LCD_Write_CMD(0x3E01); //RGB end line register 1
LCD_Write_CMD(0x3F3F); //RGB end line register 1
LCD_Write_CMD(0x4002); //Horizontal back porch setting register
LCD_Write_CMD(0x4102); //Vertical back porch setting register
LCD_Write_CMD(0x4200); //X address register
LCD_Write_CMD(0x4300); //Y address register
LCD_Write_CMD(0x4400); //Y address register
LCD_Write_CMD(0x4500); //MIN X address register
LCD_Write_CMD(0x46EF); //MAX X address register
LCD_Write_CMD(0x4700); //MIN Y address register
LCD_Write_CMD(0x4800); //MIN Y address register
LCD_Write_CMD(0x4901); //MAX Y address register
LCD_Write_CMD(0x4A3F); //MAX Y address register
LCD_Write_CMD(0x1D08); //specifies the gate scan direction
LCD_Write_CMD(0x8600); //Gate on interval control register
LCD_Write_CMD(0x8730); //Gate on interval control register
LCD_Write_CMD(0x8802); //Source on interval control register
LCD_Write_CMD(0x8905); //Gate on interval control register
LCD_Write_CMD(0x8D01); //Line frequency control register
LCD_Write_CMD(0x8B30); //Line clock register 1
LCD_Write_CMD(0x3301); //N line inversion register
LCD_Write_CMD(0x3701); //Gate scan selection register
LCD_Write_CMD(0x7600); //specify the number of dummy lines
LCD_Write_CMD(0x8F30); //gamma adjustment register
LCD_Write_CMD(0x9002); //gamma adjustment register
LCD_Write_CMD(0x9110); //gamma adjustment register
LCD_Write_CMD(0x9230); //gamma adjustment register,center adjust
LCD_Write_CMD(0x9302); //gamma adjustment register
LCD_Write_CMD(0x9451); //gamma adjustment register
LCD_Write_CMD(0x9577); //gamma adjustment register
LCD_Write_CMD(0x9620); //gamma adjustment register
LCD_Write_CMD(0x9700); //gamma adjustment register
LCD_Write_CMD(0x9800); //gamma adjustment register
LCD_Write_CMD(0x9900); //gamma adjustment register
LCD_Write_CMD(0x9A00); //gamma adjustment register
LCD_Write_CMD(0x3B01);
delay_us(40000);
LCD_Write_CMD(0x0020);
}
void LCD_Position(uint16_t S_X , uint16_t S_Y , uint16_t E_X, uint16_t E_Y)
{
LCD_Write_CMD(0x4200 | S_X); //X address register
LCD_Write_CMD(0x4300 | ((S_Y & 0x0100) >> 8)); //Y address register
LCD_Write_CMD(0x4400 | (S_Y&0xFF)); //Y address register
LCD_Write_CMD(0x4500 | S_X); //MIN X address register
LCD_Write_CMD(0x4600 | E_X); //MAX X address register
LCD_Write_CMD(0x4700 | ((S_Y & 0x0100) >> 8)); //MIN Y address register
LCD_Write_CMD(0x4800 | (S_Y & 0xFF)); //MIN Y address register
LCD_Write_CMD(0x4900 | ((E_Y & 0x0100) >> 8)); //MAX Y address register
LCD_Write_CMD(0x4A00 | (E_Y & 0xFF)); //MAX Y address register
}
void LCD_SCROLL_init(uint16_t AREA_START, uint16_t DRIVING_LINE)
{
LCD_Write_CMD(0x4B00 | ((AREA_START & 0x0100) >> 8));
LCD_Write_CMD(0x4C00 | (AREA_START & 0x00FF));
LCD_Write_CMD(0x4D00 | ((DRIVING_LINE & 0x0100) >> 8));
LCD_Write_CMD(0x4E00 | (DRIVING_LINE & 0x00FF));
}
void pixelput(uint8_t x,uint16_t y,uint16_t col)
{
GPIO_pinWrite(hgpio5_,GPIO_PIN7,0);
LCD_CMD_W = 0x00000042;
LCD_CMD_W = (uint32_t)x;
LCD_CMD_W = 0x00000043 ;
LCD_CMD_W = (uint32_t)(y>>8);
LCD_CMD_W = 0x00000044;
LCD_CMD_W = (uint32_t)y;
LCD_Write_DATA(col);
}
void bar(uint8_t x,uint16_t y,uint8_t x_,uint16_t y_,uint16_t Col)
{
uint16_t temp, i;
LCD_Position(x, y, x_, y_);
temp = ((uint16_t)(x_ - x+1) * (uint16_t)(y_ - y+1));
for(i = 0 ; i < temp ; i++)
LCD_Write_DATA(Col);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -