第一篇:嵌入式系統設計基礎總結報告
嵌入式系統設計基礎
嵌入式系統設計基礎
結題報告
學
生1: 學
生2: 學
生3: 組
長: 組長電話: 指導老師: 完成時間:
嵌入式系統設計基礎
目錄
目錄....................................................................2 摘 要...................................................................3
一、課題概述...........................................................4
二、課題實施方案.......................................................4
2.1 方案說明........................................................4
2.1.1 LCD圖像顯示模塊設計方案..................................4 2.1.2 觸摸屏模塊設計方案........................................5 2.1.3 音樂播放模塊設計方案......................................5 2.1.4 鍵盤模塊設計方案..........................................6 2.2 工程規范........................................................6
三、課題實施過程詳述...................................................6
四、系統測試方法.......................................................8
五、結果分析...........................................................8
六、總結................................................................9 參考文獻................................................................9 附錄....................................................................9
嵌入式系統設計基礎
摘 要
隨著智能手機和平板電腦等便攜式設備的興起,ARM已經成為全球領先的半導體知識產權提供商,全世界超過95%的智能手機和平板電腦都采用ARM架構。ARM技術具有性能高、成本低和能耗省的特點。本文旨在初步接觸嵌入式ARM技術。我們使用了天嵌TQ2440開發板以及ADS1.2來進行相關實驗,主要制作了一個帶背景音樂、可以使用觸摸屏和鍵盤進行前后照片切換的數碼相框。通過這次實驗,我們對ARM技術有了一個初步的認識和了解,同時也掌握了一些編程和調試技術。
關鍵詞:嵌入式,LCD圖像顯示,觸摸屏
Abstract With the development of the smartphone and tablet computer, ARM has already become a leading semiconductor intellectual property provider in global market.More than 95% of the smartphone and tablet computer use the ARM framework.ARM has the advantages in performance, cost and efficiency.This paper aim at having a rough contact with embedded ARM and we use TQ2440 and ADS1.2 to conduct relevant experiments.Generally, we have made a digital album which can be controlled by touch panel.Through this experiment, we have grown a general acknowledge of ARM technology and master some coding and debugging technology.Keywords:embedded system, LCD display, touchpanel 3
嵌入式系統設計基礎
一、課題概述
本文展示了一個使用ARM技術制作而成的帶有背景音樂并且可以通過觸摸屏和鍵盤控制的數碼相框。數碼相框在當今市面上也有銷售,其功能主要是放映照片,絕大部分能夠通過無線或藍牙與移動設備進行連接,以達到實時放映的效果。我們所制作的數碼相框總體而言功能并不是很強大,但也符合數碼相框的基本原理并且實現了基本功能。本課題的核心問題是如何實現觸摸屏精確地點擊、圖像切換顯示還有音樂播放功能。
二、課題實施方案
本課題的基本設計方案分為四個模塊,LCD圖像顯示模塊、觸摸屏模塊、音樂播放模塊以及鍵盤模塊。整體的設計流程為首先完成在TQ2440開發板液晶顯示屏上顯示出六張自定義圖像;然后實現按鍵控制圖像的切換;再加入對觸摸屏的操作,使得能夠使用觸摸屏切換圖像;最后加上PWM蜂鳴器播放音樂的功能。
2.1 方案說明
2.1.1 LCD圖像顯示模塊設計方案
為了實現帶有背景音樂并且能夠使用觸摸屏控制的數碼相框,我們首先要能夠在開發板的顯示屏上顯示用戶自定義的照片。由于我們所使用的開發板配備的是4.3寸的顯示屏,所以圖片尺寸要設定為480*272才能完美適應屏幕大小。在程序代碼中,顯示圖片的功能由Paing_Bmp定義,具體為Paint_Bmp(0, 0, 480, 272, TQ_LOGO),其中,480、272對應的是要顯示的照片的尺寸,因為我們用的是4.3寸屏,所以設定為480、272;而TQ_LOGO是圖片的名稱,名稱由用戶自己定義,這里的TQ_LOGO對應的是開發板開機顯示的第一張LOGO照片。照片的顯示本質上是對屏幕上每一個像素點賦值的過程,不斷賦值的一個過程其實就是實現了對LCD的每個像素點進行逐行掃描寫入不同像素點對應圖片的不同位置的顏色值的過程。
圖 1.像素掃描原理
因此,只要將圖片的每一個像素點的值寫入程序,就能夠實現照片顯示的功能。這里我們使用了天嵌科技光盤附帶的bmp2h程序,將一個BMP圖片文件轉換為帶有每行像素值的C文件,然后將C文件中的代碼復制到LCD顯示程序代碼下,即可實現照片顯示功能。
另外,由于480*272照片文件容量較大,缺省的內存設置無法滿足顯示6張照片的功能,會導致顯示花屏。針對這個問題,我們是在nand.c文件中修改RdNF2SDRAM()函數中的U32 size = 0x100000,我們改成U32 size = 0x800000,這樣就滿足了照片顯示的內存需求。
嵌入式系統設計基礎
2.1.2 觸摸屏模塊設計方案
四線電阻式觸摸屏硬件工作原理按照工作原理和傳輸信息的介質不同,觸摸屏分為電阻式、電容感應式、紅外線式以及表面聲波式。由于電阻式觸摸屏具有工作面與外界完全隔離,受環境影響較小,具有不怕灰塵和水汽、穩定性高、不漂移等優點,特別適合工業現場使用。因此我們選擇了四線電阻式觸摸屏。
我們使用觸摸屏進行相冊的前進和后退,具體來說,就是觸摸屏幕上半部分,就跳轉到前一張照片;反之,觸摸下半部分,就跳轉到下一張照片。實現該功能的關鍵在于設置一個標志位來判斷當前放映的是6張照片中的哪一張,當xdata>500時,判斷為下半部分;xdata<500時,判斷為上半部分,然后一旦觸摸屏幕,在判斷觸摸的是哪一個部分后就會進行加一或減一,以此循環。具體實現就是在LCD代碼的while(1)中,加入一段判斷選擇程序,其中xdata對應的是屏幕的豎軸,ydata對應橫軸。
另外,由于觸控比較靈敏,會出現輕輕按一下卻切換了好幾張照片的情況,為了解決這個問題,就需要加入一段中斷以及判斷按下和松開狀態。
圖 2.狀態轉換圖
2.1.3 音樂播放模塊設計方案
S3C2440A 有五個十六位計時器。計時器 0, 1, 2, 和3有 Pulse Width Modulation(PWM)功能.計時器4 只有一個內部計時器,沒有外部輸出管腳。定時器0 有一個死區發生器,這可以給大電流設備使用。
定時器0和1共用一個8位預分頻器,而定時器2、3和4共用其他一個8位預分頻器。每個定時器有一個時鐘分頻器,可以生成5種不同的信號(1 / 2,1 / 4,1/ 8,1 / 16,和TCLK)。每個定時器模塊,接收從其自己的時鐘分頻器發出的信號,收到相應的8位預分頻器的時鐘的時鐘信號的時候。8位預分頻器是可編程的,并且可以根據存儲在TCFG0和TCFG1寄存器中的裝載值細分(確定)像素時鐘PCLK。
當計時器時使能的時候,該計時器的計數緩沖寄存器(TCNTBn)初始化,同時裝載初始值到向下計數器當中。計時器的比較緩沖寄存器(TCMPBn)初始化的時候,自動裝載一個初始值,用來和向下計數器的值進行比較。這種雙重緩沖寄存器的機構,TCNTBn和TCMPBn,使計時器可以在PWM頻率和占空比改變的時候保持穩定的PWM輸出。
每一個定時器都有自己的有機器時鐘驅動的十六位向下計數器。當向下計數器到達零的時候,定時器中斷請求產生并通知CPU,定時器操作已經完成。當定時器向下計數器達 5
嵌入式系統設計基礎
零的時候,相應的TCNTBn將會自動為下一次操作裝載相應的計數值。然而,當計時器被停止的時候,例如,當定時器控制寄存器TCONn的使能位被清零的時候,TCNBn的值就不會被重新裝載進計數器。TCMPBn的值是用于控制脈寬調制(PWM)的。定時器控制當向下計數器的值等于compare的值時,輸出電平邏輯改變。因此,compare寄存器的值決定了PWM的占空比。
我們要調整PWM 的占空比進行電機控制或者電源控制的時候,只需要在程序中不斷修改rTCNTB0 的值就可以了;而如果我們要改變PWM 的頻率,我們只要通過不斷的修改rTCNTB0 的值就可以了(當然也可以通過修改rTCNTB0 =(PCLK>>7)/freq 中的freq 的值來間接實現修改rTCNTB0 的值)。
2.1.4 鍵盤模塊設計方案
我們知道有時觸摸屏會不太好用,比如手濕了或者戴手套的時候,這時有了按鍵功能,就能起到很好的替換效果。我們主要用按鍵功能實現照片的前后切換,其原理和之前觸摸屏切換類似,這里不多撰述。
2.2 工程規范
在本次課題實施中我們就TQ2440開發板實際開發操作方面總結出規范如下:(1)不要著急寫代碼,首先要將設計思路、功能模塊等規劃完成,然后才能進行下一步的工作。這樣做有助于實際操作過程中的條理性,并且可以使項目處于可控、可實現的狀態。
(2)在編寫代碼的時候一定要添加上相應的注釋,增加代碼的可讀性,方便自己以后的修改和別人的理解。
(3)硬件上,接線時一定要仔細。注意串口線連接的位置,因為這涉及到燒錄程序時端口的選擇。
(4)從直觀上看問題。每次修改程序之后先錄入開發板,從顯示屏實際顯示效果上看是否實現功能而不是糾結于程序是否修改正確。
三、課題實施過程詳述
1、實現六張圖像的鍵盤控制切換;
在keyscan.c的static void __irq Key_ISR(void)中加入以下代碼:
if(key == 0xff){flag3=0;Uart_Printf(“Interrupt occur...Key is released!n”);} else{ flag3++;if(flag3 == 8)flag3 = 2;if(flag3 == 1){
if(key == 2 && flag4<=6)
{flag4++;if(flag4==7)flag4=1;}
嵌入式系統設計基礎
else if(key == 1 && flag4<=6){flag4--;if(flag4==-1)flag4=6;} else if(key == 3){flag5=1;Main();}}
Uart_Printf(“Interrupt occur...K%d is pressed!n”, key);ExitCritical(&r);}
switch(flag4){
case 1:Paint_Bmp(0, 0, 480, 272, tu1_320240);break;
case 2:Paint_Bmp(0, 0, 480, 272, tu2_320240);break;
case 3:Paint_Bmp(0, 0, 480, 272, tu3_320240);break;
case 4:Paint_Bmp(0, 0, 480, 272, tu4_320240);break;
case 5:Paint_Bmp(0, 0, 480, 272, tu5_320240);break;
case 6:Paint_Bmp(0, 0, 480, 272, tu6_320240);break;
}
2、實現觸摸屏控制圖片切換功能;
(1)在while(1)中來實現:通過使用對觸摸屏進行觸摸操作時返回的xdata 和ydata 的數值對我們要顯示的圖片進行控制選擇,如下:
while(1)//to check Pen-up state { if(rSUBSRCPND &(BIT_SUB_TC))//check if ADC is finished with interrupt bit {
flag = 0;break;//if Stylus is up(1)state} flag++;if(flag == 8)
flag = 2;if(flag == 1){
if(xdata>500 && flag1<=6)
{flag1++;if(flag1==7)flag1=1;}
else if(xdata<500 && flag1<=6)
{flag1--;if(flag1==-1)flag1=6;}
else
flag1=0;
switch(flag1){
case 1:Paint_Bmp(0, 0, 480, 272, tu1_320240);break;
case 2:Paint_Bmp(0, 0, 480, 272, tu2_320240);break;
case 3:Paint_Bmp(0, 0, 480, 272, tu3_320240);break;
case 4:Paint_Bmp(0, 0, 480, 272, tu4_320240);break;
case 5:Paint_Bmp(0, 0, 480, 272, tu5_320240);break;
case 6:Paint_Bmp(0, 0, 480, 272, tu6_320240);break;
}} }
(2)編譯修改好的程序生成所需要的bin文件,錄入開發板并觀測圖像顯示。
3、PWM蜂鳴器音樂播放功能。
這部分功能就是在原先功能基礎上加入了蜂鳴器的播放功能。
嵌入式系統設計基礎
四、系統測試方法
本文所使用的硬件環境為天嵌TQ2440,是由廣州天嵌計算機科技有限公司所制造。軟件環境為WINDOWS 10,帶有2.40 GHz Core? i5 處理器以及4GB RAM。編譯環境為ARM Developer Suite(ADS)1.2版。
五、結果分析
由于無法體現觸控功能和音樂播放功能,這里只展示了照片顯示功能。數碼相框顯示的照片如下,從圖片中可以看到照片顯示功能十分完好:
嵌入式系統設計基礎
六、總結
本文展現了我們制作的數碼相框,雖然總的來講功能比較簡陋,但也是我們的一片心血。通過這次實驗,我們對于ARM嵌入式開發有了一個初步的認識,也熟悉了整個開發過程。最為重要的是,這次的實驗為我們未來的學習與工作打下了一個良好的基礎,我們不僅體驗了當今最為流行的嵌入式技術,更是懂得了嵌入式開發的思想核心。在這里,我們要感謝負責嵌入式實驗相關工作的王建敏老師,以及教授嵌入式課程的韓軍老師、薛雷老師以及陸小峰老師,他們為這門課付出了自己的心血,傳授給我們無價的知識。總的來說,這次實驗難度并不大,但學到的東西并不少,相信未來我們也許也將走上嵌入式開發的道路,為嵌入式領域貢獻自己的一份力量。
參考文獻
[1] 裸奔三部曲.廣州天嵌計算機科技有限公司.2012:1-59 [2] TQ2440開發板使用手冊.廣州天嵌計算機科技有限公司.2012:271-298 附錄
(1)觸摸屏ADC 中斷初始化的程序段
rADCDLY=50000;
//Normal conversion mode delay about(1/3.6864M)*50000=13.56ms rADCCON=(1<<14)+(ADCPRS<<6);//ADCPRS En, ADCPRS Value Uart_Printf(“nTouch Screen testn”);rADCTSC=0xd3;//Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En pISR_ADC =(int)AdcTsAuto;rINTMSK=~BIT_ADC;//ADC Touch Screen Mask bit clear rINTSUBMSK=~(BIT_SUB_TC);(2)觸摸屏中斷程序斷
void __irq AdcTsAuto(void){ U32 saveAdcdly;if(rADCDAT0&0x8000){ //Uart_Printf(“nStylus Up!n”);rADCTSC&=0xff;// Set stylus down interrupt bit
嵌入式系統設計基礎
} //else //Uart_Printf(“nStylus Down!n”);rADCTSC=(1<<3)|(1<<2);//Pull-up disable, Seq.X,Y postion measure.saveAdcdly=rADCDLY;rADCDLY=40000;
//Normal conversion mode delay about(1/50M)*40000=0.8ms rADCCON|=0x1;
//start ADC while(rADCCON & 0x1);
//check if Enable_start is low while(!(rADCCON & 0x8000));
//check if EC(End of Conversion)flag is high, This line is necessary!while(!(rSRCPND &(BIT_ADC)));//check if ADC is finished with interrupt bit xdata=(rADCDAT0&0x3ff);ydata=(rADCDAT1&0x3ff);//check Stylus Up Interrupt.rSUBSRCPND|=BIT_SUB_TC;ClearPending(BIT_ADC);rINTSUBMSK=~(BIT_SUB_TC);rINTMSK=~(BIT_ADC);rADCTSC =0xd3;
//Waiting for interrupt rADCTSC=rADCTSC|(1<<8);
// Detect stylus up interrupt signal.while(1)
//to check Pen-up state { if(rSUBSRCPND &(BIT_SUB_TC))//check if ADC is finished with interrupt bit { //Uart_Printf(“Stylus Up Interrupt~!n”);break;//if Stylus is up(1)state } } Uart_Printf(“count=%03d XP=%04d, YP=%04dn”, count++, xdata, ydata);//X-position Conversion data rADCDLY=saveAdcdly;rADCTSC=rADCTSC&~(1<<8);// Detect stylus Down interrupt signal.rSUBSRCPND|=BIT_SUB_TC;rINTSUBMSK=~(BIT_SUB_TC);// Unmask sub interrupt(TC)ClearPending(BIT_ADC);}(3)PWM蜂鳴器音階發生功能
while(1){
U16 freq =800;
if((xdata>719 && ydata>800)){ Paint_Bmp(0,0,480,272,tu3_480272);freq=220;Buzzer_Freq_Set(freq);}
嵌入式系統設計基礎
else if(xdata>526 && ydata>800){ Paint_Bmp(0,0,480,272,tu2_480272);freq=247;Buzzer_Freq_Set(freq);} else if(xdata>332 && ydata>800){ Paint_Bmp(0,0,480,272,tu1_480272);freq=262;Buzzer_Freq_Set(freq);} else if(xdata>719 && ydata<225){Paint_Bmp(0,0,480,272,tu6_480272);freq=294;Buzzer_Freq_Set(freq);} else if(xdata>526 && ydata<225){Paint_Bmp(0,0,480,272,tu5_480272);freq=330;Buzzer_Freq_Set(freq);} else if(xdata>332 && ydata<225){Paint_Bmp(0,0,480,272,tu4_480272);freq=349;Buzzer_Freq_Set(freq);} else if(xdata>719 && ydata>225&& ydata<800){freq=392;Buzzer_Freq_Set(freq);} else {freq=392;Buzzer_Freq_Set(freq);Buzzer_Stop();} Paint_Bmp1(-40, 70, 480, 272,4, tu1_480272);Paint_Bmp1(-40, 140, 480, 272,4, tu2_480272);Paint_Bmp1(-40, 210, 480, 272,4, tu3_480272);Paint_Bmp1(400, 70, 480, 272,4, tu4_480272);Paint_Bmp1(400, 140, 480, 272,4, tu5_480272);Paint_Bmp1(400, 210, 480, 272,4, tu6_480272);Delay(500);} }
第二篇:嵌入式系統基礎課程設計報告
河南機電高等專科學校
嵌入式系統基礎課程設計報告
系 部: 電子通信工程系 專 業: 班 級: 學生姓名: 學 號:
2012年 06月
嵌入式系統基礎課程設計任務書
1.時間:2012年06月11日~2012年06月15日 2.課程設計單位:河南機電高等專科學校
3.課程設計目的:深入學習單片機編程技巧,熟悉電子產品設計制作全過程。能夠利用匯編語言完成十字路口交通燈的設計。4.課程設計任務:
按交通燈的具體要求來寫
―――-紅色文字為說明,寫報告時請先刪除!!
嵌入式系統基礎課程設計報告
前言:
×××××××××××××××××××××××××××××××××××××××××××××××-----宋體,小四,不加粗,單倍行距
實訓報告: ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
??????
×××××××××××××××××××××××××××××××
―――-紅色文字為說明,寫報告時請先刪除!!
心得體會: ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
??????
××××××××××××××××××××××××××××××××××××××××××××××××××
參考文獻:
???以下紅色文字為“參考文獻”的示例,寫報告時請先刪除!!填寫上你自己的“參考文獻”
[1] 周小謙,丁功揚,郭日彩,三峽電力系統的形成和發展,電網技術。1998,88(3):p1-3 [2]-----宋體,小五,不加粗,單倍行距
第三篇:嵌入式系統基礎課程設計報告
河南機電高等專科學校
《嵌入式系統基礎》 課程設計報告
設計題目: 系 部: 電子通信工程系 班 級: 學 號: 學生姓名: 成 績:
2012年 05月
《嵌入式系統基礎》課程設計任務書 1.時間:2012年05月14日~2011年05月25日 2.課程設計單位:河南機電高等專科學校
3.課程設計目的:掌握《嵌入式系統基礎》課程基本概念、基本原理,具有一定的單片機設計能力,能夠利用所學知識完成設計內容,提高實際動手能力。4.課程設計任務:
①參考相關的的書籍、資料,根據設計要求完成原理圖設計; ②制作電路板并完成調試; ③繪制軟件流程圖; ④完成軟件設計并完成調試;
⑤作好筆記,對自己所發現的疑難問題及時請教解決; ⑥聯系自己所學知識,總結本次設計經驗; ⑦認真完成課程設計報告。
5.設計要求
根據所給具體的設計要求來寫!
《嵌入式系統基礎》課程設計報告
前言:
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
一、硬件設計
1.設計思路及原理框圖
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
………………
××××××××××××××××××××××××××××××× 2.采用的芯片功能介紹
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
………………
××××××××××××××××××××××××××××××× 3.原理圖
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
………………
×××××××××××××××××××××××××××××××
二、軟件設計
1.設計思路
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
………………
××××××××××××××××××××××××××××××× 2.程序流程圖(必須要有)
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× ………………
××××××××××××××××××××××××××××××× 3.具體程序(可選,但流程圖一定要有)
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
………………
×××××××××××××××××××××××××××××××
心得體會: ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
………………
×××××××××××××××××××××××××××××××
參考文獻:
[1] 付家才 電子實驗與實踐.北京:高等教育出版社130-150頁
[2] 李東生、張勇、許四毛 《Protel 99SE電路設計技術入門與應用》電子工業出版社231-300頁
………………
格式要求:
標題按照所給模板格式書寫。
正文字體為:中文宋體,西文(字母和數字):Times New Roman,小四號字; 段落:兩端對齊,首行縮進2字符,行距固定值20磅,其他設置為默認。
―――-紅色文字為說明,寫報告時請先刪除!!
第四篇:嵌入式系統原理實驗總結報告
嵌入式系統原理實驗總結報告
車輛座椅控制系統實驗
2014/5/23
嵌入式系統原理實驗總結報告
一、技術性總結報告
(一)題目:車輛座椅控制系統實驗
(二)項目概述:
1.為了實現車輛座椅控制的自動化與智能化。
2.方便用戶通過智能手機與車載傳感器之間的聯動。3.使車輛作為當今物聯網中重要的一個節點發揮作用。
4.通過車輛座椅控制系統實驗實現對嵌入式系統原理課程的熟練掌握與對嵌入式系統原理知識的深化記憶。
5.加強本組學生對嵌入式系統原理的更深層次的理解與運用。
(三)技術方案及原理
本次試驗分為軟件、硬件兩個部分。1.軟件部分。
A.智能手機部分,包括通過智能手機對座椅的控制部分、手機所攜帶的身份信息部分。
本部分軟件使用Java編寫,其程序部分為: 主程序:
package com.example.seat;
import android.support.v7.app.ActionBarActivity;import android.support.v7.app.ActionBar;import android.support.v4.app.Fragment;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.os.Build;
import java.io.BufferedReader;import java.io.IOException;
import java.io.InputStreamReader;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.InetAddress;import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;
import android.view.KeyEvent;import android.view.View;import android.widget.Button;
public class MainActivity extends ActionBarActivity { private Button Up = null;private Button Left = null;private Button Dowm = null;private Button Right = null;private Socket socket = null;
private static final String HOST = “192.168.1.142”;
private static final int PORT = 10007;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initControl();
}
private void initControl(){
Up =(Button)findViewById(R.id.button1);
Up.setOnClickListener(new ReceiverListener());
}
class ReceiverListener implements OnClickListener {
protected String line;
@Override
public void onClick(View v){
// TODO Auto-generated method stub
new Thread(){
@Override
public void run(){
try {
Socket socket = new Socket(HOST, PORT);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
line = br.readLine();
br.close();
} catch(UnknownHostException e){
// TODO Auto-generated catch block
e.printStackTrace();
} catch(IOException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.sendEmptyMessage(0);
}
}.start();
}
}
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg){
super.handleMessage(msg);
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu){
// Inflate the menu;this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
// Handle action bar item clicks here.The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();
if(id == R.id.action_settings){
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment(){
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState){
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
return rootView;
}
} } 界面代碼:
package=“com.example.seat” android:versionCode=“1” android:versionName=“1.0” > android:name=“android.permission.ACCESS_NETWORK_STATE”/> android:minSdkVersion=“8” android:targetSdkVersion=“19” /> android:allowBackup=“true” android:icon=“@drawable/ic_launcher” android:label=“@string/app_name” android:theme=“@style/AppTheme” > android:name=“com.example.seat.MainActivity” android:label=“@string/app_name” >
host = '' port = 10007
pwm = PWM(0x6F, debug=True)
servoMin = 125 # Min pulse length out of 4096 , 0.5 servoMax = 575 # Max pulse length out of 4096 , 2.3
def setServoPulse(channel, pulse):
pulseLength = 1000000
# 1,000,000 us per second
pulseLength /= 60
# 60 Hz
print “%d us per period” % pulseLength
pulseLength /= 4096
# 12 bits of resolution
print “%d us per bit” % pulseLength
pulse *= 1000
pulse /= pulseLength
if(pulse>servoMax): pulse = servoMax
if(pulse pwm.setPWM(channel, 0, int(pulse)) pwm.setPWMFreq(60) # Set frequency to 60 Hz pwm.setPWM(0, 0, servoMax) if __name__ == '__main__': s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((host, port)) s.listen(3) print 'Server is running on port %d, press Ctrl-C to terminate it.' % port pulse_ud = 1.9 pulse_lr = 1.9 setServoPulse(0,pulse_ud) setServoPulse(1,pulse_lr) while True: clientsock, clientaddr = s.accept() clientfile = clientsock.makefile('rw', 0) ctrlinfo = clientfile.readline().strip() print 'Control info is %s.n' % ctrlinfo if ctrlinfo == “up”: pulse_ud += 0.1 elif ctrlinfo == “down”: pulse_ud-= 0.1 elif ctrlinfo == “left”: pulse_lr += 0.1 elif ctrlinfo == “right”: pulse_lr-= 0.1 else: print “ERRORn” setServoPulse(0,pulse_ud) setServoPulse(1,pulse_lr) clientfile.close() clientsock.close() 2.硬件部分。 對車載座椅控制部分發出的信息的接受、識別、執行部分。本次試驗使用的硬件設備包括:智能手機一部、“樹莓派”一臺、小舵機兩臺、舵機驅動板一個、無線網卡一個、杜邦線若干、5V電源一個、無線路由器一個 智能手機 樹莓派(外) 樹莓派(內) 小舵機 舵機驅動板 無線網卡 杜邦線 5V電源 無線路由器 (四)實驗流程及結果 1.打開智能手機上的控制軟件。 2.向車載座椅控制臺發送信息。(發送信息分別為上、下、左、右)3.車載座椅控制臺接受、識別并執行信息。4.通過小舵機的動作驗證該實驗是否成功。(詳細見視頻) 二、工作進度自評表 本次試驗完成。 本次試驗計劃分為三個階段。 第一階段:智能手機部分、車載座椅控制部分和硬件部分的分別完成。本階段完成。 第二階段:智能手機部分、車載座椅控制部分和硬件部分的整合階段。本階段完成。 第三階段:車輛座椅控制系統實驗的驗收調試階段。本階段完成。 三、組內人員自評 本次試驗打到預期的實驗目的。雖然在實驗進行過程中遇到了不少的麻煩,但是通過我們成員自身的努力學習掌握了實驗所要求的知識。最后實驗的成功與組員之間的互相幫助與緊密配合是分不開的。 四、個人學習心得 本人通過此次實驗,對于嵌入式系統原理有了更加深層次的了解。對于設計嵌入式系統原理的實驗也有了較為高程度的提高。為了以后更進一步的學習并掌握嵌入式系統打下了堅實的一步。對于了解車輛座椅控制的自動化與智能化;了解用戶通過智能手機與車載傳感器之間的聯動;了解車輛作為當今物聯網中重要的一個節點都發揮了重要作用。通過車輛座椅控制系統實驗實現對嵌入式系統原理課程的熟練掌握與對嵌入式系統原理知識的深化記憶。加強本組學生對嵌入式系統原理的更深層次的理解與運用。 嵌入式系統設計實驗報告 班 級:學 號:姓 名:成 績:指導教師: 20090612 2009112107 侯金鐘 武俊鵬、劉書勇 1.實驗一 1.1 實驗名稱 嵌入式系統硬件開發環境 1.2 實驗目的 1.熟悉UP-net3000實驗平臺。 2.超級終端設置及BIOS 功能使用。 1.3 實驗環境 硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。 軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。 1.4 實驗內容及要求 熟悉UP-net3000實驗平臺的硬件電路和外設,ARM JTAG的安裝和使用,利用超級終端檢驗外設的工作狀態。 1.5 實驗設計與實驗步驟 1.建立工程 (1)運行ARM SDT 2.5 集成開發環境(ARM Project Manager).(2)在新建的工程中,如圖1A-2 所示,選中工程樹的“根部”。 (3)因為開發板上的嵌入式處理器ARM7TDMI 沒有浮點處理器,所以,如圖1A-3 所 示,在彈出的對話框中設置Floating Point Processor 為none,并保持其他的設置不變。(4)選中工程樹的“根部”,通過菜單Project | Tool Configuration for work1.apj | asmlink | Set,對整個工程的連接方式進行設置。(5)在彈出的對話框中,選中Entry and Base 標簽,如圖1A-4 所示,設置連接的Read-Only(只讀)和Read-Write(讀寫)地址。 (6)選擇Linker Configuration 的ImageLayout 標簽,(7)選擇Project | Edit Project Tamplete 菜單,彈出Project Template Editor 對話框。 (8)選擇Project | Edit Variables for work1.apj,彈出Edit Variables for work1.apj 對話框。 2.進行程序的在線仿真、調試 1.6 實驗過程與分析 熟悉UP-net3000實驗平臺的硬件電路和外設,安裝了ARM JTAG,利用超級終端檢驗了外設的工作狀態。 1.7 實驗結果總結 軟件安裝成功,結果顯示正常。 1.8 心得體會 通過此次試驗,我對ARM的環境的功能有一定的了解與完善。對試驗臺有了基本的認識與使用。 2.實驗二 2.1 實驗名稱 嵌入式系統軟件開發環境 2.2 實驗目的 1.熟悉ADS1.2 開發環境,學會ARM 仿真器的使用。 2.使用ADS 編譯、下載、調試并跟蹤一段已有的程序,了解嵌入式開發的基本思想和過程。 2.3 實驗環境 硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。 軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。 2.4 實驗內容及要求 本次實驗使用ADS 集成開發環境。新建一個簡單的工程文件,并編譯這個工程文件。學習ARM 仿真器的使用和開發環境的設置。下載已經編譯好的文件到嵌入式控制器中運行。學會在程序中設置斷點,觀察系統內存和變量。 2.5 實驗設計與實驗步驟 (1)運行ADS1.2 集成開發環境(CodeWarrior for ARM Developer Suite)。 (2)在新建的工程中,選擇Debug 版本,使用Edit | Debug Settings菜單對Debug 版本進行參數設置。(3)在Debug Settings 對話框中選擇Target Settings 項。在Post-linker一欄中選擇ARM from ELF。 (4)在Debug Settings 對話框中選擇ARM Linker 項 (5)在第四步中如果選擇簡單的地址連接設置,在Debug Settings 對話框中選擇ARM Linker 項 (6)回到的工程窗口中,選擇Release 版本,使用Edit | Release Settings 菜單對Release 版本進行參數設置。(7)參照第(3)、(4)、(5)、(6)步在Release Settings 對話框中設置Release版本的Post-linker、連接地址范圍、入口模塊和輸出文件。(8)回到如圖1B-3 所示的工程窗口中,選擇Targets 選項卡,如圖1B-11 所示。選中DebugRel 版本,按Del 鍵將其刪除。DebugRel 子樹是一個折衷版本,通常用不到,所以在這里刪除。 2.6 實驗過程與分析 1)回到工程窗口選中Debug 版本,執行菜單Project | Make 對工程進行編譯連接。(2)在ADS 中執行菜單Project | Debug 啟動ADS1.2 的調試工具AXD。(3)在AXD 中執行菜單Options | Configure Target 對AXD 進行設置。(4)點Select 按鈕選擇遠程連接為ARM ethernet driver,點Configure 按鈕輸入仿真器的IP 地址。 (5)等待程序裝載完畢以后,通過Execute | Go 菜單以及Execute | Stop(或者工具欄中的相應按鈕)運行或暫停程序。程序暫停后在窗口中將顯示出程序暫停的位置。(6)通過Execute | Step 菜單(或者工具欄中的相應按鈕)可以單步運行程序。 (7)程序停止后可以通過Processor Views | Sources 菜單查看源文件,并可在適當位置按F9 設置端點。 (8)使用在Processor View 菜單下的Registers、Variables 和Memory 命令可以查看工作寄存器或者內存變量。讀者可以逐一地嘗試,為以后調試程序打下基礎。 2.7 實驗結果總結 超級終端輸出“Hello World!”。 2.8 心得體會 基本了解了ADS1.2的配置條件,學會了ARM仿真器的使用方法。 3.實驗三 3.1 實驗名稱 鍵盤及LED實驗 3.2 實驗目的 1.學習鍵盤及LED 驅動原理。 2.掌握ZLG7289芯片串行接口的使用方法,用ZLG7289芯片驅動17鍵的鍵盤和8個共陰極LED。 3.3 實驗環境 硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。 軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。 3.4 實驗內容及要求 通過ZLG7289芯片驅動17鍵的鍵盤和8個共陰極LED,將按鍵值在LED上顯示出來。要求從右至左循環顯示至少四位數字。 基本功能實現之后可考慮實現從左至右顯示四位及四位以上數字(最大八位),并可設置清零鍵等擴展功能。 3.5 實驗設計與實驗步驟 利用所給的基礎代碼進行調試,觀察輸出結果,結合指導書和教材掌握基本原理和源代碼的編寫方式。根據實驗的要求設計函數流程,并反復調試,實現功能。1.新建工程,將“Exp3 鍵盤及LED 驅動實驗”中的文件添加到工程。2.定義ZLG7289 寄存器(ZLG7289.h) #define ZLG7289_CS(0x20)//GPB5 #define ZLG7289_KEY(0x10)//GPG4 #define ZLG7289_ENABLE()do{ZLG7289SIOBand=rSBRDR;ZLG7289SIOCtrl=rSIOCON;rSIOCON=0x31;rSBRDR=0xff;rPDATB&=(~ZLG7289_CS);}while(0)#define ZLG7289_DISABLE()do{rPDATB|=ZLG7289_CS;rSBRDR=ZLG7289SIOBand;rSIOCON=ZLG7289SIOCtrl;}while(0)3.編寫ZLG7289 驅動函數(ZLG7289.c)4.定義鍵盤映射表:(Keyboard16.c) unsigned char KeyBoard_Map[]= {4,8,11,0,0,0,0,0,5,9,12,15,1,0,0,0,6,10,13,16,2,3,0,0,7,0,14,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//64 鍵值映射表,通過查找鍵盤映射表來確定鍵盤掃描碼對應的按鍵值。 5.定義鍵值讀取函數。(Keyboard16.c)6.編寫主函數,將按鍵值在數碼管上顯示。 3.6 實驗過程與分析 利用鍵盤驅動函數實現基本數字輸入,然后利用循環左移函數實現輸入數字做一樣功能,并通過改變函數中相應delay的值來消除鍵盤按鍵帶來的抖動。 3.7 實驗結果總結 按鍵值可以在LED上顯示出來。要求從右至左循環顯示八位數字,同時可以復位清零。達到實驗的效果。 3.8 心得體會 通過本次實驗,我了解了LED的顯示屏幕的數字的移位功能,這個功能不止可以用一個方法實現,而循環左移是其中比較巧妙且省力的一種,在遇到類似情況的時候,可以優先考慮能不能利用到文件中已經存在的函數,這樣可以不必自己編寫函數,省時省力。是一種可靠的方法。4.實驗四 4.1 實驗名稱 電機轉動控制及中斷實驗 4.2 實驗目的 1.熟悉ARM本身自帶的六路即三對PWM,掌握相應寄存器的配置。 2.編程實現ARM系統的PWM輸出和I/O輸出,前者用于控制直流電機,后者用于控制步進電機。 3.了解直流電機和步進電機的工作原理,學會用軟件的方法實現步進電機的脈沖分配,即用軟件的方法代替硬件的脈沖分配器。 4.了解44B0處理器上中斷的應用。5.學習在44B0處理器上中斷的應用。 6.進一步熟悉平臺外圍硬件及其驅動程序的編寫。 4.3 實驗環境 硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。 軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。 4.4 實驗內容及要求 1.學習步進電機和直流電機的工作原理,了解實現兩個電機轉動對于系統的軟件和硬件要求。學習ARM 知識,掌握 PWM 的生成方法,同時也要掌握 I/O的控制方法。 2.編程實現ARM芯片的一對PWM輸出用于控制直流電機的轉動,通過A/D旋鈕控制其轉動方式。 3.編程實現ARM的四路I/O通道,實現環形脈沖分配用于控制步進電機的轉動,通過A/D旋鈕控制步進電機的轉角。 4.通過鍵盤控制直流電機與步進電機的切換。5.設置并啟動定時器。 6.設置中斷,編寫定時器中斷服務程序,對中斷次數進行計數并在LED上顯示結果。 4.5 實驗設計與實驗步驟 1.添加并打開工程。 2.進行直流電機初始化設置和代碼編寫。3.進行步進電機初始化設置和代碼編寫。 4.對Timer3編程,編寫定時器中斷服務程序,完成對中斷次數的計數。5.編寫LED計數顯示函數,使LED能正確計數并顯示0-9999。6.編寫中斷初始化函數和中斷響應函數。7.終端下載測試。 4.6 實驗過程與分析 1.對直流電機進行編程和測試,掌握轉速和旋轉方向的設定方法。 2.對步進電機進行編程和測試,掌握ARM的四路I/O通道,實現環形脈沖分配用于控制步進電機的轉動,通過A/D旋鈕控制步進電機的轉角。 3.對主函數進行編程,用鍵盤響應直流電機與步進電機的切換控制。 4.掌握中斷相關語句的應用,弄清定義的中斷向量、中斷向量號,編寫中斷響應函數,并完成中斷響應控制。 4.7 實驗結果總結 實現了直流電機與步進電機的基本設置和控制,可以通過鍵盤控制電機之間的切換。完成了中斷的響應和定時中斷。當對其中一個旋鈕轉動時,就可以由直流電機轉換成步進電機的轉換,達到實驗的效果。 4.8 心得體會 通過本次實驗,我了解了直流電機和步進電機的工作原理,同時也知曉了電機間的轉換過程,了解其中的道理內涵,熟悉了ARM自帶的A/D轉換器的工作原理及編程方法,了解了中斷的意義和實現方法,實現了簡單了中斷處理程序。同時我也收獲了很多關于ARM處理機的相關知識。 5.實驗五 5.1 實驗名稱 觸摸屏驅動實驗 5.2 實驗目的 1.了解觸摸屏的基本概念與原理。 2.理解觸摸屏與LCD的關系。3.編程實現對觸摸屏的控制。 4.熟悉用 ARM 內置的 LCD控制器驅動 LCD。 5.3 實驗環境 硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。 軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。 5.4 實驗內容及要求 1.了解觸摸屏基本原理,理解對觸摸屏進行輸出標定、與LCD顯示器配合的過程。2.通過編程實現觸摸兩點自動在兩點間劃直線。3.通過編程實現在觸摸屏上動態畫出曲線。5.5 實驗設計與實驗步驟 1.添加并打開工程。 2.在頭文件中定義宏和常量及驅動函數。 #define ADS7843_CTRL_START 0x80 #define ADS7843_GET_X 0x50 #define ADS7843_GET_Y 0x10 #define ADS7843_CTRL_12MODE 0x0 #define ADS7843_CTRL_8MODE 0x8 #define ADS7843_CTRL_SER 0x4 #define ADS7843_CTRL_DFR 0x0 #define ADS7843_CTRL_DISPWD 0x3 // Disable power down #define ADS7843_CTRL_ENPWD 0x0 // enable power down #define ADS7843_PIN_CS(1<<6)//GPF6 #define ADS7843_PIN_PEN(1<<5)//GPG5 /////////觸摸屏動作//////// #define TCHSCR_ACTION_NULL 0 #define TCHSCR_ACTION_CLICK 1 //觸摸屏單擊 #define TCHSCR_ACTION_DBCLICK 2 //觸摸屏雙擊 #define TCHSCR_ACTION_DOWN 3 //觸摸屏按下 #define TCHSCR_ACTION_UP 4 //觸摸屏抬起 #define TCHSCR_ACTION_MOVE 5 //觸摸屏移動 #define TCHSCR_IsPenNotDown()(rPDATG&ADS7843_PIN_PEN)(ADS7843_CTRL_START|ADS7843_GET_X|ADS7843_CTRL_12MODE |ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)//采樣x 軸電壓值,數據為12 位,參考電壓輸入模式為差分模式,允許省電模式 #defineADS7843_CMD_Y(ADS7843_CTRL_START|ADS7843_GET_Y|ADS7843_CTRL_12MODE |ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)int TchScr_Xmax=1840,TchScr_Xmin=176, TchScr_Ymax=195,TchScr_Ymin=1910;//觸摸屏返回電壓值范圍 #defineADS7843_CMD_X 3.校準觸摸屏坐標,進行坐標轉換。 4.實現觸屏取點并顯示功能。 將觸摸動作及觸摸點坐標在超級終端上顯示出來。5.實現兩點間自動劃線功能。6.實現觸摸屏動態劃線功能。 可以使用TchScr_GetScrXY()函數(第三個參數為0)來獲得液晶屏的x、y 方向的電壓 范圍,分別點觸摸屏有效面積的左上角和右下角,得到下列參數: TchScr_Xmax=1840;TchScr_Xmin=176;TchScr_Ymax=195;TchScr_Ymin=1910;//此數值僅供參考,請以實際校對為準 5.6 實驗過程與分析 1.在定義觸屏響應功能的函數中對點擊觸屏進行響應函數的修改,在其中添加修改點顏色的函數,修改得到的觸摸點的顏色,并顯示在LCD上。 2.獲取第一個點坐標并儲存,獲取第二個點坐標并儲存,由編寫的劃線函數取得儲存的兩點間直線上所有點的坐標,并對其改變顏色,顯示在LCD上,即完成劃直線功能。 3.將劃線函數應用到響應觸屏移動消息的函數下,即可對連續獲得的觸摸坐標進行連續的畫短直線,連接成曲線,完成動態劃線功能。 5.7 實驗結果總結 了解了觸摸屏響應動作消息的函數的工作原理,通過修改實現了觸摸屏響應不同動作進行畫點、劃線、動態劃線的功能。驗證觸摸屏的靈敏度的實驗。 5.8 心得體會 通過這次實驗,我基本掌握了通過編程驅動觸摸屏以及觸摸屏響應時間,實現了觸摸屏對不同動作消息的響應。同時也知曉了在觸摸屏上的描點畫線的實現,但是由于不知名的原因,描點畫線的誤差較大,位置偏差較大,同時觸摸屏有時會不靈敏,出現時好時壞的現象,但是由于我們的辛勤鉆研,最終克服了這個困難,實現了最后的觸摸屏的實現。 6.實驗六 6.1 實驗名稱 UCOS-Ⅱ在ARM微處理器上的裁剪 6.2 實驗目的 1.了解UCOS-Ⅱ內核的主要結構。 2.掌握UCOS-Ⅱ裁剪的基本原理與嵌入式編程實現方法。3.學習如何根據具體情況對UCOS-Ⅱ操作系統進行裁剪。 4.通過對UCOS-Ⅱ配置文件(OS_CFG.H)中相關的配置常量進行設置,實現對UCOS-Ⅱ的裁剪。 6.3 實驗環境 硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。 軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。 6.4 實驗內容及要求 對UCOS-Ⅱ內核進行裁剪并移植到ARM7微處理器上。 6.5 實驗設計與實驗步驟 1.按照要求,載入STARTUP目錄下文件,完成系統初始化、環境配置。2.載入UCOS-Ⅱ的全部源碼,與處理器架構相關的文件位于arch目錄下。3.在os_cpu.h中編寫與處理器和編譯器相關的代碼。 4.編寫os_cpu_c.c等6個與操作系統相關的函數。5.編寫os_cpu.asm等4個與處理器相關的函數。 6.6 實驗過程與分析 按照實驗步驟進行,得到了需要的系統。 6.7 實驗結果總結 按照要求進行了裁剪,得到了滿足需要又緊湊的應用軟件系統。 6.8 心得體會 通過本次實驗,我了解了UCOS-Ⅱ內核的主要結構,掌握UCOS-Ⅱ裁剪的基本原理與嵌入式編程實現方法,學會了如何根據具體情況對UCOS-Ⅱ操作系統進行裁剪。 7.實驗七 7.1 實驗名稱 UCOS-Ⅱ在ARM微處理器上的移植和編譯 7.2 實驗目的 1.了解UCOS-Ⅱ內核的主要結構。 2.掌握將UCOS-Ⅱ內核移植到ARM7處理器上的基本方法。 7.3 實驗環境 硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。 軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。 7.4 實驗內容及要求 1.將UCOS-Ⅱ內核進行移植到ARM7微處理器上。 2.編寫兩個簡單任務,在超級終端上觀察兩個任務的切換。 7.5 實驗設計與實驗步驟 1.該實驗的文件分為兩類,其一是 STARTUP 目錄下的系統初始化、配置等文件,其二是 UCOS-Ⅱ的全部源碼,arch 目錄下的 3 個文件是和處理器架構相關的。 2.設置 os_cpu.h 中與處理器和編譯器相關的代碼。 3.用 C 語言編寫 6 個操作系統相關的函數(OS_CPU_C.C)。4.用匯編語言編寫 4 個與處理器相關的函數(OS_CPU.ASM)。5.編寫一個簡單的多任務程序來測試一下移植是否成功。6.編譯并下載移植后的 UCOS-Ⅱ。 7.6 實驗過程與分析 1.按照實驗步驟進行,將μC/OS-II 內核移植到了ARM7 微處理器上。2編寫了兩個簡單任務,在超級終端上觀察兩個任務的切換。 7.7 實驗結果總結 將μC/OS-II 內核順利移植到了ARM7 微處理器上。 7.8 心得體會 通過本次實驗,使我更加了解了μC/OS-II 內核的主要結構,掌握了ARM的C語言和匯編語言的編程方法,了解了ARM7處理器結構,掌握了將μC/OS-II 內核移植到ARM 7 處理器上的基本原理與嵌入式編程實現方法。 8.實驗八 8.1 實驗名稱 綜合實驗 8.2 實驗目的 對前七次實驗進行總結,應用之前所學的知識,將前幾次實驗內容結合起來,完成鍵盤,LED,觸摸屏,直流電機,步進電機各種功能的組合。實現一個較為全面的功能結構。 8.3 實驗環境 硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。 軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。 8.4 實驗內容及要求 對前七次實驗進行總結,應用之前所學的知識,完成自擬的嵌入式系統,要求綜合前期基礎實驗的各種功能。 8.5 實驗設計與實驗步驟 1.添加并打開工程。2.進行LCD設計,在LCD顯示屏輸出文本。 3.進行LED及鍵盤設計,完成LED輸出顯示功能和鍵盤輸入功能。4.進行電機控制設計,完成鍵盤控制電機轉動功能。5.進行中斷設計,完成定時中斷功能。 6.進行觸摸屏設計,完成觸摸屏感應和劃線功能。7.進行裁剪和移植功能設計和完成。 8.6 實驗過程與分析 1.完成LCD顯示功能,在LCD顯示屏上輸出文本:“Hello World!”。2.進入界面觸屏控制選擇功能,實現觸屏選擇功能。 3.自定義四種種功能,第一為電機控制,從鍵盤讀取命令,并將功能編號顯示在LED上,LED顯示的是計數的數據,同時旋轉按鈕完成電機轉速的控制選擇。 4.第三種功能為劃線,功能編號顯示在LED高四位上,同時LCD屏幕清屏,為劃線功能做準備,可以實現劃線功能。 5.第四種功能為定時中斷,當由鍵盤控制時,LED顯示數值清零,實現了中斷。6.實現裁剪與移植功能。 8.7 實驗結果總結 完成了各種基本功能,并通過自擬的系統將各種功能整合起來,完成了一個小的嵌入式系統,對前七次的功能有了更深入的了解。通過LED的計數,當在計數值在前30秒之內,由鍵盤控制LED的數值及顯示,按鍵盤上的某一個按鍵,實現對LED上的數值清零,后30秒由觸摸屏控制清零,并且在前30秒之內,旋轉按鈕,實現對直流電機的運轉,并且到步進電機的轉換。 8.8 心得體會 通過這次實驗,我更加深刻地掌握了前幾次實驗中的基本功能的實現方法,并且把幾種功能聯合在一起,實現一些功能,把LED 顯示屏,LCD觸摸屏,鍵盤,直流電機,步進電機等等設備聯合在一起,對該實驗有一定的幫助與提高,而我和我的隊友也對嵌入式系統有了更深入的了解,在此期間,也學習了關于ARM處理器的開發與實踐,了解了關于手機的嵌入式設備的產生過程,我也深深的對此充滿了興趣,對未來的嵌入式課程設計奠定了深厚的基礎,可是令我遺憾的是,我和隊員的水平所限,沒有完成中斷優先級的控制。本來想完成更多的功能,可是最后由于時間緊迫,也有一些其他的事情來分神分心,所以就只能完成這些,但是在未來的幾周內,嵌入式課程設計也給了我們很大的空間去做未完成的事情。我相信我們會做的更加完美,功能更強大,用于未來的生活中去實踐。第五篇:嵌入式系統設計報告