基于arm多通道儀表數(shù)據(jù)采集實(shí)驗(yàn)_第1頁(yè)
已閱讀1頁(yè),還剩40頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  物理與電子工程學(xué)院</b></p><p>  《嵌入式系統(tǒng)與應(yīng)用》</p><p><b>  設(shè)計(jì)性實(shí)驗(yàn)報(bào)告</b></p><p>  題目 基于ARM的多通道儀表數(shù)據(jù)采集實(shí)驗(yàn) </p><p>  系 別 xx </p

2、><p>  年 級(jí) xx 專 業(yè) xx </p><p>  班 級(jí) xx 學(xué) 號(hào) xx </p><p>  學(xué)生姓名 xx</p><p>  指導(dǎo)教師 xx </p><p>  實(shí)驗(yàn)時(shí)間 xx

3、 </p><p><b>  目 錄</b></p><p><b>  引言2</b></p><p>  一 課題內(nèi)容及目的3</p><p><b>  二 課題分析3</b></p><p><b>  三 系統(tǒng)設(shè)

4、計(jì)4</b></p><p><b>  四 代碼分析8</b></p><p><b>  五 實(shí)驗(yàn)結(jié)果10</b></p><p><b>  六 實(shí)驗(yàn)總結(jié)10</b></p><p><b>  參考文獻(xiàn)12</b></p

5、><p><b>  附 錄13</b></p><p>  設(shè)計(jì)性實(shí)驗(yàn)報(bào)告成績(jī): 指導(dǎo)教師簽名:40</p><p><b>  引言</b></p><p>  在實(shí)際應(yīng)用中,常常需要對(duì)現(xiàn)場(chǎng)的設(shè)備進(jìn)行監(jiān)測(cè),通過(guò)采集設(shè)備的運(yùn)行參數(shù)隨時(shí)了解、跟蹤設(shè)備運(yùn)行狀態(tài),進(jìn)

6、而對(duì)設(shè)備進(jìn)行分析和診斷。傳統(tǒng)的數(shù)據(jù)采集系統(tǒng)一般采用PC 加數(shù)據(jù)采集卡,主要做法是將一塊基于IAS 或PCI的板卡插入工業(yè)計(jì)算機(jī)或商用機(jī)上,將外部信號(hào)通過(guò)導(dǎo)線引至計(jì)算機(jī),然后接入數(shù)據(jù)采集卡,通過(guò)定制的軟件進(jìn)行采集。但是采用數(shù)據(jù)采集卡的缺點(diǎn)是安裝麻煩、易受機(jī)箱內(nèi)環(huán)境的干擾,而且由于受計(jì)算機(jī)插槽數(shù)量和位置、中斷資源的限制,不可能掛接很多設(shè)備。從未來(lái)的發(fā)展方向上看,數(shù)據(jù)采集系統(tǒng)的數(shù)據(jù)采集部分應(yīng)朝著強(qiáng)實(shí)時(shí)、多參數(shù)、高精度方向發(fā)展;數(shù)據(jù)存儲(chǔ)部分朝著

7、大容量、微型化、便攜式方向發(fā)展;數(shù)據(jù)傳輸部分朝著多通訊方式、遠(yuǎn)距離數(shù)據(jù)傳輸方向發(fā)展。一般的基于單任務(wù)順序機(jī)制的單片機(jī)數(shù)據(jù)采集系統(tǒng)又很難勝任對(duì)于穩(wěn)定性、實(shí)時(shí)性要求很高的場(chǎng)合?;诖?,本設(shè)計(jì)了一種基于ARM7 處理器,采用了串口、USB、以太網(wǎng)3 種與PC 機(jī)的通訊方式,以適應(yīng)不同場(chǎng)合的需要。采用多任務(wù)編程方法,每個(gè)任務(wù)監(jiān)視一路AD 轉(zhuǎn)換, 每一路AD 的轉(zhuǎn)換結(jié)果在液晶屏上用一個(gè)條形圖的長(zhǎng)短來(lái)表示,直觀地顯示每路模擬輸入電壓的大小??梢酝ㄟ^(guò)

8、文本框給每路AD 設(shè)置警</p><p><b>  一 課題內(nèi)容及目的</b></p><p>  采用多任務(wù)編程方法,每個(gè)任務(wù)監(jiān)視一路AD 轉(zhuǎn)換, 每一路AD 的轉(zhuǎn)換結(jié)果在液晶屏上用一個(gè)條形圖的長(zhǎng)短來(lái)表示,直觀地顯示每路模擬輸入電壓的大小??梢酝ㄟ^(guò)文本框給每路AD 設(shè)置警戒值,某路輸入超出警戒線之后條形圖中超出的部分會(huì)以閃動(dòng)的方式顯示。并在數(shù)碼管上對(duì)應(yīng)的某通道的數(shù)

9、值顯示當(dāng)超過(guò)警戒線數(shù)值時(shí),數(shù)字閃爍顯示。</p><p><b>  二 課題分析</b></p><p>  數(shù)據(jù)采集系統(tǒng)置于被監(jiān)控的設(shè)備處,通過(guò)傳感器對(duì)設(shè)備的電壓或者電流信號(hào)進(jìn)行采樣、保持,并送入A/D轉(zhuǎn)換器變成數(shù)字信號(hào),然后將該信號(hào)送到FIFO中。當(dāng)FIFO中存放的數(shù)據(jù)到了一定數(shù)目時(shí),由ARM7從FIFO中讀出,然后通過(guò)ARM7的以太網(wǎng)接口送給上位機(jī)。多路采集通

10、道經(jīng)過(guò)模擬開(kāi)關(guān)后再進(jìn)入A/D轉(zhuǎn)換器。CPLD是整個(gè)系統(tǒng)的控制核心,它控制采集通道的切換、A/D轉(zhuǎn)換器的啟/停、轉(zhuǎn)換后的數(shù)據(jù)在FIFO中的存放地址發(fā)生器、產(chǎn)生中斷請(qǐng)求以通知ARM7讀取存放在FIFO中的數(shù)據(jù)等。</p><p><b>  三 系統(tǒng)設(shè)計(jì)</b></p><p>  1.編寫(xiě)OnKey()函數(shù),響應(yīng)鍵盤(pán)消息。流程圖如圖1所示。</p><

11、;p>  1) 這里設(shè)置了兩個(gè)文本框,用來(lái)輸入通道編號(hào)和該通道的警戒值,在鍵盤(pán)消息響應(yīng)函數(shù)里針對(duì)兩個(gè)文本框分別作出處理,只處理回車(chē)鍵和取消鍵,其他鍵由控件本身處理。程序里用變量EditNumber 指示當(dāng)前要編輯的文本框控件;用變量input 指示該文本框控件是否處于輸入編輯狀態(tài)。以此決定回車(chē)鍵應(yīng)該執(zhí)行的功能。 </p><p>  2)當(dāng)文本框控件不是編輯狀態(tài)時(shí),回車(chē)將使其進(jìn)入編輯狀態(tài),在程序里用SetW

12、ndCtrlFocus( )函數(shù)將焦點(diǎn)轉(zhuǎn)移到該控件并用SetTextCtrlEdit() 函數(shù)設(shè)置為編輯狀態(tài);當(dāng)文本框正處于編輯狀態(tài)時(shí),回車(chē)將使其退出編輯狀態(tài),并將要編輯的文本框切換到另一個(gè)文本框控件,取消鍵的處理和這種情況類似。 </p><p>  3) 如果當(dāng)前要編輯的文本框是警戒值輸入框,在編輯狀態(tài)中回車(chē)確定后,所輸入的通道編號(hào)以及警戒值就會(huì)保存在數(shù)組WarnningData 中,代碼如下: </p

13、><p>  WarnningData[ Unicode2Int(pChannelTextCtrl->text)]=Unicode2Int(pValueTe xtCtrl->text); </p><p><b>  圖1</b></p><p>  2.編寫(xiě)繪圖顯示任務(wù)Display_Task, 繪制文本框和條形圖等,并實(shí)現(xiàn)文本框編輯

14、過(guò)程中和超過(guò)警戒值后的動(dòng)畫(huà)顯示,其流程圖為圖2所示。</p><p><b>  圖2</b></p><p>  1)程序中用TextOut()函數(shù)顯示文本框的提示信息,用數(shù)組edit 記錄兩個(gè)文本框是否處于編輯狀態(tài),用變量IsEdit 指示提示信息是否顯示。實(shí)際上,IsEdit這個(gè)變量在顯示任務(wù)循環(huán)一次就改變一次狀態(tài),當(dāng)IsEdit==1 時(shí)將提示信息擦掉,否則保

15、持顯示不變。這就是閃爍顯示的原理,表示AD 轉(zhuǎn)換結(jié)果的條形圖超出警戒值的部分的閃爍也是這樣實(shí)現(xiàn)的,隨著任務(wù)的循環(huán)隔次的改變狀態(tài)。 </p><p>  2)和變量IsEdit 的作用類似,warnning[x]是條形圖閃爍的指示變量。當(dāng)某路AD 轉(zhuǎn)換的結(jié)果result_ADx 大于對(duì)應(yīng)通道的警戒值Warnni ngData[x]時(shí),根據(jù)warnning[x] 的值決定條形圖的長(zhǎng)度是和result_ADx 對(duì)應(yīng)還是

16、和W arnningData[x]對(duì)應(yīng),這樣看起來(lái)?xiàng)l形圖的長(zhǎng)度是變化的,效果就是超過(guò)警戒線的那部分在閃爍。 </p><p>  3)這里條形圖實(shí)際上是一個(gè)實(shí)心矩形,用FillRect()函數(shù)填充。 </p><p>  5、編寫(xiě)4 路AD 采集任務(wù)ADx_Task。</p><p>  1)使用GetADresult()函數(shù)即可得到某路AD 輸出的二進(jìn)制代碼。由于

17、處理器的8</p><p>  路10 位AD 轉(zhuǎn)換單元的最大輸入電壓是2.50V,所以實(shí)際電壓值就是</p><p>  result_ADx=GetADresult(x)*2.50/1024;</p><p><b>  四 代碼分析</b></p><p>  增加數(shù)碼管顯示功能的代碼如下:</p>

18、<p>  ZLG7289_ENABLE();</p><p><b>  Delay(5);</b></p><p>  flah_flag=0xff;</p><p>  WriteSDIO(ZLG7289_CMD_DATA0|0);</p><p>  WriteSDIO((unsigned char)r

19、esult_AD0%10);</p><p><b>  Delay(1);</b></p><p>  WriteSDIO(ZLG7289_CMD_DATA0|1);</p><p>  WriteSDIO(0x80|((unsigned char)result_AD0/10));</p><p><b> 

20、 Delay(1);</b></p><p>  if(warnning[0]==1) flah_flag&=0xfc;</p><p>  WriteSDIO(ZLG7289_CMD_DATA0|2);</p><p>  WriteSDIO((unsigned char)result_AD1%10);</p><p>

21、<b>  Delay(1);</b></p><p>  WriteSDIO(ZLG7289_CMD_DATA0|3);</p><p>  WriteSDIO(0x80|((unsigned char)result_AD1/10));</p><p><b>  Delay(1);</b></p><

22、;p>  if(warnning[1]==1) flah_flag&=0xf3;</p><p>  WriteSDIO(ZLG7289_CMD_DATA0|4);</p><p>  WriteSDIO((unsigned char)result_AD2%10);</p><p><b>  Delay(1);</b></

23、p><p>  WriteSDIO(ZLG7289_CMD_DATA0|5);</p><p>  WriteSDIO(0x80|((unsigned char)result_AD2/10));</p><p><b>  Delay(1);</b></p><p>  if(warnning[2]==1) flah_fla

24、g&=0xcf;</p><p>  WriteSDIO(ZLG7289_CMD_DATA0|6);</p><p>  WriteSDIO((unsigned char)result_AD3%10);</p><p><b>  Delay(1);</b></p><p>  WriteSDIO(ZLG7289

25、_CMD_DATA0|7);</p><p>  WriteSDIO(0x80|((unsigned char)result_AD3/10));</p><p><b>  Delay(1);</b></p><p>  if(warnning[3]==1) flah_flag&=0x3f;</p><p>  

26、WriteSDIO(ZLG7289_CMD_HIDE);</p><p>  WriteSDIO(255);</p><p><b>  Delay(1);</b></p><p>  WriteSDIO(ZLG7289_CMD_FLASH);</p><p>  WriteSDIO(flah_flag);</p&

27、gt;<p><b>  Delay(1);</b></p><p>  首先先對(duì)數(shù)碼管顯示標(biāo)志進(jìn)行初始化,全設(shè)為“1”,然后通過(guò)WriteSDIO函數(shù)顯示第一、第二兩個(gè)數(shù)碼管,數(shù)碼管一位個(gè)位,數(shù)碼管二為十位,并且0x80顯示小數(shù)點(diǎn)。當(dāng)通路的顯示值超過(guò)警戒值時(shí),通過(guò)flah_flag&=0xfc還是0xfc,即數(shù)碼管一二設(shè)為“0”,兩管開(kāi)始閃爍。以此類推,設(shè)置其余的四個(gè)

28、數(shù)碼管。</p><p><b>  五 實(shí)驗(yàn)結(jié)果</b></p><p>  通過(guò)設(shè)置開(kāi)發(fā)板上兩個(gè)文本框,用來(lái)輸入通道編號(hào)和該通道的警戒值,在鍵盤(pán)消息響應(yīng)函數(shù)里針對(duì)兩個(gè)文本框分別作出處理,只處理回車(chē)鍵和取消鍵,通過(guò)按回車(chē)鍵使文本框進(jìn)入或退出編輯狀態(tài)。</p><p>  假設(shè)設(shè)通路1的警戒值為10,那么當(dāng)1路超出警戒線10之后條形圖中超出的部

29、分會(huì)以閃動(dòng)的方式顯示,并在數(shù)碼管上對(duì)應(yīng)的通道1的數(shù)值顯示當(dāng)大于10時(shí),數(shù)字閃爍顯示。</p><p><b>  六 實(shí)驗(yàn)總結(jié)</b></p><p>  不知不覺(jué)已經(jīng)到了做設(shè)計(jì)性實(shí)驗(yàn)的時(shí)候的,這次我選的是基于ARM7的多通道儀表數(shù)據(jù)采集實(shí)驗(yàn),因?yàn)槲仪懊鎺讉€(gè)都是做的ARM7的實(shí)驗(yàn),所以我想選擇基于ARM7的多通道儀表數(shù)據(jù)采集實(shí)驗(yàn)應(yīng)該會(huì)比較的容易吧,不過(guò)我還是有點(diǎn)擔(dān)心,

30、因?yàn)橐粋€(gè)人想把一個(gè)設(shè)計(jì)性的實(shí)驗(yàn)完全做完,是不太容易的,之前的實(shí)驗(yàn)都是按照老師的視頻做的,而這次實(shí)驗(yàn)只有老師給的實(shí)驗(yàn)要求,其他的東西都需要自己獨(dú)立操作完成,所以我們必須要將前面所掌握的知識(shí)融會(huì)貫通,并靈活運(yùn)用,這樣才能把這次實(shí)驗(yàn)做完。</p><p>  首先按照的實(shí)驗(yàn)要求,我開(kāi)始在網(wǎng)上找資料,然后和做這個(gè)實(shí)驗(yàn)的同學(xué)討論,終于有了一個(gè)比較的明確的思路,可是真正做的時(shí)候并不是那么簡(jiǎn)單的,總是遇到這樣那樣的問(wèn)題,遇到問(wèn)

31、題就要解決,這就要自己的實(shí)力,終于經(jīng)過(guò)自己不懈的努力,終于把程序中的錯(cuò)誤都改正過(guò)來(lái)了。</p><p>  這次實(shí)驗(yàn)使我明白了很多,光會(huì)有理論知識(shí)是不行的,我們要把理論知識(shí)和實(shí)踐結(jié)合起來(lái),這樣才發(fā)揮了理論知識(shí)的用途。做實(shí)驗(yàn)的時(shí)候不能太急躁,要慢慢來(lái),凡事都不能一氣呵成的,都要經(jīng)歷一定的過(guò)程,途中總會(huì)遇到一些問(wèn)題,遇到問(wèn)題我們不能退縮,要勇敢面對(duì),用自己的實(shí)力解決他,這樣我們才會(huì)成長(zhǎng)。</p><

32、;p><b>  參考文獻(xiàn)</b></p><p>  [1] 田澤. 嵌入式系統(tǒng)開(kāi)發(fā)與應(yīng)用教程[M] . 北京:北京航空航天大學(xué)出版社,2005.3</p><p>  [2] 周立功. ARM 嵌入式系統(tǒng)基礎(chǔ)教程[M] . 北京:北京航空航天大學(xué)出版社,2005.</p><p>  [3] 吳明暉. 基于ARM 的嵌入式系統(tǒng)開(kāi)發(fā)與應(yīng)

33、用[M] . 北京:人民郵電出版社,2004.</p><p><b>  附 錄</b></p><p>  實(shí)驗(yàn)代碼main.c</p><p>  #include"..\ucos-ii\includes.h" /* uC/OS interface */</p><p&

34、gt;  #include "..\ucos-ii\add\osaddition.h"</p><p>  #include "..\inc\drv.h"</p><p>  #include <string.h></p><p>  #include"..\inc\drv\ad.h"</

35、p><p>  #include"uhal.h"</p><p>  #include"zlg7289.h"</p><p>  #include"44b.h"</p><p>  #pragma import(__use_no_semihosting_swi) // ensure n

36、o functions that use semihosting </p><p>  #define ID_ChannelTextCtrl 101</p><p>  #define ID_ValueTextCtrl 102</p><p>  #define Draw_Wnd_ID 104</p><p>  PTextCtrl pCha

37、nnelTextCtrl,pValueTextCtrl;</p><p>  float result_AD0,result_AD1,result_AD2,result_AD3;</p><p>  int WarnningData[4]={33,33,33,33};</p><p>  int edit[2]={0,0};</p><p>

38、  int Key_Val;</p><p><b>  U32 mode;</b></p><p><b>  int x,y;</b></p><p>  extern int Zlg7289SIOBand;</p><p>  extern int Zlg7289SIOCtrl;</p&

39、gt;<p>  ///******************????***************///</p><p>  OS_STK Main_Stack[STACKSIZE*8]={0, }; //Main_Test_Task??</p><p>  void Main_Task(void *Id); //Main_Test_Task<

40、;/p><p>  #define Main_Task_Prio 12</p><p>  OS_STK Display_Task_Stack[STACKSIZE*8]={0, }; //Main_Test_Task??</p><p>  void Display_Task(void *Id); //Main_Test_Task&l

41、t;/p><p>  #define Display_Task_Prio 20</p><p>  OS_STK AD0_Task_Stack[STACKSIZE*8]={0, }; //Main_Test_Task??</p><p>  void AD0_Task(void *Id); //Main_Test_Task</p

42、><p>  #define AD0_Task_Prio 21</p><p>  OS_STK AD1_Task_Stack[STACKSIZE*8]={0, }; //Main_Test_Task??</p><p>  void AD1_Task(void *Id); //Main_Test_Task</p>&l

43、t;p>  #define AD1_Task_Prio 22</p><p>  OS_STK AD2_Task_Stack[STACKSIZE*8]={0, }; //Main_Test_Task??</p><p>  void AD2_Task(void *Id); //Main_Test_Task</p><p> 

44、 #define AD2_Task_Prio 23</p><p>  OS_STK AD3_Task_Stack[STACKSIZE*8]={0, }; //Main_Test_Task??</p><p>  void AD3_Task(void *Id); //Main_Test_Task</p><p>  #define

45、 AD3_Task_Prio 24</p><p>  /**************?????OS??*************</p><p>  tcp????11</p><p>  ??????????8</p><p><b>  ?????9</b></p><p>

46、;<b>  ????10</b></p><p>  lcd????59</p><p><b>  ????1</b></p><p>  *****************************************************/</p><p>  ///****

47、*************????*****************///</p><p>  OS_EVENT *Nand_Rw_Sem; //Nand_Flash???????</p><p>  //and you can use it as folloeing:</p><p>  // Nand_Rw_Sem=OS

48、SemCreate(1); //??Nand-Flash???????,???1??????//</p><p>  // OSSemPend(Nand_Rw_Sem,0,&err);</p><p>  // OSSemPost(Nand_Rw_Sem);</p><p>  OS_EVENT *Uart_Rw_Sem;

49、 //Uart???????</p><p>  //and you can use it as folloeing:</p><p>  // Uart_Rw_Sem=OSSemCreate(1); //??Uart???????,???1??????//</p><p>  // OSSemPend(Uart_

50、Rw_Sem,0,&err);</p><p>  // OSSemPost(Uart_Rw_Sem);</p><p>  //////////////////////////////////////////////////////////</p><p>  void initOSGUI()//????????????</p>&l

51、t;p><b>  {</b></p><p>  initOSMessage();</p><p>  initOSList();</p><p>  initOSDC();</p><p>  initOSCtrl();</p><p>  initOSFile();</p>

52、<p><b>  }</b></p><p>  /////////////////////////////////////////////////////</p><p>  // Main function. //</p><p>  /////////////

53、///////////////////////////////////////</p><p>  int main(void)</p><p><b>  {</b></p><p>  Uart_Printf("\nArm Target Init OK.");</p><p>  Zlg7289_

54、Reset();//zlg7289??</p><p>  ARMTargetInit(); //??????</p><p>  OSInit(); //??????? </p><p>  uHALr_ResetMMU();//??MMU</p><p>  LCD_Init(); //???LCD??&

55、lt;/p><p>  LCD_printf("LCD initialization is OK\n");//????????</p><p>  LCD_printf("320 x 240 Text Mode\n");</p><p>  initOSGUI();//???????</p><p>  

56、LoadFont();//?Unicode??</p><p>  LoadConfigSys();//??config.sys????????</p><p>  LCD_printf("Create task on uCOS-II...\n");</p><p>  OSTaskCreate(Main_Task, (void *)0, (

57、OS_STK *)&Main_Stack[STACKSIZE*8-1], </p><p>  Main_Task_Prio);// ??????</p><p>  OSTaskCreate(Display_Task,(void *)0, (OS_STK *)&Display_Task_Stack[STACKSIZE-1], </p><p&

58、gt;  Display_Task_Prio);// 20</p><p>  OSTaskCreate(AD0_Task,(void *)0, (OS_STK *)&AD0_Task_Stack[STACKSIZE-1], </p><p>  AD0_Task_Prio);</p><p>  OSTaskCreate(AD1_Task,(void

59、 *)0, (OS_STK *)&AD1_Task_Stack[STACKSIZE-1], </p><p>  AD1_Task_Prio);</p><p>  OSTaskCreate(AD2_Task,(void *)0, (OS_STK *)&AD2_Task_Stack[STACKSIZE-1], </p><p>  AD2

60、_Task_Prio);</p><p>  OSTaskCreate(AD3_Task,(void *)0, (OS_STK *)&AD3_Task_Stack[STACKSIZE-1], </p><p>  AD3_Task_Prio);</p><p>  OSAddTask_Init();//????????</p><p

61、>  LCD_printf("Starting uCOS-II...\n");</p><p>  LCD_printf("Entering graph mode...\n");</p><p>  LCD_ChangeMode(DspGraMode);//?LCD?????????</p><p>  InitRtc(

62、);//???????</p><p>  Nand_Rw_Sem=OSSemCreate(1); //??Nand-Flash???????,???1??????//</p><p>  OSStart();//??????????</p><p><b>  //???????</b></p><p><b

63、>  return 0;</b></p><p><b>  }</b></p><p>  ////////////////////////////////////////////////////////////////////////////////////////////////</p><p>  /////////

64、/////////</p><p>  //void init_ADdevice()</p><p><b>  //{</b></p><p>  //rADCPSR=20;</p><p>  //rADCCON=ADCCON_SLEEP;</p><p><b>  //}<

65、/b></p><p>  U8 onKey(int nkey, int fnkey)</p><p><b>  {</b></p><p>  static BOOLEAN input=FALSE;</p><p>  static int EditNumber=1;</p><p> 

66、 if(EditNumber==1)</p><p><b>  {</b></p><p>  switch(nkey)</p><p><b>  {</b></p><p>  case 14://OK</p><p>  if(!input)</p>

67、<p><b>  {</b></p><p>  SetWndCtrlFocus(NULL, ID_ChannelTextCtrl);</p><p>  pChannelTextCtrl->text[0]=0; //?????</p><p>  SetTextCtrlEdit(pChannelTextCtrl, TRUE

68、);</p><p>  DrawTextCtrl(pChannelTextCtrl);</p><p>  input=TRUE;</p><p>  edit[0]=1;</p><p><b>  }</b></p><p><b>  else</b></p&g

69、t;<p><b>  {</b></p><p>  SetTextCtrlEdit(pChannelTextCtrl, FALSE);</p><p>  DrawTextCtrl(pChannelTextCtrl);</p><p>  input=FALSE;</p><p>  edit[0]=0

70、;</p><p>  EditNumber=2;</p><p><b>  }</b></p><p>  return TRUE;</p><p>  case 16://Cancel</p><p>  SetTextCtrlEdit(pChannelTextCtrl, FALSE);&l

71、t;/p><p>  input=FALSE;</p><p>  edit[0]=0;</p><p>  EditNumber=2;</p><p>  return TRUE;</p><p><b>  }</b></p><p><b>  }</b&

72、gt;</p><p>  else if(EditNumber==2)</p><p><b>  {</b></p><p>  switch(nkey)</p><p><b>  {</b></p><p>  case 14://OK</p><

73、;p>  if(!input)</p><p><b>  {</b></p><p>  SetWndCtrlFocus(NULL, ID_ValueTextCtrl);</p><p>  pValueTextCtrl->text[0]=0; //?????</p><p>  SetTextCtrlE

74、dit(pValueTextCtrl, TRUE);</p><p>  DrawTextCtrl(pValueTextCtrl);</p><p>  input=TRUE;</p><p>  edit[1]=1;</p><p><b>  }</b></p><p><b>  

75、else</b></p><p><b>  {</b></p><p>  SetTextCtrlEdit(pValueTextCtrl, FALSE);</p><p>  DrawTextCtrl(pValueTextCtrl);</p><p>  input=FALSE;</p>&l

76、t;p>  edit[1]=0;</p><p>  EditNumber=1;</p><p>  WarnningData[ Unicode2Int(pChannelTextCtrl->text)]=Unicode2Int</p><p>  (pValueTextCtrl->text);</p><p><b&

77、gt;  }</b></p><p>  return TRUE;</p><p>  case 17://Cancel</p><p>  SetTextCtrlEdit(pValueTextCtrl, FALSE);</p><p>  DrawTextCtrl(pValueTextCtrl);</p><

78、p>  input=FALSE;</p><p>  edit[1]=0;</p><p>  EditNumber=1;</p><p>  return TRUE;</p><p><b>  }</b></p><p><b>  }</b></p>

79、<p>  return FALSE;</p><p><b>  }</b></p><p>  void Main_Task(void *Id) //Main_Test_Task</p><p><b>  {</b></p><p>  POSMSG pMs

80、g;</p><p>  init_ADdevice(20,ADCCON_SLEEP);</p><p>  /*mode=TchScr_GetOSXY(&x, &y);</p><p>  switch(mode)</p><p><b>  {</b></p><p>  ca

81、se TCHSCR_ACTION_CLICK:</p><p>  Uart_Printf("Action=click:x=%d,\ty=%d\n",x,y);</p><p><b>  break;</b></p><p>  case TCHSCR_ACTION_DBCLICK:</p><p>

82、;  Uart_Printf("Action=double click:x=%d,\ty=%d\n",x,y);</p><p><b>  break;</b></p><p><b>  }*/</b></p><p><b>  for(;;)</b></p>

83、<p><b>  {</b></p><p>  POS_Ctrl pCtrl;</p><p>  pMsg=WaitMessage(0);</p><p>  if(pMsg->pOSCtrl)</p><p><b>  {</b></p><p> 

84、 if(pMsg->pOSCtrl->CtrlMsgCallBk)</p><p>  (*pMsg->pOSCtrl->CtrlMsgCallBk)(pMsg);</p><p><b>  }</b></p><p><b>  else</b></p><p><

85、b>  {</b></p><p>  switch(pMsg->Message)</p><p><b>  {</b></p><p>  case OSM_TOUCH_SCREEN:</p><p>  switch(pMsg->LParam)</p><p>

86、<b>  {</b></p><p>  case TCHSCR_ACTION_CLICK:</p><p>  //Uart_Printf("Action=click:x=%d,\ty=%d\n",x,y);</p><p><b>  break;</b></p><p>

87、  case TCHSCR_ACTION_DBCLICK:</p><p>  //Uart_Printf("Action=double click:x=%d,\ty=%</p><p>  d\n",x,y);</p><p><b>  break;</b></p><p><b> 

88、 }</b></p><p>  case OSM_KEY:</p><p>  pCtrl=GetCtrlfromID(NULL, GetWndCtrlFocus(NULL));</p><p>  if(pCtrl->CtrlType==CTRLTYPE_WINDOW)</p><p><b>  {<

89、;/b></p><p>  if((((PWnd)pCtrl)->style&WND_STYLE_MODE)</p><p>  ==WND_STYLE_MODE)</p><p><b>  {</b></p><p>  //????????,????????</p><p

90、>  OSOnSysMessage(pMsg);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(onKey(pMsg->WParam,pMsg->LP

91、aram) )</p><p><b>  break;</b></p><p>  Uart_Printf("Key=%d",pMsg->WParam);</p><p>  switch(pMsg->WParam)</p><p><b>  {</b></

92、p><p>  case 15:Key_Val=1;break;</p><p>  case 11:Key_Val=2;break;</p><p>  case 12:Key_Val=3;break;</p><p>  case 13:Key_Val=4;break;</p><p>  case 8:Key_Val

93、=5;break;</p><p><b>  }</b></p><p><b>  default:</b></p><p>  OSOnSysMessage(pMsg);</p><p><b>  break;</b></p><p><b

94、>  }</b></p><p><b>  }</b></p><p>  DeleteMessage(pMsg);</p><p>  OSTimeDly(200);</p><p><b>  }</b></p><p><b>  }<

95、;/b></p><p>  void Display_Task(void * Id) //Main_Test_Task</p><p><b>  {</b></p><p><b>  PDC pdc;</b></p><p>  structRECT Channel

96、TextCtrl_Rect,ValueTextCtrl_Rect,Draw_Wnd_Rect;</p><p>  char Channel_Caption_8[10]="Channel:";</p><p>  char Value_Caption_8[10]="Value:";</p><p>  char Draw_Wn

97、d_Caption_8[]="Draw Window";</p><p>  char vol_8[]="Vol";</p><p>  char chn_8[]="Chn";</p><p>  char chn0_8[]="0";</p><p>  char

98、 chn1_8[]="1";</p><p>  char chn2_8[]="2";</p><p>  char chn3_8[]="3";</p><p>  char vol_10_8[]="10";</p><p>  char vol_20_8[]=&

99、quot;20";</p><p>  char vol_30_8[]="30";</p><p>  U8 show=0xff;</p><p>  u8 flash=0x00;</p><p>  u16 Channel_Caption_16[10];</p><p>  u16 V

100、alue_Caption_16[10];</p><p>  U16 Draw_Wnd_Caption_16[20];</p><p>  u16 vol_16[5];</p><p>  u16 chn_16[5];</p><p>  u16 chn0_16[2];</p><p>  u16 chn1_16[2]

101、;</p><p>  u16 chn2_16[2];</p><p>  u16 chn3_16[2];</p><p>  u16 result_AD0_16[5];</p><p>  u16 result_AD1_16[5];</p><p>  u16 result_AD2_16[5];</p>

102、<p>  u16 result_AD3_16[5];</p><p>  u16 vol_10_16[3];</p><p>  u16 vol_20_16[3];</p><p>  u16 vol_30_16[3];</p><p>  Wnd Draw_Wnd;</p><p>  PWnd pDr

103、aw_Wnd;</p><p>  int warnning[4]={1,1,1,1};</p><p>  BOOLEAN IsEdit=0;</p><p>  pdc=CreateDC();</p><p>  pDraw_Wnd=&Draw_Wnd;</p><p>  strChar2Unicode(

104、Draw_Wnd_Caption_16, Draw_Wnd_Caption_8);</p><p>  strChar2Unicode(Channel_Caption_16, Channel_Caption_8);</p><p>  strChar2Unicode(Value_Caption_16, Value_Caption_8);</p><p>  strC

105、har2Unicode(chn_16, chn_8);</p><p>  strChar2Unicode(vol_16, vol_8);</p><p>  strChar2Unicode(chn0_16, chn0_8);</p><p>  strChar2Unicode(chn1_16, chn1_8);</p><p>  strC

106、har2Unicode(chn2_16, chn2_8);</p><p>  strChar2Unicode(chn3_16, chn3_8);</p><p>  strChar2Unicode(vol_10_16,vol_10_8);</p><p>  strChar2Unicode(vol_20_16,vol_20_8);</p><p

107、>  strChar2Unicode(vol_30_16,vol_30_8);</p><p>  SetRect(&ChannelTextCtrl_Rect, 10,50,55,75);</p><p>  SetRect(&ValueTextCtrl_Rect, 10,125,55,150);</p><p>  SetRect(&

108、Draw_Wnd_Rect, 74, 9, 301, 216);</p><p>  pChannelTextCtrl=CreateTextCtrl(ID_ChannelTextCtrl, &ChannelTextCtrl_Rect, </p><p>  FONTSIZE_MIDDLE, CTRL_STYLE_FRAME, NULL,NULL);</p><

109、p>  pValueTextCtrl=CreateTextCtrl(ID_ValueTextCtrl, &ValueTextCtrl_Rect, FONTSIZE_MIDDLE, </p><p>  CTRL_STYLE_FRAME, NULL,NULL);</p><p>  pDraw_Wnd=CreateWindow(Draw_Wnd_ID, &Draw_W

110、nd_Rect, FONTSIZE_SMALL,WND_STYLE_MODELESS, </p><p>  Draw_Wnd_Caption_16, NULL);</p><p>  ClearScreen();</p><p>  TextOut(pdc, 55, 10, vol_16, TRUE, FONTSIZE_SMALL);</p>&l

111、t;p>  TextOut(pdc, 290, 215, chn_16, TRUE, FONTSIZE_SMALL);</p><p>  TextOut(pdc, 116, 215, chn0_16, TRUE, FONTSIZE_SMALL);</p><p>  TextOut(pdc, 166, 215, chn1_16, TRUE, FONTSIZE_SMALL);<

112、/p><p>  TextOut(pdc, 216, 215, chn2_16, TRUE, FONTSIZE_SMALL);</p><p>  TextOut(pdc, 266, 215, chn3_16, TRUE, FONTSIZE_SMALL);</p><p>  TextOut(pdc, 60, (int)(205-1*200/3.3), vol_10_

113、16, TRUE, FONTSIZE_SMALL);</p><p>  TextOut(pdc, 60, (int)(205-2*200/3.3), vol_20_16, TRUE, FONTSIZE_SMALL);</p><p>  TextOut(pdc, 60, (int)(205-3*200/3.3), vol_30_16, TRUE, FONTSIZE_SMALL);<

114、/p><p>  DrawTextCtrl(pChannelTextCtrl);</p><p>  DrawTextCtrl(pValueTextCtrl);</p><p><b>  for(;;)</b></p><p><b>  {</b></p><p>  Tex

115、tOut(pdc, 10, 35, Channel_Caption_16, TRUE, FONTSIZE_SMALL);</p><p>  TextOut(pdc, 10, 110, Value_Caption_16, TRUE, FONTSIZE_SMALL);</p><p>  if(edit[0]==1)</p><p><b>  {</

116、b></p><p>  if(IsEdit==1)</p><p><b>  {</b></p><p>  FillRect(pdc, 10, 35, 60, 45, GRAPH_MODE_NORMAL, COLOR_WHITE);</p><p><b>  IsEdit=0;</b>

117、</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  IsEdit=1;</b></p><p><b>  }<

118、/b></p><p><b>  }</b></p><p>  if(edit[1]==1)</p><p><b>  {</b></p><p>  if(IsEdit==1)</p><p><b>  {</b></p>

119、<p>  FillRect(pdc, 10, 110, 60, 120, GRAPH_MODE_NORMAL, COLOR_WHITE);</p><p><b>  IsEdit=0;</b></p><p><b>  }</b></p><p><b>  else</b></

120、p><p><b>  {</b></p><p><b>  IsEdit=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  DrawWindow(pDraw_Wnd);

121、</p><p>  MoveTo(pdc, 75, 15);</p><p>  LineTo(pdc, 80,10);</p><p>  LineTo(pdc, 85, 15);</p><p>  MoveTo(pdc,80 , 10);</p><p>  LineTo(pdc, 80, 210);</

122、p><p>  LineTo(pdc, 300, 210);</p><p>  MoveTo(pdc, 295, 205);</p><p>  LineTo(pdc, 300, 210);</p><p>  LineTo(pdc, 295, 215);</p><p>  MoveTo(pdc, 80, (int)(

123、210-1*200/3.3));</p><p>  LineTo(pdc, 300, (int)(210-1*200/3.3));</p><p>  MoveTo(pdc, 80, (int)(210-2*200/3.3));</p><p>  LineTo(pdc, 300, (int)(210-2*200/3.3));</p><p&g

124、t;  MoveTo(pdc, 80, (int)(210-3*200/3.3));</p><p>  LineTo(pdc, 300, (int)(210-3*200/3.3));</p><p>  /*if(Key_Val==1)</p><p><b>  {</b></p><p>  result_AD1=

125、0;</p><p>  result_AD2=0;</p><p>  result_AD3=0;</p><p><b>  }</b></p><p>  else if(Key_Val==2)</p><p><b>  {</b></p><p&

126、gt;  result_AD0=0;</p><p>  result_AD2=0;</p><p>  result_AD3=0;</p><p><b>  }</b></p><p>  else if(Key_Val==3)</p><p><b>  {</b>&l

127、t;/p><p>  result_AD0=0;</p><p>  result_AD1=0;</p><p>  result_AD3=0;</p><p><b>  }</b></p><p>  else if(Key_Val==4)</p><p><b>

128、;  {</b></p><p>  result_AD0=0;</p><p>  result_AD1=0;</p><p>  result_AD2=0;</p><p><b>  }*/</b></p><p>  if(Key_Val==1||Key_Val==5)<

129、/p><p><b>  {</b></p><p>  if(result_AD0<=WarnningData[0])</p><p><b>  {</b></p><p>  FillRect(pdc, 110, (int)(210-result_AD0*20/3.3), 130, <

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論