微機(jī)原理課設(shè)指針式屏顯電子鐘_第1頁
微機(jī)原理課設(shè)指針式屏顯電子鐘_第2頁
微機(jī)原理課設(shè)指針式屏顯電子鐘_第3頁
微機(jī)原理課設(shè)指針式屏顯電子鐘_第4頁
微機(jī)原理課設(shè)指針式屏顯電子鐘_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、微機(jī)原理及應(yīng)用課程設(shè)計(jì)設(shè)計(jì)題目: 指針式的屏顯電子鐘專 業(yè) 網(wǎng) 絡(luò) 工 程 班 級(jí) 網(wǎng) 絡(luò) 081 學(xué) 生 劉妙曲 指導(dǎo)教師 王 理 2011 年 2 學(xué)期目 錄一、 實(shí)驗(yàn)?zāi)康?.3二、 實(shí)驗(yàn)內(nèi)容及要求3三、 課設(shè)基本思想3四、 程序流程圖4五、 實(shí)驗(yàn)結(jié)果.6六、 程序源代碼6七、 課設(shè)心得體會(huì)14八、 參考文獻(xiàn)14一、實(shí)驗(yàn)?zāi)康?)學(xué)習(xí)系統(tǒng)駐留的方法。2)了解BIOS中時(shí)間參數(shù)的調(diào)用方法。3)了解屏幕畫圖的方法 對(duì)于本次應(yīng)用的科目微機(jī)原理與接口技術(shù)來說,因?yàn)樾枰獞?yīng)用Win32 匯編語言技術(shù)來編寫代碼實(shí)現(xiàn)功能,所以要掌握這門語言。并且要用到Windows API 接口的許多函數(shù),所以要掌握一部分

2、函數(shù)的調(diào)用方法及實(shí)現(xiàn)的功能。檢驗(yàn)和提高匯編語言程序設(shè)計(jì)能力,和微機(jī)原理與接口技術(shù)應(yīng)用方面的分析問題與解決問題的能力,掌握32位匯編語言,完成軟件的設(shè)計(jì)要求、編碼和測(cè)試等。 二、實(shí)驗(yàn)內(nèi)容及要求1)在屏幕上顯示一個(gè)適當(dāng)大小的橢圓形界面,橢圓形軌道上,均勻的分布著60個(gè)“點(diǎn)”,代表1秒60秒的位置,凡是5倍數(shù)的“點(diǎn)”,應(yīng)當(dāng)比其他的“點(diǎn)”稍大。2)以橢圓的中心為軸,畫一條線代表“秒針”,采用定時(shí)中斷的方式,每過一秒鐘,秒鐘移動(dòng)一個(gè)位置,同時(shí)系統(tǒng)發(fā)出“嘀嗒”的聲音,如果相應(yīng)的“點(diǎn)”能改變顏色,則動(dòng)感更強(qiáng)。3)定時(shí)源可以使用系統(tǒng)的定時(shí)源。4)按下“Esc”鍵之后,結(jié)束演示。三 課設(shè)基本思想 1)屏幕應(yīng)設(shè)置

3、為圖形方式,采用模塊化編程模式,主模塊顯示橢圓形表盤,并且處理時(shí)鐘中斷,每過一秒鐘,轉(zhuǎn)入一次子模塊,子模塊負(fù)責(zé)秒針移動(dòng)的位置。2)在著手本課題設(shè)計(jì)之前,學(xué)習(xí)掌握真設(shè)計(jì)方法,掌握順時(shí)針方向畫圓的技術(shù),靈活運(yùn)用,就可以設(shè)計(jì)出秒針的移動(dòng)程序。3)系統(tǒng)駐留的方法及BIOS中時(shí)間參數(shù)的調(diào)用方法見統(tǒng)駐留時(shí)間程序。屏幕設(shè)置為圖形方式,采用模塊化編程,主模塊顯示界面信息,每個(gè)子模塊負(fù)責(zé)一個(gè)功能,然后通過模塊調(diào)用來實(shí)現(xiàn)。 圓及畫線子模塊顯示圓形表盤,及時(shí)、分、秒針,然后調(diào)用秒針移動(dòng)子模塊式電子鐘能夠運(yùn)行。 動(dòng)子模塊中,首先通過cos和sin兩個(gè)功能模塊來確定秒針移動(dòng)的度數(shù),其次分別對(duì)秒、分、時(shí)進(jìn)行擦除重寫操作,

4、再分別對(duì)表盤及圓心進(jìn)行刷新,這樣就實(shí)現(xiàn)了時(shí)、分、秒針的動(dòng)態(tài)變化。四 程序流程圖開始顯示信息調(diào)用畫線子模塊畫出時(shí)分秒針調(diào)用系統(tǒng)實(shí)時(shí)時(shí)鐘顯示模塊Clk顯示系統(tǒng)時(shí)間調(diào)用擦除、重寫及角度確定子模塊進(jìn)行指針移動(dòng)調(diào)用renovate及enovate進(jìn)行表盤及圓心的刷新接收鍵盤字符是否為q結(jié)束YN五、實(shí)驗(yàn)結(jié)果六、程序源代碼包含的庫文件及數(shù)據(jù)段的定義如下:.386.model flat, stdcalloption casemap :none includewindows.inc ; Include 文件定義includeuser32.incincludelib user32.libincludekernel

5、32.incincludelib kernel32.libincludeGdi32.incincludelib Gdi32.lib.data?hInstancedd?hWinMaindd?dwCenterXdd? ;圓心XdwCenterYdd?;圓心YdwRadiusdd?;半徑ICO_MAINequ1000h ; Equ 等值定義ID_TIMERequ1.constszClassNamedb '指針式屏顯電子鐘',0(2)計(jì)算時(shí)鐘的位置、大小的_CalcClockParam子程序:_CalcClockParamproclocalstRect:RECTinvokeGetCli

6、entRect,hWinMain,addr stRectmoveax,stRect.rightsubeax,stRect.left;eax = 寬度movecx,stRect.bottomsubecx,stRect.top;ecx = 高度.ifecx > eax ; 比較客戶區(qū)寬度和高度,以小的值作為時(shí)鐘的直徑movedx,eax ;高度 > 寬度subecx,eaxshrecx,1movdwCenterX,0movdwCenterY,ecx.elsemovedx,ecxsubeax,ecxshreax,1movdwCenterX,eaxmovdwCenterY,0.endifs

7、hredx,1movdwRadius,edxadddwCenterX,edxadddwCenterY,edxret_CalcClockParamendp(3)計(jì)算時(shí)鐘圓周上某個(gè)角度對(duì)應(yīng)的 X 坐標(biāo), X = 圓心X + Sin(角度) * 半徑的子程序_CalcX:_dwPara180dw180_CalcXproc_dwDegree,_dwRadius ;輸入?yún)?shù)是角度_dwDegree和半徑_dwRadiuslocaldwReturnfilddwCenterXfild_dwDegreefldpifmul;角度*Pifild_dwPara180fdivpst(1),st;角度*Pi/180fs

8、in;Sin(角度*Pi/180)fild_dwRadiusfmul;半徑*Sin(角度*Pi/180)fadd;X+半徑*Sin(角度*Pi/180)fistpdwReturnmoveax,dwReturnret_CalcXendp計(jì)算時(shí)鐘圓周上某個(gè)角度對(duì)應(yīng)的 Y 坐標(biāo),類似于上面計(jì)算X坐標(biāo),Y = 圓心Y - Cos(角度) * 半徑(4)按照 _dwDegreeInc 的步進(jìn)角度,畫 _dwRadius 為半徑的小圓點(diǎn)(刻度)程序:_DrawDotproc_hDC,_dwDegreeInc,_dwRadiuslocaldwNowDegree,dwRlocaldwX,dwYmovdwNow

9、Degree,0moveax,dwRadiussubeax,10movdwR,eax.whiledwNowDegree <=360finitinvoke_CalcX,dwNowDegree,dwR ; 計(jì)算小圓點(diǎn)的圓心坐標(biāo)movdwX,eaxinvoke_CalcY,dwNowDegree,dwRmovdwY,eaxmoveax,dwX;畫點(diǎn)movebx,eaxmovecx,dwYmovedx,ecxsubeax,_dwRadiusaddebx,_dwRadiussubecx,_dwRadiusaddedx,_dwRadiusinvokeEllipse,_hDC,eax,ecx,ebx,

10、edxmoveax,_dwDegreeIncadddwNowDegree,eax.endwret_DrawDotendp(5) 畫 _dwDegree 角度的線條,半徑=時(shí)鐘半徑-參數(shù)_dwRadiusAdjust(指針)子程序:_DrawLineproc_hDC,_dwDegree,_dwRadiusAdjustlocaldwRlocaldwX1,dwY1,dwX2,dwY2moveax,dwRadiussubeax,_dwRadiusAdjustmovdwR,eaxinvoke_CalcX,_dwDegree,dwR ; 計(jì)算線條兩端的坐標(biāo)movdwX1,eaxinvoke_CalcY,_

11、dwDegree,dwRmovdwY1,eaxadd_dwDegree,180invoke_CalcX,_dwDegree,10movdwX2,eaxinvoke_CalcY,_dwDegree,10movdwY2,eaxinvokeMoveToEx,_hDC,dwX1,dwY1,NULLinvokeLineTo,_hDC,dwX2,dwY2ret_DrawLineendp(6)調(diào)用API函數(shù)顯示系統(tǒng)當(dāng)前時(shí)間及畫電子鐘的指針程序:_ShowTimeproc_hWnd,_hDClocalstTime:SYSTEMTIMEpushadinvokeGetLocalTime,addr stTimein

12、voke_CalcClockParaminvokeGetStockObject,BLACK_BRUSH ; 畫時(shí)鐘圓周上的點(diǎn)invokeSelectObject,_hDC,eaxinvoke_DrawDot,_hDC,360/12,3;畫12個(gè)大圓點(diǎn)invoke_DrawDot,_hDC,360/60,1;畫60個(gè)小圓點(diǎn)invokeCreatePen,PS_SOLID,1,0 ; 畫時(shí)鐘指針invokeSelectObject,_hDC,eaxinvokeDeleteObject,eaxmovzxeax,stTime.wSecondmovecx,360/60mulecx ;秒針度數(shù) = 秒 *

13、 360/60invoke_DrawLine,_hDC,eax,15;時(shí)針、分針的畫法類似于秒針,只是設(shè)置的顯示寬度不同invokeCreatePen,PS_SOLID,3,0invokeSelectObject,_hDC,eaxinvokeDeleteObject,eaxmovzxeax,stTime.wHour.ifeax >=12subeax,12.endifmovecx,360/12mulecxmovzxecx,stTime.wMinuteshrecx,1addeax,ecxinvoke_DrawLine,_hDC,eax,30invokeGetStockObject,NULL_

14、PENinvokeSelectObject,_hDC,eaxinvokeDeleteObject,eaxpopadret_ShowTimeendp(7)顯示圓形表盤窗口的初始化過程:_ProcWinMainprocuses ebx edi esi hWnd,uMsg,wParam,lParamlocalstPS:PAINTSTRUCTmoveax,uMsg.ifeax =WM_TIMERinvokeInvalidateRect,hWnd,NULL,TRUEinvoke MessageBeep,-1.elseifeax =WM_PAINTinvokeBeginPaint,hWnd,addr st

15、PSinvoke_ShowTime,hWnd,eaxinvokeEndPaint,hWnd,addr stPS.elseifeax =WM_CREATEinvokeSetTimer,hWnd,ID_TIMER,1000,NULL.elseifeax =WM_CLOSE |(eax = WM_KEYDOWN |eax = WM_KEYUP) && wParam = VK_ESCAPE)invokeKillTimer,hWnd,ID_TIMERinvokeDestroyWindow,hWinMaininvokePostQuitMessage,NULL.elseinvokeDefWi

16、ndowProc,hWnd,uMsg,wParam,lParamret.endifxoreax,eaxret_ProcWinMainendp(8)程序的主體顯示過程:_WinMainproclocalstWndClass:WNDCLASSEXlocalstMsg:MSGinvokeGetModuleHandle,NULLmovhInstance,eaxinvokeRtlZeroMemory,addr stWndClass,sizeof stWndClass ; 注冊(cè)窗口類invokeLoadIcon,hInstance,ICO_MAINmovstWndClass.hIcon,eaxmovstW

17、ndClass.hIconSm,eaxinvokeLoadCursor,0,IDC_ARROWmovstWndClass.hCursor,eaxpushhInstancepopstWndClass.hInstancemovstWndClass.cbSize,sizeof WNDCLASSEXmovstWndClass.style,CS_HREDRAW or CS_VREDRAWmovstWndClass.lpfnWndProc,offset _ProcWinMainmovstWndClass.hbrBackground,COLOR_WINDOW + 1movstWndClass.lpszCla

18、ssName,offset szClassNameinvokeRegisterClassEx,addr stWndClass; 建立并顯示窗口 invokeCreateWindowEx,WS_EX_CLIENTEDGE, offset szClassName,offset szClassName, WS_OVERLAPPEDWINDOW, 100,100,250,270, NULL,NULL,hInstance,NULLmovhWinMain,eaxinvokeShowWindow,hWinMain,SW_SHOWNORMALinvokeUpdateWindow,hWinMain .whileTRUEinvokeGetMessage,addr stMsg,NULL,0,0.break.if eax= 0invokeTranslateMessage,addr stMsginvokeDispatchMessage,addr stMsg

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(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)論