#include "includes.h" static u16 susLcdBackColor; //背景颜色 static u16 susLcdForeColor; //画笔颜色 extern const unsigned char g_apucLetter16[]; extern const unsigned char g_apucCLetter16[]; extern const unsigned char g_apucLetter24[]; extern const unsigned char g_apucCLetter24[]; extern const unsigned char g_apucFonts16[]; extern const unsigned char g_apucCFonts16[]; extern const unsigned char g_apucFonts24[]; extern const unsigned char g_apucCFonts24[]; unsigned char showApn=1; unsigned char LastKeyLight=0;//熄屏首次电量屏幕 unsigned char KeyLightFlag=-1; /*************************************************************************** *LcdSetColor 设置画笔颜色和背景颜色 ****************************************************************************/ static void LcdPortInit(void) { GPIO_InitTypeDef GPIO_InitStructure; #if(LCD_BUS_TYPE==LCD_BUS_IO) /* Enable GPIOD and GPIOE clocks */ RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; LCD_CS_HIGH; LCD_BL_HIGH; GPIO_InitStructure.GPIO_Pin = (LCD_CS_PIN|LCD_SCK_PIN|LCD_DCX_PIN|LCD_SDA_PIN); GPIO_Init(GPIOB, &GPIO_InitStructure); LCD_CS_HIGH; LCD_SCK_HIGH; LCD_DCX_HIGH; LCD_SDA_HIGH; LCD_RESET_HIGH; LCD_BL_HIGH; GPIO_InitStructure.GPIO_Pin = (LCD_RESET_PIN|LCD_BL_PIN); GPIO_Init(GPIOA, &GPIO_InitStructure); LCD_RESET_HIGH; LCD_BL_HIGH; #elif(LCD_BUS_TYPE==LCD_BUS_SPI) SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE); GPIO_InitStructure.GPIO_Pin = LCD_DCX_PIN; GPIO_Init(LCD_DCX_PORT, &GPIO_InitStructure); LCD_DCX_HIGH; /* NS */ GPIO_InitStructure.GPIO_Pin = LCD_SPI_NSS_PIN; GPIO_Init(LCD_SPI_PORT, &GPIO_InitStructure); /*SCK */ GPIO_InitStructure.GPIO_Pin = LCD_SPI_SCK_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(LCD_SPI_PORT, &GPIO_InitStructure); /*MOSI */ GPIO_InitStructure.GPIO_Pin = LCD_SPI_MOSI_PIN; GPIO_Init(LCD_SPI_PORT, &GPIO_InitStructure); LCD_SPI_NSS_HIGH; SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;//半双工,只发不读 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; //2分频 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(LCD_SPI_HANDLE, &SPI_InitStructure); SPI_Cmd(LCD_SPI_HANDLE, ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin = (LCD_RESET_PIN|LCD_BL_PIN); GPIO_Init(GPIOA, &GPIO_InitStructure); LCD_RESET_HIGH; LCD_BL_HIGH; #endif } #if(LCD_BUS_TYPE==LCD_BUS_IO) void LcdSendCommand(unsigned char Cmd) { unsigned char i,j; LCD_CS_LOW; LCD_DCX_LOW; for(i=0;i<8;i++){ j=0x80>>i; LCD_SCK_LOW; if(Cmd&j)LCD_SDA_HIGH; else LCD_SDA_LOW; LCD_SCK_HIGH; } LCD_CS_HIGH; } void LcdSendData(unsigned char Data) { unsigned char i,j; unsigned char ret; LCD_CS_LOW; LCD_DCX_HIGH; for(i=0;i<8;i++){ j=0x80>>i; LCD_SCK_LOW; if(Data & j)LCD_SDA_HIGH; else LCD_SDA_LOW; LCD_SCK_HIGH; } LCD_CS_HIGH; } #elif(LCD_BUS_TYPE==LCD_BUS_SPI) void LCD_SPIx_ReadWriteByte(unsigned char byte) { SPI_I2S_SendData(LCD_SPI_HANDLE, byte); while (SPI_I2S_GetFlagStatus(LCD_SPI_HANDLE, SPI_I2S_FLAG_BSY) == SET); } void LcdSendCommand(unsigned char Cmd) { LCD_DCX_LOW; LCD_SPI_NSS_LOW; LCD_SPIx_ReadWriteByte(Cmd); LCD_SPI_NSS_HIGH; } void LcdSendData(unsigned char Data) { LCD_DCX_HIGH; LCD_SPI_NSS_LOW; LCD_SPIx_ReadWriteByte(Data); LCD_SPI_NSS_HIGH; } #endif /*************************************************************************** *LcdSetColor 设置画笔颜色和背景颜色 ****************************************************************************/ void LcdSetColor(u16 BrushColor,u16 BackColor) { susLcdForeColor=BrushColor; //画笔颜色 susLcdBackColor=BackColor; //背景颜色 } void LcdInit(void) { LcdPortInit(); LCD_BL_LOW;//用户体验 //reset LCD_RESET_HIGH; DelayMs(1); LCD_RESET_LOW; DelayMs(1); LCD_RESET_HIGH; DelayMs(120); //-----------------------------------ST7735S Set REG---------------------------------------------// LcdSendCommand(0x11); //Sleep out DelayMs(120); //Delay 120ms //------------------------------------ST7735S Frame Rate-----------------------------------------// LcdSendCommand(0xB1); LcdSendData(0x05); LcdSendData(0x3C); LcdSendData(0x3C); LcdSendCommand(0xB2); LcdSendData(0x05); LcdSendData(0x3C); LcdSendData(0x3C); LcdSendCommand(0xB3); LcdSendData(0x05); LcdSendData(0x3C); LcdSendData(0x3C); LcdSendData(0x05); LcdSendData(0x3C); LcdSendData(0x3C); //------------------------------------End ST7735S Frame Rate-----------------------------------------// LcdSendCommand(0xB4); //Dot inversion LcdSendData(0x03); //------------------------------------ST7735S Power Sequence-----------------------------------------// LcdSendCommand(0xC0); LcdSendData(0x28); LcdSendData(0x08); LcdSendData(0x04); LcdSendCommand(0xC1); LcdSendData(0XC0); LcdSendCommand(0xC2); LcdSendData(0x0D); LcdSendData(0x00); LcdSendCommand(0xC3); LcdSendData(0x8D); LcdSendData(0x2A); LcdSendCommand(0xC4); LcdSendData(0x8D); LcdSendData(0xEE); //---------------------------------End ST7735S Power Sequence------------------------000-------------// LcdSendCommand(0xC5); //VCOM LcdSendData(0x1A); LcdSendCommand(0x36); //MX, MY, RGB mode LcdSendData(0x60);//-----------这个值非常重要,决定了内部显存和显示区域的关系,以及RGB颜色顺序//60 //LcdSendData(0xA0); //------------------------------------ST7735S Gamma Sequence-----------------------------------------// LcdSendCommand(0xE0); LcdSendData(0x04); LcdSendData(0x22); LcdSendData(0x07); LcdSendData(0x0A); LcdSendData(0x2E); LcdSendData(0x30); LcdSendData(0x25); LcdSendData(0x2A); LcdSendData(0x28); LcdSendData(0x26); LcdSendData(0x2E); LcdSendData(0x3A); LcdSendData(0x00); LcdSendData(0x01); LcdSendData(0x03); LcdSendData(0x13); LcdSendCommand(0xE1); LcdSendData(0x04); LcdSendData(0x16); LcdSendData(0x06); LcdSendData(0x0D); LcdSendData(0x2D); LcdSendData(0x26); LcdSendData(0x23); LcdSendData(0x27); LcdSendData(0x27); LcdSendData(0x25); LcdSendData(0x2D); LcdSendData(0x3B); LcdSendData(0x00); LcdSendData(0x01); LcdSendData(0x04); LcdSendData(0x13); //------------------------------------End ST7735S Gamma Sequence-----------------------------------------// LcdSendCommand(0x3A); //65k mode LcdSendData(0x05); LcdSendCommand(0x29); //Display on //设置前景色和背景色 LcdSetColor(0x0000,0xffff); //清屏 LcdClrAll(); LCD_BL_HIGH; } void LCDBackLight(char Ct) { LastKeyLight=KeyLightFlag; if(Ct==0){ KeyLightFlag=Ct; LCD_BL_LOW; LcdSendCommand(0x28); if(GPS_TimeTable[newPara.gpsTimeIndex]>=30||GPS_TimeTable[newPara.gpsTimeIndex]==0)QueryTime=60; else QueryTime=GPS_TimeTable[newPara.gpsTimeIndex]*2; }else{ QueryTime=10; KeyLightFlag=Ct; LCD_BL_HIGH; LcdSendCommand(0x29); } } /********************************************************************************************** 设置一个写地址区域 ************************************************************************************************/ void LcdBlockWrite(u16 x1,u16 y1,u16 x2,u16 y2) { u16 Xstart,Xend,Ystart,Yend; #if(LCD_TYPE==0) //旧屏 Xstart=x1+1; Xend=x2+1; Ystart=y1+2; Yend=y2+2; #else //新屏 Xstart=x1; Xend=x2; Ystart=y1; Yend=y2; #endif LcdSendCommand(0x2a); LcdSendData(Xstart>>8); LcdSendData(Xstart&0xff); LcdSendData(Xend>>8); LcdSendData(Xend&0xff); LcdSendCommand(0x2b); LcdSendData(Ystart>>8); LcdSendData(Ystart&0xff); LcdSendData(Yend>>8); LcdSendData(Yend&0xff); LcdSendCommand(0x2c); } void LcdClrAll(void) { int i,j; unsigned char colorH,colorL; colorH=susLcdBackColor>>8; colorL=susLcdBackColor&0xff; LcdBlockWrite(0,0,159,127); for(i=0;i