#include "lcd.h" #include "stdlib.h" #include "font.h" #include "usart.h" #include "Text.h" #include "Dis_Picture.h" ////////////////////////////////////////////////////////////////////////////////// //2.4寸/2.8寸 LCD 液晶驱动 //STM32F4工程模板-库函数版本 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com //******************************************************************************** ////////////////////////////////////////////////////////////////////////////////// //LCD的画笔颜色和背景色 u16 POINT_COLOR=0x0000; //画笔颜色 u16 BACK_COLOR=0xFFFF; //背景色 //管理LCD重要参数 //默认为竖屏 _lcd_dev lcddev; //本驱动程序使用的是MCU硬件SPI接口驱动 /****************************************************************************** 接口定义,请根据接线修改并修改相应IO初始化--驱动板子和IO要对应 // #define LCD_SDI //PB15 //数据输入线 // #define LCD_SCL //PB13 //时钟线 // #define LCD_CS //PB12 //片选 // #define LCD_SDO //PB14 //数据输出/复位 // #define LCD_RS //PB1 //命令/数据切换 // #define LCD_BLK //PB0 //背光控制 *******************************************************************************/ /////******************************************************************************/ //////函数: void SPI2_Init(void) //////函数功能:以下是 硬件SPI模块的初始化代码,配置成主机模式 //////SPI口初始化 //////这里针是对SPI2的初始化 //////DevEBox 大越创新 //////淘宝店铺:mcudev.taobao.com //////淘宝店铺:shop389957290.taobao.com /////******************************************************************************/ ////void SPI2_Init(void) ////{ //// SPI2_Handler.Instance=SPI2; //SP2 //// SPI2_Handler.Init.Mode=SPI_MODE_MASTER; //设置SPI工作模式,设置为主模式 //// SPI2_Handler.Init.Direction=SPI_DIRECTION_2LINES;//设置SPI单向或者双向的数据模式:SPI设置为双线模式 //// SPI2_Handler.Init.DataSize=SPI_DATASIZE_8BIT; //设置SPI的数据大小:SPI发送接收8位帧结构 //// SPI2_Handler.Init.CLKPolarity=SPI_POLARITY_HIGH; //串行同步时钟的空闲状态为高电平 //// SPI2_Handler.Init.CLKPhase=SPI_PHASE_2EDGE; //串行同步时钟的第二个跳变沿(上升或下降)数据被采样 //// SPI2_Handler.Init.NSS=SPI_NSS_SOFT; //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制 //// SPI2_Handler.Init.NSSPMode=SPI_NSS_PULSE_DISABLE;//NSS信号脉冲失能 //// SPI2_Handler.Init.MasterKeepIOState=SPI_MASTER_KEEP_IO_STATE_ENABLE; //SPI主模式IO状态保持使能 //// SPI2_Handler.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_256;//定义波特率预分频的值:波特率预分频值为256 //// SPI2_Handler.Init.FirstBit=SPI_FIRSTBIT_MSB; //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始 //// SPI2_Handler.Init.TIMode=SPI_TIMODE_DISABLE; //关闭TI模式 //// SPI2_Handler.Init.CRCCalculation=SPI_CRCCALCULATION_DISABLE;//关闭硬件CRC校验 //// SPI2_Handler.Init.CRCPolynomial=7; //CRC值计算的多项式 //// HAL_SPI_Init(&SPI2_Handler); //// //// __HAL_SPI_ENABLE(&SPI2_Handler); //使能SPI2 //// SPI2_ReadWriteByte(0Xff); //启动传输 //// ////} /******************************************************************************/ //函数: void LCD_GPIO_Init(void) //函数功能:驱动液晶IO初始化配置 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com // #define LCD_SDI //PB15 //数据输入线 // #define LCD_SCL //PB13 //时钟线 // #define LCD_CS //PB12 //片选 // #define LCD_SDO //PB14 //数据输出/复位 // #define LCD_RS //PB1 //命令/数据切换 // #define LCD_BLK //PB0 //背光控制 /******************************************************************************/ void LCD_GPIO_Init(void) { GPIO_InitTypeDef GPIO_Initure; __HAL_RCC_GPIOB_CLK_ENABLE(); //开启PB时钟 GPIO_Initure.Pin=GPIO_PIN_0 |GPIO_PIN_1 | GPIO_PIN_12; //PB GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出 GPIO_Initure.Pull=GPIO_PULLUP; //上拉 GPIO_Initure.Speed=GPIO_SPEED_FREQ_VERY_HIGH; //高速 HAL_GPIO_Init(GPIOB,&GPIO_Initure); //初始化 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET); //PB0置1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET); //PB1置1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET); //PB12置1 SPI2_Init(); //初始化硬件SPI2 SPI2_SetSpeed(SPI_BAUDRATEPRESCALER_4); //设置高速模式 LCD_HardwareRest(); //硬复位--如果IO连接,硬件复位可控有效 LCD_BLK_On; //开启背光 // LCD_BLK_Off; //关闭背光 // LCD_BLK_On; //开启背光 } /////********************************************************************/ //////函数:u8 SPI2_ReadWriteByte(u8 TxData) //////函数功能: SPI读写函数 : 使用操作寄存器方式,速度更快 //////SPI1 读写一个字节 //////TxData:要写入的字节 //////返回值:读取到的字节 //////DevEBox 大越创新 //////淘宝店铺:mcudev.taobao.com //////淘宝店铺:shop389957290.taobao.com //////*******************************************************************/ ////u8 SPI2_ReadWriteByte(u8 TxData) ////{ //// //// while((SPI2->SR & SPI_I2S_FLAG_TXE) == RESET); //while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET){}//等待发送区空 //// //// SPI2->DR = TxData; //SPI_I2S_SendData(SPI2, TxData); //通过外设SPIx发送一个byte 数据 //// //// while((SPI2->SR & SPI_I2S_FLAG_RXNE) == RESET); //while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET){} //等待接收完一个byte //// //// return SPI2->DR; //SPI_I2S_ReceiveData(SPI2); //返回通过SPIx最近接收的数据 //// ////} //********************************************************************/ //函数:void LCD_WR_REG(u16 regval) //函数功能: //写寄存器函数 //regval:寄存器值 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com //*******************************************************************/ void LCD_WR_REG(u16 regval) { LCD_CS_CLR; //LCD_CS=0 //片选 LCD_RS_CLR; //LCD_RS=0 //设置命令状态 SPI2_ReadWriteByte(regval&0x00FF); LCD_CS_SET; //LCD_CS=1 } //*******************************************************************/ //函数:void LCD_WR_DATA8(u8 data) //写8位数据 //函数功能: //液晶屏--写8位数据函数 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com //*******************************************************************/ void LCD_WR_DATA8(u8 data) //写8位数据 { LCD_CS_CLR; //LCD_CS=0 //片选 LCD_RS_SET; //LCD_RS=1 //设置数据状态 SPI2_ReadWriteByte(data); LCD_CS_SET; //LCD_CS=1 } //*******************************************************************/ //函数:void LCD_WR_DATA16(u16 data) //写16位数据 //函数功能:写LCD数据 //输入参数: //data:要写入的值 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com //*******************************************************************/ void LCD_WR_DATA16(u16 data) { LCD_CS_CLR; //LCD_CS=0 //片选 LCD_RS_SET; //LCD_RS=1 //设置数据状态 SPI2_ReadWriteByte(data>>8); SPI2_ReadWriteByte(data); LCD_CS_SET; //LCD_CS=1 } //*******************************************************************/ //函数:void LCD_WriteReg(u16 LCD_Reg, u16 LCD_RegValue) //写液晶屏寄存器 //函数功能:写寄存器 //输入参数: //LCD_Reg:寄存器地址 //LCD_RegValue:要写入的数据 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com //*******************************************************************/ void LCD_WriteReg(u16 LCD_Reg, u16 LCD_RegValue) { LCD_WR_REG(LCD_Reg); //写入要写的寄存器序号 LCD_WR_DATA8(LCD_RegValue);//写入数据 } //*******************************************************************/ //函数:void LCD_WriteRAM_Prepare(void) //函数功能:开始写GRAM 命令 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com //*******************************************************************/ void LCD_WriteRAM_Prepare(void) { LCD_WR_REG(lcddev.wramcmd); } //*******************************************************************/ //函数:LCD_WriteRAM(u16 RGB_Code) //函数功能:写入点阵颜色值 //输入参数: //RGB_Code:颜色值 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com //*******************************************************************/ void LCD_WriteRAM(u16 RGB_Code) { LCD_WR_DATA16( RGB_Code );//写十六位GRAM } //********************************************************************************/ //函数:void LCD_DisplayOn(void) //函数功能: //LCD开启显示 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com //*******************************************************************/ void LCD_DisplayOn(void) { LCD_WR_REG(0X29); //开启显示 } //*******************************************************************/ //函数:void LCD_DisplayOff(void) //函数功能: //LCD关闭显示 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com //*******************************************************************/ void LCD_DisplayOff(void) { LCD_WR_REG(0X28); //关闭显示 } //********************************************************************************/ //函数:void LCD_SoftRest(void) //函数功能:给屏幕发命令,执行软复位命令 //LCD开启显示 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com //*******************************************************************/ void LCD_SoftRest(void) { LCD_WR_REG(0x01); //发送软复位命令 LCD_Delay_ms(50); // delay 50 ms } //********************************************************************************/ //函数:void LCD_SoftRest(void) //函数功能:给屏幕发命令,执行软复位命令 //LCD开启显示 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com //*******************************************************************/ void LCD_HardwareRest(void) { // LCD_RST_CLR; //液晶屏复位 --硬复位--使能 //PB14作为液晶屏复位控制引脚 // LCD_Delay_ms(50); // delay 50 ms // LCD_RS_SET; //液晶屏复位 --硬复位--失能 //PB14作为液晶屏复位控制引脚 // LCD_Delay_ms(30); // delay 30 ms } //*******************************************************************/ //函数:void LCD_SetCursor(u16 Xpos, u16 Ypos) //函数功能:设置光标位置 //输入参数: //Xpos:横坐标 //Ypos:纵坐标 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com //*******************************************************************/ void LCD_SetCursor(u16 Xpos, u16 Ypos) { LCD_WR_REG(lcddev.setxcmd); LCD_WR_DATA16(Xpos); LCD_WR_REG(lcddev.setycmd); LCD_WR_DATA16(Ypos); } //*******************************************************************/ //函数:void LCD_DrawPoint(u16 x,u16 y) //函数功能:画点 //输入参数: //x,y:坐标 //POINT_COLOR:此点的颜色 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com //*******************************************************************/ void LCD_DrawPoint(u16 x,u16 y) { LCD_SetCursor(x,y); //设置光标位置 LCD_WriteRAM_Prepare(); //开始写入GRAM LCD_WR_DATA16(POINT_COLOR); } //*******************************************************************/ //函数:void LCD_Fast_DrawPoint(u16 x,u16 y,u16 color) //函数功能:快速画点 //输入参数: //x,y:坐标 //color:颜色 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com //*******************************************************************/ void LCD_Fast_DrawPoint(u16 x,u16 y,u16 color) { LCD_WR_REG(lcddev.setxcmd); LCD_WR_DATA16(x); LCD_WR_REG(lcddev.setycmd); LCD_WR_DATA16(y); LCD_WR_REG(lcddev.wramcmd); LCD_WR_DATA16(color); //写入16位颜色 } //*******************************************************************/ //函数:void LCD_Scan_Dir(u8 dir) //函数功能:设置LCD的自动扫描方向 //输入参数: //默认设置为L2R_U2D,如果设置为其他扫描方式,可能导致显示不正常. //dir:0~7,代表8个方向 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com //*******************************************************************/ void LCD_Scan_Dir(u8 dir) { u16 regval=0; //扫描方向定义--扫描方式有不同规格,可能定义不左右和上下的参照方向不同,总结方式,只有一下八种 switch(dir) { case L2R_U2D://从左到右,从上到下 regval|=(0<<7)|(0<<6)|(0<<5); break; case L2R_D2U://从左到右,从下到上 regval|=(1<<7)|(0<<6)|(0<<5); break; case R2L_U2D://从右到左,从上到下 regval|=(0<<7)|(1<<6)|(0<<5); break; case R2L_D2U://从右到左,从下到上 regval|=(1<<7)|(1<<6)|(0<<5); break; case U2D_L2R://从上到下,从左到右 regval|=(0<<7)|(0<<6)|(1<<5); break; case U2D_R2L://从上到下,从右到左 regval|=(0<<7)|(1<<6)|(1<<5); break; case D2U_L2R://从下到上,从左到右 regval|=(1<<7)|(0<<6)|(1<<5); break; case D2U_R2L://从下到上,从右到左 regval|=(1<<7)|(1<<6)|(1<<5); break; } LCD_WriteReg(0x36,regval|0x08);//改变扫描方向命令 ---此处需要查看数据手册,确定RGB颜色交换位的配置 } /**************************************************************************/ //函数:void LCD_Display_Dir(u8 dir) //函数功能:设置LCD的显示方向及像素参数 //输入参数: //设置LCD显示方向 ////dir: 0,竖屏 正 // 1,竖屏 反 // 2,横屏 左 // 3,横屏 右 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com //*************************************************************************/ void LCD_Display_Dir(u8 dir) { u8 SCAN_DIR; if(dir==0) //竖屏 正 { lcddev.dir=0; //竖屏 lcddev.width=240; lcddev.height=320; lcddev.wramcmd=0X2C; lcddev.setxcmd=0X2A; lcddev.setycmd=0X2B; SCAN_DIR=L2R_U2D; //选择扫描方向 } else if (dir==1) //横屏 { lcddev.dir=0; //竖屏 lcddev.width=240; lcddev.height=320; lcddev.wramcmd=0X2C; lcddev.setxcmd=0X2A; lcddev.setycmd=0X2B; SCAN_DIR=R2L_D2U; //选择扫描方向 } else if (dir==2) //横屏 { lcddev.dir=1; //横屏 lcddev.width=320; lcddev.height=240; lcddev.wramcmd=0X2C; lcddev.setxcmd=0X2A; lcddev.setycmd=0X2B; SCAN_DIR=U2D_R2L; //选择扫描方向 } else if (dir==3) //横屏 { lcddev.dir=1; //横屏 lcddev.width=320; lcddev.height=240; lcddev.wramcmd=0X2C; lcddev.setxcmd=0X2A; lcddev.setycmd=0X2B; SCAN_DIR=D2U_L2R; //选择扫描方向 } else //设置默认为竖屏--正 { lcddev.dir=0; //竖屏 lcddev.width=240; lcddev.height=320; lcddev.wramcmd=0X2C; lcddev.setxcmd=0X2A; lcddev.setycmd=0X2B; SCAN_DIR=L2R_U2D; //选择扫描方向 } //////以下设置,为窗口参数设置,设置了全屏的显示范围 LCD_WR_REG(lcddev.setxcmd); LCD_WR_DATA16(0); LCD_WR_DATA16(lcddev.width-1); LCD_WR_REG(lcddev.setycmd); LCD_WR_DATA16(0); LCD_WR_DATA16(lcddev.height-1); /////设置屏幕显示--扫描方向 LCD_Scan_Dir(SCAN_DIR); //设置屏幕显示--扫描方向 } /**************************************************************************/ //函数:void LCD_Set_Window(u16 sx,u16 sy,u16 width,u16 height) //函数功能:设置LCD的显示窗口 //设置窗口,并自动设置画点坐标到窗口左上角(sx,sy). //sx,sy:窗口起始坐标(左上角) //width,height:窗口宽度和高度,必须大于0!! //窗体大小:width*height. //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com //*************************************************************************/ void LCD_Set_Window(u16 sx,u16 sy,u16 width,u16 height) { width=sx+width-1; height=sy+height-1; LCD_WR_REG(lcddev.setxcmd); LCD_WR_DATA16(sx); //设置 X方向起点 LCD_WR_DATA16(width); //设置 X方向终点 LCD_WR_REG(lcddev.setycmd); LCD_WR_DATA16(sy); //设置 Y方向起点 LCD_WR_DATA16(height); //设置 Y方向终点 } /*******************************************************************************/ //函数:void LCD_Init(void) //函数功能:初始化lcd //该初始化函数可以初始化各种ILI93XX液晶!!! //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com /*******************************************************************************/ void LCD_Init(void) { LCD_GPIO_Init(); //初始化驱动 I/O接口 LCD_SoftRest(); //软复位 LCD_Delay_ms(50); // delay 50 ms LCD_WR_REG(0xCF); LCD_WR_DATA8(0x00); LCD_WR_DATA8(0xD9); LCD_WR_DATA8(0X30); LCD_WR_REG(0xED); LCD_WR_DATA8(0x64); LCD_WR_DATA8(0x03); LCD_WR_DATA8(0X12); LCD_WR_DATA8(0X81); LCD_WR_REG(0xE8); LCD_WR_DATA8(0x85); LCD_WR_DATA8(0x10); LCD_WR_DATA8(0x78); LCD_WR_REG(0xCB); LCD_WR_DATA8(0x39); LCD_WR_DATA8(0x2C); LCD_WR_DATA8(0x00); LCD_WR_DATA8(0x34); LCD_WR_DATA8(0x02); LCD_WR_REG(0xF7); LCD_WR_DATA8(0x20); LCD_WR_REG(0xEA); LCD_WR_DATA8(0x00); LCD_WR_DATA8(0x00); LCD_WR_REG(0xC0); //Power control LCD_WR_DATA8(0x21); //VRH[5:0] LCD_WR_REG(0xC1); //Power control LCD_WR_DATA8(0x12); //SAP[2:0];BT[3:0] LCD_WR_REG(0xC5); //VCM control LCD_WR_DATA8(0x32); //3F LCD_WR_DATA8(0x3C); //3C LCD_WR_REG(0xC7); //VCM control2 LCD_WR_DATA8(0xC1); LCD_WR_REG(0x36); // Memory Access Control LCD_WR_DATA8(0x08); LCD_WR_REG(0x3A); LCD_WR_DATA8(0x55); LCD_WR_REG(0xB1); //帧速率控制 LCD_WR_DATA8(0x00); LCD_WR_DATA8(0x18); LCD_WR_REG(0xB6); // Display Function Control LCD_WR_DATA8(0x0A); LCD_WR_DATA8(0xA2); LCD_WR_REG(0xF2); // 3Gamma Function Disable LCD_WR_DATA8(0x00); LCD_WR_REG(0x26); //Gamma curve selected LCD_WR_DATA8(0x01); LCD_WR_REG(0xE0); //Set Gamma LCD_WR_DATA8(0x0F); LCD_WR_DATA8(0x20); LCD_WR_DATA8(0x1E); LCD_WR_DATA8(0x09); LCD_WR_DATA8(0x12); LCD_WR_DATA8(0x0B); LCD_WR_DATA8(0x50); LCD_WR_DATA8(0xBA); LCD_WR_DATA8(0x44); LCD_WR_DATA8(0x09); LCD_WR_DATA8(0x14); LCD_WR_DATA8(0x05); LCD_WR_DATA8(0x23); LCD_WR_DATA8(0x21); LCD_WR_DATA8(0x00); LCD_WR_REG(0xE1); //Set Gamma LCD_WR_DATA8(0x00); LCD_WR_DATA8(0x19); LCD_WR_DATA8(0x19); LCD_WR_DATA8(0x00); LCD_WR_DATA8(0x12); LCD_WR_DATA8(0x07); LCD_WR_DATA8(0x2D); LCD_WR_DATA8(0x28); LCD_WR_DATA8(0x3F); LCD_WR_DATA8(0x02); LCD_WR_DATA8(0x0A); LCD_WR_DATA8(0x08); LCD_WR_DATA8(0x25); LCD_WR_DATA8(0x2D); LCD_WR_DATA8(0x0F); LCD_WR_REG(0x11); //Exit Sleep LCD_Delay_ms(120); LCD_WR_REG(0x29); //display on LCD_Display_Dir(LCD_DIR_Mode); //选择--屏幕显示方式 LCD_BLK_On; //点亮背光 LCD_Clear(WHITE); } //////////////////以下函数是屏幕显示图形的简单驱动函数////////////DevEBox 大越创新//////shop389957290.taobao.com////////////////////////////////////// /*******************************************************************************/ //函数:void LCD_Clear(u16 color) //函数功能:全屏清屏填充函数 //输入参数: //color:要清屏的填充色 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com /*******************************************************************************/ void LCD_Clear(u16 color) { u32 index=0; u32 totalpoint; LCD_Set_Window(0,0,lcddev.width,lcddev.height);//设置全屏窗口 totalpoint=lcddev.width * lcddev.height; //得到总点数 LCD_SetCursor(0x00,0x00); //设置光标位置 LCD_WriteRAM_Prepare(); //开始写入GRAM for(index=0;index0)incx=1; //设置单步方向 else if(delta_x==0)incx=0;//垂直线 else { incx=-1; delta_x=-delta_x; } if(delta_y>0)incy=1; else if(delta_y==0)incy=0;//水平线 else { incy=-1; delta_y=-delta_y; } if( delta_x>delta_y)distance=delta_x; //选取基本增量坐标轴 else distance=delta_y; for(t=0;t<=distance+1;t++ )//画线输出 { LCD_Fast_DrawPoint(uRow,uCol,Color);//画点 --使用输入颜色参数 xerr+=delta_x ; yerr+=delta_y ; if(xerr>distance) { xerr-=distance; uRow+=incx; } if(yerr>distance) { yerr-=distance; uCol+=incy; } } } /*******************************************************************************/ //函数:void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2) //函数功能:画矩形 //输入参数: //(x1,y1),(x2,y2):矩形的对角坐标 //Color;线条颜色 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com /*******************************************************************************/ void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2, u16 Color) { LCD_DrawLine(x1,y1,x2,y1,Color); LCD_DrawLine(x1,y1,x1,y2,Color); LCD_DrawLine(x1,y2,x2,y2,Color); LCD_DrawLine(x2,y1,x2,y2,Color); } /*******************************************************************************/ //函数:void LCD_Draw_Circle(u16 x0,u16 y0,u8 r) //函数功能:在指定位置画一个指定大小的圆 //输入参数: //(x,y):中心点 //r :半径 //Color;线条颜色 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com /*******************************************************************************/ void LCD_Draw_Circle(u16 x0,u16 y0,u8 r, u16 Color) { int a,b; int di; a=0;b=r; di=3-(r<<1); //判断下个点位置的标志 while(a<=b) { LCD_Fast_DrawPoint(x0+a,y0-b,Color); //5 LCD_Fast_DrawPoint(x0+b,y0-a,Color); //0 LCD_Fast_DrawPoint(x0+b,y0+a,Color); //4 LCD_Fast_DrawPoint(x0+a,y0+b,Color); //6 LCD_Fast_DrawPoint(x0-a,y0+b,Color); //1 LCD_Fast_DrawPoint(x0-b,y0+a,Color); LCD_Fast_DrawPoint(x0-a,y0-b,Color); //2 LCD_Fast_DrawPoint(x0-b,y0-a,Color); //7 a++; //使用Bresenham算法画圆 if(di<0)di +=4*a+6; else { di+=10+4*(a-b); b--; } } } /*******************************************************************************/ //函数:LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u16 color,u8 mode) //函数功能:在指定位置显示一个字符 //输入参数: //x,y:起始坐标 //num:要显示的字符:" "--->"~" //size:字体大小 12/16/24 //color,字符颜色 //mode:叠加方式(1)还是非叠加方式(0) //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com /*******************************************************************************/ void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u16 color,u8 mode) { u8 temp,t1,t; u16 y0=y; u8 csize=(size/8+((size%8)?1:0))*(size/2); //得到字体一个字符对应点阵集所占的字节数 //设置窗口 num=num-' ';//得到偏移后的值 for(t=0;t=lcddev.height)return; //超区域了 if((y-y0)==size) { y=y0; x++; if(x>=lcddev.width)return; //超区域了 break; } } } } /*******************************************************************************/ //函数:u32 LCD_Pow(u8 m,u8 n) //函数功能:m^n函数 //输入参数:两个8位数据 //返回值:m^n次方. //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com /*******************************************************************************/ u32 LCD_Pow(u8 m,u8 n) { u32 result=1; while(n--)result*=m; return result; } /*******************************************************************************/ //函数:void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size,u16 color) //函数功能:显示数字,高位为0,则不显示 //输入参数: //x,y :起点坐标 //num:数值(0~4294967295); //len :数字的位数 //size:字体大小 //color:颜色 //返回值:无 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com /*******************************************************************************/ void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size,u16 color) { u8 t,temp; u8 enshow=0; for(t=0;t=' '))//判断是不是非法字符! { if(x>=width){x=x0;y+=size;} if(y>=height)break;//退出 LCD_ShowChar(x,y,*p,size,color,0); x+=size/2; p++; } } //****************************************************************************************/ //函数:void DisplayButtonDown(u16 x1,u16 y1,u16 x2,u16 y2) //功能描述: 在屏幕显示一凸起的按钮框 //输 入: u16 x1,y1,x2,y2 按钮框左上角和右下角坐标 //输 出: 无 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com /****************************************************************************************/ void DisplayButtonDown(u16 x1,u16 y1,u16 x2,u16 y2) { LCD_DrawLine(x1,y1, x2,y1,GRAY2); //H LCD_DrawLine(x1+1,y1+1,x2,y1+1,GRAY1); //H LCD_DrawLine(x1, y1, x1,y2,GRAY2); //V LCD_DrawLine(x1+1,y1+1,x1+1,y2,GRAY1); //V LCD_DrawLine(x1, y2, x2, y2,WHITE); //H LCD_DrawLine(x2, y1, x2, y2,WHITE); //V } //****************************************************************************************/ //函数:void DisplayButtonUp(u16 x1,u16 y1,u16 x2,u16 y2) //功能描述: 在屏幕显示一凹下的按钮框 //输 入: u16 x1,y1,x2,y2 按钮框左上角和右下角坐标 //输 出: 无 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com /****************************************************************************************/ void DisplayButtonUp(u16 x1,u16 y1,u16 x2,u16 y2) { LCD_DrawLine(x1, y1, x2,y1,WHITE); //H LCD_DrawLine(x1, y1, x1,y2,WHITE); //V LCD_DrawLine(x1+1,y2-1,x2,y2-1,GRAY1); //H LCD_DrawLine(x1, y2, x2,y2,GRAY2); //H LCD_DrawLine(x2-1,y1+1,x2-1,y2,GRAY1); //V LCD_DrawLine(x2 ,y1 ,x2,y2,GRAY2); //V } //****************************************************************************************/ //函数:void Draw_Test(void) //功能描述: 绘制图形函数测试 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com /****************************************************************************************/ void Draw_Test(void) { LCD_Clear(WHITE); //清屏 LCD_DrawLine(20,64, 220,128,RED);//划线函数 LCD_DrawLine(20,128, 220,64,RED);//划线函数 LCD_DrawRectangle(20,64,220,128, BLUE);//绘制方形状 LCD_Draw_Circle(120,96,81, BRED);//绘制圆形 LCD_Draw_Circle(120,96,80, BRED);//绘制圆形 LCD_Draw_Circle(120,96,79, BRED);//绘制圆形 delay_ms(2000);//延时 } //****************************************************************************************/ //函数:void Color_Test(void) //功能描述: 颜色填充显示测试 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com /****************************************************************************************/ void Color_Test(void) { LCD_Clear(GRAY0); //清屏 Draw_Font16B(24,16,BLUE,"1: 颜色填充测试"); LCD_Fill(5,5,lcddev.width-5,lcddev.height-5,RED);//设置一个窗口,写入指定区域颜色 LCD_Fill(20,20,lcddev.width-20,lcddev.height-20,YELLOW);//设置一个窗口,写入指定区域颜色 LCD_Fill(50,50,lcddev.width-50,lcddev.height-50,BLUE);//设置一个窗口,写入指定区域颜色 LCD_Fill(80,100,lcddev.width-80,lcddev.height-80,MAGENTA);//设置一个窗口,写入指定区域颜色 delay_ms(2000); LCD_Clear(WHITE); Draw_Test();//绘图函数测试 delay_ms(300);//延时 LCD_Clear(BLACK); delay_ms(300);//延时 LCD_Clear(RED); delay_ms(300);//延时 LCD_Clear(YELLOW); delay_ms(300);//延时 LCD_Clear(GREEN); delay_ms(300);//延时 LCD_Clear(BLUE); delay_ms(300);//延时 } uint16_t D_Color=BLUE; //点阵颜色 uint16_t B_Color=WHITE; //背景颜色 //****************************************************************************************/ //函数:void Font_Test(void) //功能描述: 字体字形显示测试 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com /****************************************************************************************/ void Font_Test(void) { LCD_Clear(GRAY0); Draw_Font16B(24,16,BLUE,"2: 文字显示测试"); delay_ms(1000); LCD_Clear(GRAY0); Draw_Font24B(16,4,BLACK,"DevEBox-大越创新"); Draw_Font24B(48,32,BLACK,"液晶屏测试"); Draw_Font16B(24,80, BLACK,"嵌入式开发网"); Draw_Font16B(24,96, GREEN,"中文测试"); Draw_Font16B(24,112,BLUE,"专注液晶批发"); Draw_Font16B(24,128,RED, "全程技术支持"); Draw_Font16B(16,144,BLUE,"F: mcudev.taobao.com"); Draw_Font16B(16,160,BLUE,"F: shop389957290.taobao.com"); Draw_Font16B(16,176,RED,"0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz"); delay_ms(3000); LCD_Clear(GRAY0); } //****************************************************************************************/ //函数:void Demo_Menu(void) //功能描述: 演示程序菜单 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com /****************************************************************************************/ void Demo_Menu(void) { LCD_Clear(GRAY0); //清屏 Draw_Font24B(16,4,MAGENTA,"DevEBox-大越创新"); Draw_Font24B(48,32,MAGENTA,"液晶屏测试"); DisplayButtonUp(16,64,224,88); //x1,y1,x2,y2 Draw_Font16B(48,68,BLUE,"1: 颜色填充测试"); DisplayButtonUp(16,104,224,128); //x1,y1,x2,y2 Draw_Font16B(48,108,BLUE,"2: 文字显示测试"); DisplayButtonUp(16,144,224,168); //x1,y1,x2,y2 Draw_Font16B(48,148,BLUE,"3: 图片显示测试"); Draw_Font16B(16,180,RED,"F: mcudev.taobao.com"); Draw_Font16B(16,196,RED,"F: shop389957290.taobao.com"); delay_ms(2000);//延时 Color_Test(); //颜色填充测试 Font_Test(); //字体字形显示测试--使用STM32片上字库 GBK_LibFont_Test(); //GBK字库测试 -(如果使用不带字库的液晶屏版本,此处可以屏蔽,不做字库测试) //Show_Picture(); //显示一张图片 }