版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 《嵌入式控制系統(tǒng)》課程設(shè)計報告</p><p> 時 間 _</p><p> 學(xué) 院 自動化 _</p><p> 專業(yè)班級 _</p><p> 姓
2、160;名 ___</p><p> 學(xué) 號 </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)品:智能機器人、網(wǎng)絡(luò)通信、軍用設(shè)備、汽車導(dǎo)航、環(huán)境保護、智能儀器等等。嵌入式系統(tǒng)融合了計算機軟、硬件技術(shù)、通訊技術(shù)和半導(dǎo)體微電子技術(shù),針對實際應(yīng)用系統(tǒng)要求,將相應(yīng)的計算機直接嵌入到應(yīng)用系統(tǒng)中,并可針對應(yīng)用需求對軟、硬件進行優(yōu)化、裁減。本次
4、課程要求在GX-PXA270EP平臺下開發(fā)出一個簡單的windowsCE應(yīng)用程序,達到初步了解嵌入式軟件開發(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ū)動程序2</p><p><b> 1 實驗內(nèi)容2</b></p><p><b> 2 實驗設(shè)備2</b></p><p> 3 實驗設(shè)計原理2</p&g
9、t;<p> 3.1 LED發(fā)光管原理2</p><p> 3.2 八位LED顯示器2</p><p><b> 4 實驗步驟3</b></p><p> 4.1 加載驅(qū)動程序3</p><p> 4.2 添加控件3</p><p> 4.3 添加按鈕響應(yīng)程序
10、4</p><p> 4.4 基本功能的實現(xiàn)4</p><p> 4.5 時鐘功能的實現(xiàn)5</p><p> 4.5 按鍵設(shè)置時鐘6</p><p> 4.5文本框設(shè)置時鐘12</p><p><b> 5 實驗結(jié)果13</b></p><p> 5.
11、1 基本功能13</p><p> 5.2 時鐘功能14</p><p><b> 結(jié) 論15</b></p><p> 參 考 文 獻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é)合本次實驗,使學(xué)生了解嵌入式系統(tǒng)的開發(fā)方法和流程,熟悉Intel XScale硬件平臺及其應(yīng)用處理機的使用方法,熟悉Windows CE嵌入式系統(tǒng)的基本原理、概念。并能針對Intel XSca
13、le硬件平臺、應(yīng)用需求自行定制、優(yōu)化WinCE操作系統(tǒng),并獨立編寫可在Intel XScale嵌入式設(shè)備上運行的應(yīng)用程序。</p><p> 本小組由三人組成,程順均、白茹和馬志達。在課程設(shè)計中,分工明確,團結(jié)協(xié)作,最終順利完成里基本題目的第一個題目并且自行設(shè)計一個功能復(fù)雜的電子表。程順均負責(zé)了主要的程序設(shè)計,白茹和馬志達負責(zé)硬件的連線等。</p><p> LED數(shù)碼管驅(qū)動程序<
14、;/p><p><b> 1 實驗內(nèi)容</b></p><p> 基本功能:要求編寫一個測試程序,實現(xiàn)PXA270-EP 目標(biāo)板上的LED 數(shù)碼管循環(huán)顯示數(shù)字2,4,6,8。</p><p> 擴展功能:使用數(shù)碼管和相關(guān)控件實現(xiàn)一個24小時制的時鐘,液晶屏界面和數(shù)碼管同時顯示時間,并方便更改。</p><p><
15、b> 2 實驗設(shè)備</b></p><p> 1、GX-PXA270EP 實驗箱</p><p> 2、裝有windows XP的PC</p><p><b> 3 實驗設(shè)計原理</b></p><p> 3.1 LED發(fā)光管原理</p><p> LED(Ligh
16、t Emitting Diode),即發(fā)光二極管。是一種半導(dǎo)體固體發(fā)光器件。它是利用固體半導(dǎo)體置于一個有引線的架子上,然后四周用環(huán)氧樹脂密封,起到保護內(nèi)部芯線的作用,所以LED的抗震性能好。</p><p> 發(fā)光二極管的核心部分是由p型半導(dǎo)體和n型半導(dǎo)體組成的晶片,如圖3.8.2,在p型半導(dǎo)體和n型半導(dǎo)體之間有一個過渡層,稱為p-n結(jié)。在某些半導(dǎo)體材料的PN結(jié)中,注入的少數(shù)載流子與多數(shù)載流子復(fù)合時會把多余的能
17、量以光的形式釋放出來,從而把電能直接轉(zhuǎn)換為光能。PN結(jié)加反向電壓,少數(shù)載流子難以注入,故不發(fā)光。這種利用注入式電致發(fā)光原理制作的二極管叫發(fā)光二極管,通稱LED。當(dāng)它處于正向工作狀態(tài)時(即兩端加上正向電壓),電流從LED陽極流向陰極時,半導(dǎo)體晶體就發(fā)出從紫外到紅外不同顏色的光線,光的強弱與電流有關(guān)。</p><p> 3.2 八位LED顯示器</p><p> 八段LED顯示器由8個發(fā)光
18、二極管組成。基中7個長條形的發(fā)光管排列成“日”字形,另一個賀點形的發(fā)光管在顯示器的右下角作為顯示小數(shù)點用,它能顯示各種數(shù)字及部份英文字母。LED顯示器有兩種不同的形式:一種是8個發(fā)光二極管的陽極都連在一起的,稱之為共陽極LED顯示器;另一種是8個發(fā)光二極管的陰極都連在一起的,稱之為共陰極LED顯示器。</p><p> 圖 3-1 數(shù)碼管內(nèi)部原理圖</p><p><b>
19、4 實驗步驟</b></p><p> 4.1 加載驅(qū)動程序</p><p> 任何簡單的硬件在操作系統(tǒng)上調(diào)用時都需要驅(qū)動程序,數(shù)碼管也不例外。由于時間的限制,本次實驗的開發(fā)板上的flash里面已經(jīng)燒錄了加載驅(qū)動的windowsCE操作系統(tǒng),所以只需要打開相應(yīng)的EVC開發(fā)軟件開發(fā)即可。</p><p><b> 4.2 添加控件</
20、b></p><p> 為了讓數(shù)碼管在一個程序下演示兩個功能,所以這里添加了一個基本功能的按鈕,當(dāng)按下這個按鈕時,數(shù)碼管進入循環(huán)顯示狀態(tài),數(shù)碼管從左到右輪流顯示,分別顯示2、4、6、8,時間間隔為1S。添加按鈕控件后,在屬性里面更改其外觀。</p><p> 圖 4-1 添加按鈕控件效果圖</p><p> 4.3 添加按鈕響應(yīng)程序</p>
21、<p> 單獨的添加了按鈕,只是在界面上多了一個按鈕罷了,但是按鈕按下后還沒有響應(yīng)程序。在對話框的編輯界面下,雙擊按鈕,輸入響應(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> 以同樣的方式為每個按鈕添加處理函數(shù)。本設(shè)計界面一共包含13個按鈕控件。12個用于設(shè)置時間的按鈕,1個基本功能按鈕。</p><p> 4.4 基本功能的實現(xiàn)<
24、/p><p> 基本功能是要求4位7段數(shù)碼管依次顯示2、4、6、8,時間間隔1S。基本實現(xiàn)方式是使用定時器,定時為1S,并添加定時中斷處理函數(shù)。其實現(xiàn)的流程圖如下:</p><p><b> Y</b></p><p><b> N</b></p><p> 圖 4-2 基本功能實現(xiàn)流程圖<
25、;/p><p> 4.5 時鐘功能的實現(xiàn)</p><p> 為了實現(xiàn)時鐘,同樣需要使用定時器。設(shè)備只有4位數(shù)碼管,所以不顯示秒而只顯示時和分。在對話框類里面定義成員數(shù)組變量,用于保存時間的4個位。</p><p> 圖 4-3 四位數(shù)碼管顯示變量表示圖</p><p> 顯示的4位數(shù)字并不是任意的,有一定的約束和規(guī)律,如分顯示到59時的下
26、一個狀態(tài)時00而不是60,時顯示到23時的下一個狀態(tài)是00而不是24。這樣的規(guī)則應(yīng)該應(yīng)用于定時響應(yīng)函數(shù)中。也就是void CLed_1Dlg::OnTimer(UINT nIDEvent)的實現(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è)置時鐘</p><p> 時間與標(biāo)準(zhǔn)時間不一樣時,需要進行校正。本次實驗的時鐘設(shè)置的方式有兩種,直接輸入校正和按鈕校正。按鈕校正時,一共有8個按鍵,分別對應(yīng)4個數(shù)字的加操作和減操作。但是由于存儲的時候保存為整形,所以不能無節(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 小時十位加
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 小時十位減調(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 小時個位加調(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 小時個位減調(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 分鐘個位加調(diào)整按鍵響應(yīng)程序流程圖 圖 4-12 分鐘個位減調(diào)整按鍵響應(yīng)程序流程圖</p><p> 時鐘在運行過程中是00:00~23:59的24個狀態(tài)中的一個,所以在調(diào)整時間的時候必須要限制其狀態(tài)。其具體的規(guī)則如上面流程圖所示:</p><
34、;p><b> 小時個位不能大于2</b></p><p> 當(dāng)小時個位大于3時,個位不能大于1</p><p> 當(dāng)小時個位小于4時,個位不能大于2</p><p> 當(dāng)小時十位大于1時,個位不能大于3</p><p> 當(dāng)小時十位小于2時,個位不能大于9</p><p> 小
35、時的個位和十位都不能小于零</p><p> 分鐘十位不能大于5,</p><p><b> 分鐘個位不能大于9</b></p><p> 分鐘的十位和個位不能小于零</p><p> 4.5文本框設(shè)置時鐘</p><p> 文本框是windowsCE中的一個常用的控件,將文本框拖到對話
36、框中,將屬性設(shè)置為可寫,并設(shè)置其ID為ID_EDIT1。使用GetDlgItemInt(IDC_EDIT1,&b,FALSE)函數(shù)可以讀取文本內(nèi)容,并將其轉(zhuǎn)換為整數(shù)。使用sprintf(str,"%d",val)可以將獲取的整數(shù)轉(zhuǎn)換為字符串,最后通過對每個字符減去’0’的偏移,即可到到四個數(shù)字。最后將四個數(shù)字賦給時鐘的四個變量即可。</p><p> 圖 4-13 文本設(shè)置時間提交按
37、鈕響應(yīng)程序流程圖</p><p><b> 5 實驗結(jié)果</b></p><p><b> 5.1 基本功能</b></p><p> 程序編寫好后,下載實驗板上,運行起來一個窗口界面。</p><p> 圖 5-1 程序運行的窗口</p><p> 點擊基本功能按
38、鈕就會出現(xiàn)2、4、6、8的輪流顯示的效果,每次只顯示一位,每一位的顯示時間為1S,并且無限循環(huán)下去。當(dāng)按下停止按鈕,循環(huán)停止。</p><p> 圖 5-2 基本功能效果圖之一</p><p><b> 5.2 時鐘功能</b></p><p> 在停止模式下,從文本框中設(shè)置好時間提交,則可以設(shè)置當(dāng)前時間,然后按下使用按鈕,時鐘開始運行。
39、標(biāo)準(zhǔn)時間模式下,一分鐘數(shù)據(jù)時間更新一次。實驗中為了方便看到現(xiàn)象,使用SetTimer(1,1000,NULL)替換了SetTimer(1,60000,NULL),這樣時間加快了更新。八個按鍵可以再停止模式或者運行模式調(diào)整時間,由于按鍵處理函數(shù)加入了對數(shù)字的限制,所以不會得到非法的時間。</p><p> 另外,在用于顯示的函數(shù)中加入了對文本框的設(shè)置函數(shù),所以文本框中的內(nèi)容,所以文本框的內(nèi)容始終會與數(shù)碼管的內(nèi)容保
40、持一致。</p><p> 圖 5-3 時間運行到02:05的效果</p><p><b> 結(jié) 論</b></p><p> windowsCE是一個界面友好的嵌入式操作系統(tǒng),系統(tǒng)提供了豐富了控件,極大的方便了用戶的開發(fā)。C++是優(yōu)秀的編程語言,在EVC環(huán)境下,編寫的難度大大降低,尤其是界面的處理。由于實驗平臺提供了相應(yīng)的驅(qū)動程序,所
41、以本次實驗并不需要了解其硬件操作,大大縮短了一個嵌入式應(yīng)用的開發(fā)速度。通過本次嵌入式實驗的操作,初步掌握了嵌入式軟件開發(fā)的流程,對操作系統(tǒng)的裁剪、移植、應(yīng)用軟件的開發(fā)有了更加深入的理解。</p><p><b> 參 考 文 獻</b></p><p> 楊旭著. 嵌入式課程設(shè)計(小學(xué)期) . 北京:北京科技大學(xué),2008.</p><p>
42、; 古萬榮著. Visual C++完全自學(xué)手冊[M] .北京:北京.機械工業(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è)備失??!請聯(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è)備失?。≌埪?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ū)動和文本框的顯示</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ū)動數(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> //如果個位已經(jīng)大于4,則十位最多加到1,</p><p> //如果個位小于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) //十位不能小于零,個位已經(jīng)大于3</p><p><b> {</b></p><p> ledshow[0] = 1;//此時個位最大為1</p><p><b> }</b></p><p> else if(ledshow[0] < 0 &
75、;& ledshow[1] < 4) //十位不能小于零,個位小于4</p><p><b> {</b></p><p> ledshow[0] = 2;//此時個位最大為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,則個位最多加到9</p><p> //如果個位等于2,則個位最多加到3</p><p> //也就是小時數(shù)必須是0~23之間變動</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]) //個位不能小于零,小時小于20</p><p><b> {</b></p><p> ledshow[1] = 9;//個位置9</p><p><b>
81、 }</b></p><p> else if(ledshow[1] < 0 && 2 == ledshow[0]) //個位不能小于零,小時大于19</p><p><b> {</b></p><p> ledshow[1] = 9;//此時個位一定不能大于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) //分鐘個位不能大于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) //分鐘個位不能小于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)處于時鐘功能狀態(tài)</p><p> SetTimer(1,60000,NULL); //60000ms產(chǎn)生一次中斷,刷新一次時間</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)閉定時器即可</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)處于時鐘模式</p><p><b> {</b></p><p> l
101、edshow[3]++; //分鐘數(shù)加一</p><p> if(ledshow[3] > 9) //分鐘個位大于9</p><p><b> {</b></p><p> ledshow[3] = 0; //分鐘數(shù)個位清零</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、/小時個位加一</p><p> if(ledshow[0]*10 + ledshow[1] > 23 || ledshow[1] > 9)//如果小數(shù)數(shù)大于//23或者個位大于9,清零</p><p><b> {</b></p><p> ledshow[1] = 0; //小時個位清零</p>&l
104、t;p> ledshow[0] ++; //小時十位加一</p><p> if(ledshow[0] > 2) //如果小時十位大于2</p><p><b> {</b></p><p> ledshow[0] = 0; //小時十位清零</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ū)動函數(shù),點亮數(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- arm嵌入式系統(tǒng)課程設(shè)計——mmcsd卡驅(qū)動程序設(shè)計
- 凌陽單片機課程設(shè)計驅(qū)動數(shù)碼管
- 嵌入式RFID的驅(qū)動程序設(shè)計.pdf
- 數(shù)碼管顯示課程設(shè)計報告
- plc數(shù)碼管顯示課程設(shè)計
- 嵌入式驅(qū)動程序設(shè)計與實現(xiàn).pdf
- lm8168led數(shù)碼管驅(qū)動芯片
- led數(shù)碼管顯示
- 基于嵌入式led顯示課程設(shè)計
- 數(shù)碼管學(xué)號滾動顯示課程設(shè)計
- 嵌入式系統(tǒng)擴展驅(qū)動程序的開發(fā).pdf
- 嵌入式Linux驅(qū)動程序分析與改進.pdf
- 嵌入式Linux設(shè)備驅(qū)動程序的設(shè)計與研究.pdf
- 數(shù)字電子技術(shù)數(shù)碼管課程設(shè)計---數(shù)碼管設(shè)計及原理分析
- 595驅(qū)動數(shù)碼管
- 課程設(shè)計---單只數(shù)碼管循環(huán)顯示設(shè)計
- led數(shù)碼管顯示控制
- 595驅(qū)動數(shù)碼管
- 基于嵌入式Linux驅(qū)動程序的研究與設(shè)計.pdf
- 基于ARM的嵌入式系統(tǒng)驅(qū)動程序設(shè)計.pdf
評論
0/150
提交評論