嵌入式課程設(shè)計(jì)--led數(shù)碼管驅(qū)動(dòng)程序_第1頁(yè)
已閱讀1頁(yè),還剩33頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  《嵌入式控制系統(tǒng)》課程設(shè)計(jì)報(bào)告</p><p>  時(shí) 間    _</p><p>  學(xué) 院 自動(dòng)化 _</p><p>  專業(yè)班級(jí)       _</p><p>  姓 &#

2、160;名     ___</p><p>  學(xué)  號(hào)      </p><p>  合 作 者    _ </p><p>  指導(dǎo)教師      ___</p><p&

3、gt;<b>  摘  要</b></p><p>  隨著芯片技術(shù)和電子產(chǎn)品智能化的飛速發(fā)展,嵌入式技術(shù)越來越受到人們的關(guān)注,應(yīng)用領(lǐng)域幾乎遍及所有的電子產(chǎn)品:智能機(jī)器人、網(wǎng)絡(luò)通信、軍用設(shè)備、汽車導(dǎo)航、環(huán)境保護(hù)、智能儀器等等。嵌入式系統(tǒng)融合了計(jì)算機(jī)軟、硬件技術(shù)、通訊技術(shù)和半導(dǎo)體微電子技術(shù),針對(duì)實(shí)際應(yīng)用系統(tǒng)要求,將相應(yīng)的計(jì)算機(jī)直接嵌入到應(yīng)用系統(tǒng)中,并可針對(duì)應(yīng)用需求對(duì)軟、硬件進(jìn)行優(yōu)化、裁減。本次

4、課程要求在GX-PXA270EP平臺(tái)下開發(fā)出一個(gè)簡(jiǎn)單的windowsCE應(yīng)用程序,達(dá)到初步了解嵌入式軟件開發(fā)的流程。</p><p>  關(guān)鍵詞:嵌入式 軟件 windowsCE</p><p><b>  Abstract</b></p><p>  With the rapid development of chip technology

5、 and intelligent electronics, embedded technology more and more people's attention, applications virtually all electronic products: intelligent robots, network communications, military equipment, car navigation, envi

6、ronmental protection, intelligent instruments and so on. Embedded system integration of computer hardware and software technology, communication technology and semiconductor microelectronics technology for practical appl

7、ication of the syst</p><p>  Key Words:Embedded system software windowsCE</p><p><b>  目  錄</b></p><p><b>  摘  要1</b></p><p>  Abstract1<

8、/p><p><b>  引  言1</b></p><p>  LED數(shù)碼管驅(qū)動(dòng)程序2</p><p><b>  1 實(shí)驗(yàn)內(nèi)容2</b></p><p><b>  2 實(shí)驗(yàn)設(shè)備2</b></p><p>  3 實(shí)驗(yàn)設(shè)計(jì)原理2</p&g

9、t;<p>  3.1 LED發(fā)光管原理2</p><p>  3.2 八位LED顯示器2</p><p><b>  4 實(shí)驗(yàn)步驟3</b></p><p>  4.1 加載驅(qū)動(dòng)程序3</p><p>  4.2 添加控件3</p><p>  4.3 添加按鈕響應(yīng)程序

10、4</p><p>  4.4 基本功能的實(shí)現(xiàn)4</p><p>  4.5 時(shí)鐘功能的實(shí)現(xiàn)5</p><p>  4.5 按鍵設(shè)置時(shí)鐘6</p><p>  4.5文本框設(shè)置時(shí)鐘12</p><p><b>  5 實(shí)驗(yàn)結(jié)果13</b></p><p>  5.

11、1 基本功能13</p><p>  5.2 時(shí)鐘功能14</p><p><b>  結(jié)  論15</b></p><p>  參 考 文 獻(xiàn)16</p><p><b>  附 錄17</b></p><p>  1 程序清單led_1Dlg.cpp17<

12、;/p><p>  2 程序清單led_1Dlg.h27</p><p><b>  引  言</b></p><p>  通過嵌入式控制系統(tǒng)課程的學(xué)習(xí)并結(jié)合本次實(shí)驗(yàn),使學(xué)生了解嵌入式系統(tǒng)的開發(fā)方法和流程,熟悉Intel XScale硬件平臺(tái)及其應(yīng)用處理機(jī)的使用方法,熟悉Windows CE嵌入式系統(tǒng)的基本原理、概念。并能針對(duì)Intel XSca

13、le硬件平臺(tái)、應(yīng)用需求自行定制、優(yōu)化WinCE操作系統(tǒng),并獨(dú)立編寫可在Intel XScale嵌入式設(shè)備上運(yùn)行的應(yīng)用程序。</p><p>  本小組由三人組成,程順均、白茹和馬志達(dá)。在課程設(shè)計(jì)中,分工明確,團(tuán)結(jié)協(xié)作,最終順利完成里基本題目的第一個(gè)題目并且自行設(shè)計(jì)一個(gè)功能復(fù)雜的電子表。程順均負(fù)責(zé)了主要的程序設(shè)計(jì),白茹和馬志達(dá)負(fù)責(zé)硬件的連線等。</p><p>  LED數(shù)碼管驅(qū)動(dòng)程序<

14、;/p><p><b>  1 實(shí)驗(yàn)內(nèi)容</b></p><p>  基本功能:要求編寫一個(gè)測(cè)試程序,實(shí)現(xiàn)PXA270-EP 目標(biāo)板上的LED 數(shù)碼管循環(huán)顯示數(shù)字2,4,6,8。</p><p>  擴(kuò)展功能:使用數(shù)碼管和相關(guān)控件實(shí)現(xiàn)一個(gè)24小時(shí)制的時(shí)鐘,液晶屏界面和數(shù)碼管同時(shí)顯示時(shí)間,并方便更改。</p><p><

15、b>  2 實(shí)驗(yàn)設(shè)備</b></p><p>  1、GX-PXA270EP 實(shí)驗(yàn)箱</p><p>  2、裝有windows XP的PC</p><p><b>  3 實(shí)驗(yàn)設(shè)計(jì)原理</b></p><p>  3.1 LED發(fā)光管原理</p><p>  LED(Ligh

16、t Emitting Diode),即發(fā)光二極管。是一種半導(dǎo)體固體發(fā)光器件。它是利用固體半導(dǎo)體置于一個(gè)有引線的架子上,然后四周用環(huán)氧樹脂密封,起到保護(hù)內(nèi)部芯線的作用,所以LED的抗震性能好。</p><p>  發(fā)光二極管的核心部分是由p型半導(dǎo)體和n型半導(dǎo)體組成的晶片,如圖3.8.2,在p型半導(dǎo)體和n型半導(dǎo)體之間有一個(gè)過渡層,稱為p-n結(jié)。在某些半導(dǎo)體材料的PN結(jié)中,注入的少數(shù)載流子與多數(shù)載流子復(fù)合時(shí)會(huì)把多余的能

17、量以光的形式釋放出來,從而把電能直接轉(zhuǎn)換為光能。PN結(jié)加反向電壓,少數(shù)載流子難以注入,故不發(fā)光。這種利用注入式電致發(fā)光原理制作的二極管叫發(fā)光二極管,通稱LED。當(dāng)它處于正向工作狀態(tài)時(shí)(即兩端加上正向電壓),電流從LED陽(yáng)極流向陰極時(shí),半導(dǎo)體晶體就發(fā)出從紫外到紅外不同顏色的光線,光的強(qiáng)弱與電流有關(guān)。</p><p>  3.2 八位LED顯示器</p><p>  八段LED顯示器由8個(gè)發(fā)光

18、二極管組成?;?個(gè)長(zhǎng)條形的發(fā)光管排列成“日”字形,另一個(gè)賀點(diǎn)形的發(fā)光管在顯示器的右下角作為顯示小數(shù)點(diǎn)用,它能顯示各種數(shù)字及部份英文字母。LED顯示器有兩種不同的形式:一種是8個(gè)發(fā)光二極管的陽(yáng)極都連在一起的,稱之為共陽(yáng)極LED顯示器;另一種是8個(gè)發(fā)光二極管的陰極都連在一起的,稱之為共陰極LED顯示器。</p><p>  圖 3-1 數(shù)碼管內(nèi)部原理圖</p><p><b>  

19、4 實(shí)驗(yàn)步驟</b></p><p>  4.1 加載驅(qū)動(dòng)程序</p><p>  任何簡(jiǎn)單的硬件在操作系統(tǒng)上調(diào)用時(shí)都需要驅(qū)動(dòng)程序,數(shù)碼管也不例外。由于時(shí)間的限制,本次實(shí)驗(yàn)的開發(fā)板上的flash里面已經(jīng)燒錄了加載驅(qū)動(dòng)的windowsCE操作系統(tǒng),所以只需要打開相應(yīng)的EVC開發(fā)軟件開發(fā)即可。</p><p><b>  4.2 添加控件</

20、b></p><p>  為了讓數(shù)碼管在一個(gè)程序下演示兩個(gè)功能,所以這里添加了一個(gè)基本功能的按鈕,當(dāng)按下這個(gè)按鈕時(shí),數(shù)碼管進(jìn)入循環(huán)顯示狀態(tài),數(shù)碼管從左到右輪流顯示,分別顯示2、4、6、8,時(shí)間間隔為1S。添加按鈕控件后,在屬性里面更改其外觀。</p><p>  圖 4-1 添加按鈕控件效果圖</p><p>  4.3 添加按鈕響應(yīng)程序</p>

21、<p>  單獨(dú)的添加了按鈕,只是在界面上多了一個(gè)按鈕罷了,但是按鈕按下后還沒有響應(yīng)程序。在對(duì)話框的編輯界面下,雙擊按鈕,輸入響應(yīng)函數(shù)名稱,即插入了相應(yīng)的消息處理函數(shù)。如復(fù)位按鈕的處理函數(shù)。</p><p>  void CLed_1Dlg::OnButton1() </p><p><b>  {</b></p><p>  //

22、 TODO: Add your control notification handler code here</p><p>  for(int i = 0; i < 4; i++)</p><p><b>  {</b></p><p>  ledshow[i] = 0;</p><p><b>  }

23、</b></p><p><b>  show();</b></p><p><b>  }</b></p><p>  以同樣的方式為每個(gè)按鈕添加處理函數(shù)。本設(shè)計(jì)界面一共包含13個(gè)按鈕控件。12個(gè)用于設(shè)置時(shí)間的按鈕,1個(gè)基本功能按鈕。</p><p>  4.4 基本功能的實(shí)現(xiàn)<

24、/p><p>  基本功能是要求4位7段數(shù)碼管依次顯示2、4、6、8,時(shí)間間隔1S?;緦?shí)現(xiàn)方式是使用定時(shí)器,定時(shí)為1S,并添加定時(shí)中斷處理函數(shù)。其實(shí)現(xiàn)的流程圖如下:</p><p><b>  Y</b></p><p><b>  N</b></p><p>  圖 4-2 基本功能實(shí)現(xiàn)流程圖<

25、;/p><p>  4.5 時(shí)鐘功能的實(shí)現(xiàn)</p><p>  為了實(shí)現(xiàn)時(shí)鐘,同樣需要使用定時(shí)器。設(shè)備只有4位數(shù)碼管,所以不顯示秒而只顯示時(shí)和分。在對(duì)話框類里面定義成員數(shù)組變量,用于保存時(shí)間的4個(gè)位。</p><p>  圖 4-3 四位數(shù)碼管顯示變量表示圖</p><p>  顯示的4位數(shù)字并不是任意的,有一定的約束和規(guī)律,如分顯示到59時(shí)的下

26、一個(gè)狀態(tài)時(shí)00而不是60,時(shí)顯示到23時(shí)的下一個(gè)狀態(tài)是00而不是24。這樣的規(guī)則應(yīng)該應(yīng)用于定時(shí)響應(yīng)函數(shù)中。也就是void CLed_1Dlg::OnTimer(UINT nIDEvent)的實(shí)現(xiàn)代碼中。</p><p><b>  N</b></p><p><b>  YN</b></p><p><b> 

27、 Y</b></p><p>  圖 4-4 四位數(shù)碼管顯示變量表示圖</p><p>  4.5 按鍵設(shè)置時(shí)鐘</p><p>  時(shí)間與標(biāo)準(zhǔn)時(shí)間不一樣時(shí),需要進(jìn)行校正。本次實(shí)驗(yàn)的時(shí)鐘設(shè)置的方式有兩種,直接輸入校正和按鈕校正。按鈕校正時(shí),一共有8個(gè)按鍵,分別對(duì)應(yīng)4個(gè)數(shù)字的加操作和減操作。但是由于存儲(chǔ)的時(shí)候保存為整形,所以不能無(wú)節(jié)制的加減,得有一定的規(guī)則

28、。下面為按鍵的程序框圖。</p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  YY</b></p><p>  圖 4-5 小時(shí)十位加

29、調(diào)整按鍵響應(yīng)程序流程</p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  YY</b></p><p>  圖 4-6 小時(shí)十位減調(diào)整

30、按鍵響應(yīng)程序流程圖</p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  YY</b></p><p>  圖 4-7 小時(shí)個(gè)位加調(diào)整按

31、鍵響應(yīng)程序流程圖</p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  YY</b></p><p>  圖 4-8 小時(shí)個(gè)位減調(diào)整按鍵

32、響應(yīng)程序流程圖</p><p><b>  NY</b></p><p><b>  YY</b></p><p>  圖 4-9 分鐘十位加調(diào)整按鍵響應(yīng)程序流程圖 圖 4-10 分鐘十位減調(diào)整按鍵響應(yīng)程序流程圖</p><p><b>  NN</b><

33、/p><p><b>  YY</b></p><p>  圖 4-11 分鐘個(gè)位加調(diào)整按鍵響應(yīng)程序流程圖 圖 4-12 分鐘個(gè)位減調(diào)整按鍵響應(yīng)程序流程圖</p><p>  時(shí)鐘在運(yùn)行過程中是00:00~23:59的24個(gè)狀態(tài)中的一個(gè),所以在調(diào)整時(shí)間的時(shí)候必須要限制其狀態(tài)。其具體的規(guī)則如上面流程圖所示:</p><

34、;p><b>  小時(shí)個(gè)位不能大于2</b></p><p>  當(dāng)小時(shí)個(gè)位大于3時(shí),個(gè)位不能大于1</p><p>  當(dāng)小時(shí)個(gè)位小于4時(shí),個(gè)位不能大于2</p><p>  當(dāng)小時(shí)十位大于1時(shí),個(gè)位不能大于3</p><p>  當(dāng)小時(shí)十位小于2時(shí),個(gè)位不能大于9</p><p>  小

35、時(shí)的個(gè)位和十位都不能小于零</p><p>  分鐘十位不能大于5,</p><p><b>  分鐘個(gè)位不能大于9</b></p><p>  分鐘的十位和個(gè)位不能小于零</p><p>  4.5文本框設(shè)置時(shí)鐘</p><p>  文本框是windowsCE中的一個(gè)常用的控件,將文本框拖到對(duì)話

36、框中,將屬性設(shè)置為可寫,并設(shè)置其ID為ID_EDIT1。使用GetDlgItemInt(IDC_EDIT1,&b,FALSE)函數(shù)可以讀取文本內(nèi)容,并將其轉(zhuǎn)換為整數(shù)。使用sprintf(str,"%d",val)可以將獲取的整數(shù)轉(zhuǎn)換為字符串,最后通過對(duì)每個(gè)字符減去’0’的偏移,即可到到四個(gè)數(shù)字。最后將四個(gè)數(shù)字賦給時(shí)鐘的四個(gè)變量即可。</p><p>  圖 4-13 文本設(shè)置時(shí)間提交按

37、鈕響應(yīng)程序流程圖</p><p><b>  5 實(shí)驗(yàn)結(jié)果</b></p><p><b>  5.1 基本功能</b></p><p>  程序編寫好后,下載實(shí)驗(yàn)板上,運(yùn)行起來一個(gè)窗口界面。</p><p>  圖 5-1 程序運(yùn)行的窗口</p><p>  點(diǎn)擊基本功能按

38、鈕就會(huì)出現(xiàn)2、4、6、8的輪流顯示的效果,每次只顯示一位,每一位的顯示時(shí)間為1S,并且無(wú)限循環(huán)下去。當(dāng)按下停止按鈕,循環(huán)停止。</p><p>  圖 5-2 基本功能效果圖之一</p><p><b>  5.2 時(shí)鐘功能</b></p><p>  在停止模式下,從文本框中設(shè)置好時(shí)間提交,則可以設(shè)置當(dāng)前時(shí)間,然后按下使用按鈕,時(shí)鐘開始運(yùn)行。

39、標(biāo)準(zhǔn)時(shí)間模式下,一分鐘數(shù)據(jù)時(shí)間更新一次。實(shí)驗(yàn)中為了方便看到現(xiàn)象,使用SetTimer(1,1000,NULL)替換了SetTimer(1,60000,NULL),這樣時(shí)間加快了更新。八個(gè)按鍵可以再停止模式或者運(yùn)行模式調(diào)整時(shí)間,由于按鍵處理函數(shù)加入了對(duì)數(shù)字的限制,所以不會(huì)得到非法的時(shí)間。</p><p>  另外,在用于顯示的函數(shù)中加入了對(duì)文本框的設(shè)置函數(shù),所以文本框中的內(nèi)容,所以文本框的內(nèi)容始終會(huì)與數(shù)碼管的內(nèi)容保

40、持一致。</p><p>  圖 5-3 時(shí)間運(yùn)行到02:05的效果</p><p><b>  結(jié)  論</b></p><p>  windowsCE是一個(gè)界面友好的嵌入式操作系統(tǒng),系統(tǒng)提供了豐富了控件,極大的方便了用戶的開發(fā)。C++是優(yōu)秀的編程語(yǔ)言,在EVC環(huán)境下,編寫的難度大大降低,尤其是界面的處理。由于實(shí)驗(yàn)平臺(tái)提供了相應(yīng)的驅(qū)動(dòng)程序,所

41、以本次實(shí)驗(yàn)并不需要了解其硬件操作,大大縮短了一個(gè)嵌入式應(yīng)用的開發(fā)速度。通過本次嵌入式實(shí)驗(yàn)的操作,初步掌握了嵌入式軟件開發(fā)的流程,對(duì)操作系統(tǒng)的裁剪、移植、應(yīng)用軟件的開發(fā)有了更加深入的理解。</p><p><b>  參 考 文 獻(xiàn)</b></p><p>  楊旭著. 嵌入式課程設(shè)計(jì)(小學(xué)期) . 北京:北京科技大學(xué),2008.</p><p>

42、;  古萬(wàn)榮著. Visual C++完全自學(xué)手冊(cè)[M] .北京:北京.機(jī)械工業(yè)出版社,2009</p><p><b>  附 錄</b></p><p>  1 程序清單led_1Dlg.cpp</p><p>  1// led_1Dlg.cpp : implementation file</p><p>  #i

43、nclude "stdafx.h"</p><p>  #include "led_1.h"</p><p>  #include "led_1Dlg.h"</p><p>  #ifdef _DEBUG</p><p>  #define new DEBUG_NEW</p&g

44、t;<p>  #undef THIS_FILE</p><p>  static char THIS_FILE[] = __FILE__;</p><p><b>  #endif</b></p><p>  ////////////////////////////////////////////////////////////

45、/////////////////</p><p>  // CLed_1Dlg dialog</p><p>  CLed_1Dlg::CLed_1Dlg(CWnd* pParent /*=NULL*/)</p><p>  : CDialog(CLed_1Dlg::IDD, pParent)</p><p><b>  {<

46、;/b></p><p>  //{{AFX_DATA_INIT(CLed_1Dlg)</p><p>  // NOTE: the ClassWizard will add member initialization here</p><p>  //}}AFX_DATA_INIT</p><p>  // Note that Loa

47、dIcon does not require a subsequent DestroyIcon in Win32</p><p>  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);</p><p><b>  }</b></p><p>  void CLed_1Dlg::DoDataExc

48、hange(CDataExchange* pDX)</p><p><b>  {</b></p><p>  CDialog::DoDataExchange(pDX);</p><p>  //{{AFX_DATA_MAP(CLed_1Dlg)</p><p>  // NOTE: the ClassWizard wi

49、ll add DDX and DDV calls here</p><p>  //}}AFX_DATA_MAP</p><p><b>  }</b></p><p>  BEGIN_MESSAGE_MAP(CLed_1Dlg, CDialog)</p><p>  //{{AFX_MSG_MAP(CLed_1Dlg)

50、</p><p>  ON_BN_CLICKED(IDC_BUTTON1, OnButton1)</p><p>  ON_WM_DESTROY()</p><p>  ON_BN_CLICKED(IDC_BUTTON2, OnButton2)</p><p>  ON_BN_CLICKED(IDC_BUTTON3, OnButton3)&l

51、t;/p><p>  ON_BN_CLICKED(IDC_BUTTON4, OnButton4)</p><p>  ON_BN_CLICKED(IDC_BUTTON5, OnButton5)</p><p>  ON_BN_CLICKED(IDC_BUTTON6, OnButton6)</p><p>  ON_BN_CLICKED(IDC_B

52、UTTON7, OnButton7)</p><p>  ON_BN_CLICKED(IDC_BUTTON8, OnButton8)</p><p>  ON_BN_CLICKED(IDC_BUTTON9, OnButton9)</p><p>  ON_NOTIFY(NM_OUTOFMEMORY, IDC_SLIDER1, OnOutofmemorySlider1

53、)</p><p>  ON_BN_CLICKED(IDC_BUTTON10, OnButton10)</p><p>  ON_BN_CLICKED(IDC_BUTTON11, OnButton11)</p><p>  ON_BN_CLICKED(IDC_BUTTON12, OnButton12)</p><p>  ON_WM_TIME

54、R()</p><p>  ON_BN_CLICKED(IDC_BUTTON13, OnBasic)</p><p>  //}}AFX_MSG_MAP</p><p>  END_MESSAGE_MAP()</p><p>  /////////////////////////////////////////////////////////

55、////////////////////</p><p>  // CLed_1Dlg message handlers</p><p>  BOOL CLed_1Dlg::OnInitDialog()</p><p><b>  {</b></p><p>  CDialog::OnInitDialog();</

56、p><p>  // Set the icon for this dialog. The framework does this automatically</p><p>  // when the application's main window is not a dialog</p><p>  SetIcon(m_hIcon, TRUE);/

57、/ Set big icon</p><p>  SetIcon(m_hIcon, FALSE);// Set small icon</p><p>  CenterWindow(GetDesktopWindow());// center to the hpc screen</p><p>  // TODO: Add extra initialization

58、 here</p><p>  m_hDev = CreateFile(_T("LED2:"),GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);</p><p>  if(m_hDev == INVALID_HANDLE_VALUE)</p><p><b>  {</b></p>

59、<p>  AfxMessageBox(_T("打開設(shè)備失??!請(qǐng)聯(lián)系程順均"));</p><p><b>  }</b></p><p>  m_hDev_IO = CreateFile(_T("GPIO1:"),GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);</p>

60、<p>  if(m_hDev_IO == INVALID_HANDLE_VALUE)</p><p><b>  {</b></p><p>  AfxMessageBox(_T("打開設(shè)備失??!請(qǐng)聯(lián)系程順均"));</p><p><b>  }</b></p><

61、p>  return TRUE; // return TRUE unless you set the focus to a control</p><p><b>  }</b></p><p>  void CLed_1Dlg::OnButton1()</p><p><b>  {</b></p>

62、<p>  // TODO: Add your control notification handler code here</p><p>  for(int i = 0; i < 4; i++)</p><p><b>  {</b></p><p>  ledshow[i] = 0; //復(fù)位,清零</p>

63、;<p><b>  }</b></p><p>  show(); //調(diào)用顯示函數(shù),顯示</p><p><b>  }</b></p><p>  void CLed_1Dlg::show() //CLed_1Dlg類的成員函數(shù),用于數(shù)碼管驅(qū)動(dòng)和文本框的顯示</p><

64、p><b>  {</b></p><p>  BYTE data[4];</p><p>  DWORD bytes;</p><p>  char str[4][16];</p><p>  CString all; //用于文本框顯示的字符串</p><

65、;p>  for(int i = 0; i < 4; i++)</p><p><b>  {</b></p><p>  data[i] = ledfont[ledshow[i]]; //獲取顯示碼</p><p><b>  }</b></p><p>  WriteFil

66、e(m_hDev,data,4,&bytes,NULL); //驅(qū)動(dòng)數(shù)碼管顯示</p><p>  for(i = 0; i < 4; i++)</p><p><b>  {</b></p><p>  sprintf(str[i],"%d",ledshow[i]); //將字符格式化存于

67、str[]數(shù)組中</p><p>  all += str[i]; //將字符拼接起來</p><p><b>  }</b></p><p>  SetDlgItemText(IDC_EDIT1,all); //在文本框中顯示</p><p>  m_bvalue != m_bvalue;<

68、/p><p>  WriteFile(m_hDev_IO,&m_bvalue,4,&bytes,NULL); //LED亮或者滅</p><p><b>  }</b></p><p>  void CLed_1Dlg::OnDestroy()</p><p><b>  {</b>&l

69、t;/p><p>  CDialog::OnDestroy();</p><p>  CloseHandle(m_hDev);</p><p>  // TODO: Add your message handler code here</p><p><b>  }</b></p><p>  voi

70、d CLed_1Dlg::OnButton2()</p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  ledshow[0]++;</p><p>  //如果十位大于2,要清零&l

71、t;/p><p>  //如果個(gè)位已經(jīng)大于4,則十位最多加到1,</p><p>  //如果個(gè)位小于4,則十位最多最多加到2</p><p>  if(ledshow[0] > 2 || ledshow[0]*10 + ledshow[1] > 23 )</p><p><b>  {</b></p>

72、;<p>  ledshow[0] = 0; //清零</p><p><b>  }</b></p><p>  show(); //調(diào)用顯示函數(shù)</p><p><b>  }</b></p><p>  void CLed_1Dlg::OnButton3()<

73、;/p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  ledshow[0]--;</p><p>  if(ledshow[0] < 0 && ledshow[1]

74、 > 3) //十位不能小于零,個(gè)位已經(jīng)大于3</p><p><b>  {</b></p><p>  ledshow[0] = 1;//此時(shí)個(gè)位最大為1</p><p><b>  }</b></p><p>  else if(ledshow[0] < 0 &

75、;& ledshow[1] < 4) //十位不能小于零,個(gè)位小于4</p><p><b>  {</b></p><p>  ledshow[0] = 2;//此時(shí)個(gè)位最大為2</p><p><b>  }</b></p><p>  show();

76、 //調(diào)用顯示函數(shù)</p><p><b>  }</b></p><p>  void CLed_1Dlg::OnButton4()</p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code

77、here</p><p>  //如果十位小于2,則個(gè)位最多加到9</p><p>  //如果個(gè)位等于2,則個(gè)位最多加到3</p><p>  //也就是小時(shí)數(shù)必須是0~23之間變動(dòng)</p><p>  ledshow[1]++;</p><p>  if(ledshow[0]*10 + ledshow[1] >

78、; 23 || ledshow[1] > 9)</p><p><b>  {</b></p><p>  ledshow[1] = 0;</p><p><b>  }</b></p><p>  show(); //調(diào)用顯示函數(shù)</p><p>&l

79、t;b>  }</b></p><p>  void CLed_1Dlg::OnButton5()</p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  ledsh

80、ow[1]--;</p><p>  if(ledshow[1] < 0 && 2 != ledshow[0]) //個(gè)位不能小于零,小時(shí)小于20</p><p><b>  {</b></p><p>  ledshow[1] = 9;//個(gè)位置9</p><p><b>

81、  }</b></p><p>  else if(ledshow[1] < 0 && 2 == ledshow[0]) //個(gè)位不能小于零,小時(shí)大于19</p><p><b>  {</b></p><p>  ledshow[1] = 9;//此時(shí)個(gè)位一定不能大于3</p>&

82、lt;p><b>  }</b></p><p>  show(); //調(diào)用顯示函數(shù)</p><p><b>  }</b></p><p>  void CLed_1Dlg::OnButton6()</p><p><b>  {</b></p&

83、gt;<p>  // TODO: Add your control notification handler code here</p><p>  ledshow[2]++;</p><p>  if(ledshow[2] > 5)</p><p><b>  {</b></p><p>  le

84、dshow[2] = 0; //分鐘十位不能大于5</p><p><b>  }</b></p><p>  show(); //調(diào)用顯示函數(shù)</p><p><b>  }</b></p><p>  void CLed_1Dlg::OnButton7()</p&g

85、t;<p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  ledshow[2]--;</p><p>  if(ledshow[2] < 0) //分鐘十位不能小于0</p>

86、;<p><b>  {</b></p><p>  ledshow[2] = 5;</p><p><b>  }</b></p><p>  show(); //調(diào)用顯示函數(shù)</p><p><b>  }</b></p>

87、<p>  void CLed_1Dlg::OnButton8()</p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  ledshow[3]++;</p><p>  

88、if(ledshow[3] > 9) //分鐘個(gè)位不能大于9</p><p><b>  {</b></p><p>  ledshow[3] = 0;</p><p><b>  }</b></p><p>  show(); //調(diào)用顯示函數(shù)</p&

89、gt;<p><b>  }</b></p><p>  void CLed_1Dlg::OnButton9()</p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p>

90、<p>  ledshow[3]--;</p><p>  if(ledshow[3] < 0) //分鐘個(gè)位不能小于0</p><p><b>  {</b></p><p>  ledshow[3] = 9;</p><p><b>  }</b></p&

91、gt;<p>  show(); //調(diào)用顯示函數(shù)</p><p><b>  }</b></p><p>  void CLed_1Dlg::OnButton10()</p><p><b>  {</b></p><p>  // TODO: Add your co

92、ntrol notification handler code here</p><p>  BYTE data[4];</p><p><b>  BOOL b;</b></p><p>  DWORD bytes;</p><p><b>  int i,n;</b></p>&l

93、t;p>  char str[16];</p><p>  UINT val = GetDlgItemInt(IDC_EDIT1,&b,FALSE);//獲取文本的字符串將其轉(zhuǎn)換為//整數(shù)</p><p><b>  if(b)</b></p><p><b>  {</b></p><p

94、>  memset(data,0,4);</p><p>  n = sprintf(str,"%d",val); //格式化字符</p><p>  n = n > 4 ? 4 : n;</p><p>  for(i = 0; i < n; i++)</p><p><b>  {

95、</b></p><p>  ledshow[i] = str[i] - '0'; //字符轉(zhuǎn)換為數(shù)字</p><p><b>  }</b></p><p>  show(); //調(diào)用顯示函數(shù)</p><p><b>  }</b></

96、p><p><b>  }</b></p><p>  void CLed_1Dlg::OnButton11()</p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p>

97、;<p>  basic_flag = 2; //設(shè)置系統(tǒng)處于時(shí)鐘功能狀態(tài)</p><p>  SetTimer(1,60000,NULL); //60000ms產(chǎn)生一次中斷,刷新一次時(shí)間</p><p><b>  }</b></p><p>  void CLed_1Dlg::OnButton

98、12()</p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  KillTimer(1); //停止功能,關(guān)閉定時(shí)器即可</p><p><b>

99、;  }</b></p><p>  void CLed_1Dlg::OnTimer(UINT nIDEvent)</p><p><b>  {</b></p><p>  // TODO: Add your message handler code here and/or call default</p><

100、p>  BYTE data[4];</p><p>  DWORD bytes;</p><p>  CString all;</p><p>  if(2 == basic_flag) //如果系統(tǒng)處于時(shí)鐘模式</p><p><b>  {</b></p><p>  l

101、edshow[3]++; //分鐘數(shù)加一</p><p>  if(ledshow[3] > 9) //分鐘個(gè)位大于9</p><p><b>  {</b></p><p>  ledshow[3] = 0; //分鐘數(shù)個(gè)位清零</p><p>  ledshow[2]++;

102、 //分鐘十位加一</p><p>  if(ledshow[2] > 5) //如果分鐘十位大于5</p><p><b>  {</b></p><p>  ledshow[2] = 0; //如果分鐘十位清零</p><p>  ledshow[1]++; /

103、/小時(shí)個(gè)位加一</p><p>  if(ledshow[0]*10 + ledshow[1] > 23 || ledshow[1] > 9)//如果小數(shù)數(shù)大于//23或者個(gè)位大于9,清零</p><p><b>  {</b></p><p>  ledshow[1] = 0; //小時(shí)個(gè)位清零</p>&l

104、t;p>  ledshow[0] ++; //小時(shí)十位加一</p><p>  if(ledshow[0] > 2) //如果小時(shí)十位大于2</p><p><b>  {</b></p><p>  ledshow[0] = 0; //小時(shí)十位清零</p><p><

105、;b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  show();</b></p><p>&l

106、t;b>  }</b></p><p>  else if(1 == basic_flag)</p><p><b>  {</b></p><p>  for(int i = 0; i < 4; i++)</p><p><b>  {</b></p><

107、;p>  data[i] = 0; //先清零,也就是每次只有一位亮</p><p><b>  }</b></p><p>  data[numofshow] = ledfont[2*(numofshow+1)]; //給亮的那一位數(shù)碼管賦值</p><p>  WriteFile(m_hDev,data,4,&a

108、mp;bytes,NULL); //調(diào)用驅(qū)動(dòng)函數(shù),點(diǎn)亮數(shù)碼管</p><p>  numofshow++;</p><p>  if(numofshow > 4)</p><p><b>  {</b></p><p>  numofshow = 0;</p><p><

109、b>  }</b></p><p><b>  }</b></p><p>  CDialog::OnTimer(nIDEvent);</p><p><b>  }</b></p><p>  void CLed_1Dlg::OnBasic()</p><p&

110、gt;<b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  basic_flag = 1; //設(shè)置系統(tǒng)為基本功能</p><p>  SetTimer(1,1000,NULL);

111、 //一秒鐘一次中斷</p><p><b>  }</b></p><p>  2 程序清單led_1Dlg.h</p><p>  // led_1Dlg.h : header file</p><p><b>  //</b></p><p>  #if !de

112、fined(AFX_LED_1DLG_H__95659977_53B1_45DC_A958_9C77B50C2E22__INCLUDED_)</p><p>  #define AFX_LED_1DLG_H__95659977_53B1_45DC_A958_9C77B50C2E22__INCLUDED_</p><p>  #if _MSC_VER >= 1000</p>

113、<p>  #pragma once</p><p>  #endif // _MSC_VER >= 1000</p><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CLed_1Dlg dialog&

114、lt;/p><p>  const BYTE ledfont[] = {0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};</p><p>  //CString editstring;</p><p>  class CLed_1Dlg : public CDialog</p><p><

115、;b>  {</b></p><p>  // Construction</p><p><b>  public:</b></p><p>  CLed_1Dlg(CWnd* pParent = NULL);// standard constructor</p><p>  HANDLE m_hDe

116、v;</p><p>  HANDLE m_hDev_IO;</p><p>  bool m_bvalue;</p><p>  DWORD m_dwWrittenBytes;</p><p>  BYTE basic_flag;</p><p>  BYTE numofshow;</p><

117、p>  void CLed_1Dlg::show(); </p><p>  int ledshow[4];</p><p>  // Dialog Data</p><p>  //{{AFX_DATA(CLed_1Dlg)</p><p>  enum { IDD = IDD_LED_1_DIALOG };</p>

118、<p>  // NOTE: the ClassWizard will add data members here</p><p>  //}}AFX_DATA</p><p>  // ClassWizard generated virtual function overrides</p><p>  //{{AFX_VIRTUAL(CLed_1Dlg)

119、</p><p>  protected:</p><p>  virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV support</p><p>  //}}AFX_VIRTUAL</p><p>  // Implementation</p><p&g

120、t;  protected:</p><p>  HICON m_hIcon;</p><p>  // Generated message map functions</p><p>  //{{AFX_MSG(CLed_1Dlg)</p><p>  virtual BOOL OnInitDialog();</p><

121、p>  afx_msg void OnButton1();</p><p>  afx_msg void OnDestroy();</p><p>  afx_msg void OnButton2();</p><p>  afx_msg void OnButton3();</p><p>  afx_msg void OnButton

122、4();</p><p>  afx_msg void OnButton5();</p><p>  afx_msg void OnButton6();</p><p>  afx_msg void OnButton7();</p><p>  afx_msg void OnButton8();</p><p>  a

123、fx_msg void OnButton9();</p><p>  afx_msg void OnOutofmemorySlider1(NMHDR* pNMHDR, LRESULT* pResult);</p><p>  afx_msg void OnButton10();</p><p>  afx_msg void OnButton11();</p&g

124、t;<p>  afx_msg void OnButton12();</p><p>  afx_msg void OnTimer(UINT nIDEvent);</p><p>  afx_msg void OnReleasedcaptureSlider1(NMHDR* pNMHDR, LRESULT* pResult);</p><p>  afx

125、_msg void OnBasic();</p><p>  //}}AFX_MSG</p><p>  DECLARE_MESSAGE_MAP()</p><p><b>  };</b></p><p>  //{{AFX_INSERT_LOCATION}}</p><p>  // Micr

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論