forked from 423A35C7/STM32CubeMX-Keil_uVision5
第十次实验-LCD显示屏
This commit is contained in:
77
exp10-LCD/Core/Src/gpio.c
Normal file
77
exp10-LCD/Core/Src/gpio.c
Normal file
@@ -0,0 +1,77 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file gpio.c
|
||||
* @brief This file provides code for the configuration
|
||||
* of all used GPIO pins.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2024 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "gpio.h"
|
||||
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Configure GPIO */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
|
||||
/** Configure pins as
|
||||
* Analog
|
||||
* Input
|
||||
* Output
|
||||
* EVENT_OUT
|
||||
* EXTI
|
||||
*/
|
||||
void MX_GPIO_Init(void)
|
||||
{
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
|
||||
/* GPIO Ports Clock Enable */
|
||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOF_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(TickClock_LED_GPIO_Port, TickClock_LED_Pin, GPIO_PIN_SET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOB, LCD_RST_Pin|LCD_CS_Pin|LCD_DC_Pin, GPIO_PIN_RESET);
|
||||
|
||||
/*Configure GPIO pin : PtPin */
|
||||
GPIO_InitStruct.Pin = TickClock_LED_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(TickClock_LED_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : PBPin PBPin PBPin */
|
||||
GPIO_InitStruct.Pin = LCD_RST_Pin|LCD_CS_Pin|LCD_DC_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 2 */
|
||||
|
||||
/* USER CODE END 2 */
|
||||
762
exp10-LCD/Core/Src/gui.c
Normal file
762
exp10-LCD/Core/Src/gui.c
Normal file
@@ -0,0 +1,762 @@
|
||||
/****************************************************************************************************
|
||||
//=========================================<3D><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>================================================//
|
||||
// LCDģ<44><C4A3> STM32<33><32>Ƭ<EFBFBD><C6AC>
|
||||
// VCC <20><> DC5V/3.3V //<2F><>Դ
|
||||
// GND <20><> GND //<2F><>Դ<EFBFBD><D4B4>
|
||||
//=======================================Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD>==========================================//
|
||||
//<2F><>ģ<EFBFBD><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪSPI<50><49><EFBFBD><EFBFBD>
|
||||
// LCDģ<44><C4A3> STM32<33><32>Ƭ<EFBFBD><C6AC>
|
||||
// SDA <20><> PB15 //Һ<><D2BA><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>ź<EFBFBD>
|
||||
//=======================================Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD>==========================================//
|
||||
// LCDģ<44><C4A3> STM32<33><32>Ƭ<EFBFBD><C6AC>
|
||||
// LED <20><> PB9 //Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>źţ<C5BA><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>5V<35><56>3.3V
|
||||
// SCK <20><> PB13 //Һ<><D2BA><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ź<EFBFBD>
|
||||
// A0 <20><> PB10 //Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||||
// RESET <20><> PB12 //Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||||
// CS <20><> PB11 //Һ<><D2BA><EFBFBD><EFBFBD>Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||||
//=========================================<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=========================================//
|
||||
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD>鲻<EFBFBD><E9B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܻ<EFBFBD><DCBB>ߴ<EFBFBD><DFB4>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// LCDģ<44><C4A3> STM32<33><32>Ƭ<EFBFBD><C6AC>
|
||||
// T_IRQ <20><> PC10 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>ź<EFBFBD>
|
||||
// T_DO <20><> PC2 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI<50><49><EFBFBD>߶<EFBFBD><DFB6>ź<EFBFBD>
|
||||
// T_DIN <20><> PC3 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD>д<EFBFBD>ź<EFBFBD>
|
||||
// T_CS <20><> PC13 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||||
// T_CLK <20><> PC0 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ź<EFBFBD>
|
||||
**************************************************************************************************/
|
||||
/* @attention
|
||||
*
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
||||
* TIME. AS A RESULT, QD electronic SHALL NOT BE HELD LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
||||
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
||||
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
**************************************************************************************************/
|
||||
#include "lcd.h"
|
||||
#include "string.h"
|
||||
#include "font.h"
|
||||
#include "gui.h"
|
||||
|
||||
/*******************************************************************
|
||||
* @name :void GUI_DrawPoint(uint16_t x,uint16_t y,uint16_t color)
|
||||
* @date :2018-08-09
|
||||
* @function :draw a point in LCD screen
|
||||
* @parameters :x:the x coordinate of the point
|
||||
y:the y coordinate of the point
|
||||
color:the color value of the point
|
||||
* @retvalue :None
|
||||
********************************************************************/
|
||||
void GUI_DrawPoint(uint16_t x,uint16_t y,uint16_t color)
|
||||
{
|
||||
LCD_SetCursor(x,y);//<2F><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>λ<EFBFBD><CEBB>
|
||||
Lcd_WriteData_16Bit(color);
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
* @name :void LCD_Fill(uint16_t sx,uint16_t sy,uint16_t ex,uint16_t ey,uint16_t color)
|
||||
* @date :2018-08-09
|
||||
* @function :fill the specified area
|
||||
* @parameters :sx:the bebinning x coordinate of the specified area
|
||||
sy:the bebinning y coordinate of the specified area
|
||||
ex:the ending x coordinate of the specified area
|
||||
ey:the ending y coordinate of the specified area
|
||||
color:the filled color value
|
||||
* @retvalue :None
|
||||
********************************************************************/
|
||||
void LCD_Fill(uint16_t sx,uint16_t sy,uint16_t ex,uint16_t ey,uint16_t color)
|
||||
{
|
||||
uint16_t i,j;
|
||||
uint16_t width=ex-sx+1; //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>
|
||||
uint16_t height=ey-sy+1; //<2F>߶<EFBFBD>
|
||||
LCD_SetWindows(sx,sy,ex,ey); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||||
for(i=0;i<height;i++)
|
||||
{
|
||||
for(j=0;j<width;j++)
|
||||
Lcd_WriteData_16Bit(color); //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//<2F>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊȫ<CEAA><C8AB>
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
* @name :void LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
|
||||
* @date :2018-08-09
|
||||
* @function :Draw a line between two points
|
||||
* @parameters :x1:the bebinning x coordinate of the line
|
||||
y1:the bebinning y coordinate of the line
|
||||
x2:the ending x coordinate of the line
|
||||
y2:the ending y coordinate of the line
|
||||
* @retvalue :None
|
||||
********************************************************************/
|
||||
void LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
|
||||
{
|
||||
uint16_t t;
|
||||
int xerr=0,yerr=0,delta_x,delta_y,distance;
|
||||
int incx,incy,uRow,uCol;
|
||||
|
||||
delta_x=x2-x1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
delta_y=y2-y1;
|
||||
uRow=x1;
|
||||
uCol=y1;
|
||||
if(delta_x>0)incx=1; //<2F><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else if(delta_x==0)incx=0;//<2F><>ֱ<EFBFBD><D6B1>
|
||||
else {incx=-1;delta_x=-delta_x;}
|
||||
if(delta_y>0)incy=1;
|
||||
else if(delta_y==0)incy=0;//ˮƽ<CBAE><C6BD>
|
||||
else{incy=-1;delta_y=-delta_y;}
|
||||
if( delta_x>delta_y)distance=delta_x; //ѡȡ<D1A1><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else distance=delta_y;
|
||||
for(t=0;t<=distance+1;t++ )//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
LCD_DrawPoint(uRow,uCol);//<2F><><EFBFBD><EFBFBD>
|
||||
xerr+=delta_x ;
|
||||
yerr+=delta_y ;
|
||||
if(xerr>distance)
|
||||
{
|
||||
xerr-=distance;
|
||||
uRow+=incx;
|
||||
}
|
||||
if(yerr>distance)
|
||||
{
|
||||
yerr-=distance;
|
||||
uCol+=incy;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
|
||||
* @date :2018-08-09
|
||||
* @function :Draw a rectangle
|
||||
* @parameters :x1:the bebinning x coordinate of the rectangle
|
||||
y1:the bebinning y coordinate of the rectangle
|
||||
x2:the ending x coordinate of the rectangle
|
||||
y2:the ending y coordinate of the rectangle
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
|
||||
{
|
||||
LCD_DrawLine(x1,y1,x2,y1);
|
||||
LCD_DrawLine(x1,y1,x1,y2);
|
||||
LCD_DrawLine(x1,y2,x2,y2);
|
||||
LCD_DrawLine(x2,y1,x2,y2);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void LCD_DrawFillRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
|
||||
* @date :2018-08-09
|
||||
* @function :Filled a rectangle
|
||||
* @parameters :x1:the bebinning x coordinate of the filled rectangle
|
||||
y1:the bebinning y coordinate of the filled rectangle
|
||||
x2:the ending x coordinate of the filled rectangle
|
||||
y2:the ending y coordinate of the filled rectangle
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void LCD_DrawFillRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
|
||||
{
|
||||
LCD_Fill(x1,y1,x2,y2,POINT_COLOR);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void _draw_circle_8(int xc, int yc, int x, int y, uint16_t c)
|
||||
* @date :2018-08-09
|
||||
* @function :8 symmetry circle drawing algorithm (internal call)
|
||||
* @parameters :xc:the x coordinate of the Circular center
|
||||
yc:the y coordinate of the Circular center
|
||||
x:the x coordinate relative to the Circular center
|
||||
y:the y coordinate relative to the Circular center
|
||||
c:the color value of the circle
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void _draw_circle_8(int xc, int yc, int x, int y, uint16_t c)
|
||||
{
|
||||
GUI_DrawPoint(xc + x, yc + y, c);
|
||||
|
||||
GUI_DrawPoint(xc - x, yc + y, c);
|
||||
|
||||
GUI_DrawPoint(xc + x, yc - y, c);
|
||||
|
||||
GUI_DrawPoint(xc - x, yc - y, c);
|
||||
|
||||
GUI_DrawPoint(xc + y, yc + x, c);
|
||||
|
||||
GUI_DrawPoint(xc - y, yc + x, c);
|
||||
|
||||
GUI_DrawPoint(xc + y, yc - x, c);
|
||||
|
||||
GUI_DrawPoint(xc - y, yc - x, c);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void gui_circle(int xc, int yc,uint16_t c,int r, int fill)
|
||||
* @date :2018-08-09
|
||||
* @function :Draw a circle of specified size at a specified location
|
||||
* @parameters :xc:the x coordinate of the Circular center
|
||||
yc:the y coordinate of the Circular center
|
||||
r:Circular radius
|
||||
fill:1-filling,0-no filling
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void gui_circle(int xc, int yc,uint16_t c,int r, int fill)
|
||||
{
|
||||
int x = 0, y = r, yi, d;
|
||||
|
||||
d = 3 - 2 * r;
|
||||
|
||||
|
||||
if (fill)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䣨<EFBFBD><E4A3A8>ʵ<EFBFBD><CAB5>Բ<EFBFBD><D4B2>
|
||||
while (x <= y) {
|
||||
for (yi = x; yi <= y; yi++)
|
||||
_draw_circle_8(xc, yc, x, yi, c);
|
||||
|
||||
if (d < 0) {
|
||||
d = d + 4 * x + 6;
|
||||
} else {
|
||||
d = d + 4 * (x - y) + 10;
|
||||
y--;
|
||||
}
|
||||
x++;
|
||||
}
|
||||
} else
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䣨<EFBFBD><E4A3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2>
|
||||
while (x <= y) {
|
||||
_draw_circle_8(xc, yc, x, y, c);
|
||||
if (d < 0) {
|
||||
d = d + 4 * x + 6;
|
||||
} else {
|
||||
d = d + 4 * (x - y) + 10;
|
||||
y--;
|
||||
}
|
||||
x++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void Draw_Triangel(uint16_t x0,uint16_t y0,uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2)
|
||||
* @date :2018-08-09
|
||||
* @function :Draw a triangle at a specified position
|
||||
* @parameters :x0:the bebinning x coordinate of the triangular edge
|
||||
y0:the bebinning y coordinate of the triangular edge
|
||||
x1:the vertex x coordinate of the triangular
|
||||
y1:the vertex y coordinate of the triangular
|
||||
x2:the ending x coordinate of the triangular edge
|
||||
y2:the ending y coordinate of the triangular edge
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void Draw_Triangel(uint16_t x0,uint16_t y0,uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2)
|
||||
{
|
||||
LCD_DrawLine(x0,y0,x1,y1);
|
||||
LCD_DrawLine(x1,y1,x2,y2);
|
||||
LCD_DrawLine(x2,y2,x0,y0);
|
||||
}
|
||||
|
||||
static void _swap(uint16_t *a, uint16_t *b)
|
||||
{
|
||||
uint16_t tmp;
|
||||
tmp = *a;
|
||||
*a = *b;
|
||||
*b = tmp;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void Fill_Triangel(uint16_t x0,uint16_t y0,uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2)
|
||||
* @date :2018-08-09
|
||||
* @function :filling a triangle at a specified position
|
||||
* @parameters :x0:the bebinning x coordinate of the triangular edge
|
||||
y0:the bebinning y coordinate of the triangular edge
|
||||
x1:the vertex x coordinate of the triangular
|
||||
y1:the vertex y coordinate of the triangular
|
||||
x2:the ending x coordinate of the triangular edge
|
||||
y2:the ending y coordinate of the triangular edge
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void Fill_Triangel(uint16_t x0,uint16_t y0,uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2)
|
||||
{
|
||||
uint16_t a, b, y, last;
|
||||
int dx01, dy01, dx02, dy02, dx12, dy12;
|
||||
long sa = 0;
|
||||
long sb = 0;
|
||||
if (y0 > y1)
|
||||
{
|
||||
_swap(&y0,&y1);
|
||||
_swap(&x0,&x1);
|
||||
}
|
||||
if (y1 > y2)
|
||||
{
|
||||
_swap(&y2,&y1);
|
||||
_swap(&x2,&x1);
|
||||
}
|
||||
if (y0 > y1)
|
||||
{
|
||||
_swap(&y0,&y1);
|
||||
_swap(&x0,&x1);
|
||||
}
|
||||
if(y0 == y2)
|
||||
{
|
||||
a = b = x0;
|
||||
if(x1 < a)
|
||||
{
|
||||
a = x1;
|
||||
}
|
||||
else if(x1 > b)
|
||||
{
|
||||
b = x1;
|
||||
}
|
||||
if(x2 < a)
|
||||
{
|
||||
a = x2;
|
||||
}
|
||||
else if(x2 > b)
|
||||
{
|
||||
b = x2;
|
||||
}
|
||||
LCD_Fill(a,y0,b,y0,POINT_COLOR);
|
||||
return;
|
||||
}
|
||||
dx01 = x1 - x0;
|
||||
dy01 = y1 - y0;
|
||||
dx02 = x2 - x0;
|
||||
dy02 = y2 - y0;
|
||||
dx12 = x2 - x1;
|
||||
dy12 = y2 - y1;
|
||||
|
||||
if(y1 == y2)
|
||||
{
|
||||
last = y1;
|
||||
}
|
||||
else
|
||||
{
|
||||
last = y1-1;
|
||||
}
|
||||
for(y=y0; y<=last; y++)
|
||||
{
|
||||
a = x0 + sa / dy01;
|
||||
b = x0 + sb / dy02;
|
||||
sa += dx01;
|
||||
sb += dx02;
|
||||
if(a > b)
|
||||
{
|
||||
_swap(&a,&b);
|
||||
}
|
||||
LCD_Fill(a,y,b,y,POINT_COLOR);
|
||||
}
|
||||
sa = dx12 * (y - y1);
|
||||
sb = dx02 * (y - y0);
|
||||
for(; y<=y2; y++)
|
||||
{
|
||||
a = x1 + sa / dy12;
|
||||
b = x0 + sb / dy02;
|
||||
sa += dx12;
|
||||
sb += dx02;
|
||||
if(a > b)
|
||||
{
|
||||
_swap(&a,&b);
|
||||
}
|
||||
LCD_Fill(a,y,b,y,POINT_COLOR);
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void LCD_ShowChar(uint16_t x,uint16_t y,uint16_t fc, uint16_t bc, uint8_t num,uint8_t size,uint8_t mode)
|
||||
* @date :2018-08-09
|
||||
* @function :Display a single English character
|
||||
* @parameters :x:the bebinning x coordinate of the Character display position
|
||||
y:the bebinning y coordinate of the Character display position
|
||||
fc:the color value of display character
|
||||
bc:the background color of display character
|
||||
num:the ascii code of display character(0~94)
|
||||
size:the size of display character
|
||||
mode:0-no overlying,1-overlying
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void LCD_ShowChar(uint16_t x,uint16_t y,uint16_t fc, uint16_t bc, uint8_t num,uint8_t size,uint8_t mode)
|
||||
{
|
||||
uint8_t temp;
|
||||
uint8_t pos,t;
|
||||
uint16_t colortemp=POINT_COLOR;
|
||||
|
||||
num=num-' ';//<2F>õ<EFBFBD>ƫ<EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>ֵ
|
||||
LCD_SetWindows(x,y,x+size/2-1,y+size-1);//<2F><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||||
if(!mode) //<2F>ǵ<EFBFBD><C7B5>ӷ<EFBFBD>ʽ
|
||||
{
|
||||
for(pos=0;pos<size;pos++)
|
||||
{
|
||||
if(size==12)temp=asc2_1206[num][pos];//<2F><><EFBFBD><EFBFBD>1206<30><36><EFBFBD><EFBFBD>
|
||||
else temp=asc2_1608[num][pos]; //<2F><><EFBFBD><EFBFBD>1608<30><38><EFBFBD><EFBFBD>
|
||||
for(t=0;t<size/2;t++)
|
||||
{
|
||||
if(temp&0x01)Lcd_WriteData_16Bit(fc);
|
||||
else Lcd_WriteData_16Bit(bc);
|
||||
temp>>=1;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}else//<2F><><EFBFBD>ӷ<EFBFBD>ʽ
|
||||
{
|
||||
for(pos=0;pos<size;pos++)
|
||||
{
|
||||
if(size==12)temp=asc2_1206[num][pos];//<2F><><EFBFBD><EFBFBD>1206<30><36><EFBFBD><EFBFBD>
|
||||
else temp=asc2_1608[num][pos]; //<2F><><EFBFBD><EFBFBD>1608<30><38><EFBFBD><EFBFBD>
|
||||
for(t=0;t<size/2;t++)
|
||||
{
|
||||
POINT_COLOR=fc;
|
||||
if(temp&0x01)LCD_DrawPoint(x+t,y+pos);//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
temp>>=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
POINT_COLOR=colortemp;
|
||||
LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//<2F>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>Ϊȫ<CEAA><C8AB>
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void LCD_ShowString(uint16_t x,uint16_t y,uint8_t size,uint8_t *p,uint8_t mode)
|
||||
* @date :2018-08-09
|
||||
* @function :Display English string
|
||||
* @parameters :x:the bebinning x coordinate of the English string
|
||||
y:the bebinning y coordinate of the English string
|
||||
p:the start address of the English string
|
||||
size:the size of display character
|
||||
mode:0-no overlying,1-overlying
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void LCD_ShowString(uint16_t x,uint16_t y,uint8_t size,uint8_t *p,uint8_t mode)
|
||||
{
|
||||
while((*p<='~')&&(*p>=' '))//<2F>ж<EFBFBD><D0B6>Dz<EFBFBD><C7B2>ǷǷ<C7B7><C7B7>ַ<EFBFBD>!
|
||||
{
|
||||
if(x>(lcddev.width-1)||y>(lcddev.height-1))
|
||||
return;
|
||||
LCD_ShowChar(x,y,POINT_COLOR,BACK_COLOR,*p,size,mode);
|
||||
x+=size/2;
|
||||
p++;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :uint32_t mypow(uint8_t m,uint8_t n)
|
||||
* @date :2018-08-09
|
||||
* @function :get the nth power of m (internal call)
|
||||
* @parameters :m:the multiplier
|
||||
n:the power
|
||||
* @retvalue :the nth power of m
|
||||
******************************************************************************/
|
||||
uint32_t mypow(uint8_t m,uint8_t n)
|
||||
{
|
||||
uint32_t result=1;
|
||||
while(n--)result*=m;
|
||||
return result;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void LCD_ShowNum(uint16_t x,uint16_t y,uint32_t num,uint8_t len,uint8_t size)
|
||||
* @date :2018-08-09
|
||||
* @function :Display number
|
||||
* @parameters :x:the bebinning x coordinate of the number
|
||||
y:the bebinning y coordinate of the number
|
||||
num:the number(0~4294967295)
|
||||
len:the length of the display number
|
||||
size:the size of display number
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void LCD_ShowNum(uint16_t x,uint16_t y,uint32_t num,uint8_t len,uint8_t size)
|
||||
{
|
||||
uint8_t t,temp;
|
||||
uint8_t enshow=0;
|
||||
for(t=0;t<len;t++)
|
||||
{
|
||||
temp=(num/mypow(10,len-t-1))%10;
|
||||
if(enshow==0&&t<(len-1))
|
||||
{
|
||||
if(temp==0)
|
||||
{
|
||||
LCD_ShowChar(x+(size/2)*t,y,POINT_COLOR,BACK_COLOR,' ',size,0);
|
||||
continue;
|
||||
}else enshow=1;
|
||||
|
||||
}
|
||||
LCD_ShowChar(x+(size/2)*t,y,POINT_COLOR,BACK_COLOR,temp+'0',size,0);
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void GUI_DrawFont16(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *s,uint8_t mode)
|
||||
* @date :2018-08-09
|
||||
* @function :Display a single 16x16 Chinese character
|
||||
* @parameters :x:the bebinning x coordinate of the Chinese character
|
||||
y:the bebinning y coordinate of the Chinese character
|
||||
fc:the color value of Chinese character
|
||||
bc:the background color of Chinese character
|
||||
s:the start address of the Chinese character
|
||||
mode:0-no overlying,1-overlying
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void GUI_DrawFont16(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *s,uint8_t mode)
|
||||
{
|
||||
uint8_t i,j;
|
||||
uint16_t k;
|
||||
uint16_t HZnum;
|
||||
uint16_t x0=x;
|
||||
HZnum=sizeof(tfont16)/sizeof(typFNT_GB16); //<2F>Զ<EFBFBD>ͳ<EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
||||
|
||||
|
||||
for (k=0;k<HZnum;k++)
|
||||
{
|
||||
if ((tfont16[k].Index[0]==*(s))&&(tfont16[k].Index[1]==*(s+1)))
|
||||
{ LCD_SetWindows(x,y,x+16-1,y+16-1);
|
||||
for(i=0;i<16*2;i++)
|
||||
{
|
||||
for(j=0;j<8;j++)
|
||||
{
|
||||
if(!mode) //<2F>ǵ<EFBFBD><C7B5>ӷ<EFBFBD>ʽ
|
||||
{
|
||||
if(tfont16[k].Msk[i]&(0x80>>j)) Lcd_WriteData_16Bit(fc);
|
||||
else Lcd_WriteData_16Bit(bc);
|
||||
}
|
||||
else
|
||||
{
|
||||
POINT_COLOR=fc;
|
||||
if(tfont16[k].Msk[i]&(0x80>>j)) LCD_DrawPoint(x,y);//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
x++;
|
||||
if((x-x0)==16)
|
||||
{
|
||||
x=x0;
|
||||
y++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
continue; //<2F><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>ȡģ<C8A1><C4A3><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0>
|
||||
}
|
||||
|
||||
LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//<2F>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>Ϊȫ<CEAA><C8AB>
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void GUI_DrawFont24(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *s,uint8_t mode)
|
||||
* @date :2018-08-09
|
||||
* @function :Display a single 24x24 Chinese character
|
||||
* @parameters :x:the bebinning x coordinate of the Chinese character
|
||||
y:the bebinning y coordinate of the Chinese character
|
||||
fc:the color value of Chinese character
|
||||
bc:the background color of Chinese character
|
||||
s:the start address of the Chinese character
|
||||
mode:0-no overlying,1-overlying
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void GUI_DrawFont24(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *s,uint8_t mode)
|
||||
{
|
||||
uint8_t i,j;
|
||||
uint16_t k;
|
||||
uint16_t HZnum;
|
||||
uint16_t x0=x;
|
||||
HZnum=sizeof(tfont24)/sizeof(typFNT_GB24); //<2F>Զ<EFBFBD>ͳ<EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
||||
|
||||
for (k=0;k<HZnum;k++)
|
||||
{
|
||||
if ((tfont24[k].Index[0]==*(s))&&(tfont24[k].Index[1]==*(s+1)))
|
||||
{ LCD_SetWindows(x,y,x+24-1,y+24-1);
|
||||
for(i=0;i<24*3;i++)
|
||||
{
|
||||
for(j=0;j<8;j++)
|
||||
{
|
||||
if(!mode) //<2F>ǵ<EFBFBD><C7B5>ӷ<EFBFBD>ʽ
|
||||
{
|
||||
if(tfont24[k].Msk[i]&(0x80>>j)) Lcd_WriteData_16Bit(fc);
|
||||
else Lcd_WriteData_16Bit(bc);
|
||||
}
|
||||
else
|
||||
{
|
||||
POINT_COLOR=fc;
|
||||
if(tfont24[k].Msk[i]&(0x80>>j)) LCD_DrawPoint(x,y);//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
x++;
|
||||
if((x-x0)==24)
|
||||
{
|
||||
x=x0;
|
||||
y++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
continue; //<2F><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>ȡģ<C8A1><C4A3><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0>
|
||||
}
|
||||
|
||||
LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//<2F>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>Ϊȫ<CEAA><C8AB>
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void GUI_DrawFont32(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *s,uint8_t mode)
|
||||
* @date :2018-08-09
|
||||
* @function :Display a single 32x32 Chinese character
|
||||
* @parameters :x:the bebinning x coordinate of the Chinese character
|
||||
y:the bebinning y coordinate of the Chinese character
|
||||
fc:the color value of Chinese character
|
||||
bc:the background color of Chinese character
|
||||
s:the start address of the Chinese character
|
||||
mode:0-no overlying,1-overlying
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void GUI_DrawFont32(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *s,uint8_t mode)
|
||||
{
|
||||
uint8_t i,j;
|
||||
uint16_t k;
|
||||
uint16_t HZnum;
|
||||
uint16_t x0=x;
|
||||
HZnum=sizeof(tfont32)/sizeof(typFNT_GB32); //<2F>Զ<EFBFBD>ͳ<EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
||||
for (k=0;k<HZnum;k++)
|
||||
{
|
||||
if ((tfont32[k].Index[0]==*(s))&&(tfont32[k].Index[1]==*(s+1)))
|
||||
{ LCD_SetWindows(x,y,x+32-1,y+32-1);
|
||||
for(i=0;i<32*4;i++)
|
||||
{
|
||||
for(j=0;j<8;j++)
|
||||
{
|
||||
if(!mode) //<2F>ǵ<EFBFBD><C7B5>ӷ<EFBFBD>ʽ
|
||||
{
|
||||
if(tfont32[k].Msk[i]&(0x80>>j)) Lcd_WriteData_16Bit(fc);
|
||||
else Lcd_WriteData_16Bit(bc);
|
||||
}
|
||||
else
|
||||
{
|
||||
POINT_COLOR=fc;
|
||||
if(tfont32[k].Msk[i]&(0x80>>j)) LCD_DrawPoint(x,y);//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
x++;
|
||||
if((x-x0)==32)
|
||||
{
|
||||
x=x0;
|
||||
y++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
continue; //<2F><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>ȡģ<C8A1><C4A3><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0>
|
||||
}
|
||||
|
||||
LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//<2F>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>Ϊȫ<CEAA><C8AB>
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void Show_Str(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *str,uint8_t size,uint8_t mode)
|
||||
* @date :2018-08-09
|
||||
* @function :Display Chinese and English strings
|
||||
* @parameters :x:the bebinning x coordinate of the Chinese and English strings
|
||||
y:the bebinning y coordinate of the Chinese and English strings
|
||||
fc:the color value of Chinese and English strings
|
||||
bc:the background color of Chinese and English strings
|
||||
str:the start address of the Chinese and English strings
|
||||
size:the size of Chinese and English strings
|
||||
mode:0-no overlying,1-overlying
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void Show_Str(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *str,uint8_t size,uint8_t mode)
|
||||
{
|
||||
uint16_t x0=x;
|
||||
uint8_t bHz=0; //<2F>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
while(*str!=0)//<2F><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(!bHz)
|
||||
{
|
||||
if(x>(lcddev.width-size/2)||y>(lcddev.height-size))
|
||||
return;
|
||||
if(*str>0x80)bHz=1;//<2F><><EFBFBD><EFBFBD>
|
||||
else //<2F>ַ<EFBFBD>
|
||||
{
|
||||
if(*str==0x0D)//<2F><><EFBFBD>з<EFBFBD><D0B7><EFBFBD>
|
||||
{
|
||||
y+=size;
|
||||
x=x0;
|
||||
str++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(size>16)//<2F>ֿ<EFBFBD><D6BF><EFBFBD>û<EFBFBD>м<EFBFBD><D0BC><EFBFBD>12X24 16X32<33><32>Ӣ<EFBFBD><D3A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>8X16<31><36><EFBFBD><EFBFBD>
|
||||
{
|
||||
LCD_ShowChar(x,y,fc,bc,*str,16,mode);
|
||||
x+=8; //<2F>ַ<EFBFBD>,Ϊȫ<CEAA>ֵ<EFBFBD>һ<EFBFBD><D2BB>
|
||||
}
|
||||
else
|
||||
{
|
||||
LCD_ShowChar(x,y,fc,bc,*str,size,mode);
|
||||
x+=size/2; //<2F>ַ<EFBFBD>,Ϊȫ<CEAA>ֵ<EFBFBD>һ<EFBFBD><D2BB>
|
||||
}
|
||||
}
|
||||
str++;
|
||||
|
||||
}
|
||||
}else//<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(x>(lcddev.width-size)||y>(lcddev.height-size))
|
||||
return;
|
||||
bHz=0;//<2F>к<EFBFBD><D0BA>ֿ<EFBFBD>
|
||||
if(size==32)
|
||||
GUI_DrawFont32(x,y,fc,bc,str,mode);
|
||||
else if(size==24)
|
||||
GUI_DrawFont24(x,y,fc,bc,str,mode);
|
||||
else
|
||||
GUI_DrawFont16(x,y,fc,bc,str,mode);
|
||||
|
||||
str+=2;
|
||||
x+=size;//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void Gui_StrCenter(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *str,uint8_t size,uint8_t mode)
|
||||
* @date :2018-08-09
|
||||
* @function :Centered display of English and Chinese strings
|
||||
* @parameters :x:the bebinning x coordinate of the Chinese and English strings
|
||||
y:the bebinning y coordinate of the Chinese and English strings
|
||||
fc:the color value of Chinese and English strings
|
||||
bc:the background color of Chinese and English strings
|
||||
str:the start address of the Chinese and English strings
|
||||
size:the size of Chinese and English strings
|
||||
mode:0-no overlying,1-overlying
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void Gui_StrCenter(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *str,uint8_t size,uint8_t mode)
|
||||
{
|
||||
uint16_t len=strlen((const char *)str);
|
||||
uint16_t x1=(lcddev.width-len*8)/2;
|
||||
Show_Str(x1,y,fc,bc,str,size,mode);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void Gui_Drawbmp16(uint16_t x,uint16_t y,const unsigned char *p)
|
||||
* @date :2018-08-09
|
||||
* @function :Display a 16-bit BMP image
|
||||
* @parameters :x:the bebinning x coordinate of the BMP image
|
||||
y:the bebinning y coordinate of the BMP image
|
||||
p:the start address of image array
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void Gui_Drawbmp16(uint16_t x,uint16_t y,const unsigned char *p) //<2F><>ʾ40*40 QQͼƬ
|
||||
{
|
||||
int i;
|
||||
unsigned char picH,picL;
|
||||
LCD_SetWindows(x,y,x+40-1,y+40-1);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for(i=0;i<40*40;i++)
|
||||
{
|
||||
picL=*(p+i*2); //<2F><><EFBFBD>ݵ<EFBFBD>λ<EFBFBD><CEBB>ǰ
|
||||
picH=*(p+i*2+1);
|
||||
Lcd_WriteData_16Bit(picH<<8|picL);
|
||||
}
|
||||
LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//<2F>ָ<EFBFBD><D6B8><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>Ϊȫ<CEAA><C8AB>
|
||||
}
|
||||
384
exp10-LCD/Core/Src/lcd.c
Normal file
384
exp10-LCD/Core/Src/lcd.c
Normal file
@@ -0,0 +1,384 @@
|
||||
/****************************************************************************************************
|
||||
//=========================================<3D><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>================================================//
|
||||
// LCDģ<44><C4A3> STM32<33><32>Ƭ<EFBFBD><C6AC>
|
||||
// VCC <20><> DC5V/3.3V //<2F><>Դ
|
||||
// GND <20><> GND //<2F><>Դ<EFBFBD><D4B4>
|
||||
//=======================================Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD>==========================================//
|
||||
//<2F><>ģ<EFBFBD><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪSPI<50><49><EFBFBD><EFBFBD>
|
||||
// LCDģ<44><C4A3> STM32<33><32>Ƭ<EFBFBD><C6AC>
|
||||
// SDA <20><> PB15 //Һ<><D2BA><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>ź<EFBFBD>
|
||||
//=======================================Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD>==========================================//
|
||||
// LCDģ<44><C4A3> STM32<33><32>Ƭ<EFBFBD><C6AC>
|
||||
// SCK <20><> PB13 //Һ<><D2BA><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ź<EFBFBD>
|
||||
// A0 <20><> PB10 //Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||||
// RESET <20><> PB12 //Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||||
// CS <20><> PB11 //Һ<><D2BA><EFBFBD><EFBFBD>Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||||
**************************************************************************************************/
|
||||
/* @attention
|
||||
*
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
||||
* TIME. AS A RESULT, QD electronic SHALL NOT BE HELD LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
||||
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
||||
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
**************************************************************************************************/
|
||||
#include "lcd.h"
|
||||
#include "stdlib.h"
|
||||
|
||||
#include "spi.h"
|
||||
#include "main.h"
|
||||
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>LCD<43><44>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
||||
//Ĭ<><C4AC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||
_lcd_dev lcddev;
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
||||
uint16_t POINT_COLOR = 0x0000,BACK_COLOR = 0xFFFF;
|
||||
uint16_t DeviceCode;
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :u8 SPI_WriteByte(x,u8 Byte)
|
||||
* @date :2018-08-09
|
||||
* @function :Write a byte of data using STM32's hardware SPI
|
||||
* @parameters : Byte:Data to be written
|
||||
******************************************************************************/
|
||||
uint8_t SPI2_ReadWriteByte( uint8_t TxData)
|
||||
{
|
||||
uint8_t Rxdata;
|
||||
HAL_SPI_TransmitReceive(&hspi2,&TxData,&Rxdata,1, 1000);
|
||||
return Rxdata;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void LCD_WR_REG(uint8_t data)
|
||||
* @date :2018-08-09
|
||||
* @function :Write an 8-bit command to the LCD screen
|
||||
* @parameters :data:Command value to be written
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void LCD_WR_REG(uint8_t data)
|
||||
{
|
||||
LCD_CS_CLR;
|
||||
LCD_RS_CLR;
|
||||
SPI2_ReadWriteByte(data);
|
||||
LCD_CS_SET;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void LCD_WR_DATA(uint8_t data)
|
||||
* @date :2018-08-09
|
||||
* @function :Write an 8-bit data to the LCD screen
|
||||
* @parameters :data:data value to be written
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void LCD_WR_DATA(uint8_t data)
|
||||
{
|
||||
LCD_CS_CLR;
|
||||
LCD_RS_SET;
|
||||
SPI2_ReadWriteByte(data);
|
||||
LCD_CS_SET;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue)
|
||||
* @date :2018-08-09
|
||||
* @function :Write data into registers
|
||||
* @parameters :LCD_Reg:Register address
|
||||
LCD_RegValue:Data to be written
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue)
|
||||
{
|
||||
LCD_WR_REG(LCD_Reg);
|
||||
LCD_WR_DATA(LCD_RegValue);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void LCD_WriteRAM_Prepare(void)
|
||||
* @date :2018-08-09
|
||||
* @function :Write GRAM
|
||||
* @parameters :None
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void LCD_WriteRAM_Prepare(void)
|
||||
{
|
||||
LCD_WR_REG(lcddev.wramcmd);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void Lcd_WriteData_16Bit(uint16_t Data)
|
||||
* @date :2018-08-09
|
||||
* @function :Write an 16-bit command to the LCD screen
|
||||
* @parameters :Data:Data to be written
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void Lcd_WriteData_16Bit(uint16_t Data)
|
||||
{
|
||||
LCD_CS_CLR;
|
||||
LCD_RS_SET;
|
||||
//SPI_WriteByte(SPI2,Data>>8);
|
||||
SPI2_ReadWriteByte(Data>>8);
|
||||
SPI2_ReadWriteByte(Data);
|
||||
LCD_CS_SET;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void LCD_DrawPoint(uint16_t x,uint16_t y)
|
||||
* @date :2018-08-09
|
||||
* @function :Write a pixel data at a specified location
|
||||
* @parameters :x:the x coordinate of the pixel
|
||||
y:the y coordinate of the pixel
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void LCD_DrawPoint(uint16_t x,uint16_t y)
|
||||
{
|
||||
LCD_SetCursor(x,y);//<2F><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>λ<EFBFBD><CEBB>
|
||||
Lcd_WriteData_16Bit(POINT_COLOR);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void LCD_Clear(uint16_t Color)
|
||||
* @date :2018-08-09
|
||||
* @function :Full screen filled LCD screen
|
||||
* @parameters :color:Filled color
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void LCD_Clear(uint16_t Color)
|
||||
{
|
||||
unsigned int i,m;
|
||||
LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);
|
||||
LCD_CS_CLR;
|
||||
LCD_RS_SET;
|
||||
for(i=0;i<lcddev.height;i++)
|
||||
{
|
||||
for(m=0;m<lcddev.width;m++)
|
||||
{
|
||||
Lcd_WriteData_16Bit(Color);
|
||||
}
|
||||
}
|
||||
LCD_CS_SET;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void LCD_RESET(void)
|
||||
* @date :2018-08-09
|
||||
* @function :Reset LCD screen
|
||||
* @parameters :None
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void LCD_RESET(void)
|
||||
{
|
||||
LCD_RST_CLR;
|
||||
HAL_Delay(100);
|
||||
LCD_RST_SET;
|
||||
HAL_Delay(50);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void LCD_RESET(void)
|
||||
* @date :2018-08-09
|
||||
* @function :Initialization LCD screen
|
||||
* @parameters :None
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void LCD_Init(void)
|
||||
{
|
||||
LCD_RESET(); //LCD <20><>λ
|
||||
//************* ST7735S<35><53>ʼ<EFBFBD><CABC>**********//
|
||||
LCD_WR_REG(0x11);//Sleep exit
|
||||
HAL_Delay (120);
|
||||
|
||||
//ST7735R Frame Rate
|
||||
LCD_WR_REG(0xB1);
|
||||
LCD_WR_DATA(0x01);
|
||||
LCD_WR_DATA(0x2C);
|
||||
LCD_WR_DATA(0x2D);
|
||||
|
||||
LCD_WR_REG(0xB2);
|
||||
LCD_WR_DATA(0x01);
|
||||
LCD_WR_DATA(0x2C);
|
||||
LCD_WR_DATA(0x2D);
|
||||
|
||||
LCD_WR_REG(0xB3);
|
||||
LCD_WR_DATA(0x01);
|
||||
LCD_WR_DATA(0x2C);
|
||||
LCD_WR_DATA(0x2D);
|
||||
LCD_WR_DATA(0x01);
|
||||
LCD_WR_DATA(0x2C);
|
||||
LCD_WR_DATA(0x2D);
|
||||
|
||||
LCD_WR_REG(0xB4); //Column inversion
|
||||
LCD_WR_DATA(0x07);
|
||||
//ST7735R Power Sequence
|
||||
LCD_WR_REG(0xC0);
|
||||
LCD_WR_DATA(0xA2);
|
||||
LCD_WR_DATA(0x02);
|
||||
LCD_WR_DATA(0x84);
|
||||
|
||||
LCD_WR_REG(0xC1);
|
||||
LCD_WR_DATA(0xC5);
|
||||
|
||||
LCD_WR_REG(0xC2);
|
||||
LCD_WR_DATA(0x0A);
|
||||
LCD_WR_DATA(0x00);
|
||||
|
||||
LCD_WR_REG(0xC3);
|
||||
LCD_WR_DATA(0x8A);
|
||||
LCD_WR_DATA(0x2A);
|
||||
|
||||
LCD_WR_REG(0xC4);
|
||||
LCD_WR_DATA(0x8A);
|
||||
LCD_WR_DATA(0xEE);
|
||||
|
||||
LCD_WR_REG(0xC5); //VCOM
|
||||
LCD_WR_DATA(0x0E);
|
||||
|
||||
LCD_WR_REG(0x36); //MX, MY, RGB mode
|
||||
LCD_WR_DATA(0xC0);
|
||||
|
||||
//ST7735R Gamma Sequence
|
||||
LCD_WR_REG(0xe0);
|
||||
LCD_WR_DATA(0x0f);
|
||||
LCD_WR_DATA(0x1a);
|
||||
LCD_WR_DATA(0x0f);
|
||||
LCD_WR_DATA(0x18);
|
||||
LCD_WR_DATA(0x2f);
|
||||
LCD_WR_DATA(0x28);
|
||||
LCD_WR_DATA(0x20);
|
||||
LCD_WR_DATA(0x22);
|
||||
LCD_WR_DATA(0x1f);
|
||||
LCD_WR_DATA(0x1b);
|
||||
LCD_WR_DATA(0x23);
|
||||
LCD_WR_DATA(0x37);
|
||||
LCD_WR_DATA(0x00);
|
||||
LCD_WR_DATA(0x07);
|
||||
LCD_WR_DATA(0x02);
|
||||
LCD_WR_DATA(0x10);
|
||||
|
||||
LCD_WR_REG(0xe1);
|
||||
LCD_WR_DATA(0x0f);
|
||||
LCD_WR_DATA(0x1b);
|
||||
LCD_WR_DATA(0x0f);
|
||||
LCD_WR_DATA(0x17);
|
||||
LCD_WR_DATA(0x33);
|
||||
LCD_WR_DATA(0x2c);
|
||||
LCD_WR_DATA(0x29);
|
||||
LCD_WR_DATA(0x2e);
|
||||
LCD_WR_DATA(0x30);
|
||||
LCD_WR_DATA(0x30);
|
||||
LCD_WR_DATA(0x39);
|
||||
LCD_WR_DATA(0x3f);
|
||||
LCD_WR_DATA(0x00);
|
||||
LCD_WR_DATA(0x07);
|
||||
LCD_WR_DATA(0x03);
|
||||
LCD_WR_DATA(0x10);
|
||||
|
||||
LCD_WR_REG(0x2a);
|
||||
LCD_WR_DATA(0x00);
|
||||
LCD_WR_DATA(0x00);
|
||||
LCD_WR_DATA(0x00);
|
||||
LCD_WR_DATA(0x7f);
|
||||
LCD_WR_REG(0x2b);
|
||||
LCD_WR_DATA(0x00);
|
||||
LCD_WR_DATA(0x00);
|
||||
LCD_WR_DATA(0x00);
|
||||
LCD_WR_DATA(0x9f);
|
||||
|
||||
LCD_WR_REG(0xF0); //Enable test command
|
||||
LCD_WR_DATA(0x01);
|
||||
|
||||
LCD_WR_REG(0xF6); //Disable ram power save mode
|
||||
LCD_WR_DATA(0x00);
|
||||
|
||||
LCD_WR_REG(0x3A); //65k mode
|
||||
LCD_WR_DATA(0x05);
|
||||
|
||||
LCD_WR_REG(0x29);//Display on
|
||||
|
||||
LCD_direction(USE_HORIZONTAL);//<2F><><EFBFBD><EFBFBD>LCD<43><44>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||||
LCD_Clear(WHITE);//<2F><>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>ɫ
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void LCD_SetWindows(uint16_t xStar, uint16_t yStar,uint16_t xEnd,uint16_t yEnd)
|
||||
* @date :2018-08-09
|
||||
* @function :Setting LCD display window
|
||||
* @parameters :xStar:the bebinning x coordinate of the LCD display window
|
||||
yStar:the bebinning y coordinate of the LCD display window
|
||||
xEnd:the endning x coordinate of the LCD display window
|
||||
yEnd:the endning y coordinate of the LCD display window
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void LCD_SetWindows(uint16_t xStar, uint16_t yStar,uint16_t xEnd,uint16_t yEnd)
|
||||
{
|
||||
LCD_WR_REG(lcddev.setxcmd); //LCD_WR_REG(0x2a);//<2F>е<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
|
||||
LCD_WR_DATA(0x00);
|
||||
LCD_WR_DATA(xStar);
|
||||
LCD_WR_DATA(0x00);
|
||||
LCD_WR_DATA(xEnd);
|
||||
|
||||
LCD_WR_REG(lcddev.setycmd); //LCD_WR_REG(0x2b);//<2F>е<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
|
||||
LCD_WR_DATA(0x00);
|
||||
LCD_WR_DATA(yStar);
|
||||
LCD_WR_DATA(0x00);
|
||||
LCD_WR_DATA(yEnd);
|
||||
|
||||
LCD_WriteRAM_Prepare(); //<2F><>ʼд<CABC><D0B4>GRAM
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void LCD_SetCursor(uint16_t Xpos, uint16_t Ypos)
|
||||
* @date :2018-08-09
|
||||
* @function :Set coordinate value
|
||||
* @parameters :Xpos:the x coordinate of the pixel
|
||||
Ypos:the y coordinate of the pixel
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void LCD_SetCursor(uint16_t Xpos, uint16_t Ypos)
|
||||
{
|
||||
LCD_SetWindows(Xpos,Ypos,Xpos,Ypos);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void LCD_direction(uint8_t direction)
|
||||
* @date :2018-08-09
|
||||
* @function :Setting the display direction of LCD screen
|
||||
* @parameters :direction: 0-0 degree
|
||||
1-90 degree
|
||||
2-180 degree
|
||||
3-270 degree
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void LCD_direction(uint8_t direction)
|
||||
{
|
||||
lcddev.setxcmd=0x2A;
|
||||
lcddev.setycmd=0x2B;
|
||||
lcddev.wramcmd=0x2C;
|
||||
switch(direction)
|
||||
{
|
||||
case 0:
|
||||
lcddev.width=LCD_W;
|
||||
lcddev.height=LCD_H;
|
||||
LCD_WriteReg(0x36,(0<<3)|(1<<6)|(1<<7));//BGR==1,MY==0,MX==0,MV==0
|
||||
break;
|
||||
case 1:
|
||||
lcddev.width=LCD_H;
|
||||
lcddev.height=LCD_W;
|
||||
LCD_WriteReg(0x36,(0<<3)|(1<<7)|(1<<5));//BGR==1,MY==1,MX==0,MV==1
|
||||
break;
|
||||
case 2:
|
||||
lcddev.width=LCD_W;
|
||||
lcddev.height=LCD_H;
|
||||
LCD_WriteReg(0x36,(0<<3)|(0<<6)|(0<<7));//BGR==1,MY==0,MX==0,MV==0
|
||||
break;
|
||||
case 3:
|
||||
lcddev.width= LCD_H;
|
||||
lcddev.height=LCD_W;
|
||||
LCD_WriteReg(0x36,(0<<3)|(0<<7)|(1<<6)|(1<<5));//BGR==1,MY==1,MX==0,MV==1
|
||||
break;
|
||||
default:break;
|
||||
}
|
||||
}
|
||||
236
exp10-LCD/Core/Src/main.c
Normal file
236
exp10-LCD/Core/Src/main.c
Normal file
@@ -0,0 +1,236 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file : main.c
|
||||
* @brief : Main program body
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2024 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
#include "spi.h"
|
||||
#include "gpio.h"
|
||||
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
#include "variable.h"
|
||||
#include "lcd.h"
|
||||
#include "test.h"
|
||||
#include "test.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PTD */
|
||||
|
||||
/* USER CODE END PTD */
|
||||
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PD */
|
||||
|
||||
/* USER CODE END PD */
|
||||
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PM */
|
||||
|
||||
/* USER CODE END PM */
|
||||
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
|
||||
/* USER CODE BEGIN PV */
|
||||
stSysTickTimer sSysTickTimer = {
|
||||
0, 0, 0, 0
|
||||
};
|
||||
uint16_t mSecCount = 0;
|
||||
uint16_t bSecondIsOk = 0;
|
||||
/* USER CODE END PV */
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
void SystemClock_Config(void);
|
||||
/* USER CODE BEGIN PFP */
|
||||
|
||||
/* USER CODE END PFP */
|
||||
|
||||
/* Private user code ---------------------------------------------------------*/
|
||||
/* USER CODE BEGIN 0 */
|
||||
void delay_us(uint32_t nus) {
|
||||
uint32_t ticks;
|
||||
uint32_t told, tnow, tcnt=0;
|
||||
uint32_t reload = SysTick->LOAD; // LOAD的<44>??
|
||||
ticks = nus * SYSTICKCLK; // <20><>?要的节拍<E88A82><E68B8D>?
|
||||
told = SysTick->VAL; // 刚进入时的计数器<E695B0><E599A8>?
|
||||
while (1) {
|
||||
tnow = SysTick->VAL;
|
||||
if (tnow != told) {
|
||||
if (tnow < told)
|
||||
tcnt += told - tnow; // SYSTICK是一个<E4B880>?<3F>减的计数器就可以了
|
||||
else
|
||||
tcnt += reload - tnow + told;
|
||||
told = tnow;
|
||||
if (tcnt >= ticks) break; // 事件超过/等于要延迟的时间,则<EFBC8C><E58899>?<3F><>?
|
||||
}
|
||||
}
|
||||
}
|
||||
/* USER CODE END 0 */
|
||||
|
||||
/**
|
||||
* @brief The application entry point.
|
||||
* @retval int
|
||||
*/
|
||||
int main(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
|
||||
/* MCU Configuration--------------------------------------------------------*/
|
||||
|
||||
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||
HAL_Init();
|
||||
|
||||
/* USER CODE BEGIN Init */
|
||||
|
||||
/* USER CODE END Init */
|
||||
|
||||
/* Configure the system clock */
|
||||
SystemClock_Config();
|
||||
|
||||
/* USER CODE BEGIN SysInit */
|
||||
|
||||
/* USER CODE END SysInit */
|
||||
|
||||
/* Initialize all configured peripherals */
|
||||
MX_GPIO_Init();
|
||||
MX_SPI2_Init();
|
||||
/* USER CODE BEGIN 2 */
|
||||
LCD_Init();
|
||||
/* USER CODE END 2 */
|
||||
|
||||
/* Infinite loop */
|
||||
/* USER CODE BEGIN WHILE */
|
||||
while (1)
|
||||
{
|
||||
/* USER CODE END WHILE */
|
||||
|
||||
/* USER CODE BEGIN 3 */
|
||||
// main_test();
|
||||
// Test_Color();
|
||||
// Test_FillRec();
|
||||
// Test_Circle();
|
||||
// Test_Triangle();
|
||||
// English_Font_test();
|
||||
Chinese_Font_test();
|
||||
// Pic_test();
|
||||
// Rotate_Test();
|
||||
// if (bSecondIsOk) {
|
||||
// bSecondIsOk = 0;
|
||||
// HAL_GPIO_TogglePin(TickClock_LED_GPIO_Port, TickClock_LED_Pin);
|
||||
// }
|
||||
|
||||
// if (sSysTickTimer.bTenMilSecOk) {
|
||||
// sSysTickTimer.bTenMilSecOk = 0;
|
||||
// }
|
||||
if (sSysTickTimer.bTimeOk) {
|
||||
sSysTickTimer.bTimeOk = 0;
|
||||
HAL_GPIO_TogglePin(TickClock_LED_GPIO_Port, TickClock_LED_Pin);
|
||||
}
|
||||
// HAL_GPIO_TogglePin(TickClock_LED_GPIO_Port, TickClock_LED_Pin);
|
||||
// // HAL_Delay(500);
|
||||
// for (int i = 0; i < 50000; i++) {
|
||||
// delay_us(10); // 用for循环产生10微秒
|
||||
// }
|
||||
// delay_us(500000);
|
||||
}
|
||||
/* USER CODE END 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief System Clock Configuration
|
||||
* @retval None
|
||||
*/
|
||||
void SystemClock_Config(void)
|
||||
{
|
||||
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||
|
||||
/** Configure the main internal regulator output voltage
|
||||
*/
|
||||
HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1_BOOST);
|
||||
|
||||
/** Initializes the RCC Oscillators according to the specified parameters
|
||||
* in the RCC_OscInitTypeDef structure.
|
||||
*/
|
||||
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||
RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV6;
|
||||
RCC_OscInitStruct.PLL.PLLN = 85;
|
||||
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
|
||||
RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
|
||||
RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
|
||||
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
/** Initializes the CPU, AHB and APB buses clocks
|
||||
*/
|
||||
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
||||
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
|
||||
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
||||
|
||||
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 4 */
|
||||
|
||||
/* USER CODE END 4 */
|
||||
|
||||
/**
|
||||
* @brief This function is executed in case of error occurrence.
|
||||
* @retval None
|
||||
*/
|
||||
void Error_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN Error_Handler_Debug */
|
||||
/* User can add his own implementation to report the HAL error return state */
|
||||
__disable_irq();
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
/* USER CODE END Error_Handler_Debug */
|
||||
}
|
||||
|
||||
#ifdef USE_FULL_ASSERT
|
||||
/**
|
||||
* @brief Reports the name of the source file and the source line number
|
||||
* where the assert_param error has occurred.
|
||||
* @param file: pointer to the source file name
|
||||
* @param line: assert_param error line source number
|
||||
* @retval None
|
||||
*/
|
||||
void assert_failed(uint8_t *file, uint32_t line)
|
||||
{
|
||||
/* USER CODE BEGIN 6 */
|
||||
/* User can add his own implementation to report the file name and line number,
|
||||
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
|
||||
/* USER CODE END 6 */
|
||||
}
|
||||
#endif /* USE_FULL_ASSERT */
|
||||
119
exp10-LCD/Core/Src/spi.c
Normal file
119
exp10-LCD/Core/Src/spi.c
Normal file
@@ -0,0 +1,119 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file spi.c
|
||||
* @brief This file provides code for the configuration
|
||||
* of the SPI instances.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2024 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "spi.h"
|
||||
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
SPI_HandleTypeDef hspi2;
|
||||
|
||||
/* SPI2 init function */
|
||||
void MX_SPI2_Init(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN SPI2_Init 0 */
|
||||
|
||||
/* USER CODE END SPI2_Init 0 */
|
||||
|
||||
/* USER CODE BEGIN SPI2_Init 1 */
|
||||
|
||||
/* USER CODE END SPI2_Init 1 */
|
||||
hspi2.Instance = SPI2;
|
||||
hspi2.Init.Mode = SPI_MODE_MASTER;
|
||||
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
|
||||
hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
|
||||
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
|
||||
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
|
||||
hspi2.Init.NSS = SPI_NSS_SOFT;
|
||||
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
|
||||
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
||||
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
|
||||
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
||||
hspi2.Init.CRCPolynomial = 7;
|
||||
hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
|
||||
hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
|
||||
if (HAL_SPI_Init(&hspi2) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
/* USER CODE BEGIN SPI2_Init 2 */
|
||||
|
||||
/* USER CODE END SPI2_Init 2 */
|
||||
|
||||
}
|
||||
|
||||
void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
|
||||
{
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
if(spiHandle->Instance==SPI2)
|
||||
{
|
||||
/* USER CODE BEGIN SPI2_MspInit 0 */
|
||||
|
||||
/* USER CODE END SPI2_MspInit 0 */
|
||||
/* SPI2 clock enable */
|
||||
__HAL_RCC_SPI2_CLK_ENABLE();
|
||||
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
/**SPI2 GPIO Configuration
|
||||
PB13 ------> SPI2_SCK
|
||||
PB15 ------> SPI2_MOSI
|
||||
*/
|
||||
GPIO_InitStruct.Pin = LCD_CLK_Pin|LCD_MOSI_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN SPI2_MspInit 1 */
|
||||
|
||||
/* USER CODE END SPI2_MspInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
|
||||
{
|
||||
|
||||
if(spiHandle->Instance==SPI2)
|
||||
{
|
||||
/* USER CODE BEGIN SPI2_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END SPI2_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_SPI2_CLK_DISABLE();
|
||||
|
||||
/**SPI2 GPIO Configuration
|
||||
PB13 ------> SPI2_SCK
|
||||
PB15 ------> SPI2_MOSI
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOB, LCD_CLK_Pin|LCD_MOSI_Pin);
|
||||
|
||||
/* USER CODE BEGIN SPI2_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END SPI2_MspDeInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
87
exp10-LCD/Core/Src/stm32g4xx_hal_msp.c
Normal file
87
exp10-LCD/Core/Src/stm32g4xx_hal_msp.c
Normal file
@@ -0,0 +1,87 @@
|
||||
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32g4xx_hal_msp.c
|
||||
* @brief This file provides code for the MSP Initialization
|
||||
* and de-Initialization codes.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2024 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN TD */
|
||||
|
||||
/* USER CODE END TD */
|
||||
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Define */
|
||||
|
||||
/* USER CODE END Define */
|
||||
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Macro */
|
||||
|
||||
/* USER CODE END Macro */
|
||||
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PV */
|
||||
|
||||
/* USER CODE END PV */
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* USER CODE BEGIN PFP */
|
||||
|
||||
/* USER CODE END PFP */
|
||||
|
||||
/* External functions --------------------------------------------------------*/
|
||||
/* USER CODE BEGIN ExternalFunctions */
|
||||
|
||||
/* USER CODE END ExternalFunctions */
|
||||
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
/**
|
||||
* Initializes the Global MSP.
|
||||
*/
|
||||
void HAL_MspInit(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN MspInit 0 */
|
||||
|
||||
/* USER CODE END MspInit 0 */
|
||||
|
||||
__HAL_RCC_SYSCFG_CLK_ENABLE();
|
||||
__HAL_RCC_PWR_CLK_ENABLE();
|
||||
|
||||
/* System interrupt init*/
|
||||
|
||||
/** Disable the internal Pull-Up in Dead Battery pins of UCPD peripheral
|
||||
*/
|
||||
HAL_PWREx_DisableUCPDDeadBattery();
|
||||
|
||||
/* USER CODE BEGIN MspInit 1 */
|
||||
|
||||
/* USER CODE END MspInit 1 */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
218
exp10-LCD/Core/Src/stm32g4xx_it.c
Normal file
218
exp10-LCD/Core/Src/stm32g4xx_it.c
Normal file
@@ -0,0 +1,218 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32g4xx_it.c
|
||||
* @brief Interrupt Service Routines.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2024 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
#include "stm32g4xx_it.h"
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
#include "variable.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN TD */
|
||||
|
||||
/* USER CODE END TD */
|
||||
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PD */
|
||||
|
||||
/* USER CODE END PD */
|
||||
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PM */
|
||||
|
||||
/* USER CODE END PM */
|
||||
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PV */
|
||||
|
||||
/* USER CODE END PV */
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* USER CODE BEGIN PFP */
|
||||
|
||||
/* USER CODE END PFP */
|
||||
|
||||
/* Private user code ---------------------------------------------------------*/
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
/* External variables --------------------------------------------------------*/
|
||||
|
||||
/* USER CODE BEGIN EV */
|
||||
extern stSysTickTimer sSysTickTimer;
|
||||
extern uint16_t mSecCount;
|
||||
extern uint16_t bSecondIsOk;
|
||||
/* USER CODE END EV */
|
||||
|
||||
/******************************************************************************/
|
||||
/* Cortex-M4 Processor Interruption and Exception Handlers */
|
||||
/******************************************************************************/
|
||||
/**
|
||||
* @brief This function handles Non maskable interrupt.
|
||||
*/
|
||||
void NMI_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN NonMaskableInt_IRQn 0 */
|
||||
|
||||
/* USER CODE END NonMaskableInt_IRQn 0 */
|
||||
/* USER CODE BEGIN NonMaskableInt_IRQn 1 */
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
/* USER CODE END NonMaskableInt_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Hard fault interrupt.
|
||||
*/
|
||||
void HardFault_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN HardFault_IRQn 0 */
|
||||
|
||||
/* USER CODE END HardFault_IRQn 0 */
|
||||
while (1)
|
||||
{
|
||||
/* USER CODE BEGIN W1_HardFault_IRQn 0 */
|
||||
/* USER CODE END W1_HardFault_IRQn 0 */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Memory management fault.
|
||||
*/
|
||||
void MemManage_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN MemoryManagement_IRQn 0 */
|
||||
|
||||
/* USER CODE END MemoryManagement_IRQn 0 */
|
||||
while (1)
|
||||
{
|
||||
/* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
|
||||
/* USER CODE END W1_MemoryManagement_IRQn 0 */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Prefetch fault, memory access fault.
|
||||
*/
|
||||
void BusFault_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN BusFault_IRQn 0 */
|
||||
|
||||
/* USER CODE END BusFault_IRQn 0 */
|
||||
while (1)
|
||||
{
|
||||
/* USER CODE BEGIN W1_BusFault_IRQn 0 */
|
||||
/* USER CODE END W1_BusFault_IRQn 0 */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Undefined instruction or illegal state.
|
||||
*/
|
||||
void UsageFault_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN UsageFault_IRQn 0 */
|
||||
|
||||
/* USER CODE END UsageFault_IRQn 0 */
|
||||
while (1)
|
||||
{
|
||||
/* USER CODE BEGIN W1_UsageFault_IRQn 0 */
|
||||
/* USER CODE END W1_UsageFault_IRQn 0 */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles System service call via SWI instruction.
|
||||
*/
|
||||
void SVC_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN SVCall_IRQn 0 */
|
||||
|
||||
/* USER CODE END SVCall_IRQn 0 */
|
||||
/* USER CODE BEGIN SVCall_IRQn 1 */
|
||||
|
||||
/* USER CODE END SVCall_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Debug monitor.
|
||||
*/
|
||||
void DebugMon_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN DebugMonitor_IRQn 0 */
|
||||
|
||||
/* USER CODE END DebugMonitor_IRQn 0 */
|
||||
/* USER CODE BEGIN DebugMonitor_IRQn 1 */
|
||||
|
||||
/* USER CODE END DebugMonitor_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Pendable request for system service.
|
||||
*/
|
||||
void PendSV_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN PendSV_IRQn 0 */
|
||||
|
||||
/* USER CODE END PendSV_IRQn 0 */
|
||||
/* USER CODE BEGIN PendSV_IRQn 1 */
|
||||
|
||||
/* USER CODE END PendSV_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles System tick timer.
|
||||
*/
|
||||
void SysTick_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN SysTick_IRQn 0 */
|
||||
|
||||
/* USER CODE END SysTick_IRQn 0 */
|
||||
HAL_IncTick();
|
||||
/* USER CODE BEGIN SysTick_IRQn 1 */
|
||||
if (++mSecCount >= 100) {
|
||||
mSecCount = 0;
|
||||
bSecondIsOk = 1;
|
||||
}
|
||||
|
||||
if (++sSysTickTimer.mMilSecCount >= 10) {
|
||||
sSysTickTimer.mMilSecCount = 0;
|
||||
sSysTickTimer.bTenMilSecOk = 1;
|
||||
if (++sSysTickTimer.mTimeCount >= 100) {
|
||||
sSysTickTimer.mTimeCount = 0;
|
||||
sSysTickTimer.bTimeOk = 1;
|
||||
}
|
||||
}
|
||||
/* USER CODE END SysTick_IRQn 1 */
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/* STM32G4xx Peripheral Interrupt Handlers */
|
||||
/* Add here the Interrupt Handlers for the used peripherals. */
|
||||
/* For the available peripheral interrupt handler names, */
|
||||
/* please refer to the startup file (startup_stm32g4xx.s). */
|
||||
/******************************************************************************/
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
285
exp10-LCD/Core/Src/system_stm32g4xx.c
Normal file
285
exp10-LCD/Core/Src/system_stm32g4xx.c
Normal file
@@ -0,0 +1,285 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file system_stm32g4xx.c
|
||||
* @author MCD Application Team
|
||||
* @brief CMSIS Cortex-M4 Device Peripheral Access Layer System Source File
|
||||
*
|
||||
* This file provides two functions and one global variable to be called from
|
||||
* user application:
|
||||
* - SystemInit(): This function is called at startup just after reset and
|
||||
* before branch to main program. This call is made inside
|
||||
* the "startup_stm32g4xx.s" file.
|
||||
*
|
||||
* - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
|
||||
* by the user application to setup the SysTick
|
||||
* timer or configure other parameters.
|
||||
*
|
||||
* - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
|
||||
* be called whenever the core clock is changed
|
||||
* during program execution.
|
||||
*
|
||||
* After each device reset the HSI (16 MHz) is used as system clock source.
|
||||
* Then SystemInit() function is called, in "startup_stm32g4xx.s" file, to
|
||||
* configure the system clock before to branch to main program.
|
||||
*
|
||||
* This file configures the system clock as follows:
|
||||
*=============================================================================
|
||||
*-----------------------------------------------------------------------------
|
||||
* System Clock source | HSI
|
||||
*-----------------------------------------------------------------------------
|
||||
* SYSCLK(Hz) | 16000000
|
||||
*-----------------------------------------------------------------------------
|
||||
* HCLK(Hz) | 16000000
|
||||
*-----------------------------------------------------------------------------
|
||||
* AHB Prescaler | 1
|
||||
*-----------------------------------------------------------------------------
|
||||
* APB1 Prescaler | 1
|
||||
*-----------------------------------------------------------------------------
|
||||
* APB2 Prescaler | 1
|
||||
*-----------------------------------------------------------------------------
|
||||
* PLL_M | 1
|
||||
*-----------------------------------------------------------------------------
|
||||
* PLL_N | 16
|
||||
*-----------------------------------------------------------------------------
|
||||
* PLL_P | 7
|
||||
*-----------------------------------------------------------------------------
|
||||
* PLL_Q | 2
|
||||
*-----------------------------------------------------------------------------
|
||||
* PLL_R | 2
|
||||
*-----------------------------------------------------------------------------
|
||||
* Require 48MHz for RNG | Disabled
|
||||
*-----------------------------------------------------------------------------
|
||||
*=============================================================================
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2019 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/** @addtogroup CMSIS
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup stm32g4xx_system
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G4xx_System_Private_Includes
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "stm32g4xx.h"
|
||||
|
||||
#if !defined (HSE_VALUE)
|
||||
#define HSE_VALUE 24000000U /*!< Value of the External oscillator in Hz */
|
||||
#endif /* HSE_VALUE */
|
||||
|
||||
#if !defined (HSI_VALUE)
|
||||
#define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/
|
||||
#endif /* HSI_VALUE */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G4xx_System_Private_TypesDefinitions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G4xx_System_Private_Defines
|
||||
* @{
|
||||
*/
|
||||
|
||||
/************************* Miscellaneous Configuration ************************/
|
||||
/* Note: Following vector table addresses must be defined in line with linker
|
||||
configuration. */
|
||||
/*!< Uncomment the following line if you need to relocate the vector table
|
||||
anywhere in Flash or Sram, else the vector table is kept at the automatic
|
||||
remap of boot address selected */
|
||||
/* #define USER_VECT_TAB_ADDRESS */
|
||||
|
||||
#if defined(USER_VECT_TAB_ADDRESS)
|
||||
/*!< Uncomment the following line if you need to relocate your vector Table
|
||||
in Sram else user remap will be done in Flash. */
|
||||
/* #define VECT_TAB_SRAM */
|
||||
#if defined(VECT_TAB_SRAM)
|
||||
#define VECT_TAB_BASE_ADDRESS SRAM_BASE /*!< Vector Table base address field.
|
||||
This value must be a multiple of 0x200. */
|
||||
#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field.
|
||||
This value must be a multiple of 0x200. */
|
||||
#else
|
||||
#define VECT_TAB_BASE_ADDRESS FLASH_BASE /*!< Vector Table base address field.
|
||||
This value must be a multiple of 0x200. */
|
||||
#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field.
|
||||
This value must be a multiple of 0x200. */
|
||||
#endif /* VECT_TAB_SRAM */
|
||||
#endif /* USER_VECT_TAB_ADDRESS */
|
||||
/******************************************************************************/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G4xx_System_Private_Macros
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G4xx_System_Private_Variables
|
||||
* @{
|
||||
*/
|
||||
/* The SystemCoreClock variable is updated in three ways:
|
||||
1) by calling CMSIS function SystemCoreClockUpdate()
|
||||
2) by calling HAL API function HAL_RCC_GetHCLKFreq()
|
||||
3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
|
||||
Note: If you use this function to configure the system clock; then there
|
||||
is no need to call the 2 first functions listed above, since SystemCoreClock
|
||||
variable is updated automatically.
|
||||
*/
|
||||
uint32_t SystemCoreClock = HSI_VALUE;
|
||||
|
||||
const uint8_t AHBPrescTable[16] = {0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U, 6U, 7U, 8U, 9U};
|
||||
const uint8_t APBPrescTable[8] = {0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U};
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G4xx_System_Private_FunctionPrototypes
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32G4xx_System_Private_Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Setup the microcontroller system.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
|
||||
void SystemInit(void)
|
||||
{
|
||||
/* FPU settings ------------------------------------------------------------*/
|
||||
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
|
||||
SCB->CPACR |= ((3UL << (10*2))|(3UL << (11*2))); /* set CP10 and CP11 Full Access */
|
||||
#endif
|
||||
|
||||
/* Configure the Vector Table location add offset address ------------------*/
|
||||
#if defined(USER_VECT_TAB_ADDRESS)
|
||||
SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
|
||||
#endif /* USER_VECT_TAB_ADDRESS */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Update SystemCoreClock variable according to Clock Register Values.
|
||||
* The SystemCoreClock variable contains the core clock (HCLK), it can
|
||||
* be used by the user application to setup the SysTick timer or configure
|
||||
* other parameters.
|
||||
*
|
||||
* @note Each time the core clock (HCLK) changes, this function must be called
|
||||
* to update SystemCoreClock variable value. Otherwise, any configuration
|
||||
* based on this variable will be incorrect.
|
||||
*
|
||||
* @note - The system frequency computed by this function is not the real
|
||||
* frequency in the chip. It is calculated based on the predefined
|
||||
* constant and the selected clock source:
|
||||
*
|
||||
* - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(**)
|
||||
*
|
||||
* - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(***)
|
||||
*
|
||||
* - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(***)
|
||||
* or HSI_VALUE(*) multiplied/divided by the PLL factors.
|
||||
*
|
||||
* (**) HSI_VALUE is a constant defined in stm32g4xx_hal.h file (default value
|
||||
* 16 MHz) but the real value may vary depending on the variations
|
||||
* in voltage and temperature.
|
||||
*
|
||||
* (***) HSE_VALUE is a constant defined in stm32g4xx_hal.h file (default value
|
||||
* 24 MHz), user has to ensure that HSE_VALUE is same as the real
|
||||
* frequency of the crystal used. Otherwise, this function may
|
||||
* have wrong result.
|
||||
*
|
||||
* - The result of this function could be not correct when using fractional
|
||||
* value for HSE crystal.
|
||||
*
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void SystemCoreClockUpdate(void)
|
||||
{
|
||||
uint32_t tmp, pllvco, pllr, pllsource, pllm;
|
||||
|
||||
/* Get SYSCLK source -------------------------------------------------------*/
|
||||
switch (RCC->CFGR & RCC_CFGR_SWS)
|
||||
{
|
||||
case 0x04: /* HSI used as system clock source */
|
||||
SystemCoreClock = HSI_VALUE;
|
||||
break;
|
||||
|
||||
case 0x08: /* HSE used as system clock source */
|
||||
SystemCoreClock = HSE_VALUE;
|
||||
break;
|
||||
|
||||
case 0x0C: /* PLL used as system clock source */
|
||||
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN
|
||||
SYSCLK = PLL_VCO / PLLR
|
||||
*/
|
||||
pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC);
|
||||
pllm = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> 4) + 1U ;
|
||||
if (pllsource == 0x02UL) /* HSI used as PLL clock source */
|
||||
{
|
||||
pllvco = (HSI_VALUE / pllm);
|
||||
}
|
||||
else /* HSE used as PLL clock source */
|
||||
{
|
||||
pllvco = (HSE_VALUE / pllm);
|
||||
}
|
||||
pllvco = pllvco * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 8);
|
||||
pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> 25) + 1U) * 2U;
|
||||
SystemCoreClock = pllvco/pllr;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
/* Compute HCLK clock frequency --------------------------------------------*/
|
||||
/* Get HCLK prescaler */
|
||||
tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
|
||||
/* HCLK clock frequency */
|
||||
SystemCoreClock >>= tmp;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
271
exp10-LCD/Core/Src/test.c
Normal file
271
exp10-LCD/Core/Src/test.c
Normal file
@@ -0,0 +1,271 @@
|
||||
/****************************************************************************************************
|
||||
//=========================================<3D><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>================================================//
|
||||
// LCDģ<44><C4A3> STM32<33><32>Ƭ<EFBFBD><C6AC>
|
||||
// VCC <20><> DC5V/3.3V //<2F><>Դ
|
||||
// GND <20><> GND //<2F><>Դ<EFBFBD><D4B4>
|
||||
//=======================================Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD>==========================================//
|
||||
//<2F><>ģ<EFBFBD><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪSPI<50><49><EFBFBD><EFBFBD>
|
||||
// LCDģ<44><C4A3> STM32<33><32>Ƭ<EFBFBD><C6AC>
|
||||
// SDA <20><> PB15 //Һ<><D2BA><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>ź<EFBFBD>
|
||||
//=======================================Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD>==========================================//
|
||||
// LCDģ<44><C4A3> STM32<33><32>Ƭ<EFBFBD><C6AC>
|
||||
// LED <20><> PB9 //Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>źţ<C5BA><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>5V<35><56>3.3V
|
||||
// SCK <20><> PB13 //Һ<><D2BA><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ź<EFBFBD>
|
||||
// A0 <20><> PB10 //Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||||
// RESET <20><> PB12 //Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||||
// CS <20><> PB11 //Һ<><D2BA><EFBFBD><EFBFBD>Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||||
//=========================================<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=========================================//
|
||||
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD>鲻<EFBFBD><E9B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܻ<EFBFBD><DCBB>ߴ<EFBFBD><DFB4>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// LCDģ<44><C4A3> STM32<33><32>Ƭ<EFBFBD><C6AC>
|
||||
// T_IRQ <20><> PC10 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>ź<EFBFBD>
|
||||
// T_DO <20><> PC2 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI<50><49><EFBFBD>߶<EFBFBD><DFB6>ź<EFBFBD>
|
||||
// T_DIN <20><> PC3 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD>д<EFBFBD>ź<EFBFBD>
|
||||
// T_CS <20><> PC13 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||||
// T_CLK <20><> PC0 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ź<EFBFBD>
|
||||
*************************** ***********************************************************************/
|
||||
/* @attention
|
||||
*
|
||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
||||
* TIME. AS A RESULT, QD electronic SHALL NOT BE HELD LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
||||
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
||||
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||
**************************************************************************************************/
|
||||
#include "lcd.h"
|
||||
#include "gui.h"
|
||||
#include "test.h"
|
||||
#include "pic.h"
|
||||
#include "main.h"
|
||||
|
||||
//========================variable==========================//
|
||||
uint16_t ColorTab[5]={RED,GREEN,BLUE,YELLOW,BRED};//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
|
||||
//=====================end of variable======================//
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void DrawTestPage(uint8_t *str)
|
||||
* @date :2018-08-09
|
||||
* @function :Drawing test interface
|
||||
* @parameters :str:the start address of the Chinese and English strings
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void DrawTestPage(uint8_t *str)
|
||||
{
|
||||
//<2F><><EFBFBD>ƹ̶<C6B9><CCB6><EFBFBD>up
|
||||
LCD_Clear(WHITE);
|
||||
LCD_Fill(0,0,lcddev.width,20,BLUE);
|
||||
//<2F><><EFBFBD>ƹ̶<C6B9><CCB6><EFBFBD>down
|
||||
LCD_Fill(0,lcddev.height-20,lcddev.width,lcddev.height,BLUE);
|
||||
POINT_COLOR=WHITE;
|
||||
Gui_StrCenter(0,2,WHITE,BLUE,str,16,1);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
|
||||
Gui_StrCenter(0,lcddev.height-18,WHITE,BLUE,"www.lcdwiki.com",16,1);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
|
||||
//<2F><><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//LCD_Fill(0,20,lcddev.width,lcddev.height-20,WHITE);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void main_test(void)
|
||||
* @date :2018-08-09
|
||||
* @function :Drawing the main Interface of the Comprehensive Test Program
|
||||
* @parameters :None
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void main_test(void)
|
||||
{
|
||||
DrawTestPage("<EFBFBD>ۺϲ<EFBFBD><EFBFBD>Գ<EFBFBD><EFBFBD><EFBFBD>");
|
||||
Gui_StrCenter(0,23,RED,BLUE,"ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",16,1);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
|
||||
Gui_StrCenter(0,40,RED,BLUE,"<EFBFBD>ۺϲ<EFBFBD><EFBFBD>Գ<EFBFBD><EFBFBD><EFBFBD>",16,1);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
|
||||
Gui_StrCenter(0,57,GREEN,BLUE,"1.8\" ST7735S",16,1);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
|
||||
Gui_StrCenter(0,74,GREEN,BLUE,"128X160",16,1);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
|
||||
Gui_StrCenter(0,91,BLUE,BLUE,"2018-08-22",16,1);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
|
||||
HAL_Delay(1500);
|
||||
HAL_Delay(1500);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void Test_Color(void)
|
||||
* @date :2018-08-09
|
||||
* @function :Color fill test(white,black,red,green,blue)
|
||||
* @parameters :None
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void Test_Color(void)
|
||||
{
|
||||
//DrawTestPage("<22><><EFBFBD><EFBFBD>1:<3A><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
LCD_Fill(0,0,lcddev.width,lcddev.height,WHITE);
|
||||
Show_Str(20,30,BLUE,YELLOW,"BL Test",16,1);HAL_Delay(800);
|
||||
LCD_Fill(0,0,lcddev.width,lcddev.height,RED);
|
||||
Show_Str(20,30,BLUE,YELLOW,"RED ",16,1);HAL_Delay(800);
|
||||
LCD_Fill(0,0,lcddev.width,lcddev.height,GREEN);
|
||||
Show_Str(20,30,BLUE,YELLOW,"GREEN ",16,1);HAL_Delay(800);
|
||||
LCD_Fill(0,0,lcddev.width,lcddev.height,BLUE);
|
||||
Show_Str(20,30,RED,YELLOW,"BLUE ",16,1);HAL_Delay(800);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void Test_FillRec(void)
|
||||
* @date :2018-08-09
|
||||
* @function :Rectangular display and fill test
|
||||
Display red,green,blue,yellow,pink rectangular boxes in turn,
|
||||
1500 milliseconds later,
|
||||
Fill the rectangle in red,green,blue,yellow and pink in turn
|
||||
* @parameters :None
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void Test_FillRec(void)
|
||||
{
|
||||
uint8_t i=0;
|
||||
DrawTestPage("GUI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
LCD_Fill(0,20,lcddev.width,lcddev.height-20,WHITE);
|
||||
for (i=0; i<5; i++)
|
||||
{
|
||||
POINT_COLOR=ColorTab[i];
|
||||
LCD_DrawRectangle(lcddev.width/2-40+(i*16),lcddev.height/2-40+(i*13),lcddev.width/2-40+(i*16)+30,lcddev.height/2-40+(i*13)+30);
|
||||
}
|
||||
HAL_Delay(1500);
|
||||
LCD_Fill(0,20,lcddev.width,lcddev.height-20,WHITE);
|
||||
for (i=0; i<5; i++)
|
||||
{
|
||||
POINT_COLOR=ColorTab[i];
|
||||
LCD_DrawFillRectangle(lcddev.width/2-40+(i*16),lcddev.height/2-40+(i*13),lcddev.width/2-40+(i*16)+30,lcddev.height/2-40+(i*13)+30);
|
||||
}
|
||||
HAL_Delay(1500);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void Test_Circle(void)
|
||||
* @date :2018-08-09
|
||||
* @function :circular display and fill test
|
||||
Display red,green,blue,yellow,pink circular boxes in turn,
|
||||
1500 milliseconds later,
|
||||
Fill the circular in red,green,blue,yellow and pink in turn
|
||||
* @parameters :None
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void Test_Circle(void)
|
||||
{
|
||||
uint8_t i=0;
|
||||
DrawTestPage("GUI<EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
LCD_Fill(0,20,lcddev.width,lcddev.height-20,WHITE);
|
||||
for (i=0; i<5; i++)
|
||||
gui_circle(lcddev.width/2-40+(i*15),lcddev.height/2-25+(i*13),ColorTab[i],15,0);
|
||||
HAL_Delay(1500);
|
||||
LCD_Fill(0,20,lcddev.width,lcddev.height-20,WHITE);
|
||||
for (i=0; i<5; i++)
|
||||
gui_circle(lcddev.width/2-40+(i*15),lcddev.height/2-25+(i*13),ColorTab[i],15,1);
|
||||
HAL_Delay(1500);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void English_Font_test(void)
|
||||
* @date :2018-08-09
|
||||
* @function :English display test
|
||||
* @parameters :None
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void English_Font_test(void)
|
||||
{
|
||||
DrawTestPage("Ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
Show_Str(10,22,BLUE,YELLOW,"6X12:abcdefgh01234567",12,0);
|
||||
Show_Str(10,34,BLUE,YELLOW,"6X12:ABCDEFGH01234567",12,1);
|
||||
Show_Str(10,47,BLUE,YELLOW,"6X12:~!@#$%^&*()_+{}:",12,0);
|
||||
Show_Str(10,60,BLUE,YELLOW,"8X16:abcde01234",16,0);
|
||||
Show_Str(10,76,BLUE,YELLOW,"8X16:ABCDE01234",16,1);
|
||||
Show_Str(10,92,BLUE,YELLOW,"8X16:~!@#$%^&*()",16,0);
|
||||
HAL_Delay(1200);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void Test_Triangle(void)
|
||||
* @date :2018-08-09
|
||||
* @function :triangle display and fill test
|
||||
Display red,green,blue,yellow,pink triangle boxes in turn,
|
||||
1500 milliseconds later,
|
||||
Fill the triangle in red,green,blue,yellow and pink in turn
|
||||
* @parameters :None
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void Test_Triangle(void)
|
||||
{
|
||||
uint8_t i=0;
|
||||
DrawTestPage("GUI Tri<72><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
LCD_Fill(0,20,lcddev.width,lcddev.height-20,WHITE);
|
||||
for(i=0;i<5;i++)
|
||||
{
|
||||
POINT_COLOR=ColorTab[i];
|
||||
Draw_Triangel(lcddev.width/2-40+(i*15),lcddev.height/2-12+(i*11),lcddev.width/2-25-1+(i*15),lcddev.height/2-12-26-1+(i*11),lcddev.width/2-10-1+(i*15),lcddev.height/2-12+(i*11));
|
||||
}
|
||||
HAL_Delay(1500);
|
||||
LCD_Fill(0,20,lcddev.width,lcddev.height-20,WHITE);
|
||||
for(i=0;i<5;i++)
|
||||
{
|
||||
POINT_COLOR=ColorTab[i];
|
||||
Fill_Triangel(lcddev.width/2-40+(i*15),lcddev.height/2-12+(i*11),lcddev.width/2-25-1+(i*15),lcddev.height/2-12-26-1+(i*11),lcddev.width/2-10-1+(i*15),lcddev.height/2-12+(i*11));
|
||||
}
|
||||
HAL_Delay(1500);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void Chinese_Font_test(void)
|
||||
* @date :2018-08-09
|
||||
* @function :chinese display test
|
||||
* @parameters :None
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void Chinese_Font_test(void)
|
||||
{
|
||||
DrawTestPage("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
Show_Str(10,25,BLUE,YELLOW,"16X16:ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD>ӭ",16,0);
|
||||
Show_Str(10,45,BLUE,YELLOW,"24X24:<3A><><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>",24,1);
|
||||
Show_Str(10,70,BLUE,YELLOW,"32X32:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",32,1);
|
||||
HAL_Delay(1200);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void Pic_test(void)
|
||||
* @date :2018-08-09
|
||||
* @function :picture display test
|
||||
* @parameters :None
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void Pic_test(void)
|
||||
{
|
||||
DrawTestPage("ͼƬ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
//LCD_Fill(0,20,lcddev.width,lcddev.height-20,WHITE);
|
||||
Gui_Drawbmp16(20,30,gImage_qq);
|
||||
Show_Str(20+12,75,BLUE,YELLOW,"QQ",16,1);
|
||||
Gui_Drawbmp16(70,30,gImage_qq);
|
||||
Show_Str(70+12,75,BLUE,YELLOW,"QQ",16,1);
|
||||
// Gui_Drawbmp16(150,30,gImage_qq);
|
||||
// Show_Str(150+12,75,BLUE,YELLOW,"QQ",16,1);
|
||||
HAL_Delay(1200);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* @name :void Rotate_Test(void)
|
||||
* @date :2018-08-09
|
||||
* @function :rotate test
|
||||
* @parameters :None
|
||||
* @retvalue :None
|
||||
******************************************************************************/
|
||||
void Rotate_Test(void)
|
||||
{
|
||||
uint8_t i=0;
|
||||
uint8_t *Direction[4]={"Rotation:0","Rotation:90","Rotation:180","Rotation:270"};
|
||||
|
||||
for(i=0;i<4;i++)
|
||||
{
|
||||
LCD_direction(i);
|
||||
DrawTestPage("<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
Show_Str(20,30,BLUE,YELLOW,Direction[i],16,1);
|
||||
Gui_Drawbmp16(30,50,gImage_qq);
|
||||
HAL_Delay(1000);HAL_Delay(1000);
|
||||
}
|
||||
LCD_direction(USE_HORIZONTAL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user