微機(jī)原理課程設(shè)計(jì)-電子鐘的設(shè)計(jì)_第1頁
微機(jī)原理課程設(shè)計(jì)-電子鐘的設(shè)計(jì)_第2頁
微機(jī)原理課程設(shè)計(jì)-電子鐘的設(shè)計(jì)_第3頁
微機(jī)原理課程設(shè)計(jì)-電子鐘的設(shè)計(jì)_第4頁
微機(jī)原理課程設(shè)計(jì)-電子鐘的設(shè)計(jì)_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、摘要數(shù)字鬧鐘1、通過8253定時(shí)器產(chǎn)生秒脈沖定時(shí)中斷。在中斷服務(wù)程序中實(shí)現(xiàn)秒、分、小時(shí)的進(jìn)位(24小時(shí)制)。2、將當(dāng)前時(shí)分秒在七段LED顯示器上顯示(如:)。3、可設(shè)置鬧鐘的時(shí)間當(dāng)前值(對準(zhǔn)時(shí)間),設(shè)置鬧鈴時(shí)間,鬧鈴功能的關(guān)閉和開放.關(guān)鍵詞:數(shù)字鬧鐘,8253定時(shí)器,LED顯示器,8255A并行口目 錄1.實(shí)驗(yàn)線路12.設(shè)計(jì)思想23.功能流程圖44.結(jié)果討論85.源程序以及注釋9參考文獻(xiàn)261.實(shí)驗(yàn)線路實(shí)驗(yàn)線路如圖1所示。圖1 實(shí)驗(yàn)線路圖2.設(shè)計(jì)思想一、概述:程序主體設(shè)計(jì):本程序共有分端口設(shè)置模塊,計(jì)數(shù)模塊,顯示模塊等幾個模塊。C-DISPLAY 12, 45, 37 -將鬧鐘設(shè)置為12:45

2、: 37;G-GO AHEAD-開中斷,鬧鐘恢復(fù)走時(shí)D-STOP TO DISPLAY-關(guān)中斷,鬧鐘停止走時(shí)E-EXIT TO DOS-返回DOSM-SET THE CLOCK -設(shè)置鬧鈴時(shí)間F-OPEN THE CLOCK-設(shè)置鬧鐘功能為開B-CLOSE THE CLOCK-設(shè)置鬧鐘功能為關(guān)P-POSITION THE BENINNING DATE-設(shè)置鬧鐘的時(shí)間二、計(jì)時(shí)器軟件的設(shè)計(jì):主程序中,要對各個用到的芯片進(jìn)行初始化,目的是使其每20豪秒產(chǎn)生一次方波。8253A的定時(shí)器輸出與8259A的IR2連接,計(jì)數(shù)器0工作在模式3(方波發(fā)生器),計(jì)數(shù)值采用二進(jìn)制格式,輸出作為計(jì)數(shù)器1的輸入, 計(jì)數(shù)

3、器1工作在模式2(分頻器),計(jì)數(shù)值采用二進(jìn)制格式,輸出到總線IRQ2,向CPU發(fā)送時(shí)鐘中斷信號,根據(jù)兩個計(jì)數(shù)器的設(shè)置,系統(tǒng)每隔20毫秒便由8253A產(chǎn)生一次中斷請求,即每隔20豪秒執(zhí)行一次中斷處理程序。這個方法將與時(shí)間相關(guān)的兩個模塊即顯示模塊和計(jì)時(shí)模塊放在中斷處理程序中,這樣,就保證了數(shù)字顯示的穩(wěn)定,中斷處理程序完成計(jì)時(shí)功能要依靠兩個方面,因?yàn)橹袛嗵幚沓绦蚴敲?0豪秒執(zhí)行一次,但計(jì)時(shí)并不是以20豪秒為單位進(jìn)行的,而是以秒為單位進(jìn)行的,所以,計(jì)時(shí)功能的實(shí)現(xiàn)一方面要利用20毫秒這個基準(zhǔn)時(shí)間單位,另一方面借助一個計(jì)數(shù)單位。計(jì)數(shù)單位的初始值為50,每進(jìn)行一次中斷,便使計(jì)數(shù)單元的內(nèi)容減1。每當(dāng)計(jì)數(shù)單元從

4、50減為0時(shí),說明已經(jīng)過了1秒時(shí)間。并判斷是否有進(jìn)位,如有則進(jìn)行修改,實(shí)現(xiàn)進(jìn)位。并在LED上顯示。顯示部分:本程序顯示部分用了6個共陰極LED作為顯示管,顯示程序要做到每送一次段碼就送一次位碼,每送一次位碼后,將位碼中的0右移1位作為下次的位碼,從而可以實(shí)現(xiàn)從左到右使6個LED依次顯示出相應(yīng)的數(shù)字。雖然CPU每隔一定時(shí)間便執(zhí)行顯示程序,但只要這個時(shí)間段不太長,由于人眼的視覺作用,就可以在6個LED上同時(shí)見到數(shù)字顯示。程序中,用8255A的PA口作為輸出,輸出掃描信號,PB口作為輸入,讀進(jìn)列值。本程序用行掃描法來識別鍵盤的閉合鍵。先使第0行接地,其余行為高電平,然后看第0行是否有鍵閉合,這是通過

5、檢查列線電位來實(shí)現(xiàn)的,即在第0行接地時(shí)看是否有哪條列線變成低電平。如果有某條列線變?yōu)榈碗娖剑瑒t表示第0行和此列線位置上的鍵被按下如果沒有,則說明第0行上沒有鍵被按下。此后,再將第1行接地,然后檢測列線中是否有變?yōu)榈碗娖降木€。如此往下逐行掃描,直到最后一行。為消除鍵的抖動,所以調(diào)用延遲程序,然后再判斷具體按下的到底是哪個鍵,如果得到的是FFH,則程序在循環(huán)中等待。計(jì)數(shù)部分:見流程圖時(shí)間設(shè)定模塊對于輸入的檢測,若超出范圍,則對其置F-,3.功能流程圖一、程序主流程控制圖(如圖2所示)D鍵?P鍵?M鍵?F鍵?B鍵?E鍵?NNNNNNYYYYYYG鍵?NYC鍵?Y顯示初始化時(shí)間開始計(jì)時(shí)停止計(jì)時(shí)開啟鬧鈴

6、設(shè)置鬧鈴設(shè)置時(shí)間關(guān)閉鬧鈴?fù)顺龌氐紻OSN圖2 程序主流程控制圖二、中斷服務(wù)子程序流程圖(如圖3所示)收到50次中斷?進(jìn)位處理部分(下)鬧鈴開?計(jì)數(shù)值減一(初值為50)YN鬧鈴時(shí)間到?中斷進(jìn)入YYN響鈴?fù)顺鲋袛喾?wù)圖3 中斷服務(wù)子程序流程圖圖三、進(jìn)位處理部分流程圖(如圖4所示)開始秒鐘是否到59(此部分的轉(zhuǎn)換從略)秒加1秒十位和各位賦值為0 0NY分鐘是否到59(此部分的轉(zhuǎn)換從略)分鐘加1NY分鐘十位和各位賦值為0 0分鐘是否到23(此部分的轉(zhuǎn)換從略)小時(shí)加1NY小時(shí)十位和各位賦值為0 0鬧鈴判斷響鈴部分圖4進(jìn)位處理部分流程圖4.結(jié)果討論本程序共有分端口設(shè)置模塊,計(jì)數(shù)模塊,顯示模塊等幾個模塊。經(jīng)

7、過調(diào)試,本程序可以實(shí)現(xiàn)題目的要求。時(shí)、分、秒都分兩位。個位滿十后就向前進(jìn)一位。分秒的十位滿六十后也向前進(jìn)一位。顯示小時(shí)兩位在滿二十四后重新計(jì)數(shù)。在置數(shù)時(shí),使用者可置任意值,但如果有某位超過計(jì)數(shù)值,則在LED顯示器上輸出出錯信息。程序中設(shè)置壓C鍵為LED顯示器清0,壓E鍵為退出,壓D鍵為計(jì)數(shù)暫停,壓P鍵為設(shè)置LED顯示器初始值。應(yīng)該注意的是,程序中設(shè)定的鍵值為實(shí)驗(yàn)臺上的小鍵盤的鍵值,并非計(jì)算機(jī)鍵盤。經(jīng)測試,程序中設(shè)置的功能全都可以良好運(yùn)行。本程序參照實(shí)驗(yàn)室電腦中16BIT文件中的kl.asm編制定時(shí)器/計(jì)數(shù)器8253計(jì)數(shù)初值的設(shè)定。下面對幾個重點(diǎn)部分的調(diào)試過程和遇到的問題作一定的討論:修改后的中

8、斷服務(wù)子程序(改變進(jìn)位的條件)(1)其中進(jìn)位的條件判斷以及后面的鬧鈴的程序段位置的設(shè)置都與程序結(jié)果有很大的關(guān)系.進(jìn)位判斷特別要注意仔細(xì),編程實(shí)現(xiàn)前應(yīng)該畫個流程圖,直接再源文件上改不但不能節(jié)省時(shí)間,反而更加浪費(fèi)時(shí)間.(2)此中斷服務(wù)子程序的類型設(shè)置為FAR調(diào)用,這里要特別注意.因?yàn)橄鄬τ谥袛喟l(fā)生時(shí)的運(yùn)行狀態(tài),此程序段與之不在同一代碼段,所以應(yīng)該定義為FAR類型.這樣產(chǎn)生了另外一個問題,在此程序段中若想調(diào)用此CODE段中以他過程,則那個過程也應(yīng)該被定義為FAR調(diào)用,當(dāng)然可以簡單的通過不使用過程調(diào)用解決.以解決此中斷子程序過程和其他普通過程對對應(yīng)過程的調(diào)用沖突.5.源程序以及注釋;此程序?qū)崿F(xiàn)數(shù)字鬧鐘

9、的設(shè)定,鬧鈴時(shí)間得設(shè)定,鬧鈴功能的開關(guān);試驗(yàn)硬件平臺是TPC-1型試驗(yàn)培訓(xùn)系統(tǒng);386以上微機(jī)適用;純DOS下才能使用;TASM4.1或以上編譯;*;* 鍵盤顯示 8255LED *;*; IO_PLX_DEVICE_ID EQU 05406H;TPC卡設(shè)備ID IO_PLX_VENDOR_IDEQU 010B5H;TPC卡廠商ID IO_PLX_SUB_ID EQU B5H;TPC卡子設(shè)備及廠商ID PA55 EQU 218H-200H;8255端口地址 PB55 EQU 219H-200H P55CTL EQU 21BH-200H PORTSEG EQU 211H-200H;LED端口地址

10、 PORTBIT EQU 210H-200H TIM_CTL EQU 203H-200H;8253端口地址 TIMER0 EQU 200H-200H TIMER1 EQU 201H-200H MODE03 EQU 36H ;0011-0111 MODE12 EQU 74H ;0111-0101DATA SEGMENT CSREGDW? IPREGDW? ;舊中斷向量保存空間 IO_9054BASE_ADDRESSDB 4 DUP(0);TPC卡PCI接口芯片I/O基地址暫存空間 IO_BASE_ADDRESS DB 4 DUP(0);TPC卡I/O基地址暫存空間 INTERRUPT_LINE

11、DB 2 DUP(0);TPC卡中斷號暫存空間 PCICARDNOTFINDDB 0DH,0AH,TPC PCI CARD NOT FIND OR ADDRESS/INTERRUPT ERROR !,0DH,0AH,$ IO9054BASEADDRESSDB 0DH,0AH,TPC PCI CARD 9054 CHIP I/O BASE ADDRESS : ,$ IOBASEADDRESSDB 0DH,0AH,TPC PCI CARD I/O BASE ADDRESS : ,$ INTNUMBER DB 0DH,0AH,TPC PCI CARD INTERRUPT LINE : ,$ ENTE

12、R_RETURN DB 0DH,0AH,$ MESS DB 8253A TIMER0 IN MODE3! COUNT=0200H,0AH,0DH DB 8253A TIMER1 IN MODE2! COUNT=0AH,0AH,0DH,$ MESS1 DB I AM RINGING,0AH,0DH,$ IRQ_VECTDB 08H,09H,0AH,0BH,0CH,0DH,0EH,0FH,70H,71H,72H,73H,74H,75H,76H,77H;新的中斷向量,中斷0-7的向量為:08H-0FH,中斷8-15的向量為:70H-77H IRQ_MASK_0_7_TABLEDB B,B,B,BDB

13、 B,B,B,BDB B,B,B,BDB B,B,B,B;新的中斷掩碼,中斷0-7時(shí)從低至高相應(yīng)位為零,中斷8-15時(shí)第2位為零 IRQ_MASK_8_15_TABLEDB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFHDB B,B,B,BDB B,B,B,B;新的中斷掩碼,中斷0-7時(shí)全一,中斷8-15時(shí)從低至高相應(yīng)位為零COUNT DB 15CTIME DB 00H,00H,00H,00H,00H,00HCLOCK DB 0AH,0AH,0AH,0AH,0AH,0AHBUF DB 00H,00H,00H,00H,00H,00H;*MYBELL DB 00H;

14、*OFF*INITIALIZEMONTH3 DB 0DAY3 DB 0CHAR1 DB ?INTMASK DB ?CONST1 DW ?LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H,79H,00HTABLE1 DW 0101H,0201H,0401H,0801H,1001H,2001H,4001H,8001H DW 0102H,0202H,0402H,0802H,1002H,2002H,4002H,8002H DW 0104H,0204H,0404H,0804H,1004H,2004H,4004H,8004HCHAR DB CDEFBA

15、RPMG;MAXDAY DB 00H,1FH,1CH,1FH,1EH,1FH,1EH,1FH,1FH,1EH,1FH,1EH,1FHMES DB IN SMALL KEYRORD,0AH,0DH DB C-DISPLAY 12, 45, 37 ; G-GO AHEAD,0AH,0DH DB D-STOP TO DISPLAY ; E-EXIT TO DOS,0AH,0DH DB M-SET THE CLOCK ; F-OPEN THE CLOCK,0AH,0DH DB B-CLOSE THE CLOCK,0AH,0DH DB P-POSITION THE BENINNING DATE,0AH,

16、0DH,$DATA ENDSSTACKS SEGMENTDB 100 DUP (?)STA DW 512 DUP (?)TOP EQU LENGTH STASTACKS ENDSCODE SEGMENT ;ASSUME CS:CODE,DS:DATA,SS:STACKS,ES:DATASTART:;ENABLE LOCAL INTERRUPT INPUT.386 CLI MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACKS MOV SS,AX CALLFINDTPC;查找TPC卡資源并顯示 MOV AH,0 INT 1AH ;時(shí)間中斷,保存到DX中 MOV

17、 BX,DXT1: MOV AH,0 INT 1AH CMP BX,DX JZ T1 MOV BX,DX MOV SI,0T2: MOV AH,0 INT 1AH MOV AX,800HT3: DEC AX ;循環(huán)800H次 JNZ T3 INC SI CMP BX,DX JZ T2 MOV AX,30H MOV BX,SI MUL BX MOV BX,56H DIV BX MOV WORD PTR CONST1,AXMOV DX,WORD PTR IO_BASE_ADDRESS;初始化8253ADD DX,TIM_CTL ;控制口MOV AL,MODE03 ;36H=0011 0110 ;計(jì)

18、數(shù)器0工作在模式3(方波發(fā)生器),計(jì)數(shù)值采用二進(jìn)制格式OUT DX,ALMOV DX,WORD PTR IO_BASE_ADDRESSADD DX,TIMER0 ;計(jì)時(shí)器0MOV AL,00HOUT DX,ALMOV AL,02HOUT DX,ALMOV DX,WORD PTR IO_BASE_ADDRESSADD DX,TIM_CTL ;74H=0111 0100 ;設(shè)置計(jì)數(shù)器1工作在模式2(分頻器),計(jì)數(shù)值采用二進(jìn)制格式MOV AL,MODE12OUT DX,ALMOV DX,WORD PTR IO_BASE_ADDRESSADD DX,TIMER1MOV AL,0AHOUT DX,ALM

19、OV AL,00OUT DX,ALMOV DX,OFFSET MESMOV AH,09INT 21HMOV DX,WORD PTR IO_9054BASE_ADDRESSADD DX,68H ;設(shè)置 TPC 卡中9054芯片IO口,使能中斷 IN AX,DX OR AX,0900H OUT DX,AX MOV BX,WORD PTR INTERRUPT_LINE ;保存原中斷向量MOV AL,BYTE PTR IRQ_VECT+BXMOV AH,35H INT 21HMOV AX,ESMOV CSREG,AXMOV IPREG,BX MOV BX,WORD PTR INTERRUPT_LINE

20、 ;設(shè)置新中斷向量 MOV AL,BYTE PTR IRQ_VECT+BX MOV CX,CS MOV DS,CXMOV DX,OFFSET INT_PROCMOV AH,25H INT 21HMOV AX,DATAMOV DS,AXMOV ES,AX IN AL, 21H ;設(shè)置中斷掩碼 MOV BX,WORD PTR INTERRUPT_LINEMOV AH,BYTE PTR IRQ_MASK_0_7_TABLE+BXANDAL,AH OUT 21H, AL IN AL, 0A1H MOV BX,WORD PTR INTERRUPT_LINEMOV AH,BYTE PTR IRQ_MASK

21、_8_15_TABLE+BXANDAL,AH OUT 0A1H, ALSTI ;開中斷;*;*小鍵盤的查詢過程*LKEY: CALL KEY ;獲得TPC鍵盤輸入值 MOV DL,CHAR1 ;C-DISPLAY 12, 45, 37 CMP DL,C JNZ LGY CALL CPRO JMP LKEYLGY: CMP DL,G; G-GO AHEAD JNZ LDY CALL GPRO JMP LKEYLDY: CMP DL,D; D-STOP TO DISPLAY JNZ LPY CALL DPRO JMP LKEYLPY: CMP DL,P; P-POSITION THE BENINN

22、ING JNZ LMY CALL PPRO JMP LKEYLMY: CMP DL,M ;SET THE CLOCK TIME JNZ LFY CALL MPRO JMP LKEYLFY: CMP DL,F ;BELLING ON/OFF JNZ LBY MOV MYBELL,01H;ON JMP LKEYLBY: CMP DL,B;B-CLOSE THE CLOCK JNZ LEY MOV MYBELL,00H;OFF JMP LKEYLEY: CMP DL,E; EXIT TO DOS JNZ LKEY;*非規(guī)定的按鍵時(shí)繼續(xù)等待*;*EXIT: CLI MOV BX,WORD PTR IN

23、TERRUPT_LINE;恢復(fù)中斷掩碼 MOV AH,BYTE PTR IRQ_MASK_0_7_TABLE+BX NOT AH INAL, 21H ORAL, AH OUT21H, AL MOV BX,WORD PTR INTERRUPT_LINE MOV AH,BYTE PTR IRQ_MASK_8_15_TABLE+BX NOT AH INAL, 0A1H ORAL, AH OUT0A1H, AL MOV BX,WORD PTR INTERRUPT_LINE;恢復(fù)原中斷向量 MOV AL,BYTE PTR IRQ_VECT+BX MOV DX,IPREG MOV CX,CSREG MOV

24、 DS,CX MOV AH,25H INT 21H MOV AX,DATA;設(shè)置 TPC 卡中9054芯片IO口,關(guān)閉中斷 MOV DS,AX MOV DX,WORD PTR IO_9054BASE_ADDRESS ADD DX,68H IN AX,DX AND AX,0F7FFH OUT DX,AX MOV AX,4C00H INT 21H;退出;-INT_PROC PROC FAR ;修改后的中斷服務(wù)子程序(改變進(jìn)位的條件);此中斷服務(wù)子程序的類型設(shè)置為FAR調(diào)用,這里要特別注意.因?yàn)橄鄬τ谥袛喟l(fā)生時(shí)的運(yùn)行;狀態(tài),此程序段與之不在同一代碼段,所以應(yīng)該定義為FAR類型.這樣產(chǎn)生了另外一個問題

25、,;在此程序段中若想調(diào)用此CODE段中以他過程,則那個過程也應(yīng)該被定義為FAR調(diào)用,當(dāng)然;可以簡單的通過不使用過程調(diào)用解決.以解決此中斷子程序過程和其他普通過程對對應(yīng)過程;的調(diào)用沖突 CLI PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI PUSH DS MOV AX,DATA ;INTERRUPT TO DO MOV DS,AX DEC COUNT JNZ DDD MOV COUNT,20 MOV DI,OFFSET CTIME MOV AL,DI+4 MOV AH,0AH MUL AH ADD AL,DI+5 CMP AX,59 ;先判斷秒鐘

26、是否等于59秒,是則判斷分鐘,否則加1 JZ FENZHONG INC BYTE PTR DI+5 CMP BYTE PTR DI+5,0AH JNZ DDD MOV BYTE PTR DI+5,00H INC BYTE PTR DI+4 JMP DDDFENZHONG: MOV WORD PTR DI+4,0000H ;先將秒鐘置為0,再轉(zhuǎn)換分鐘為十進(jìn)制形式 MOV AL,DI+2 MOV AH,0AH MUL AH ADD AL,DI+3 CMP AX,59 ;判斷是否應(yīng)該向時(shí)鐘進(jìn)位 JZ SHIZHONG INC BYTE PTR DI+3 CMP BYTE PTR DI+3,0AH J

27、NZ DDD MOV BYTE PTR DI+3,00H INC BYTE PTR DI+2 JMPDDDSHIZHONG: MOV WORD PTR DI+2,0000 MOV AL,DI MOV AH,0AH MUL AH ADD AL,DI+1 CMP AH,23 ;判斷時(shí)鐘該不該循環(huán)了 JNZ QQQ MOV WORD PTR DI,0000H JMP DDDQQQ: INC BYTE PTR DI+1 CMP BYTE PTR DI+1,0AH JNZ DDD MOV BYTE PTR DI+1,00H INC BYTE PTR DIDDD:;將鬧鈴功能鍵與鬧鈴條件的判斷放在20次中

28、斷計(jì)數(shù)條件滿足后的執(zhí)行代碼中;有效縮短延遲時(shí)間以及誤差時(shí)間 CMP BYTE PTR MYBELL,00H ;檢測鬧鈴有沒有開, JZ ZZZ LEA DI,CTIME LEA SI,CLOCK MOV CX,5CHECK: ;檢測門鈴時(shí)間是否到了 MOV AL,DI MOV BL,SI CMP AL,BL JNZ ZZZ INC DI INC SI LOOP CHECK ;* 鬧鈴時(shí)的檢測輸出 MOV DL,07H MOV AH,02H INT 21H LEA DX,MESS1 MOV AH,09H INT 21H MOV BYTE PTR MYBELL,00H ZZZ: MOV AL,20

29、H ;SEND EOI OUT 0A0H,AL OUT 20H,AL MOV CX,0FFFFHLOOPX: NOP LOOP LOOPX ;延時(shí) POP DSPOP DI POP SI POP DX POP CX POP BX POP AX STI IRETINT_PROC ENDP;-KEY PROC NEAR ;AB口端口讀取的控制,是對小鍵盤的控制 PUSH CXKST: MOV AL,82H MOV DX,WORD PTR IO_BASE_ADDRESS ADD DX,P55CTL OUT DX,AL MOV AL,00H MOV DX,WORD PTR IO_BASE_ADDRES

30、S ADD DX,PA55 OUT DX,AL MOV DX,WORD PTR IO_BASE_ADDRESS ADD DX,PB55 IN AL,DX OR AL,0F8H CMP AL,0FFH JZ DELAY PUSH AX MOV CX,0A00H ;兩重循環(huán)DLY: MOV AX,WORD PTR CONST1DLY1: DEC AX JNZ DLY1 DEC CX JNZ DLY POP AX MOV CL,08H MOV AH,0FEHSCAN1: MOV DX,WORD PTR IO_BASE_ADDRESS;行列掃描,得到小鍵盤輸入 ADD DX,PA55 MOV AL,A

31、H OUT DX,AL MOV DX,WORD PTR IO_BASE_ADDRESS ADD DX,PB55 IN AL,DX OR AL,0F8H CMP AL,0FFH JNZ KEYN ROL AH,1 DEC CL JNZ SCAN1 JMP KSTKEYN: PUSH AX MOV DX,WORD PTR IO_BASE_ADDRESS ADD DX,PB55RELEA: IN AL,DX OR AL,0F8H CMP AL,0FFH JNZ RELEA POP AX NOT AX MOV SI,OFFSET TABLE1 MOV DI,OFFSET CHAR MOV CX,24T

32、T: CMP AX,SI JZ NN DEC CX JZ KST ADD SI,02 INC DI JMP TTNN: MOV DL,DI MOV CHAR1,DL MOV AH,02H INT 21H POP CX JMP YANGDELAY: CALL DISPLY JMP KSTYANG: RETKEY ENDP;-DISPLY PROC NEAR ;LED的顯示部分 PUSH CX MOV BX,OFFSET LED MOV CX,0006 MOV SI,OFFSET CTIME MOV AH,01HDISPLY1: CLD LODSB XLAT MOV DX,WORD PTR IO_

33、BASE_ADDRESS ADD DX,PORTSEG OUT DX,AL MOV AL,AH MOV DX,WORD PTR IO_BASE_ADDRESS ADD DX,PORTBIT OUT DX,AL SHL AH,1 MOV AL,00 OUT DX,AL LOOP DISPLY1 POP CX RETDISPLY ENDP;-CPRO PROC NEAR ;C鍵按下時(shí)執(zhí)行的過程,顯示預(yù)設(shè)時(shí)間 CLI MOV WORD PTR CTIME,0201H MOV WORD PTR CTIME+2,0504H MOV WORD PTR CTIME+4,0703H RETCPRO ENDP;

34、-GPRO PROC NEAR ;G鍵按下時(shí)執(zhí)行的過程,開中斷,計(jì)時(shí)開始 STI RETGPRO ENDP;-DPRO PROC NEAR ;D鍵按下時(shí)執(zhí)行的過程,關(guān)中斷,計(jì)時(shí)停止 CLI RETDPRO ENDP;-PPRO PROC NEAR ;時(shí)間設(shè)置的過程 CLI PUSH AX PUSH BX MOV WORD PTR CTIME,0C0CH MOV WORD PTR CTIME+2,0C0CH MOV WORD PTR CTIME+4,0C0CH CALL DISPLY CALL KEY MOV DL,CHAR1 CMP DL,2 ;首位判斷是否小于2 JNG NEXT1 JMP

35、ERR1NEXT1: CMP DL,2 ;第一位是否為1,是則判斷第二位是否小于3 JNZ NORMAL SUB DL,30H MOV CTIME,DL CALL KEY MOV DL,CHAR1 CMP DL,3 JNG NEXT2 JMP ERR1NORMAL: SUB DL,30H MOV CTIME,DL CALL DISPLY CALL KEY MOV DL,CHAR1 CMP DL,9 ;第三位的判斷,如此直到第六位 JNG NEXT2 JMP ERR1NEXT2: SUB DL,30H MOV CTIME+1,DL CALL DISPLY CALL KEY MOV DL,CHAR

36、1 CMP DL,5 JNG NEXT3 JMP ERR1NEXT3: SUB DL,30H MOV CTIME+2,DL CALL DISPLY CALL KEY MOV DL,CHAR1 CMP DL,9 JNG NEXT4 JMP ERR1NEXT4: SUB DL,30H MOV CTIME+3,DL CALL DISPLY CALL KEY MOV DL,CHAR1 CMP DL,5 JNG NEXT5 JMP ERR1NEXT5: SUB DL,30H MOV CTIME+4,DL CALL DISPLY CALL KEY MOV DL,CHAR1 CMP DL,9 JNG NEX

37、T6 JMP ERR1NEXT6: SUB DL,30H MOV CTIME+5,DL CALL DISPLY JMP WW ERR1: MOV WORD PTR CTIME,0A0BH ;輸入不全規(guī)范時(shí)輸出,E MOV WORD PTR CTIME+2,0A0AH MOV WORD PTR CTIME+4,0A0AH CALL DISPLYWW: POP BX POP AX RETPPRO ENDP;-MPRO PROC NEAR ;鬧鈴設(shè)置,總體是先保存時(shí)間值,再調(diào)用P過程,再還原時(shí)間 CLI PUSH DI PUSH SI LEA DI,BUF LEA SI,CTIME MOV CX,6BAOCUN: ;保存時(shí)間 MOV AL,SIMOV DI,ALINC DIINC SI LOOP BAOCUN CALL PPRO LEA SI,CTIME LEA DI,CLOCKMOV CX,6ZHUAN

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論