日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

EmWin学习课堂_小白EmWin_EmWin快速入门_EmWin动态内存,显示和触摸屏_EmWin基础配置

發布時間:2023/12/24 综合教程 29 生活家
生活随笔 收集整理的這篇文章主要介紹了 EmWin学习课堂_小白EmWin_EmWin快速入门_EmWin动态内存,显示和触摸屏_EmWin基础配置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、先說說什么是EmWin,它就是一款中間軟件包,弄好了之后,我們的界面設計就會變得很簡單,在電腦GUI_Builder上做一個界面,生成.c文件,復制到自己的工程里面,我們的顯示屏就能得到一模一樣的功能。

二、在我們使用一個帶觸摸和顯示器的系統的時候,首先就是驅動他們,做完了就應該是這樣的:

也就是說我們的系統首先得有一個帶觸摸(不帶也行)的系統,接著就是把這兩個東西和EmWin關聯起來。

三、EmWin基本上算是一個“系統”,一個調度顯示和觸摸的系統,系統也得有自己的地方,就是他需要自己的運行內存。

四、所以把EmWin移植到我們的開發板上我們需要以下三步:

1、給EmWin一個運行內存

2、把觸摸得到的坐標點數據交給EmWin

3、讓EmWin能夠在顯示屏上作圖,控制顯示器

具體實現起來:

1、添加與EmWin有關的所有的文件,既然使用了EmWin,我們就應該可以找到文件夾,在我們的工程文件夾下加上一個EmWin文件夾,包括如下內容:

里面具體什么不加以贅述,就是從EmWin的lib里面直接粘貼過來,最終在文件里面加上這些就可以了:

在demo里面是一些界面,都是由GUI_Builder做出來的,再經過調用就可以顯示出來了。

倒數第二個lib格式的文件對應的是keil,是EmWin的庫文件,換言之我們不可見的,最核心的文件。使用IAR的話就添加一個IAR的lib就好

其余的文件就是關聯和配置用的,我們下面來說說:

2、先給EmWin分配動態內存,

在GUIConfig.c文件里面:

#define USE_EXRAM  1    //    "1" 使用外部RAM
//設置EMWIN內存大小
#define GUI_NUMBYTES  (50*1024)
#define GUI_BLOCKSIZE 0X8000  //塊大小


//GUI_X_Config
//初始化的時候調用,用來設置emwin所使用的內存
void GUI_X_Config(void) {
	if(USE_EXRAM) //使用外部RAM
	{
		U32 *aMemory = Mem_malloc(EXSRAM,GUI_NUMBYTES); //從外部SRAM中分配GUI_NUMBYTES
//字節的內存
		GUI_ALLOC_AssignMemory((void*)aMemory, GUI_NUMBYTES); //為存儲管理系統分配一個
//存儲塊
		GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE); //設置存儲快的平均尺寸,該區越大,可用的存
//儲快數量越少
		GUI_SetDefaultFont(GUI_FONT_6X8); //設置默認字體
	}else        //使用內部RAM
	{
		U32 *aMemory = Mem_malloc(INSRAM,GUI_NUMBYTES); //從內部RAM中分配GUI_NUMBYTES字
//節的內存
		GUI_ALLOC_AssignMemory((U32 *)aMemory, GUI_NUMBYTES); //為存儲管理系統分配一個存
//儲塊
		GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE); //設置存儲快的平均尺寸,該區越大,可用的存
//儲快數量越少
		GUI_SetDefaultFont(GUI_FONT_6X8); //設置默認字體
	}
}

我這個例程里面的地址是由mem_malloc函數分配的,但是事實上我們只是把相應的內部或者是外部RAM地址交給EmWin就好了,使用的函數是這兩個:

GUI_ALLOC_AssignMemory((void*)aMemory, GUI_NUMBYTES);
GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);

3、把顯示屏幾交給EmWin,具體首先應該實現顯示屏的驅動,也就是可以在顯示屏上畫色塊,畫點,寫文字,接著就是替換函數,簡言之就是告訴EmWin“我是這么畫這個點的,你要是畫點的話就用這個函數啊!”,EmWin在構造一個界面的時候就會“好,我們就在這里畫吧,一個點一個點畫,怎么畫點呢?就調用程序員給我的這個函數好了”,于是就實現了EmWin對顯示屏LCD的控制:

在GUIDRV_Template.c文件里:

static void _SetPixelIndex(GUI_DEVICE * pDevice, int x, int y, int PixelIndex) 
{
   LCD_Color_DrawPoint(x,y,PixelIndex);	
}

這個函數就是EmWin用于畫點的函數,里面的函數是我們畫點的函數:

/****************************************************************************
* 名    稱: void LCD_Color_DrawPoint(u16 x,u16 y,u16 color)
* 功    能:在設置的坐標處畫相應顏色(在該點寫入自定義顏色)
* 入口參數:x:x坐標
            y:y坐標
            color 此點的顏色值
* 返回參數:無
* 說    明:color:寫入此點的顏色值   UCGUI調用該函數
****************************************************************************/
void LCD_Color_DrawPoint(u16 x,u16 y,u16 color)
{	       
	 if(lcd_id==0X9341)
		{
			LCD_CMD=setxcmd; 
			LCD_DATA=(x>>8); 
			LCD_DATA=(x&0XFF);	 
			LCD_CMD=setycmd; 
			LCD_DATA=(y>>8); 
			LCD_DATA=(y&0XFF);
		}
	  else
		{
			if(dir_flag==1)x=lcd_width-1-x;  //橫屏就是調轉x,y坐標
			LCD_WriteReg(setxcmd,x);
			LCD_WriteReg(setycmd,y);
    }			
	  LCD_CMD=write_gramcmd; 
	  LCD_DATA=color; 
}	 

能看出來,這個就是我們經常用于畫點的函數,以及到了基礎的寄存器寫入了,就是我們平常做的畫點。

至此,EmWin就可以在我們的顯示屏上畫圖了。

4、接著就是把觸摸屏的數據交個EmWin

在GUI_X_Touch_Analog.c 文件里:

int  GUI_TOUCH_X_MeasureX(void) 
{
	return RTouch_Read_XorY(0xD0);  //CMD_RDX=0XD0
}


int  GUI_TOUCH_X_MeasureY(void) 
{	
	return RTouch_Read_XorY(0x90);  //CMD_RDY=0X90
}

這兩個函數都是EmWin直接調用的,返回值就是我們的觸摸屏的返回值就好,打開用作返回的兩個函數:

/****************************************************************************
* 名    稱: u16 RTouch_Read_XorY(u8 xy)
* 功    能:讀取一個坐標值(x或者y)
* 入口參數:xoy:指令(CMD_RDX/CMD_RDY
* 返回參數: 讀到的數據	   
* 說    明:連續讀取5次數據,對這些數據升序排列, 然后去掉最低和最1個數,取平均值       
****************************************************************************/ 
u16 RTouch_Read_XorY(u8 xoy)
{
	u16 i, j;
	u16 buf[5];
	u16 sum=0;
	u16 temp;
	
	for(i=0;i<5;i++)buf[i] = SPI_Read_AD(xoy);		 		    
	for(i=0;i<5-1; i++)  //排序
	{
		for(j=i+1;j<5;j++)
		{
			if(buf[i]>buf[j])//升序排列
			{
				temp=buf[i];
				buf[i]=buf[j];
				buf[j]=temp;
			}
		}
	}	  
	sum=0;
	for(i=1;i<5-1;i++)sum+=buf[i];
	temp=sum/(5-2*1);
	return temp;   
} 

而那兩個函數由GUI_TOUCH_Exec()函數,這個EmWin內部函數調用,這個函數就是掃描函數,定時掃描就好:

void TIM4_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM4,TIM_IT_Update)==SET) //溢出中斷
	{
		TIM_ClearITPendingBit(TIM4,TIM_IT_Update);  //清除中斷標志位
		GUI_TOUCH_Exec();
	}
}

定時器一定時間中斷一次,掃描一下。
我們這樣就將所有的有關于顯示觸摸的東西交給EmWin了

5、綜上,首先有一個好使的帶觸摸屏系統,然后添加EmWin有關文件,之后把動態內存地址交給EmWin(動態內存地址不是片內RAM地址就是FSMC分配的片外RAM地址),把顯示屏畫點的權利交給EmWin,把觸摸屏讀點的權利交給EmWin。就可以通過在main函數里用GUI_INIT函數初始化EmWin,再調用demo里面的maintask();就可以實現票亮的界面了。

五、補充:以上是移植所需要的最主干的東西,具體的移植步驟我很快還會推出,另外剛才的獲取觸摸的方法不唯一,安富萊V6做的也很漂亮,我也會去寫。

總結

以上是生活随笔為你收集整理的EmWin学习课堂_小白EmWin_EmWin快速入门_EmWin动态内存,显示和触摸屏_EmWin基础配置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲区欧美 | 中文在线字幕免费观看 | xxxxx69| 伊人久久免费视频 | 亚洲国产精品网站 | 日韩欧美一二三区 | 日韩成人免费电影 | 日本视频在线播放 | 欧美刺激性大交 | 97中文字幕| 国产亚洲一区在线 | 不卡的毛片 | 青青草草 | 欧美精品色 | 国产无遮挡免费观看视频网站 | 欧美日韩国产中文字幕 | 日韩视频免费观看高清完整版在线观看 | 欧美体内谢she精2性欧美 | 国产suv精品一区二区四 | 理论片久久| 亚洲欧美一级 | 波多野结衣视频免费观看 | 日本亚洲高清 | 亚欧三级 | 国产又黄又爽又色 | 国产经典久久久 | 欧美精品久久久久久久久久 | 在线97视频 | 献给魔王伊伏洛基亚吧动漫在线观看 | 久草网在线观看 | 日本一区二区三区精品 | 久久久久久久黄色 | 国产aⅴ爽av久久久久成人 | 黄色片中文字幕 | 成人在线视频免费播放 | 成人在线直播 | 淫欲av | 性开放耄耋老妇hd | 97香蕉碰碰人妻国产欧美 | 中文字幕第100页 | 久久精品欧美日韩精品 | 日韩一级色 | 91重口味| 国产白丝av | 91av片| 天天干干干干干 | 国产欧美一区二区三区在线 | 一区二区不卡在线观看 | 国产二级一片内射视频播放 | 日本中文字幕在线看 | 日韩精品一区二区三区 | 免费精品在线视频 | 日日干日日爽 | 尤物综合网 | 欧美极品一区二区 | 欧美a∨| 制服诱惑一区二区 | 国产吞精囗交久久久 | yy6080午夜| 九色精品在线 | 91最新入口 | 国产高清一级片 | 无码人中文字幕 | 国产精品-色哟哟 | www黄色av| 人妻换人妻a片爽麻豆 | 人人射 | 亚洲精品久久久久久久蜜桃 | 人妖干美女 | 成人黄色片免费 | 天天视频亚洲 | av网站在线免费看 | 国产探花在线精品一区二区 | 欧美性xxxxx极品少妇 | 在线免费观看日韩 | 国产一区在线看 | 大战熟女丰满人妻av | 日日嗨av一区二区三区四区 | 思思99re| 美国三级视频 | 精品国产91久久久久久久妲己 | 精品少妇一区二区三区密爱 | 老色批永久免费网站www | 欧美性受xxxx白人性爽 | 蜜桃精品一区二区 | 999色综合| 亚洲精品无吗 | 久久精品亚洲精品 | 视频在线观看视频 | 首尔之春在线观看 | 亚洲视频精品在线观看 | 日韩欧美黄色大片 | 国模私拍一区二区 | 日本人妖网站 | 国产男女无套免费网站 | 四川操bbb| 亚洲Av无码成人精品区伊人 | 少妇高潮露脸国语对白 | 亚洲国产tv |