




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、PC機實時時鐘的設計利用PC機現(xiàn)有的硬件和軟件資源設計程序,以實現(xiàn)在顯示器上顯示XX(時):XX(分):XX(秒)。DATA SEGMENTCOUNT DB 100;*初始的時間顯示*TENH DB '1'HOUR DB '2:'TENM DB '0'MINUTE DB '0' DB ':'TENS DB '0'SECOND DB '0',0DH,0DH,'$'初始顯示12:00:00;*初始的界面顯示內(nèi)容*ENTER1 DB " -WELCOME-&quo
2、t;,0AH,0DH DB " BaoYan 120900931 ",0AH,0DH DB " All Rights Reserved ",0AH,0DHENTER2 DB ' The Time Now is ',10 DUP(0)ENTER3 DB 'Do you want to change the time? Y/N'ENTER4 DB '*-When finished changing the time,please press "enter" to continue-*'ENT
3、ER5 DB '*-You can press the left or right button for changing the hour ,minute -*'ENTER6 DB '*-or second that you want-*'DATA ENDSSTACK SEGMENT PARA STACK 'STACK'DB 256 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART PROC FARPUSH DSMOV AX,0PUSH AX;標準序返回DOSMOV
4、 AH,07HINT 21H;初始時無顯示,此時等待鍵盤輸入,AL=字符的ASCII碼,輸入無回顯;*將中斷矢量壓入堆棧保存*CLI;關中斷,防止有些硬件對中斷的干擾CLD;使DF=0MOV AX,0000HMOV DS,AXMOV SI,0020H;DS:SI指向08H中斷向量LODSW;取08中斷入口的偏移地址MOV BX,AXLODSW;取08中斷入口的段地址PUSH AXPUSH BX;壓棧保護MOV AX,DATAMOV DS,AX;建立數(shù)據(jù)段的可尋址性;*將中斷向量壓入新地址*MOV AX,0000HMOV ES,AXMOV DI,0020H;ES:DS指向08中斷向量存放地址MO
5、V AX,OFFSET TIMERSTOSW;寫入偏移地址MOV AX,CSSTOSW;寫入段地址MOV AL,00110110B;8253初始化,0通道,方式3,二進制計數(shù)OUT 43H,ALMOV AX,11932;計數(shù)初值=11932OUT 40H,ALMOV AL,AHOUT 40H,ALIN AL,21H;讀8259的中斷屏蔽寄存器IMRPUSH AX;壓棧保護,AL的值為0FCHSTI;開中斷MOV AH,1MOV CH,30HINT 10H;置光標類型CALL CLEAN_SCREEN;清屏;*屏幕初始化*PUSH AXPUSH BXMOV AX,0600H ;AH=06(滾動)
6、AL=00(全屏空白)MOV BH,000CH;設置背景顏色(3)和前景顏色(e)SUB CX,CX;從0行0列開始MOV DX,8F8FH;到8F行8F列INT 10HPOP AXPOP BX;*顯示ENTER1的內(nèi)容*MOV DH,1;行號MOV DL,0;列號MOV BH,0;頁號MOV AH,2;置光標位置INT 10HMOV CX,199MOV SI,OFFSET ENTER1SHOW:MOV AH,0EH;顯示字符(光標前移 ) ,al 字符, bl 前景色MOV AL,SIINT 10HINC SILOOP SHOW;*顯示ENTER2的內(nèi)容*PUSHESPUSHBPPUSHBX
7、PUSHCXPUSHDX;保護現(xiàn)場,讓寄存器壓棧(后同)MOV BP,OFFSET ENTER2;取ENTER2的偏移地址(后同)MOVAX,SEG ENTER2;取ENTER2的段地址(后同)MOVES,AX;ES:BP為欲顯示的字符串地址(后同)MOVCX,60;假設字符串長度為60(后同)MOVBX,0007H;BH=00,為頁號,BL=07H為顯示的字符串屬性,為銀白色(后同)MOVDX,0600H;起始行為06,起始列為00(后同)MOVAL,1MOVAH,13HINT 10HPOP DXPOP CXPOP BXPOP BPPOP ES;*顯示ENTER3的內(nèi)容*PUSHESPUSH
8、BPPUSHBXPUSHCXPUSHDXMOV BP,OFFSET ENTER3MOVAX,SEG ENTER3MOVES,AXMOVCX,40MOVBX,0007HMOVDX,0C00HMOVAL,1MOVAH,13HINT 10HPOP DXPOP CXPOP BXPOP BPPOP ES;*顯示ENTER4的內(nèi)容*PUSHESPUSHBPPUSHBXPUSHCXPUSHDXMOV BP,OFFSET ENTER4MOVAX,SEG ENTER4MOVES,AXMOVCX,48HMOVBX,0007HMOVDX,0D00HMOVAL,1MOVAH,13HINT 10HPOP DXPOP C
9、XPOP BXPOP BPPOP ES;*顯示ENTER5的內(nèi)容*PUSHESPUSHBPPUSHBXPUSHCXPUSHDXMOV BP,OFFSET ENTER5MOVAX,SEG ENTER5MOVES,AXMOVCX,4DHMOVBX,0007HMOVDX,0E00HMOVAL,1MOVAH,13HINT 10HPOP DXPOP CXPOP BXPOP BPPOP ES;*顯示ENTER6的內(nèi)容*PUSHESPUSHBPPUSHBXPUSHCXPUSHDXMOV BP,OFFSET ENTER6MOVAX,SEG ENTER6MOVES,AXMOVCX,1FHMOVBX,0007HM
10、OVDX,0F00HMOVAL,1MOVAH,13HINT 10HPOP DXPOP CXPOP BXPOP BPPOP ESFOREVER:MOV DL,0FFHMOV AH,06HINT 21H;判斷鍵盤是否有輸入MOV DL,ALMOV AH,02HINT 21H;顯示鍵盤輸入的字符JZ DISP;無鍵按下則轉(zhuǎn)顯示DISPCMP AL,20H;判斷按鍵是否為空格JZ EXIT1;若為空格,則退出程序CMP AL,'Y'JZ CHANGECMP AL,'y'JZ CHANGE;判斷是否為“Y”或者“y”,若是則轉(zhuǎn)到修改函數(shù);*顯示時間模塊*DISP:PUSH
11、ESPUSHBPPUSHBXPUSHCXPUSHDXMOV BP,OFFSET TENHMOVAX,SEG TENHMOVES,AXMOVCX,8;顯示從TENH開始的八個字符串,即時間MOVBX,000CHMOVDX,0923HMOVAL,1MOVAH,13HINT 10HPOP DXPOP CXPOP BXPOP BPPOP ESMOV BH,0MOV DX,0C2AHMOV AH,02HINT 10H;將光標置于0CH行的2AH列MOV AL,SECOND;取秒單元值WAITCHA: CMP AL,SECOND;判斷秒的數(shù)值是否改變JZ WAITCHA;沒有改變則繼續(xù)等待JMP FORE
12、VER;改變則轉(zhuǎn)FOREVEREXIT1:JMP EXIT;*修改時間模塊*CHANGE:MOVDX,0923H;將光標位置鎖定到時鐘的第一位CHANGE1:MOVAH,02HINT10H;鎖定光標位置,DH為行,DL為列MOVAL,0MOVCX,DXSUBCX,0923H;判定當前光標在時鐘的第幾位,存在CX里LEASI,TENHADDSI,CX;將SI指向當前光標位置所顯示存儲單元,以便進行修改MOVAH,0INT16H;讀取鍵盤按鍵信息,存在AL里,但并不回顯CMPAL,0DH;0DH為回車的ASCII碼,當鍵盤敲入回車時,則繼續(xù)顯示時間JZFOREVERCMPAH,4DH;判斷是否按了
13、右方向鍵JZWRI2;若按了右方向鍵則轉(zhuǎn)WRI2CMPAH,4BH;判斷是否按了左方向鍵JZMOVE2;若按了左方向鍵則轉(zhuǎn)MOVE2CMPAL,30HJBCHANGE1;輸入小于0作無效處理;*對輸入的時間值進行判斷模塊*HOUR_H:CMP CX,0;對小時高位輸入判斷JNZ HOUR_L;判斷是否是小時的高位,若不是則指向小時的低位CMP AL,'2'將輸入小時的高位的值判斷JA CHANGE1;若大于2,無效,轉(zhuǎn)到CHANGE1JMP WRI1;否則將其寫入(后同)HOUR_L: CMP CX,1;對小時低位輸入判斷JNZ MINU_H;判斷是否是小時的低位,若不是則指向
14、分鐘的高位MOV BL,TENHCMP BL,'2'判斷高位是否為2JZ HOUR_2;高位是2則轉(zhuǎn)向HOUR_2CMP AL,'9'JA CHANGE1;高位不為2時,低位可以輸入小于等于9的數(shù)JMP WRI1HOUR_2: CMP AL,'3'高位為2時,低位只能輸入小于等于3的數(shù)JA CHANGE1JMP WRI1MINU_H: CMP CX,3;對分鐘高位輸入判斷JNZ MINU_L;判斷是否是分鐘的高位,若不是則指向分鐘的低位CMP AL,'5'將輸入的數(shù)與5比較JA CHANGE1;若大于5無效JMP WRI1MINU
15、_L:CMP CX,4;對分鐘低位輸入判斷JNZ SEC_H;判斷是否是分鐘的低位,若不是則指向秒鐘的高位CMP AL,'9'將輸入分鐘的低位與9比較JA CHANGE1;大于9無效JMP WRI1SEC_H: CMP CX,6;對秒鐘高位輸入判斷JNZ SEC_L;判斷是否是秒鐘的高位,若不是則指向秒鐘的低位CMP AL,'5'將輸入的數(shù)與5比較JA CHANGE1;若大于5無效JMP WRI1SEC_L:CMP CX,7;對秒鐘低位低位判斷JNZ CHANGE1;光標不在時鐘上時,輸入不回顯也不處理CMP AL,'9'將輸入分鐘的低位與9比較
16、JA CHANGE1;大于9無效WRI1:MOVSI,AL;將輸入的字符存到對應內(nèi)存單元MOVAH,0EH;同時將輸入的字符顯示在當前位置INT10HJMP WRI2WRI2:MOVAL,SI+1;按下右方向鍵,則使偏移量加1CMPAL,':'當下一位為“:”時,則對DX加兩次,否則跳過它JNZMOVE1INCDXMOVE1:INCDX;每修改一位,把光標向后移一位JMP CHANGE1MOVE2:MOVAL,SI-1;當輸入左方向鍵時,使偏移量減1CMPAL,':'當下一位為“:”時,則對DX減兩次,否則跳過它JNZMOVE3DECDXMOVE3:DECDX;
17、每修改一位,把光標向前移一位JMPCHANGE1EXIT:CLI;有空格鍵按下時退出,關中斷CLD;清方向標志位POP AXOUT 21H,AL;恢復IMRMOV AL,36H;8253初始化,55msOUT 43H,ALMOV AL,0OUT 40H,ALOUT 40H,AL;*恢復中斷向量*MOV AX,0MOV ES,AXMOV DI,4*8POP AXSTOSWPOP AXSTOSWSTIRETSTART ENDP;*時間進位模塊*TIMER PROC FARPUSH AXDEC COUNTJNZ L2;不到一秒轉(zhuǎn)L2MOV COUNT,100;到1秒,重置COUNT,并修改時間INC
18、 SECONDCMP SECOND,'9'JLE TIMEXT;如果小于等于9,轉(zhuǎn)至TIMEXT(后同)MOV SECOND,'0'INC TENSCMP TENS,'6'JL TIMEXTMOV TENS,'0'INC MINUTECMP MINUTE,'9'JLE TIMEXTMOV MINUTE,'0'INC TENMCMP TENM,'6'JL TIMEXTMOV TENM,'0'JMP L3L2:JMP TIMEXTL3:MOV AL,HOURAND AL,0FHMOV AH,TENHAND AH,0FHMOV CL,4ROR AH,CLOR AL,AH;AH放到AL高四位ADD AL,1DAACMP AL,24JL L1;小于24轉(zhuǎn)L1,否則置0MOV TENH,'0'MOV HOUR,'0'JMP TIMEXTL1:MOV AH,ALAND AL,0FHOR AL,30HMOV HOUR,ALMOV CL,4ROR AH,CLAND AH,0FHOR AH,30HMOV TENH,AHTIMEXT :;中斷結(jié)束MOV AL,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論