版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第一章 緒 論1.1 概述近年來隨著科技的飛速開展,單片機(jī)的應(yīng)用正在不斷地走向深入,同時帶動傳統(tǒng)控制檢測日新月益更新。在實時檢測和自動控制的單片機(jī)應(yīng)用系統(tǒng)中,單片機(jī)往往是作為一個核心部件來使用,僅單片機(jī)方面知識是不夠的,還應(yīng)根據(jù)具體硬件結(jié)構(gòu),以及針對具體應(yīng)用對象特點的軟件結(jié)合,加以完善。交通信號燈的出現(xiàn),使交通得以有效管制,對于疏導(dǎo)交通流量、提高道路通行能力,減少交通事故有明顯效果。1.2 設(shè)計目的?微機(jī)應(yīng)用系統(tǒng)設(shè)計與綜合實驗實踐?課程設(shè)計是自動化專業(yè)本科生必修的一門技術(shù)根底課。通過本課程設(shè)計,讓學(xué)生對微機(jī)系統(tǒng)有一個較全面的理解,對典型數(shù)字接口電路的應(yīng)用技術(shù)有一個較深入的掌握,并對應(yīng)用系統(tǒng)進(jìn)行
2、硬件原理和軟件編程進(jìn)行分析、設(shè)計和調(diào)試,到達(dá)根本掌握簡單微型計算機(jī)應(yīng)用系統(tǒng)軟硬件的設(shè)計方法,提高工程開發(fā)能力的目的。要求同學(xué)獨立完成課題,寫出課程設(shè)計說明書,畫出電路原理圖,說明工作原理,畫出電路印制板圖, 編寫設(shè)計程序及程序流程圖。希望同學(xué)們認(rèn)真閱讀課程設(shè)計任務(wù)書,認(rèn)真查閱資料,完成好上機(jī)調(diào)試,圓滿完本錢次課程設(shè)計。1.3 設(shè)計任務(wù)和內(nèi)容設(shè)計題10:交通燈控制功能設(shè)計限2-3人設(shè)計要求:1、編程語言為C語言和匯編語言;2、硬件電路基于80 x86微機(jī)接口;3、程序功能要求:小鍵盤給定、數(shù)碼管屏幕顯示;4、具備急救車應(yīng)急響應(yīng)功能和時間倒計時顯示功能。實驗儀器與設(shè)備TPC-H通用微機(jī)接口實驗系統(tǒng)
3、1臺。IBM-PC微型計算機(jī)1臺。第二章 總體設(shè)計及核心器件簡介2.1總體設(shè)計 通過采用8086、8255、IO接口電路、鍵盤、LED數(shù)字燈顯示、發(fā)光二極管組成交通燈演示系統(tǒng)。利用8255與鍵盤掃描單元,編寫程序完成按鍵掃描功能,并將倒計時時間顯示在數(shù)碼管上。按鍵可以完成置數(shù)功能和各種控制功能,同時利用8086重復(fù)刷新數(shù)碼管產(chǎn)生一秒延時,延時一秒之后,將倒計時時間減少一秒,并利用刷新數(shù)碼管顯示出當(dāng)前剩余時間,到倒計時時間為零,通過利用IO接口電路將控制信號傳送給發(fā)光二極管,使之發(fā)光或者熄滅。2.2 CPU80868086簡介 8086CPU根據(jù)它的根本性能,應(yīng)包括20條地址線,16條數(shù)據(jù)線,加
4、上控制信號,電源和地線,芯片的引腳比擬多。但由于制造工藝的限制,8086CPU芯片采用了40條引腳的雙列直插式封裝。2.3 8255A8255A是Intel公司生產(chǎn)的可編程輸入輸出接口芯片,它具有3個8位的并I/O口,具有三種工作方式,可通過程序改變其功能,因而使用靈活,通用性強(qiáng)。8255有三種根本工作方式, 三種工作方式由工作方式控制字決定,方式控制字由CPU通過輸入/輸出指令來提供.三個端口中PC口被分為兩個局部,上半局部隨PA口稱為A組,下半局部隨PB口稱為B組.其中PA口可工作與方式0、1和2,而PB口只能工作在方式0和1。8255共有40個引腳,采用雙列直插式封裝。其引腳圖如圖2-4
5、所示,各引腳功能如下:8255A引腳圖如下:D0-D7:三態(tài)雙向數(shù)據(jù)線,與單片機(jī)數(shù)據(jù)總線連接,用來傳送數(shù)據(jù)信息。CS:片選信號線,低電平有效,表示芯片被選中。RD:讀出信號線,低電平有效,控制數(shù)據(jù)的讀出。WR:寫入信號線,低電平有效,控制數(shù)據(jù)的寫入。 Vcc:+5V電源。PA0-PA7:A口輸入/輸出線。PB0-PB7:B口輸入/輸出線。PC0-PC7:C口輸入/輸出線。RESET:復(fù)位信號線。A1、A0:地址線,用來選擇8255內(nèi)部端口。GND:地線。2.4 鍵盤掃描與數(shù)碼顯示模塊X1X4控制4位數(shù)碼管的公共端,并連接到按鍵的一端,作為列選,確定是哪一列的按鍵按下,Y1Y4連接到按鍵的另一端
6、,作為行選,用于檢測哪一行的按鍵按下。結(jié)合行選和列選即可得出是哪一個的按鍵按下,在軟件設(shè)計上要注意消除按鍵抖動的處理以及數(shù)碼管顯示的刷新。鍵盤及數(shù)碼管顯示單元電路結(jié)構(gòu)圖2.5 IO接口電路模塊IO接口電路主要是將信號傳遞給信號燈,使之點亮或者熄滅。IO接口利用三態(tài)緩沖器74LS245,鎖存器74LS374設(shè)計微機(jī)總線和外部設(shè)備的數(shù)據(jù)通道,實現(xiàn)微機(jī)對外部數(shù)據(jù)的讀取和對輸出數(shù)據(jù)的輸出。用開關(guān)及LED顯示單元的開關(guān)和數(shù)據(jù)燈作為輸入和輸出顯示設(shè)備,將開關(guān)的數(shù)據(jù)讀入總線或者將總線的數(shù)據(jù)傳遞到數(shù)據(jù)燈。實驗中我們可以利用開關(guān)控制交通燈的功能,但是設(shè)計中要求我們使用小鍵盤控制,因此我們主要利用IO接口電路中的
7、鎖存器74LS374將數(shù)據(jù)從總線送出。輸出接口一般用鎖存器實現(xiàn),從總線送出的數(shù)據(jù)可以暫存在鎖存器中,74LS374是一種8通道上沿觸發(fā)鎖存器。其管腳結(jié)構(gòu)如以下圖所示。D7:0為輸入數(shù)據(jù)線,Q7:0為輸出數(shù)據(jù)線。CLK引腳為鎖存控制信號,上升沿有效。當(dāng)上升沿時,輸出數(shù)據(jù)線鎖存輸入數(shù)據(jù)線上的數(shù)據(jù)。OE引腳為鎖存器的片選信號,低電平有效。 74LS374上升沿觸發(fā)鎖存器管腳圖根本IO接口設(shè)計實驗參考接線圖第三章 軟件編程設(shè)計3.1 設(shè)計思想先通過小鍵盤設(shè)定路口通行時間,按鍵A確定。然后檢測按鈕B是否按下,按下那么進(jìn)入交通燈演示功能:1南北路口的綠燈,東西路口的紅燈同時亮設(shè)定的時間。2南北路口的黃燈閃
8、爍5次,同時東西路口的紅燈繼續(xù)亮。3南北路口的紅燈,東西路口的綠燈同時亮設(shè)定的時間。4南北路口的紅燈繼續(xù)亮,同時東西路口的黃燈閃爍五次。在交通燈演示功能的同時檢測是否有按鍵按下,當(dāng)按鍵B按下,表示系統(tǒng)啟動。當(dāng)按鍵C按下,表示系統(tǒng)暫停。當(dāng)按鍵D按下,表示系統(tǒng)重置時間。當(dāng)按鍵E按下,表示系統(tǒng)進(jìn)入緊急情況。當(dāng)按鍵F按下,表示系統(tǒng)關(guān)閉。當(dāng)系統(tǒng)啟動后,交通燈自動交替閃爍,每隔一秒就將數(shù)碼管需要顯示的數(shù)值減一,同時不停地刷新數(shù)碼管,以顯示剩余時間。當(dāng)系統(tǒng)暫停時,系統(tǒng)不停的檢測是否啟動按鈕按下,否那么就繼續(xù)檢測,同時刷新數(shù)碼管,是數(shù)碼管顯示暫停時的時間,直到啟動按鈕按下,系統(tǒng)繼續(xù)按照暫停前的狀態(tài)運行,當(dāng)系統(tǒng)
9、重新設(shè)置時間時。相當(dāng)于程序從新開始執(zhí)行。當(dāng)緊急按鈕按下,將數(shù)碼管顯示時間零,同各個路口的紅燈亮,綠燈和黃燈滅。直到檢測到啟動按鈕按下,啟動按鈕按下后,跳轉(zhuǎn)到交通燈演示的第一步。當(dāng)結(jié)束按鈕按下,那么跳出程序的運行。3.2典型模塊本實驗中有三種典型的程序模塊分別為按鍵掃描、數(shù)碼管刷新數(shù)據(jù)和IO接口電路輸出數(shù)據(jù)。按鍵掃描:按鍵掃描的程序首先清屏,然后掃描按鍵,判斷是否有按鍵按下,如果沒有按鍵按下,那么不執(zhí)行掃描按鍵代碼程序。如果有按鍵按下,那么延時一定時間再次掃描按鍵,如果這時沒有按鍵按下,那么說明是按鍵抖動,不執(zhí)行掃描按鍵代碼程序。如果延時后按鍵還是按下的,那么我們需要檢測按下按鍵的代碼,首先設(shè)置
10、當(dāng)前檢測的是第幾列,選取一列,同時將對應(yīng)的X1X4置低電平,讀Y1Y4,用于判斷是哪一行的按鍵閉合,判斷是否為第一行,如果是第一行那么設(shè)置第一行第一列的對應(yīng)鍵值,如果不是那么判斷是否為下一行。一直檢測到最后一行。如果判斷不是,那么檢測下一列,按照上述方法,從第一列檢測最后一列,直到檢測出對應(yīng)的按鍵后,設(shè)置對應(yīng)按鍵的鍵值。數(shù)碼管的刷新:在交通燈功能控制系統(tǒng)中,均采用了8位數(shù)碼管動態(tài)掃描顯示見圖1。它將所有數(shù)碼管的8個段線相應(yīng)地并接在一起,并接到8255單元的PB口,由PB口控制字段輸出。而各位數(shù)碼管的共陽極由8255單元的PA口控制X1X4來實現(xiàn)8位數(shù)碼管的位輸出控制。這樣,對于一組數(shù)碼管動態(tài)掃
11、描顯示需要由兩組信號來控制:一組是字段輸出口輸出的字形代碼,用來控制顯示的字形,稱為段碼;另一組是位輸出口輸出的控制信號,用來選擇第幾位數(shù)碼管工作,稱為位碼。由于各位數(shù)碼管的段線并聯(lián),段碼的輸出對各位數(shù)碼管來說都是相同的。因此,在同一時刻如果各位數(shù)碼管的位選線都處于選通狀態(tài)的話,8位數(shù)碼管將顯示相同的字符。假設(shè)要各位數(shù)碼管能夠顯示出與本位相應(yīng)的字符,就必須采用掃描顯示方式。即在某一時刻,只讓某一位的位選線處于導(dǎo)通狀態(tài),而其它各位的位選線處于關(guān)閉狀態(tài)。同時,段線上輸出相應(yīng)位要顯示字符的字型碼。這樣在同一時刻,只有選通的那一位顯示出字符,而其它各位那么是熄滅的,如此循環(huán)下去,就可以使各位數(shù)碼管顯示
12、出將要顯示的字符。雖然這些字符是在不同時刻出現(xiàn)的,而且同一時刻,只有一位顯示,其它各位熄滅,但由于數(shù)碼管具有余輝特性和人眼有視覺暫留現(xiàn)象,只要每位數(shù)碼管顯示間隔足夠短,給人眼的視覺印象就會是連續(xù)穩(wěn)定地顯示。IO接口輸出電路:先將IO接口電路的片選信號選通。將要傳遞的信號存放在AL存放器中,將要傳遞信號的地址存放在DX存放器中,再用OUT指令輸出。3.2 程序流程框圖 3.3 源程序 匯編語言源代碼:;*根據(jù)CHECK配置信息修改以下符號值* IOY0 EQU 0C400H ;片選IOY0對應(yīng)的端口始地址 IOYO2 EQU 0C440H;* MY8255_A EQU IOY0+00H*4 ;8
13、255的A口地址 MY8255_B EQU IOY0+01H*4 ;8255的B口地址 MY8255_C EQU IOY0+02H*4 ;8255的C口地址 MY8255_MODE EQU IOY0+03H*4 ;8255的控制存放器地址 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DATA SEGMENT DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H L0 DB 11H L1 DB 41H L2 DB 21H L3 DB 01H L4 DB
14、14H L5 DB 12H L6 DB 10H L7 DB 0CH L8 DB 00H DATA ENDS ;鍵值表,0F對應(yīng)的7段數(shù)碼管的段位值 CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV SI,0F000H ;建立緩沖區(qū),存放要顯示的鍵值 MOV AL,00H ;先初始化鍵值為0 MOV SI,AL MOV SI+1,AL MOV DI,0F001H MOV DX,MY8255_MODE ;初始化8255工作方式 MOV AL,81H ;方式0,A口、B口輸出,C口低4位輸入 OUT DX,AL
15、BEGIN: CALL DIS CALL CLEAR ;清屏 CALL CCSCAN ;掃描按鍵 JNZ RGETKEY1 ;有鍵按下那么跳置GETKEY1 MOV AH,1 ;判斷PC鍵盤是否有按鍵按下 INT 16H JZ BEGIN ;無按鍵那么跳回繼續(xù)循環(huán),有那么退出 QUIT: MOV AX,4C00H ;返回到DOS INT 21H RGETKEY1: CALL DALLY1 ;顯示刷新 CALL CLEAR ;清屏 CALL CCSCAN ;再次掃描按鍵 JNZ RGETKEY2 ;有鍵按下那么跳置GETKEY2 JMP BEGIN ;否那么跳回開始繼續(xù)循環(huán) RGETKEY2:
16、MOV CH,0FEH MOV CL,00H ;設(shè)置當(dāng)前檢測的是第幾列 RCOLUM: MOV AL,CH ;選取一列,將X1X4中一個置0 MOV DX,MY8255_A OUT DX,AL MOV DX,MY8255_C ;讀Y1Y4,用于判斷是哪一行按鍵閉合 IN AL,DX RL1: TEST AL,01H ;是否為第1行 JNZ RL2 ;不是那么繼續(xù)判斷 MOV AL,00H ;設(shè)置第1行第1列的對應(yīng)的鍵值 JMP RKCODE RL2: TEST AL,02H ;是否為第2行 JNZ RL3 ;不是那么繼續(xù)判斷 MOV AL,04H ;設(shè)置第2行第1列的對應(yīng)的鍵值 JMP RKC
17、ODE RL3: TEST AL,04H ;是否為第3行 JNZ RL4 ;不是那么繼續(xù)判斷 MOV AL,08H ;設(shè)置第3行第1列的對應(yīng)的鍵值 JMP RKCODE RL4: TEST AL,08H ;是否為第4行 JNZ RNEXT ;不是那么繼續(xù)判斷 MOV AL,0CH ;設(shè)置第4行第1列的對應(yīng)的鍵值 RKCODE: ADD AL,CL ;將第1列的值加上當(dāng)前列數(shù),確定按鍵值 CMP AL,09H JG KERR1 CALL PUTBUF ;保存按鍵值 PUSH AX RKON: CALL DALLY1 ;顯示刷新 CALL CLEAR ;清屏 CALL CCSCAN ;掃描按鍵,判
18、斷按鍵是否彈起 JNZ RKON ;未彈起那么繼續(xù)循環(huán)等待彈起 POP AX RNEXT: INC CL ;當(dāng)前檢測的列數(shù)遞增 MOV AL,CH TEST AL,08H ;檢測是否掃描到第4列 JZ KERR ;是那么跳回到開始處 ROL AL,1 ;沒檢測到第4列那么準(zhǔn)備檢測下一列 MOV CH,AL JMP RCOLUM KERR: JMP BEGIN KERR1: CMP AL,0AH JZ KERR2 JMP KERR KERR2: MOV L7,0CH MOV SI,0F000H MOV AL,SI MOV BL,SI+1 SHL BL,4 ADD AL,BL MOV L8,AL
19、B: MOV AL,L0 MOV DX,IOYO2 OUT DX,AL MOV BX,0000H CALL CHANGE CALL BE CALL DALLY1 T: MOV AL,L1 MOV DX,IOYO2 OUT DX,AL MOV BL,L8 T1: CALL CJIAN CALL CHANGE CALL BE CALL DALLY2 CALL DALLY2 CALL DALLY2 CMP BX,00H JNZ T1 MOV BX,0006H T2: MOV AL,L2 MOV DX,IOYO2 OUT DX,AL CALL CJIAN CALL CHANGE CALL BE CAL
20、L DALLY1 CALL DALLY1 MOV AL,L3 MOV DX,IOYO2 OUT DX,AL CALL DALLY2 CALL DALLY2 CMP BX,0 JNZ T2 MOV AL,L4 MOV DX,IOYO2 OUT DX,AL MOV BL,L8 T3: CALL CJIAN CALL CHANGE CALL BE CALL DALLY2 CALL DALLY2 CALL DALLY2 CMP BL,00H JNZ T3 MOV BX,0006H T4: MOV AL,L5 MOV DX,IOYO2 OUT DX,AL CALL CJIAN CALL CHANGE C
21、ALL BE CALL DALLY1 CALL DALLY1 MOV AL,L6 MOV DX,IOYO2 OUT DX,AL CALL DALLY2 CALL DALLY2 CMP BX,0 JNZ T4 JMP T CHANGE PROC NEAR PUSH BX MOV AX,BX MOV SI,0F000H AND AL,0FH MOV SI,AL AND BL,0F0H SHR BL,4 MOV SI+1,BL POP BX RET CHANGE ENDP CJIAN PROC NEAR MOV AX,BX DEC AX DAS MOV BX,AX RET CJIAN ENDP DI
22、S PROC NEAR ;顯示鍵值子程序 PUSH AX PUSH BX ;以緩沖區(qū)存放的鍵值為鍵值表偏移找到鍵值并顯示 MOV SI,0F000H MOV DL,0F7H MOV AL,DL AGAIN: PUSH DX MOV DX,MY8255_A OUT DX,AL ;設(shè)置X1X4,選通一個數(shù)碼管 MOV AL,SI ;取出緩沖區(qū)中存放鍵值 MOV BX,OFFSET DTABLE AND AX,00FFH ADD BX,AX MOV AL,BX ;將鍵值作為偏移和鍵值基地址相加得到相應(yīng)的鍵值 MOV DX,MY8255_B OUT DX,AL ;寫入數(shù)碼管ADp CALL CLEAR
23、 INC SI ;取下一個鍵值 POP DX MOV AL,DL TEST AL,04H ;判斷是否顯示完? JZ OUT1 ;顯示完,返回 ROR AL,1 MOV DL,AL JMP AGAIN ;未顯示完,跳回繼續(xù) OUT1: POP BX POP AX RET DIS ENDP DALLY1 PROC NEAR ;軟件延時子程序 PUSH CX MOV CX,1000H D1: MOV AX,1000H D2: DEC AX CALL DIS JNZ D2 LOOP D1 POP CX X2: RET DALLY1 ENDP PUTBUF PROC NEAR ;保存鍵值子程序 MOV
24、SI,DI MOV SI,AL DEC DI CMP DI,0EFFFH JNZ GOBACK MOV DI,0F001H GOBACK: RET PUTBUF ENDP DALLY2 PROC NEAR ;軟件延時子程序 PUSH CX MOV CX,0FFFFH D3: MOV AX,0FFFFH D4: DEC AX CALL DIS JNZ D4 LOOP D3 POP CX RET DALLY2 ENDP CCSCAN PROC NEAR ;掃描是否有按鍵閉合子程序 PUSH AX PUSH DX MOV AL,00H MOV DX,MY8255_A ;將4列全選通,X1X4置0 O
25、UT DX,AL MOV DX,MY8255_C IN AL,DX ;讀Y1Y4 NOT AL AND AL,0FH ;取出Y1Y4的反值 POP DX POP AX RET CCSCAN ENDP BE PROC NEAR PUSH CX S: CALL DALLY1 CALL CLEAR ;顯示刷新 CALL CCSCAN ;掃描按鍵 JNZ GETKEY1 ;有鍵按下那么跳置GETKEY1 MOV AL,L7 CMP AL,0BH JZ KERRR CMP AL,0CH JZ S CMP AL,0DH JZ KERRR3 CMP AL,0EH JZ KERRR1 CMP AL,0FH J
26、Z KERRR2 JMP S GETKEY1: CALL DALLY1 ;顯示刷新 CALL CCSCAN ;再次掃描按鍵 JNZ GETKEY2 ;有鍵按下那么跳置GETKEY2 JMP S ;否那么跳回開始繼續(xù)循環(huán) GETKEY2: MOV CH,0FEH MOV CL,00H ;設(shè)置當(dāng)前檢測的是第幾列 COLUM: MOV AL,CH ;選取一列,將X1X4中一個置0 MOV DX,MY8255_A OUT DX,AL MOV DX,MY8255_C ;讀Y1Y4,用于判斷是哪一行按鍵閉合 IN AL,DX Q1: TEST AL,01H ;是否為第1行 JNZ Q2 ;不是那么繼續(xù)判斷
27、 MOV AL,00H ;設(shè)置第1行第1列的對應(yīng)的鍵值 JMP KCODE Q2: TEST AL,02H ;是否為第2行 JNZ Q3 ;不是那么繼續(xù)判斷 MOV AL,04H ;設(shè)置第2行第1列的對應(yīng)的鍵值 JMP KCODE Q3: TEST AL,04H ;是否為第3行 JNZ Q4 ;不是那么繼續(xù)判斷 MOV AL,08H ;設(shè)置第3行第1列的對應(yīng)的鍵值 JMP KCODE Q4: TEST AL,08H ;是否為第4行 JNZ NEXT ;不是那么繼續(xù)判斷 MOV AL,0CH ;設(shè)置第4行第1列的對應(yīng)的鍵值 KCODE: ADD AL,CL CMP AL,09H JLE KERR
28、R3 MOV L7,AL ;將第1列的值加上當(dāng)前列數(shù),確定按鍵值 JMP S PUSH AX KON: CALL DALLY1 ;顯示刷新 CALL CLEAR CALL CCSCAN ;掃描按鍵,判斷按鍵是否彈起 JNZ KON ;未彈起那么繼續(xù)循環(huán)等待彈起 JMP S POP AX NEXT: INC CL ;當(dāng)前檢測的列數(shù)遞增 MOV AL,CH TEST AL,08H ;檢測是否掃描到第4列 JZ KERRR ;是那么跳回到開始處 ROL AL,1 ;沒檢測到第4列那么準(zhǔn)備檢測下一列 MOV CH,AL JMP COLUM KERRR: POP CX RET KERRR1: POP C
29、X MOV L7,0CH JMP B RET KERRR2: POP CX CALL COUT RET KERRR3: POP CX JMP START RET BE ENDP SAVE PROC NEAR MOV AL,L0 MOV DX,IOYO2 OUT DX,AL RET SAVE ENDP COUT PROC NEAR MOV AX,4C00H INT 21H RET COUT ENDP CLEAR PROC NEAR PUSH DX PUSH AX MOV DX,MY8255_B MOV AL,00H OUT DX,AL POP AX POP DX RET CLEAR ENDP D
30、ALLY PROC NEAR ;軟件延時子程序 PUSH CX MOV CX,00FFH RD1: MOV AX,00FFH RD2: DEC AX JNZ RD2 LOOP RD1 POP CX RET DALLY ENDP CODE ENDS END STARTC語言源代碼:#include #include #include #include #include #include void dis(void);void key(void);void clear(void);void ccscan(void);void putbuf(void);void getkey(void);void
31、delay(int time);void getkey1(void);void jian(void);void che(void);/*根據(jù)查看配置信息修改以下符號值*#define IOY0 0 xE400#define IOYO2 0 xE440/*#define MY8255_A IOY0 + 0 x00*4#define MY8255_B IOY0 + 0 x01*4#define MY8255_C IOY0 + 0 x02*4#define MY8255_MODE IOY0 + 0 x03*4char a = 0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66, 0
32、x6d, 0 x7d, 0 x07, 0 x7f, 0 x6f, 0 x77, 0 x7c, 0 x39, 0 x5e, 0 x79, 0 x71;int b = 0, 0, 0, 0, 0;char c = 0 x11,0 x41,0 x21,0 x01,0 x14,0 x12,0 x10;int cc;int b_n;int n;void main() int i,j,ad;outp(MY8255_MODE, 0 x81);b_n = 1; b4=10; while(1) jian(); switch(b4) case 10:n=0;b0=0;b1=0; while(n=9) dis();
33、clear();ccscan();if (cc)dis();delay(0 x100);delay(0 x100);clear();ccscan();if (cc)getkey(); key(); b2=b0;b3=b1;b4=11; break;case 11:dis();break; case 12:while(b4=12) b0=b2; b1=b3; ad=b0+b1; outp(IOYO2,c1); while(ad) /*到計時*/ b0-; if(b0=-1) b0=9; b1-; ad=b0+b1; for(i=0;i=6000;i+) dis(); che();key(); w
34、hile(n=13)dis();jian();key(); if(n!=12)break; b0=5; b1=0; ad=b0+b1; while(ad) outp(IOYO2,c2); b0-; if(b0=-1) b0=9; b1-; ad=b0+b1; for(i=0;i=2000;i+) dis();che();key(); while(n=13)dis();jian();key(); if(n!=12)break; outp(IOYO2,c3); for(i=0;i=4000;i+) dis();che();key(); while(n=13)dis();jian();key();
35、if(n!=12)break; b0=b2; b1=b3; ad=b0+b1; outp(IOYO2,c4); while(ad) /*到計時*/ b0-; if(b0=-1) b0=9; b1-; ad=b0+b1; for(i=0;i=6000;i+) dis();che();key(); while(n=13)dis();jian();key(); if(n!=12)break; b0=5; b1=0; ad=b0+b1; while(ad) outp(IOYO2,c5); b0-; if(b0=-1) b0=9; b1-; ad=b0+b1; for(i=0;i=2000;i+) di
36、s();che();key(); while(n=13)dis();jian();key(); if(n!=12)break; outp(IOYO2,c6); for(i=0;i=4000;i+) dis();che();key(); while(n=13)dis();jian();key(); if(n!=12)break; break; case 13:dis();break; case 14:outp(IOYO2,c0); b0=0;b1=0;for(i=0;i=50;i+)dis();break; case 15:exit(0);break; default: exit(0); voi
37、d getkey(void)int i;int j = 0 xfe;for(i=0;i9)break;putbuf();return;if ( !( (inp(MY8255_C) & 0 x02) )n = i + 4;if(n9)break;putbuf();return;if ( !( (inp(MY8255_C) & 0 x04) )n = i + 8;if(n9)break;putbuf();return;if ( !( (inp(MY8255_C) & 0 x08) )n = i + 12;if(n9)break;putbuf();return;j = 1;void ccscan(v
38、oid)outp(MY8255_A, 0 x00);cc = inp(MY8255_C);cc = (cc) & 0 x0F;void dis(void)int i;int j = 0 xf7;for(i=0;i= 1;j |= 0 x80;void clear(void)outp(MY8255_B, 0 x00);void putbuf(void)bb_n = n;b_n-;if (b_n = -1)b_n = 1;dis();clear();ccscan();while (cc)dis();clear();ccscan();void key(void)if (bioskey(1) != 0
39、)exit(0);void delay(int time)int i;int j;for(i=0;i=time;i+)for(j=0;j=0 x100;j+) return;void getkey1(void)int i;int j = 0 xfe;for(i=0;i=3;i+)outp(MY8255_A, j);if ( !( (inp(MY8255_C) & 0 x01) )n = i + 0;b4=n;return;if ( !( (inp(MY8255_C) & 0 x02) )n = i + 4;b4=n;return;if ( !( (inp(MY8255_C) & 0 x04)
40、)n = i + 8; b4=n;return;if ( !( (inp(MY8255_C) & 0 x08) )n = i + 12;b4=n;return;j = 1;void jian(void) dis(); clear(); ccscan(); if (cc) dis();delay(0 x100);delay(0 x100);clear();ccscan();if (cc) getkey1(); key(); if(n=15) exit(0); void che(void)cc=0;ccscan();if(cc)jian();dis();key();if(b4=15) exit(0);第四章 設(shè)計心得與體會以及問題在課程設(shè)計的過
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024正式的地區(qū)代理合同范文
- 工程合同功能解析
- 水利工程維修貸款合同
- 2024醫(yī)院藥品供銷合同
- 農(nóng)業(yè)領(lǐng)域合作協(xié)議范本
- 2024年咨詢顧問合作簡單協(xié)議書
- 彩色鋼板工程承包協(xié)議書
- 集裝箱海運合同范本
- 2024建筑業(yè)合同范本范文
- 2024個人房產(chǎn)轉(zhuǎn)讓合同
- 剪映:手機(jī)短視頻制作-配套課件
- 西氣東輸二線25標(biāo)段山嶺隧道內(nèi)管道安裝技術(shù)
- 小學(xué)綜合實踐活動-綠色出行教學(xué)課件設(shè)計
- 防校園欺凌-課件(共28張PPT)
- 第6章 智能網(wǎng)聯(lián)汽車測評技術(shù)
- 單向板結(jié)構(gòu)設(shè)計
- 普通高等學(xué)校學(xué)生轉(zhuǎn)學(xué)申請表
- 房租、水、電費(專用)收據(jù)Excel模板
- 習(xí)近平總書記關(guān)于教育的重要論述研究學(xué)習(xí)通章節(jié)答案期末考試題庫2023年
- 重癥急性胰腺炎ppt恢復(fù)課件
- 2022江蘇省沿海開發(fā)集團(tuán)限公司招聘23人上岸筆試歷年難、易錯點考題附帶參考答案與詳解
評論
0/150
提交評論