• 方案介紹
  • 附件下載
  • 推薦器件
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

STM32學(xué)習(xí)記錄-如何屏幕畫取折線圖(函數(shù)代碼)

2024/06/13
2158
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

聯(lián)系方式.docx

共1個文件

實驗效果圖

本次實驗運用到的函數(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顯示器的某一窗口以某種顏色進行清屏
* @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ù)一個圖就會自動清除之后又進行一個循環(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

  • 聯(lián)系方式.docx
    下載

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
STM32H743VIT6TR 1 STMicroelectronics High-performance and DSP with DP-FPU, Arm Cortex-M7 MCU with 2MBytes of Flash memory, 1MB RAM, 480 MHz CPU, Art Accelerator, L1 cache, external memory interface, large set of peripherals

ECAD模型

下載ECAD模型
暫無數(shù)據(jù) 查看
STM32H743XIH6TR 1 STMicroelectronics High-performance and DSP with DP-FPU, Arm Cortex-M7 MCU with 2MBytes of Flash memory, 1MB RAM, 480 MHz CPU, Art Accelerator, L1 cache, external memory interface, large set of peripherals

ECAD模型

下載ECAD模型
暫無數(shù)據(jù) 查看
MCF52259CAG80 1 Rochester Electronics LLC 32-BIT, FLASH, 80MHz, RISC MICROCONTROLLER, PQFP144, 20 X 20 MM, ROHS COMPLIANT, LQFP-144
$17.28 查看
意法半導(dǎo)體

意法半導(dǎo)體

意法半導(dǎo)體(ST)集團于1987年6月成立,是由意大利的SGS微電子公司和法國Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷售收入在半導(dǎo)體工業(yè)五大高速增長市場之間分布均衡(五大市場占2007年銷售收入的百分比):通信(35%),消費(17%),計算機(16%),汽車(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠商,在很多市場居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機頂盒芯片供應(yīng)商,而且在分立器件、手機相機模塊和車用集成電路領(lǐng)域居世界前列.

意法半導(dǎo)體(ST)集團于1987年6月成立,是由意大利的SGS微電子公司和法國Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷售收入在半導(dǎo)體工業(yè)五大高速增長市場之間分布均衡(五大市場占2007年銷售收入的百分比):通信(35%),消費(17%),計算機(16%),汽車(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠商,在很多市場居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機頂盒芯片供應(yīng)商,而且在分立器件、手機相機模塊和車用集成電路領(lǐng)域居世界前列.收起

查看更多

相關(guān)推薦

方案定制

去合作
方案開發(fā)定制化,2000+方案商即時響應(yīng)!

方案定制,程序設(shè)計方案、單片機程序設(shè)計與講解、APP定制開發(fā)。本公眾號致力于向讀者傳遞關(guān)于程序設(shè)計和開發(fā)的相關(guān)知識,并分享一些關(guān)于軟件開發(fā)的最佳實踐。如果您有什么問題或建議,請隨時聯(lián)系我們。我們將竭誠為您服務(wù)