期末大作业-增加显示屏
This commit is contained in:
762
FinalHomework/Core/Src/gui.c
Normal file
762
FinalHomework/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
FinalHomework/Core/Src/lcd.c
Normal file
384
FinalHomework/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;
|
||||
}
|
||||
}
|
||||
@@ -23,7 +23,9 @@
|
||||
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
#include "variable.h"
|
||||
#include "lcd.h"
|
||||
#include "test.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
@@ -44,7 +46,11 @@
|
||||
/* 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 -----------------------------------------------*/
|
||||
@@ -89,7 +95,7 @@ int main(void)
|
||||
MX_GPIO_Init();
|
||||
MX_SPI2_Init();
|
||||
/* USER CODE BEGIN 2 */
|
||||
|
||||
LCD_Init();
|
||||
/* USER CODE END 2 */
|
||||
|
||||
/* Infinite loop */
|
||||
@@ -99,6 +105,19 @@ int main(void)
|
||||
/* 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 (sSysTickTimer.bTimeOk) {
|
||||
sSysTickTimer.bTimeOk = 0;
|
||||
HAL_GPIO_TogglePin(TickLed_GPIO_Port, TickLed_Pin);
|
||||
}
|
||||
}
|
||||
/* USER CODE END 3 */
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ void MX_SPI2_Init(void)
|
||||
hspi2.Instance = SPI2;
|
||||
hspi2.Init.Mode = SPI_MODE_MASTER;
|
||||
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
|
||||
hspi2.Init.DataSize = SPI_DATASIZE_4BIT;
|
||||
hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
|
||||
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
|
||||
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
|
||||
hspi2.Init.NSS = SPI_NSS_SOFT;
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "stm32g4xx_it.h"
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
#include "variable.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
@@ -57,7 +58,9 @@
|
||||
/* External variables --------------------------------------------------------*/
|
||||
|
||||
/* USER CODE BEGIN EV */
|
||||
|
||||
extern stSysTickTimer sSysTickTimer;
|
||||
extern uint16_t mSecCount;
|
||||
extern uint16_t bSecondIsOk;
|
||||
/* USER CODE END EV */
|
||||
|
||||
/******************************************************************************/
|
||||
@@ -187,7 +190,19 @@ void SysTick_Handler(void)
|
||||
/* 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 */
|
||||
}
|
||||
|
||||
|
||||
271
FinalHomework/Core/Src/test.c
Normal file
271
FinalHomework/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