ת»»Ϊgb2312±àÂë
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
/***
|
||||
*****************************************************************************************
|
||||
* @file lcd.c
|
||||
* @brief 使用STM32F29本身的控制器驱动液晶屏,一下代码移植于官方 STM32F429I_DISCOVERY
|
||||
* 实验板的例程,并作出相应的修改
|
||||
* @brief ʹ<EFBFBD><EFBFBD>STM32F29<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>´<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD>ڹٷ<EFBFBD> STM32F429I_DISCOVERY
|
||||
* ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*****************************************************************************************
|
||||
*
|
||||
*
|
||||
@@ -14,7 +14,7 @@
|
||||
#include "lcd_rgb.h"
|
||||
#include "mymem.h"
|
||||
|
||||
// 函数:IO口初始化
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IO<EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><EFBFBD>
|
||||
//
|
||||
void LCD_GPIO_Config(void)
|
||||
{
|
||||
@@ -28,7 +28,7 @@ void LCD_GPIO_Config(void)
|
||||
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
|
||||
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
|
||||
|
||||
// LCD 颜色 R 引脚配置
|
||||
// LCD <EFBFBD><EFBFBD>ɫ R <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_PinAFConfig(LTDC_R0_PORT, LTDC_R0_PINSOURCE, GPIO_AF_LTDC);
|
||||
GPIO_PinAFConfig(LTDC_R1_PORT, LTDC_R1_PINSOURCE, GPIO_AF_LTDC);
|
||||
GPIO_PinAFConfig(LTDC_R2_PORT, LTDC_R2_PINSOURCE, GPIO_AF_LTDC);
|
||||
@@ -63,7 +63,7 @@ void LCD_GPIO_Config(void)
|
||||
GPIO_Init(LTDC_R7_PORT, &GPIO_InitStruct);
|
||||
|
||||
|
||||
// LCD 颜色 G 引脚配置
|
||||
// LCD <EFBFBD><EFBFBD>ɫ G <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
GPIO_PinAFConfig(LTDC_G0_PORT, LTDC_G0_PINSOURCE, GPIO_AF_LTDC);
|
||||
GPIO_PinAFConfig(LTDC_G1_PORT, LTDC_G1_PINSOURCE, GPIO_AF_LTDC);
|
||||
@@ -99,7 +99,7 @@ void LCD_GPIO_Config(void)
|
||||
GPIO_Init(LTDC_G7_PORT, &GPIO_InitStruct);
|
||||
|
||||
|
||||
// LCD 颜色 B 引脚配置
|
||||
// LCD <EFBFBD><EFBFBD>ɫ B <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
GPIO_PinAFConfig(LTDC_B0_PORT, LTDC_B0_PINSOURCE, GPIO_AF_LTDC);
|
||||
GPIO_PinAFConfig(LTDC_B1_PORT, LTDC_B1_PINSOURCE, GPIO_AF_LTDC);
|
||||
@@ -135,7 +135,7 @@ void LCD_GPIO_Config(void)
|
||||
GPIO_Init(LTDC_B7_PORT, &GPIO_InitStruct);
|
||||
|
||||
|
||||
//控制线
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_PinAFConfig(LTDC_CLK_PORT, LTDC_CLK_PINSOURCE, GPIO_AF_LTDC);
|
||||
GPIO_PinAFConfig(LTDC_HSYNC_PORT, LTDC_HSYNC_PINSOURCE,GPIO_AF_LTDC);
|
||||
GPIO_PinAFConfig(LTDC_VSYNC_PORT, LTDC_VSYNC_PINSOURCE,GPIO_AF_LTDC);
|
||||
@@ -153,7 +153,7 @@ void LCD_GPIO_Config(void)
|
||||
GPIO_InitStruct.GPIO_Pin = LTDC_DE_PIN;
|
||||
GPIO_Init(LTDC_DE_PORT, &GPIO_InitStruct);
|
||||
|
||||
//背光
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
|
||||
GPIO_InitStruct.GPIO_Pin = LTDC_Black_PIN;
|
||||
GPIO_Init(LTDC_Black_PORT, &GPIO_InitStruct);
|
||||
@@ -201,26 +201,26 @@ static LCD_Struct g_lcd={0};
|
||||
|
||||
|
||||
|
||||
// 函数:初始化LCD控制器
|
||||
// 说明:在emWin初始化里被调用
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>LCD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>emWin<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ﱻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//
|
||||
void LCD_Init(void)
|
||||
{
|
||||
u16 LCD_PLLSAIN = 0; //用于倍频的PLLSAIN参数,可取范围为50~432
|
||||
u8 LCD_PLLSAIR = 3; //用于分频的PLLSAIR参数,可取范围为2~7
|
||||
u8 LCD_CLKDIV = 8; //LCD时钟分频参数,默认设置为8分频,数值上等于RCC_PLLSAIDivR_Div8
|
||||
u16 LCD_PLLSAIN = 0; //<EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD>Ƶ<EFBFBD><EFBFBD>PLLSAIN<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ΧΪ50~432
|
||||
u8 LCD_PLLSAIR = 3; //<EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD>Ƶ<EFBFBD><EFBFBD>PLLSAIR<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ΧΪ2~7
|
||||
u8 LCD_CLKDIV = 8; //LCDʱ<EFBFBD>ӷ<EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ8<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD>RCC_PLLSAIDivR_Div8
|
||||
|
||||
LTDC_InitTypeDef LTDC_InitStruct;
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_LTDC, ENABLE);
|
||||
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2D, ENABLE);
|
||||
|
||||
LCD_GPIO_Config(); //初始化LCD引脚
|
||||
LCD_GPIO_Config(); //<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>LCD<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
LCD_PLLSAIN = LCD_CLK * LCD_PLLSAIR * LCD_CLKDIV; //根据需要使用的LCD时钟计算PLLSAIN参数,可取范围为50~432
|
||||
RCC_PLLSAIConfig(LCD_PLLSAIN,7,LCD_PLLSAIR); //时钟配置
|
||||
RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div8); //LCD时钟分频设置,要和LCD_CLKDIV对应
|
||||
RCC_PLLSAICmd(ENABLE); //使能PLLSAI时钟
|
||||
while(RCC_GetFlagStatus(RCC_FLAG_PLLSAIRDY) == RESET); //等待时钟配置完成
|
||||
LCD_PLLSAIN = LCD_CLK * LCD_PLLSAIR * LCD_CLKDIV; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʹ<EFBFBD>õ<EFBFBD>LCDʱ<EFBFBD>Ӽ<EFBFBD><EFBFBD><EFBFBD>PLLSAIN<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ΧΪ50~432
|
||||
RCC_PLLSAIConfig(LCD_PLLSAIN,7,LCD_PLLSAIR); //ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div8); //LCDʱ<EFBFBD>ӷ<EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>Ҫ<EFBFBD><EFBFBD>LCD_CLKDIV<EFBFBD><EFBFBD>Ӧ
|
||||
RCC_PLLSAICmd(ENABLE); //ʹ<EFBFBD><EFBFBD>PLLSAIʱ<EFBFBD><EFBFBD>
|
||||
while(RCC_GetFlagStatus(RCC_FLAG_PLLSAIRDY) == RESET); //<EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
LTDC_InitStruct.LTDC_HSPolarity = LTDC_HSPolarity_AL;
|
||||
LTDC_InitStruct.LTDC_VSPolarity = LTDC_VSPolarity_AL;
|
||||
@@ -240,11 +240,11 @@ void LCD_Init(void)
|
||||
LTDC_InitStruct.LTDC_TotalWidth =LCD_Width + HBP + HFP;
|
||||
LTDC_InitStruct.LTDC_TotalHeigh =LCD_Height + VBP + VFP;
|
||||
|
||||
LTDC_Init(<DC_InitStruct); //初始化LCD控制器
|
||||
LTDC_Init(<DC_InitStruct); //<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>LCD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
LTDC_ITConfig (LTDC_IT_LI,ENABLE);
|
||||
NVIC_SetPriority(LTDC_IRQn, 0);
|
||||
NVIC_EnableIRQ(LTDC_IRQn);
|
||||
LTDC_Cmd(ENABLE); //使能LCD控制器
|
||||
LTDC_Cmd(ENABLE); //ʹ<EFBFBD><EFBFBD>LCD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
LCD_LayerInit();
|
||||
|
||||
@@ -263,7 +263,7 @@ void LCD_Init(void)
|
||||
|
||||
|
||||
|
||||
// 函数:LCD层设置初始化
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LCD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><EFBFBD>
|
||||
//
|
||||
void LCD_LayerInit(void)
|
||||
{
|
||||
@@ -273,51 +273,51 @@ void LCD_LayerInit(void)
|
||||
LTDC_Layer_InitStruct.LTDC_HorizontalStop = (LCD_Width + HBP);
|
||||
LTDC_Layer_InitStruct.LTDC_VerticalStart = VBP + 1;
|
||||
LTDC_Layer_InitStruct.LTDC_VerticalStop = (LCD_Height + VBP);
|
||||
//LTDC_Layer_InitStruct.LTDC_PixelFormat = LTDC_Pixelformat_ARGB8888; //像素格式设置
|
||||
LTDC_Layer_InitStruct.LTDC_PixelFormat = LTDC_Pixelformat_RGB565; //像素格式设置
|
||||
//LTDC_Layer_InitStruct.LTDC_PixelFormat = LTDC_Pixelformat_ARGB8888; //<EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
LTDC_Layer_InitStruct.LTDC_PixelFormat = LTDC_Pixelformat_RGB565; //<EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
LTDC_Layer_InitStruct.LTDC_ConstantAlpha = 255;
|
||||
LTDC_Layer_InitStruct.LTDC_DefaultColorBlue = 0; // 默认的颜色
|
||||
LTDC_Layer_InitStruct.LTDC_DefaultColorBlue = 0; // Ĭ<EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD>ɫ
|
||||
LTDC_Layer_InitStruct.LTDC_DefaultColorGreen = 0;
|
||||
LTDC_Layer_InitStruct.LTDC_DefaultColorRed = 0;
|
||||
LTDC_Layer_InitStruct.LTDC_DefaultColorAlpha = 0;
|
||||
LTDC_Layer_InitStruct.LTDC_BlendingFactor_1 = LTDC_BlendingFactor1_CA;
|
||||
LTDC_Layer_InitStruct.LTDC_BlendingFactor_2 = LTDC_BlendingFactor2_CA;
|
||||
LTDC_Layer_InitStruct.LTDC_CFBLineNumber = LCD_Height; //显示区域的行数
|
||||
LTDC_Layer_InitStruct.LTDC_CFBStartAdress = LCD_MemoryAdd; //第一层的起始地址
|
||||
LTDC_Layer_InitStruct.LTDC_CFBLineNumber = LCD_Height; //<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
LTDC_Layer_InitStruct.LTDC_CFBStartAdress = LCD_MemoryAdd; //<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ַ
|
||||
|
||||
//这里ARGB8888和RGB888使用相同的计算方式
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ARGB8888<EFBFBD><EFBFBD>RGB888ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD>ļ<EFBFBD><EFBFBD>㷽ʽ
|
||||
{
|
||||
// LTDC_Layer_InitStruct.LTDC_CFBLineLength = ((LCD_Width * 4) + 3); //每行的像素占的总字节数
|
||||
// LTDC_Layer_InitStruct.LTDC_CFBPitch = (LCD_Width * 4); //行间距,某像素的起始处到下一行的起始处的增量
|
||||
LTDC_Layer_InitStruct.LTDC_CFBLineLength = ((LCD_Width * 2) + 3); //每行的像素占的总字节数
|
||||
LTDC_Layer_InitStruct.LTDC_CFBPitch = (LCD_Width * 2); //行间距,某像素的起始处到下一行的起始处的增量
|
||||
// LTDC_Layer_InitStruct.LTDC_CFBLineLength = ((LCD_Width * 4) + 3); //ÿ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD>
|
||||
// LTDC_Layer_InitStruct.LTDC_CFBPitch = (LCD_Width * 4); //<EFBFBD>м<EFBFBD><EFBFBD>࣬ij<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
LTDC_Layer_InitStruct.LTDC_CFBLineLength = ((LCD_Width * 2) + 3); //ÿ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD>
|
||||
LTDC_Layer_InitStruct.LTDC_CFBPitch = (LCD_Width * 2); //<EFBFBD>м<EFBFBD><EFBFBD>࣬ij<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
LTDC_LayerInit(LTDC_Layer1, <DC_Layer_InitStruct); //初始化层1
|
||||
LTDC_LayerCmd(LTDC_Layer1, ENABLE); //使能层1
|
||||
LTDC_LayerInit(LTDC_Layer1, <DC_Layer_InitStruct); //<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
|
||||
LTDC_LayerCmd(LTDC_Layer1, ENABLE); //ʹ<EFBFBD>ܲ<EFBFBD>1
|
||||
|
||||
#if ( LCD_NUM_LAYERS == 2 ) //当定义了双层时
|
||||
#if ( LCD_NUM_LAYERS == 2 ) //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><EFBFBD>ʱ
|
||||
|
||||
LTDC_Layer_InitStruct.LTDC_PixelFormat = ColorMode_1; //像素格式设置
|
||||
LTDC_Layer_InitStruct.LTDC_PixelFormat = ColorMode_1; //<EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
LTDC_Layer_InitStruct.LTDC_BlendingFactor_1 = LTDC_BlendingFactor1_PAxCA;
|
||||
LTDC_Layer_InitStruct.LTDC_BlendingFactor_2 = LTDC_BlendingFactor2_PAxCA;
|
||||
LTDC_Layer_InitStruct.LTDC_CFBStartAdress = LCD_MemoryAdd + LCD_MemoryAdd_OFFSET; //层2的起始地址
|
||||
LTDC_Layer_InitStruct.LTDC_CFBStartAdress = LCD_MemoryAdd + LCD_MemoryAdd_OFFSET; //<EFBFBD><EFBFBD>2<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ַ
|
||||
|
||||
if( ColorMode_1 == LCD_RGB565 || ColorMode_1 == LCD_ARGB1555 ) //判断颜色格式
|
||||
if( ColorMode_1 == LCD_RGB565 || ColorMode_1 == LCD_ARGB1555 ) //<EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD>ʽ
|
||||
{
|
||||
LTDC_Layer_InitStruct.LTDC_CFBLineLength = ((LCD_Width * 2) + 3); //每行的像素占的总字节数
|
||||
LTDC_Layer_InitStruct.LTDC_CFBPitch = (LCD_Width * 2); //行间距,某像素的起始处到下一行的起始处的增量
|
||||
LTDC_Layer_InitStruct.LTDC_CFBLineLength = ((LCD_Width * 2) + 3); //ÿ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD>
|
||||
LTDC_Layer_InitStruct.LTDC_CFBPitch = (LCD_Width * 2); //<EFBFBD>м<EFBFBD><EFBFBD>࣬ij<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
else //这里ARGB8888和RGB888使用相同的计算方式
|
||||
else //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ARGB8888<EFBFBD><EFBFBD>RGB888ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD>ļ<EFBFBD><EFBFBD>㷽ʽ
|
||||
{
|
||||
LTDC_Layer_InitStruct.LTDC_CFBLineLength = ((LCD_Width * 4) + 3); //每行的像素占的总字节数
|
||||
LTDC_Layer_InitStruct.LTDC_CFBPitch = (LCD_Width * 4); //行间距,某像素的起始处到下一行的起始处的增量
|
||||
LTDC_Layer_InitStruct.LTDC_CFBLineLength = ((LCD_Width * 4) + 3); //ÿ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD>
|
||||
LTDC_Layer_InitStruct.LTDC_CFBPitch = (LCD_Width * 4); //<EFBFBD>м<EFBFBD><EFBFBD>࣬ij<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
LTDC_LayerInit(LTDC_Layer2, <DC_Layer_InitStruct); //初始化层2
|
||||
LTDC_LayerCmd(LTDC_Layer2, ENABLE); //使能层2
|
||||
LTDC_LayerInit(LTDC_Layer2, <DC_Layer_InitStruct); //<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
|
||||
LTDC_LayerCmd(LTDC_Layer2, ENABLE); //ʹ<EFBFBD>ܲ<EFBFBD>2
|
||||
#endif
|
||||
|
||||
LTDC_ReloadConfig(LTDC_IMReload); //重新载入参数
|
||||
LTDC_DitherCmd(ENABLE); //使能颜色抖动,24位色必须打开,否则无法达到24位色的效果
|
||||
LTDC_ReloadConfig(LTDC_IMReload); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
LTDC_DitherCmd(ENABLE); //ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>24λɫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ﵽ24λɫ<EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
|
||||
@@ -362,26 +362,26 @@ static int LCD_UpDataWindow(void)
|
||||
else if (win->xs < 0)
|
||||
draw->xs = 0;
|
||||
else if (win->xs >= g_lcd.x_size)
|
||||
real = 0;//在显示区域外
|
||||
real = 0;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
if (win->ys >= 0 && win->ys < g_lcd.y_size)
|
||||
draw->ys = win->ys;
|
||||
else if (win->ys < 0)
|
||||
draw->ys = 0;
|
||||
else if (win->ys >= g_lcd.y_size)
|
||||
real = 0;//在显示区域外
|
||||
real = 0;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
if (win->xe >= 0 && win->xe < g_lcd.x_size)
|
||||
draw->xe = win->xe;
|
||||
else if (win->xe < 0)
|
||||
real = 0;//在显示区域外
|
||||
real = 0;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else if (win->xe>=g_lcd.x_size)
|
||||
draw->xe = g_lcd.x_size-1;
|
||||
|
||||
if (win->ye >= 0 && win->ye < g_lcd.y_size)
|
||||
draw->ye = win->ye;
|
||||
else if (win->ye < 0)
|
||||
real = 0;//在显示区域外
|
||||
real = 0;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else if (win->ye >= g_lcd.y_size)
|
||||
draw->ye = g_lcd.y_size - 1;
|
||||
|
||||
@@ -393,7 +393,7 @@ static int LCD_UpDataWindow(void)
|
||||
|
||||
|
||||
|
||||
//设置活动窗口
|
||||
//<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void LCD_SetWindow (int x_s,int y_s,int x_size,int y_size)
|
||||
{
|
||||
g_lcd.win.xs = x_s;
|
||||
@@ -426,7 +426,7 @@ int LCD_GetLcdSizeY (void)
|
||||
|
||||
|
||||
|
||||
//获取图像显示地址
|
||||
//<EFBFBD><EFBFBD>ȡͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ַ
|
||||
u32 *LCD_GetShowAddr (void)
|
||||
{
|
||||
uint32_t *ret=(u32*)LTDC_Layer1->CFBAR;
|
||||
@@ -434,7 +434,7 @@ u32 *LCD_GetShowAddr (void)
|
||||
return ret;
|
||||
}
|
||||
|
||||
//获取图像绘制地址
|
||||
//<EFBFBD><EFBFBD>ȡͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ַ
|
||||
u32 *LCD_GetDrawAddr (void)
|
||||
{
|
||||
uint32_t *ret=0;
|
||||
@@ -444,7 +444,7 @@ u32 *LCD_GetDrawAddr (void)
|
||||
|
||||
|
||||
|
||||
//设置屏幕显示地址,这个地址直接输出到屏幕上,返回上一个输出到屏幕的地址
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ַ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱַ<D6B7><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD>ĵ<EFBFBD>ַ
|
||||
u32 LCD_SetLayer (u32 AddrIndex)
|
||||
{
|
||||
uint32_t ret=LTDC_Layer1->CFBAR;
|
||||
@@ -466,7 +466,7 @@ u32 LCD_SetLayer (u32 AddrIndex)
|
||||
return ret;
|
||||
}
|
||||
|
||||
//设置绘图地址,所有绘制操作在这个地址执行
|
||||
//<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ͼ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִַ<EFBFBD><EFBFBD>
|
||||
u32 LCD_SetDrawLayer (u32 Index)
|
||||
{
|
||||
u32 ret=(u32)g_lcd.draw;
|
||||
@@ -545,12 +545,12 @@ u32 LCD_GetLcdBkColor16 (void)
|
||||
}
|
||||
|
||||
|
||||
//设置绘制模式,1,不绘制背景,0,绘制背景
|
||||
//<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><EFBFBD><EFBFBD>
|
||||
void LCD_SetLcdDrawMode (int mode)
|
||||
{
|
||||
if (mode)
|
||||
{
|
||||
//g_lcd.DrawMode=1;//此时调用画点函数时不绘制背景色
|
||||
//g_lcd.DrawMode=1;//<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD>㺯<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><EFBFBD><EFBFBD>ɫ
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -650,7 +650,7 @@ void LCD_FillImg(const u16 *pSurf,int x,int y,u16 w,u16 h,int width_bytes,const
|
||||
|
||||
|
||||
|
||||
//层复制
|
||||
//<EFBFBD>㸴<EFBFBD><EFBFBD>
|
||||
void LCD_LayerCopy (int dst,int src)
|
||||
{
|
||||
u32 *p_dst=0;
|
||||
@@ -667,20 +667,20 @@ void LCD_LayerCopy (int dst,int src)
|
||||
}
|
||||
}
|
||||
|
||||
//开始在缓冲区绘制
|
||||
//<EFBFBD><EFBFBD>ʼ<EFBFBD>ڻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void LCD_LayerBufferOn (void)
|
||||
{
|
||||
//为了兼容以前的窗口,保留这个空函数,2019.12.26
|
||||
//Ϊ<EFBFBD>˼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>Ĵ<EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>պ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2019.12.26
|
||||
}
|
||||
|
||||
//显示缓冲层
|
||||
//<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void LCD_LayerBuffShow (void)
|
||||
{
|
||||
//为了兼容以前的窗口,保留这个空函数,2019.12.26
|
||||
//Ϊ<EFBFBD>˼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>Ĵ<EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>պ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2019.12.26
|
||||
}
|
||||
|
||||
|
||||
//进入缓冲区
|
||||
//<EFBFBD><EFBFBD><EFBFBD>뻺<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void LCD_EnterLayerBuff (void)
|
||||
{
|
||||
if (g_lcd.LayerBuffEnter!=0) return;
|
||||
@@ -689,13 +689,13 @@ void LCD_EnterLayerBuff (void)
|
||||
//while(LCD_GetLayerUpdataStat()==0);
|
||||
if (g_lcd.LcdSwitchEn==1)
|
||||
{
|
||||
//如果上次更改还没来得及刷新,不刷新了,这次更改之后一起刷新
|
||||
//如果应用程序中屏幕刷新太快,会造成丢帧
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴθ<EFBFBD><EFBFBD>Ļ<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD>ˢ<EFBFBD>£<EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>θ<EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ˢ<EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļˢ<EFBFBD><EFBFBD>̫<EFBFBD>죬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD>֡
|
||||
g_lcd.LcdSwitchEn=0;
|
||||
}
|
||||
else
|
||||
{
|
||||
//刷新了之后,lcd显示区和绘图区是同一段内存,需要错开
|
||||
//ˢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD>lcd<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬһ<EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if ((u32)g_lcd.show==g_lcdAddrTable[0])
|
||||
{
|
||||
g_lcd.draw=(u16*)g_lcdAddrTable[1];
|
||||
@@ -710,20 +710,20 @@ void LCD_EnterLayerBuff (void)
|
||||
}
|
||||
|
||||
|
||||
//切换层,不用复制显示,播放视频时用
|
||||
//<EFBFBD>л<EFBFBD><EFBFBD>㣬<EFBFBD><EFBFBD><EFBFBD>ø<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶʱ<EFBFBD><EFBFBD>
|
||||
void LCD_SwitchLayerBuff (void)
|
||||
{
|
||||
if (g_lcd.LayerBuffEnter!=0) return;
|
||||
g_lcd.LayerBuffEnter++;
|
||||
if (g_lcd.LcdSwitchEn==1)
|
||||
{
|
||||
//如果上次更改还没来得及刷新,不刷新了,这次更改之后一起刷新
|
||||
//如果应用程序中屏幕刷新太快,会造成丢帧
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴθ<EFBFBD><EFBFBD>Ļ<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD>ˢ<EFBFBD>£<EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>θ<EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ˢ<EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļˢ<EFBFBD><EFBFBD>̫<EFBFBD>죬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD>֡
|
||||
g_lcd.LcdSwitchEn=0;
|
||||
}
|
||||
else
|
||||
{
|
||||
//刷新了之后,lcd显示区和绘图区是同一段内存,需要错开
|
||||
//ˢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD>lcd<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬһ<EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if ((u32)g_lcd.show==g_lcdAddrTable[0])
|
||||
{
|
||||
g_lcd.draw=(u16*)g_lcdAddrTable[1];
|
||||
@@ -737,7 +737,7 @@ void LCD_SwitchLayerBuff (void)
|
||||
|
||||
|
||||
|
||||
//退出缓冲区
|
||||
//<EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void LCD_ExitLayerBuff (void)
|
||||
{
|
||||
g_lcd.show=g_lcd.draw;
|
||||
@@ -747,7 +747,7 @@ void LCD_ExitLayerBuff (void)
|
||||
|
||||
|
||||
|
||||
//获取屏幕刷新状态,1,已刷新
|
||||
//<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>Ļˢ<EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><EFBFBD>
|
||||
int LCD_GetLayerUpdataStat (void)
|
||||
{
|
||||
return !g_lcd.LcdSwitchEn;
|
||||
@@ -755,7 +755,7 @@ int LCD_GetLayerUpdataStat (void)
|
||||
|
||||
|
||||
|
||||
//填充一条线,以窗口的起点为起点,最大填充到窗口的终点位置
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>Դ<EFBFBD><D4B4>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䵽<EFBFBD><E4B5BD><EFBFBD>ڵ<EFBFBD><DAB5>յ<EFBFBD>λ<EFBFBD><CEBB>
|
||||
static void LCD_FillLine16(int x,int y, int xe,u16 *buff, int xsize)
|
||||
{
|
||||
if (g_lcd.effective == 0) return;
|
||||
@@ -766,7 +766,7 @@ static void LCD_FillLine16(int x,int y, int xe,u16 *buff, int xsize)
|
||||
int mx = x;
|
||||
if (mx < g_lcd.realwin.xs) mx = g_lcd.realwin.xs;
|
||||
buff += mx - x; xsize -= mx - x;
|
||||
//不超过指定范围
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
|
||||
// if (mx + xsize - 1 > xe) xsize=xe - mx + 1;
|
||||
if (xsize>g_lcd.realwin.xe-mx+1) xsize=g_lcd.realwin.xe-mx+1;
|
||||
for (int i = 0; i < xsize; i++)
|
||||
@@ -774,9 +774,9 @@ static void LCD_FillLine16(int x,int y, int xe,u16 *buff, int xsize)
|
||||
}
|
||||
|
||||
|
||||
//把图像填充到屏幕的活动窗口中,
|
||||
//参数xsize,图像的宽度
|
||||
//参数ysize,图像的高度
|
||||
//<EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䵽<EFBFBD><EFBFBD>Ļ<EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>xsize,ͼ<EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ysize,ͼ<EFBFBD><EFBFBD><EFBFBD>ĸ߶<EFBFBD>
|
||||
static void LCD_FillRect16(int xs,int ys,int xe,int ye,u16 *buff, int xsize, int ysize)
|
||||
{
|
||||
ys += g_lcd.win.ys;
|
||||
@@ -815,16 +815,16 @@ static void LCD_FillRect16(int xs,int ys,int xe,int ye,u16 *buff, int xsize, int
|
||||
//DMA2D_DrawBitmap_RGB565(LCD_GetDrawAddr(),g_lcd_struct.WindowSrcX,g_lcd_struct.WindowSrcY,lcd_xsize,ysize,xsize*2,(u8*)buff);
|
||||
}
|
||||
|
||||
//把图像偏移之后填充到屏幕的活动窗口中,
|
||||
//参数x_s,图像要显示的横向起始坐标
|
||||
//参数y_s,图像要显示的纵向起始坐标
|
||||
//参数xsize,图像的宽度
|
||||
//参数ysize,图像的高度
|
||||
//<EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䵽<EFBFBD><EFBFBD>Ļ<EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>x_s,ͼ<><CDBC>Ҫ<EFBFBD><D2AA>ʾ<EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>y_s<EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>xsize,ͼ<EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ysize,ͼ<EFBFBD><EFBFBD><EFBFBD>ĸ߶<EFBFBD>
|
||||
static void LCD_FillRectOff16(int xs,int ys,int xe,int ye,u16 *buff, int x_s, int y_s, int xsize, int ysize)
|
||||
{
|
||||
//图像偏移
|
||||
//ͼ<EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>
|
||||
int offset = y_s*xsize + x_s;
|
||||
//图像相对屏幕偏移
|
||||
//ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļƫ<EFBFBD><EFBFBD>
|
||||
//offset += xs + ys*xsize;
|
||||
LCD_FillRect16(xs,ys,xe,ye,buff + offset, xsize, ysize - y_s);
|
||||
}
|
||||
@@ -832,7 +832,7 @@ static void LCD_FillRectOff16(int xs,int ys,int xe,int ye,u16 *buff, int x_s, in
|
||||
|
||||
void LCD_FillRectOff16At(int lcd_xs, int lcd_ys, int lcd_xsize, int lcd_ysize, u16 *buff, int xs, int ys, int xsize, int ysize)
|
||||
{
|
||||
//绘图
|
||||
//<EFBFBD><EFBFBD>ͼ
|
||||
LCD_FillRectOff16(lcd_xs,lcd_ys,lcd_xs+lcd_xsize-1,lcd_ys+lcd_ysize-1,buff, xs, ys, xsize, ysize);
|
||||
}
|
||||
|
||||
@@ -841,9 +841,9 @@ void LCD_FillRectOff16At(int lcd_xs, int lcd_ys, int lcd_xsize, int lcd_ysize, u
|
||||
static int LCD_FillImg_ARGB(const void *pSurf,int x,int y,u16 w,u16 h,int width_bytes,const u8 *bits,u32 color_format);
|
||||
|
||||
|
||||
//把图像填充到屏幕的活动窗口中,
|
||||
//参数xsize,图像的宽度
|
||||
//参数ysize,图像的高度
|
||||
//<EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䵽<EFBFBD><EFBFBD>Ļ<EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>xsize,ͼ<EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ysize,ͼ<EFBFBD><EFBFBD><EFBFBD>ĸ߶<EFBFBD>
|
||||
static void LCD_FillRectAlpha(int xs,int ys,int xe,int ye,u32 *buff, int xsize, int ysize)
|
||||
{
|
||||
ys += g_lcd.win.ys;
|
||||
@@ -880,9 +880,9 @@ static void LCD_FillRectAlpha(int xs,int ys,int xe,int ye,u32 *buff, int xsize,
|
||||
|
||||
static void LCD_FillRectOffAlpha(int xs,int ys,int xe,int ye,u32 *buff, int x_s, int y_s, int xsize, int ysize)
|
||||
{
|
||||
//图像偏移
|
||||
//ͼ<EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>
|
||||
int offset = y_s*xsize + x_s;
|
||||
//图像相对屏幕偏移
|
||||
//ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļƫ<EFBFBD><EFBFBD>
|
||||
//offset += xs + ys*xsize;
|
||||
LCD_FillRectAlpha(xs,ys,xe,ye,buff + offset, xsize, ysize - y_s);
|
||||
}
|
||||
@@ -890,7 +890,7 @@ static void LCD_FillRectOffAlpha(int xs,int ys,int xe,int ye,u32 *buff, int x_s,
|
||||
|
||||
void LCD_FillRectOffAtAlpha(int lcd_xs, int lcd_ys, int lcd_xsize, int lcd_ysize, void *buff, int xs, int ys, int xsize, int ysize)
|
||||
{
|
||||
//绘图
|
||||
//<EFBFBD><EFBFBD>ͼ
|
||||
LCD_FillRectOffAlpha(lcd_xs,lcd_ys,lcd_xs+lcd_xsize-1,lcd_ys+lcd_ysize-1,buff, xs, ys, xsize, ysize);
|
||||
}
|
||||
|
||||
@@ -900,8 +900,8 @@ void LCD_FillRectOffAtAlpha(int lcd_xs, int lcd_ys, int lcd_xsize, int lcd_ysize
|
||||
|
||||
|
||||
|
||||
//画点,不会进行安全性检查,调用时要保证要画的点不会超出屏幕
|
||||
//参数mode,1,画前景色,0,画背景色
|
||||
//<EFBFBD><EFBFBD><EFBFBD>㣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>ȫ<EFBFBD>Լ<EFBFBD><EFBFBD>飬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱҪ<EFBFBD><EFBFBD>֤Ҫ<EFBFBD><EFBFBD><EFBFBD>ĵ㲻<EFBFBD>ᳬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>mode,1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
||||
void LCD_DrawPoint (int x,int y,u32 mode)
|
||||
{
|
||||
if (g_lcd.effective == 0) return;
|
||||
@@ -914,7 +914,7 @@ void LCD_DrawPoint (int x,int y,u32 mode)
|
||||
}
|
||||
|
||||
|
||||
//安全画点,以屏幕窗口的坐标为原点,并且画点不会超出窗口范围
|
||||
//<EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD>㣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊԭ<EFBFBD>㣬<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>㲻<EFBFBD>ᳬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD>Χ
|
||||
void LCD_DrawPointSafe (int x,int y,u32 mode)
|
||||
{
|
||||
if (g_lcd.effective == 0) return;
|
||||
@@ -928,8 +928,8 @@ void LCD_DrawPointSafe (int x,int y,u32 mode)
|
||||
|
||||
|
||||
|
||||
//安全画点,以屏幕窗口的坐标为原点,并且画点不会超出窗口范围
|
||||
//以指定颜色画点,而不是前景色
|
||||
//<EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD>㣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊԭ<EFBFBD>㣬<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>㲻<EFBFBD>ᳬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD>Χ
|
||||
//<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD>㣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>ɫ
|
||||
void LCD_DrawPointSafeColor (int x,int y,u16 color)
|
||||
{
|
||||
if (g_lcd.effective == 0) return;
|
||||
@@ -942,11 +942,11 @@ void LCD_DrawPointSafeColor (int x,int y,u16 color)
|
||||
|
||||
|
||||
|
||||
//快速ALPHA BLENDING算法.
|
||||
//src:源颜色
|
||||
//dst:目标颜色
|
||||
//alpha:透明程度(0~32)
|
||||
//返回值:混合后的颜色.
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ALPHA BLENDING<EFBFBD>㷨.
|
||||
//src:Դ<EFBFBD><EFBFBD>ɫ
|
||||
//dst:Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
||||
//alpha:<EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>(0~32)
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ:<3A><><EFBFBD>Ϻ<EFBFBD><CFBA><EFBFBD><EFBFBD><EFBFBD>ɫ.
|
||||
static u16 alpha_blend565(u16 src,u16 dst,u8 alpha)
|
||||
{
|
||||
u32 src2;
|
||||
@@ -963,7 +963,7 @@ static u16 alpha_blend565(u16 src,u16 dst,u8 alpha)
|
||||
}
|
||||
|
||||
|
||||
//以指定色透明度画点0~32
|
||||
//<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD>0~32
|
||||
void LCD_DrawPointSafeColorAlpha (int x,int y,u16 color,u8 alpha)
|
||||
{
|
||||
if (g_lcd.effective == 0) return;
|
||||
@@ -983,7 +983,7 @@ void LCD_DrawPointSafeColorAlpha (int x,int y,u16 color,u8 alpha)
|
||||
|
||||
|
||||
|
||||
//填充矩形,已窗口坐标为原点
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><EFBFBD>Ѵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊԭ<EFBFBD><EFBFBD>
|
||||
void LCD_FillRectByColor (int x,int y,int x_size,int y_size)
|
||||
{
|
||||
// for (int i=y;i<y+y_size;i++)
|
||||
@@ -1094,7 +1094,7 @@ static int LCD_FillImg_ARGB(const void *pSurf,int x,int y,u16 w,u16 h,int width_
|
||||
|
||||
|
||||
|
||||
//以透明度填充矩形,已窗口坐标为原点
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><EFBFBD>Ѵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊԭ<EFBFBD><EFBFBD>
|
||||
void LCD_FillRectByColorAlpha (int x,int y,int x_size,int y_size,u8 alpha)
|
||||
{
|
||||
// for (int i=y;i<y+y_size;i++)
|
||||
@@ -1130,10 +1130,10 @@ void LCD_FillRectByColorAlpha (int x,int y,int x_size,int y_size,u8 alpha)
|
||||
|
||||
|
||||
|
||||
//求矩形在屏幕中的显示区域
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
static int LCD_RectIntersection(LCD_WindowStruct *out,int x,int y,int xsize,int ysize)
|
||||
{
|
||||
//取得新矩形的左上角
|
||||
//ȡ<EFBFBD><EFBFBD><EFBFBD>¾<EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD>
|
||||
int x_s = g_lcd.realwin.xs;
|
||||
int y_s = g_lcd.realwin.ys;
|
||||
if (x_s<x)
|
||||
@@ -1141,7 +1141,7 @@ static int LCD_RectIntersection(LCD_WindowStruct *out,int x,int y,int xsize,int
|
||||
if (y_s<y)
|
||||
y_s = y;
|
||||
|
||||
//取得新矩形的右下角
|
||||
//ȡ<EFBFBD><EFBFBD><EFBFBD>¾<EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD>
|
||||
int x_e = g_lcd.realwin.xe;
|
||||
int y_e = g_lcd.realwin.ye;
|
||||
if (x_e>x + xsize - 1)
|
||||
@@ -1170,7 +1170,7 @@ static int LCD_RectIntersection(LCD_WindowStruct *out,int x,int y,int xsize,int
|
||||
|
||||
|
||||
|
||||
//清除矩形内的显示
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD>ʾ
|
||||
void LCD_ClearRect(int x, int y, int xsize, int ysize)
|
||||
{
|
||||
if (g_lcd.effective == 0) return;
|
||||
@@ -1197,7 +1197,7 @@ void LCD_ClearRect(int x, int y, int xsize, int ysize)
|
||||
|
||||
|
||||
|
||||
//获取指定矩形空间的屏幕颜色,屏幕的绝对坐标
|
||||
//<EFBFBD><EFBFBD>ȡָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>οռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD>ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void LCD_GetColors (u16 *buff,int x_s,int y_s,int x_size,int y_size)
|
||||
{
|
||||
u16 *addr=g_lcd.draw;
|
||||
|
Reference in New Issue
Block a user