日韩性视频-久久久蜜桃-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基础配置的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 精品人妻一区二区三区日产乱码卜 | 欧美日韩中文国产一区发布 | 人人爽av | 国产一区二区免费视频 | 欧美特级毛片 | 亚洲免费专区 | 阿v视频在线免费观看 | 西野翔之公侵犯中文字幕 | 久久只有这里有精品 | 亚洲美女av在线 | 好av在线 | 黄色片免费的 | 91免费国产 | 国产亚州av | av色先锋 | 青青草原国产 | www.男人的天堂.com | 午夜激情四射 | 长腿校花无力呻吟娇喘的视频 | 日本在线加勒比 | 在线观看免费的av | 国产欧美日韩91 | 黄色片子免费看 | 亚洲欧美经典 | 日本在线视频www | 欧美三个黑人玩3p | 中文有码在线播放 | 女人叫床高潮娇喘声录音mp3 | 嫩草视频在线观看免费 | 高清一区二区三区四区 | 成人黄色av网址 | 日韩福利小视频 | 欧美91精品久久久久国产性生爱 | 中国美女囗交视频 | 全程粗话对白视频videos | 无码熟妇αⅴ人妻又粗又大 | 国产私人影院 | 91chinese在线| 久久99在线 | 日韩人妻精品一区二区三区 | 在线观看av不卡 | 日本在线视频www色 国产在线视频网址 | 手机福利视频 | 在线观看深夜视频 | 波多野结衣一本一道 | 男人天堂v | 色欲久久久天天天精品综合网 | 美女打屁股网站 | 驯服少爷漫画免费观看下拉式漫画 | 禁止18在线观看 | 欧美亚洲日本 | 天天操夜夜操 | 深爱激情综合网 | 永久免费在线 | av在线免费观看一区 | 神马影院午夜伦理 | 国产成人91 | 黄色片在线观看免费 | 四虎最新站名点击进入 | 久久av综合网 | 99国产精品99| 另类激情综合 | 成人中文视频 | gai视频在线观看资源 | 97人人澡 | 欧美三区在线观看 | 91原视频 | 丝袜美腿亚洲一区二区图片 | 特一级黄色大片 | 亚洲综合三区 | 在线观看久草 | av无遮挡 | 91av精品| 亚洲av综合色区无码二区爱av | 福利社午夜影院 | 欧美乱妇视频 | 亚洲九九九九 | 日韩av线 | 国产乱强伦一区二区三区 | 求欧美精品网址 | 蜜臀久久99精品久久久无需会员 | 亚洲日本japanese丝袜 | 成人黄色大全 | 日本福利片在线观看 | 欧洲天堂网 | 国产综合亚洲精品一区二 | 一卡二卡三卡四卡在线 | 欧美无吗| 国产在线国偷精品免费看 | 精品无码久久久久 | 今天最新中文字幕mv高清 | 四虎福利视频 | 国产精品卡一卡二 | 快播怡红院 | 污污视频在线观看网站 | 午夜操一操 | julia一区二区三区在线观看 | 中文字幕乱妇无码av在线 | 国产 福利 在线 |