實驗效果圖
本次實驗運用到的函數(shù)
因為大家運用到的屏幕可能不同,所以這里我只貼了功能函數(shù),大家可以根據(jù)具體的修改
畫直線的函數(shù)
/**
* @brief ?在 ILI9341 顯示器上使用 Bresenham 算法畫線段
* @param ?usX1 :在特定掃描方向下線段的一個端點X坐標(biāo)
* @param ?usY1 :在特定掃描方向下線段的一個端點Y坐標(biāo)
* @param ?usX2 :在特定掃描方向下線段的另一個端點X坐標(biāo)
* @param ?usY2 :在特定掃描方向下線段的另一個端點Y坐標(biāo)
* @note 可使用LCD_SetBackColor、LCD_SetTextColor、LCD_SetColors函數(shù)設(shè)置顏色
* @retval 無
*/
void ILI9341_DrawLine ( uint16_t usX1, uint16_t usY1, uint16_t usX2, uint16_t usY2 );
局部清屏函數(shù)
/**
* @brief ?對ILI9341顯示器的某一窗口以某種顏色進(jìn)行清屏
* @param ?usX :在特定掃描方向下窗口的起點X坐標(biāo)
* @param ?usY :在特定掃描方向下窗口的起點Y坐標(biāo)
* @param ?usWidth :窗口的寬度
* @param ?usHeight :窗口的高度
* @note 可使用LCD_SetBackColor、LCD_SetTextColor、LCD_SetColors函數(shù)設(shè)置顏色
* @retval 無
*/
void ILI9341_Clear ( uint16_t usX, uint16_t usY, uint16_t usWidth, uint16_t usHeight )
如何畫
第一步
首先是X軸和Y軸,先確定屏幕的字模方向,在屏幕中畫出X與Y軸
第二步
建立一個數(shù)值來儲存數(shù)據(jù)
這個數(shù)組會保存數(shù)據(jù)的起始坐標(biāo)與結(jié)束坐標(biāo),實現(xiàn)畫出一條連接的直線
#define NUM 8
typedef struct
{
uint16_t start_x; //按鍵的x起始坐標(biāo)
uint16_t start_y; //按鍵的y起始坐標(biāo)
uint16_t end_x; //按鍵的x結(jié)束坐標(biāo)
uint16_t end_y; //按鍵的y結(jié)束坐標(biāo)
uint32_t num; //數(shù)值
}XL_Num;
第三步
實現(xiàn)數(shù)據(jù)的保存,以及實現(xiàn)坐標(biāo)的自動演算保證與上一個點連接,這里有個判斷是不是第一個數(shù)據(jù)點,如何是的化就是從起始點來,如果不是就直接按照方位遞增(這里我是保存到flash里面之后再從里面拿數(shù)據(jù),可以省去這一步)
/*圖像結(jié)構(gòu)體數(shù)組*/
XL_Num Num[NUM];
void draw_X_Y(u8 i){
u8 j;
//生成數(shù)據(jù)保存到flash
InternalFlash(0X00 ,RandNum());
if(i>0){
Num[i].start_x = Num[i-1].end_x;
Num[i].start_y = Num[i-1].end_y ;
Num[i].end_x = 30+i*30;
Num[i].end_y = 210-Read_flash(0X00);
//讀取flash數(shù)據(jù)
Num[i].num = Read_flash(0X00) ;
}else{
Num[i].start_x = 30;
Num[i].start_y = 205;
Num[i].end_x = 30;
Num[i].end_y = 210-Read_flash(0X00);
//讀取flash數(shù)據(jù)
Num[i].num = Read_flash(0X00) ;
}
}
RandNum()函數(shù)是產(chǎn)生隨機數(shù)據(jù)的一個功能函數(shù)
int b;
/**
* @brief 生成隨機數(shù)據(jù)
* @param None
* @retval int a=m+rand()%(n-m+1);
*/
int RandNum(void){
int a;
b = 0+rand()%1500;
printf("隨機產(chǎn)生1個[50,150)范圍內(nèi)隨機數(shù):nn");
srand(b); //用時間作種子
b++;
if(b>100)
b=0;
//srand(time(0));
a = 50+rand()%100;
printf("隨機數(shù)為:%d",a);
return a;
}
第四步
只是主要程序,因為數(shù)組大小是8,所以當(dāng)保存了第八數(shù)一個圖就會自動清除之后又進(jìn)行一個循環(huán)的顯示
while ( 1 )
{
delay_ms(10);
time++;
if(time == 10){
draw_X_Y(i);
//ILI9341_Clear(40,0,LCD_X_LENGTH,190);
i++;
time=0;
xl_avge=0;
xl_avge= (Num[0].num+Num[1].num+Num[2].num+Num[3].num+Num[4].num+Num[5].num+Num[6].num+Num[7].num)/8 ;
if(i>7){
i=0;
ILI9341_Clear(33,0,LCD_X_LENGTH,190);
//xl_avge= (Num[0].num+Num[1].num+Num[2].num+Num[3].num+Num[4].num+Num[5].num+Num[6].num+Num[7].num)/8 ;
for(q=0;q<i;q++){
ILI9341_DrawLine(Num[q].start_x,Num[q].start_y,Num[q].end_x,Num[q].end_y) ;
sprintf((char*)str,"%d",Num[q].num);
ILI9341_DispString_EN(Num[q].end_x,Num[q].end_y,str);
}
}
for(q=0;q<i;q++){
ILI9341_DrawLine(Num[q].start_x,Num[q].start_y,Num[q].end_x,Num[q].end_y) ;
sprintf((char*)str,"%d",Num[q].num);
ILI9341_DispString_EN(Num[q].end_x,Num[q].end_y,str);
}
if(xl_avge<100){
sprintf((char*)string,"heart- rate: %d",xl_avge);
}else{
sprintf((char*)string,"heart rate: %d",xl_avge);
}
ILI9341_DispString_EN(60,210,string);
}
//觸摸檢測函數(shù),本函數(shù)至少10ms調(diào)用一次
// XPT2046_TouchEvenHandler();
}
聯(lián)系方式 微信號:13648103287