//////////////////////////////////////////////////////////////////////////////////	 
//本程序只供学习使用，未经作者许可，不得用于其它任何用途
//测试硬件：单片机CH552,主频16MHz  单片机工作电压3.3V
//xiao冯@ShenZhen QDtech co.,LTD
//公司网站:www.qdtft.com
//淘宝网站：http://qdtech.taobao.com
//wiki技术网站：http://www.lcdwiki.com
//我司提供技术支持，任何技术问题欢迎随时交流学习
//固话(传真) :+86 0755-23594567 
//手机:15989313508（冯工） 
//邮箱:lcdwiki01@gmail.com    support@lcdwiki.com    goodtft@163.com
//技术支持QQ:3002773612  3002778157
//技术交流QQ群:324828016
//创建日期:2022/6/7
//版本：V1.0
//版权所有，盗版必究。
//Copyright(C) 深圳市全动电子技术有限公司 2018-2028
//All rights reserved
//********************************************************************************
//=========================================电源接线================================================//
//VCC 接DC 3.3V电源
//GND接地
//=======================================液晶屏数据线接线==========================================//
//本模块默认数据总线类型为SPI
//液晶屏模块            单片机
// SDA(MOSI)     接       P15        //SPI写信号
//=======================================液晶屏控制线接线==========================================//
//液晶屏模块            单片机
//  CS           接       P14       //片选控制信号
//  RESET        接       P11       //复位信号（模块有复位电路，该引脚可以不接）
//  DC           接       P10       //数据/命令选择控制信号
//  SCK          接       P17       //SPI时钟信号
//  LED          接       P32       //背光控制信号，如果不需要控制，接3.3V
//**************************************************************************************************/		
#include "lcd.h"
#include "gui.h"
#include "test.h"
#include <stdlib.h>

u16 ColorTab[5]={RED,GREEN,BLUE,YELLOW,BRED};//定义颜色数组

/*****************************************************************************
 * @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)
{
	LCD_Fill(0,0,lcddev.width-1,lcddev.height-1,WHITE);
	mDelaymS(800);
	LCD_Fill(0,0,lcddev.width-1,lcddev.height-1,BLACK);
	mDelaymS(800);
	LCD_Fill(0,0,lcddev.width-1,lcddev.height-1,RED);
	mDelaymS(800);
	LCD_Fill(0,0,lcddev.width-1,lcddev.height-1,GREEN);
	mDelaymS(800);
	LCD_Fill(0,0,lcddev.width-1,lcddev.height-1,BLUE);
	mDelaymS(800);
}

void Test_Point(void)
{
	u16 i;
	srand(123456);
	LCD_Fill(0,0,lcddev.width-1,lcddev.height-1,BLACK);
	for(i=0;i<5000;i++)
	{
		LCD_DrawPoint(rand()%lcddev.width,rand()%lcddev.height,rand()%0xFFFF);
		mDelayuS(500);
	}
}

void Test_Line(void)
{
	u16 i;
	LCD_Fill(0,0,lcddev.width-1,lcddev.height-1,BLACK);
	for(i=0;i<lcddev.height;i+=5)
	{
		LCD_DrawLine(0, i, i, lcddev.height-1, RED);
		mDelayuS(500);
	}
	for(i=lcddev.height-1;i>5;i-=5)
	{
		LCD_DrawLine(lcddev.width-1, i, i, 0, RED);
		mDelayuS(500);
	}
	for(i=lcddev.height-1;i>5;i-=5)
	{
		LCD_DrawLine(0, i, lcddev.height-1-i, 0, 0x07FF);
		mDelayuS(500);
	}
	for(i=0;i<lcddev.height-1;i+=5)
	{
		LCD_DrawLine(lcddev.width-1, i, lcddev.width-1-i, lcddev.height-1, 0x07FF);
		mDelayuS(500);
	}
	mDelaymS(1000);
}

/*****************************************************************************
 * @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)
{
	u8 i=0;
	LCD_Fill(0,0,lcddev.width-1,lcddev.height-1,WHITE);
	for (i=0; i<5; i++) 
	{
		LCD_DrawRectangle(lcddev.width/2-65+(i*15),lcddev.height/2-65+(i*15),lcddev.width/2-65+(i*15)+60,lcddev.height/2-65+(i*15)+60,ColorTab[i]); 
	}
	mDelaymS(1500);	
	LCD_Fill(0,20,lcddev.width-1,lcddev.height-20,WHITE); 
	for (i=0; i<5; i++) 
	{
		LCD_DrawFillRectangle(lcddev.width/2-65+(i*15),lcddev.height/2-65+(i*15),lcddev.width/2-65+(i*15)+60,lcddev.height/2-65+(i*15)+60,ColorTab[i]); 		
	}
	mDelaymS(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)
{
	u8 i=0;
	LCD_Fill(0,0,lcddev.width-1,lcddev.height-1,WHITE);
	for (i=0; i<5; i++)  
		gui_circle(lcddev.width/2-65+(i*25),lcddev.height/2-50+(i*25),ColorTab[i],30,0);
	mDelaymS(1500);	
	LCD_Fill(0,20,lcddev.width-1,lcddev.height-20,WHITE); 
	for (i=0; i<5; i++) 
	  	gui_circle(lcddev.width/2-65+(i*25),lcddev.height/2-50+(i*25),ColorTab[i],30,1);
	mDelaymS(1500);
}

/*****************************************************************************
 * @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)
{
	u8 i=0;
	LCD_Fill(0,0,lcddev.width-1,lcddev.height-1,WHITE);
	for(i=0;i<5;i++)
	{
		Draw_Triangel(lcddev.width/2-80+(i*20),lcddev.height/2-20+(i*15),lcddev.width/2-50-1+(i*20),lcddev.height/2-20-52-1+(i*15),lcddev.width/2-20-1+(i*20),lcddev.height/2-20+(i*15),ColorTab[i]);
	}
	mDelaymS(1500);	
	LCD_Fill(0,20,lcddev.width,lcddev.height-20,WHITE); 
	for(i=0;i<5;i++)
	{
		Fill_Triangel(lcddev.width/2-80+(i*20),lcddev.height/2-20+(i*15),lcddev.width/2-50-1+(i*20),lcddev.height/2-20-52-1+(i*15),lcddev.width/2-20-1+(i*20),lcddev.height/2-20+(i*15),ColorTab[i]);
	}
	mDelaymS(1500);
}

void Test_RoundRectangle(void)
{
		u8 i=0;
	LCD_Fill(0,0,lcddev.width-1,lcddev.height-1,WHITE);
	for (i=0; i<5; i++) 
	{
		LCD_DrawRoundRectangle(lcddev.width/2-65+(i*15),lcddev.height/2-65+(i*15),lcddev.width/2-65+(i*15)+60,lcddev.height/2-65+(i*15)+60,8,ColorTab[i]); 
	}
	mDelaymS(1500);	
	LCD_Fill(0,20,lcddev.width-1,lcddev.height-20,WHITE); 
	for (i=0; i<5; i++) 
	{
		LCD_FillRoundRectangle(lcddev.width/2-65+(i*15),lcddev.height/2-65+(i*15),lcddev.width/2-65+(i*15)+60,lcddev.height/2-65+(i*15)+60,8,ColorTab[i]); 		
	}
	mDelaymS(1500);
}

void Test_Chess_Board(void)
{
	u8 i,j,m=24;
	u16 color1,color2;
	for(i=0;i<(lcddev.height/m);i++)
	{
		if(i%2)
		{
			color1=BLACK;
			color2=WHITE;
		}
		else
		{
			color1=WHITE;
			color2=BLACK;				
		}
		for(j=0;j<(lcddev.width/m/2);j++)
		{
			LCD_Fill(j*2*m,i*m,(j*2+1)*m-1,(i+1)*m-1,color1);
			LCD_Fill((j*2+1)*m,i*m,(j*2+2)*m-1,(i+1)*m-1,color2);
		}
	}
	mDelaymS(1500);
}