《走馬燈花樣實(shí)驗(yàn)設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《走馬燈花樣實(shí)驗(yàn)設(shè)計(jì)(12頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、
實(shí) 驗(yàn) 報(bào) 告
實(shí)驗(yàn)人: 學(xué)號(hào): 日期:
院(系): 軟件學(xué)院軟件工程 專業(yè)(班級(jí)):
實(shí)驗(yàn)題目: 走馬燈把戲?qū)嶒?yàn)設(shè)計(jì)
一. 實(shí)驗(yàn)?zāi)康?
1. 進(jìn)一步理解和掌握計(jì)算機(jī)各部
2、分的構(gòu)成及互相關(guān)系;
2. 理解微指令的執(zhí)行過程,掌握微程序的設(shè)計(jì)措施;
3. 進(jìn)一步結(jié)識(shí)和掌握計(jì)算機(jī)各指令的執(zhí)行過程,弄清晰計(jì)算機(jī)的運(yùn)營原理;
二. 實(shí)驗(yàn)內(nèi)容
P27(實(shí)驗(yàn)四)在走馬燈把戲?qū)嶒?yàn)設(shè)計(jì)的基本上,增長在七段數(shù)碼顯示屏上滾動(dòng)顯示自己的學(xué)號(hào)、8X8點(diǎn)陣上滾動(dòng)顯示自己的名字并控制滾動(dòng)速度(有些同窗姓名筆畫較多應(yīng)簡化或用別名)。用到的芯片為8255、8253、8259(中斷)、ADC0809、點(diǎn)陣等。
三. 實(shí)驗(yàn)器材
(1) 裝有TPC-USB并連接好TPC-USB的電腦一臺(tái)
(2) TPC-USB機(jī)
四. 實(shí)驗(yàn)原理
1. 有關(guān)ADC0809的連接:
3、
2. 有關(guān)8255的接法:
3. 有關(guān) 74LS273 的接法:
4. 有關(guān)雙色點(diǎn)陣發(fā)光二極管顯示屏的接法:
CS1連接: 程序中的ROW端口,也就是290H
CS2連接: 程序中的COL端口,也就是298H
5. 有關(guān)七段數(shù)碼管的接法:
由于74LS273有Q1-Q8八個(gè)接口,Q1-Q7接七段數(shù)碼管a-g,dp控制小數(shù)點(diǎn)的顯示,我將其接地,不顯示。
而Q8將用來控制十位和個(gè)位的顯示,Q8接s1,Q8取非接s0。由于我將學(xué)號(hào)顯示變成12 23 33 30 03 30 05,十位的數(shù)字我將其段碼增長了 8,此時(shí) Q8 為 1,S1 為1,顯示十位,S0為0,個(gè)
4、位不顯示。個(gè)位的數(shù)字沒有改動(dòng)段碼,此時(shí)Q8為0,S1為0,十位不顯示,S0為1,顯示個(gè)位。
五. 實(shí)驗(yàn)分析與設(shè)計(jì)
1. 主程序用了一種大循環(huán),一方面顯示花燈,再顯示學(xué)號(hào),最后顯示姓名。
花燈:C口輸入,8種花燈分別用8個(gè)16進(jìn)制數(shù)表達(dá),用8個(gè)循環(huán)顯示8個(gè)16進(jìn)制數(shù),花燈便變化8次,達(dá)到閃爍的效果。通過判斷K0到K7的輸入,執(zhí)行不同的命令,顯示不同的花燈,此外,若是count1比7大,即count達(dá)到8時(shí),讓count歸0使花燈回到循環(huán)開始。
學(xué)號(hào):用count2定位并且判斷與否越界,若是越界,歸0回到初始狀態(tài)。一方面顯示第一位,此時(shí)把數(shù)字與80h做或運(yùn)算,讓最高位接s1控制顯示
5、的位,然后顯示第二位,用7fh做與運(yùn)算,最高位仍然是做控制位。在s1接非門再接s0的狀況下,傳入數(shù)據(jù)與80h做或運(yùn)算的數(shù)顯示在高位上,與7fh做與運(yùn)算的數(shù)顯示在低位上。
點(diǎn)陣:用count3定位并且判斷與否越界,若是越界,歸0回到初始狀態(tài)。一列一列顯示名字,并判斷末尾時(shí)再接著繼續(xù)一種循環(huán)。
最后判斷與否有按鍵按下,以及旋鈕與否扭動(dòng),若有則按狀況令count都加1,以此完畢大循環(huán)。
2. 匯編代碼:
;***************************
; 考試題目三
;***************************
io0809a equ 298h
6、
proth equ 2a0h
protlr equ 2a8h
ls273 equ 280h
io8255a equ 288h
io8255b equ 28bh
io8255c equ 28ah
data segment
led1 db 80h,40h,20h,10h,08h,04h,02h,01h
led2 db 7Fh,0bfh,0dfh,0efh,0f7h,0fbh,0fdh,0feh
led3 db 0aah,55h,0aah,55h,0aah,55h,0aah,55h
led4 db 18h,24h,42h,81h,18h,24h,42h,81h
led5 db
7、 81h,42h,24h,18h,81h,42h,24h,18h
led6 db 0ffh,00h,0ffh,00h,0ffh,00h,0ffh,00h
led7 db 0f0h,0fh,0f0h,0fh,0f0h,0fh,0f0h,0fh
led8 db 81h,0c3h,0e7h,0ffh,81h,0c3h,0e7h,0ffh
count1 db 0
count2 db 0
count4 db 0
count3 db 0
buff db 0h,60h,60h,7eh,7eh,60h,60h,0h,
0h,3ch,42h,42h,42h,42h,3ch,0h,0h,
8、7eh,20h,10h,10h,20h,7eh,0h,0ffh
seg7 db 06h,5bh,4fh,4fh,3fh,4fh,3fh,6fh,0ffh
data ends
code segment
assume cs:code, ds:data
start:mov ax,data ;初始化
mov ds,ax
begin:mov dx,io0809a
out dx,al
mov cx,10h
delay:loop delay
in al,dx
mov bh,al
;****task1***
9、*********
mov dx,io8255b
mov al,8bh
out dx,al
mov dx,io8255c ;c口輸入
in al,dx
cmp al,01h ;判斷花燈樣式
jne con2
mov si,offset led1
jmp next
con2: cmp al,02h
jne con3
mov si,offset led2
jmp next
con
10、3: cmp al,04h
jne con4
mov si,offset led3
jmp next
con4: cmp al,08h
jne con5
mov si,offset led4
jmp next
con5: cmp al,10h
jne con6
mov si,offset led5
jmp next
con6: cmp al,20h
jne con7
mov si,offset led6
jmp next
11、
con7: cmp al,40h
jne con8
mov si,offset led7
jmp next
con8: mov si,offset led8
next: mov bl,count1
cmp bl,8
jne nth
mov bl,0
mov count1,bl
nth: push bx ;把8個(gè)數(shù)顯示8次
mov bh,00h
add si,bx
pop bx
mov al,[si]
12、 mov dx,io8255a
out dx,al
mov cl,bh
mov ch,00h
delay1:loop delay1
;**************
; task2
;**************
mov bl,count2 ;定位并判斷與否越界
cmp bl,8
jne next2
mov bl,0
mov count2,bl
next2:mov cl,30h
mov ch,00h
loop1:mov di,o
13、ffset seg7 ;送數(shù)據(jù)并顯示學(xué)號(hào)
push bx
mov bh,00h
add di,bx
pop bx
mov al,[di]
mov dx,ls273
or al,80h ;或運(yùn)算,讓s1變成1
out dx,al
inc di
push cx
mov cx,0ffffh
delay2:loop delay2
pop cx ;判斷與否到最后位
14、 mov al,[di]
cmp al,0ffh
jne next3
mov di,offset seg7 ;若到最后位接著顯示第一位
mov al,[di]
next3:mov dx,ls273 ;顯示第二位
and al,7fh ;與運(yùn)算,讓s1變成0
out dx,al
push cx
delay3:loop delay3
pop cx
;***********************
;
15、 task3
;***********************
mov bl,count3 ;判斷位置和越界
cmp bl,24
jne next4
mov bl,0
mov count3,bl
next4:mov cl,0ffh
mov ch,01h
mov si,offset buff
push bx
mov bh,00h
add si,bx
pop bx
push cx
mov cx,
16、08h
mov ah,01h
loop2:mov al,[si]
cmp al,0ffh
jne next5
mov si,offset buff
mov al,[si]
next5:mov dx,proth
out dx,al
mov dx,protlr
mov al,ah
out dx,al
push cx
mov cx,01ffh
delay4:loop delay4
pop cx
mov al,00h
17、
out dx,al
shl ah,01
inc si
loop loop2
pop cx
;***********
mov ah,01 ;有無鍵按下
int 16h
jnz last
mov bl,count4
cmp bl,bh
jb next6
mov bl,0
mov count4,0 ;所有count加
18、1
mov bl,count1
add bl,1
mov count1,bl
mov bl,count2
add bl,1
mov count2,bl
mov bl,count3
add bl,1
mov count3,bl
next6:mov bl,count4
add bl,1
mov count4,bl
jmp begin
last: mov ah,4ch
int 21h
code ends
19、 end start
3. 實(shí)驗(yàn)心得
1. 該實(shí)驗(yàn)融合了 8255 芯片和 ADC0809 以及雙色點(diǎn)陣發(fā)光二極管顯示屏,用 8255 進(jìn)行輸入 并輸出走馬燈把戲,并同步進(jìn)行在雙色點(diǎn)陣發(fā)光二極管顯示屏上滾動(dòng)顯示姓名,運(yùn)用 ADC0809 進(jìn)行顯示延遲的控制和在七段數(shù)碼管上滾動(dòng)顯示學(xué)號(hào)。
2.把程序提成各個(gè)小部分去實(shí)現(xiàn),每次只執(zhí)行程序的一小部分,先顯示學(xué)號(hào),再顯示姓名,循環(huán)執(zhí)行后,通過 ADC0809 來調(diào)節(jié)速度,在肉眼看來爭取同步顯示。
3. 為了讓數(shù)碼管的滾動(dòng)顯示,s1必須接非門接s0上,并通過數(shù)據(jù)最高位的數(shù)去控制數(shù)碼管上高下位數(shù)的顯示。
4.堆棧的錯(cuò)誤:子程序的調(diào)用改動(dòng)了寄存
20、器的內(nèi)容導(dǎo)致程序錯(cuò)誤。解決措施是每次使用寄存器之前最佳先 PUSH 進(jìn)棧中,然后用完再 POP 出來。
5. 結(jié)識(shí)到了思考問題的重要性,只有在弄懂每一步的大體功能才干較好地進(jìn)行設(shè)計(jì)執(zhí)行,否則只是徒增實(shí)驗(yàn)次數(shù);
總結(jié):
計(jì)組實(shí)驗(yàn)真的是一門需要耐心和恒心去學(xué)習(xí)的課程。從理論課開始,每一次上課講的東西都也許是實(shí)驗(yàn)所需要注意的地方或者是需要我們理解的重點(diǎn)。只要一不小心跟不上,實(shí)驗(yàn)的難度就增長了。其實(shí)我們諸多時(shí)候都是上網(wǎng)查資料或者是問同窗,問教師去解決某些也許并不是很難但是我們忽視的某些小問題。這門課上,動(dòng)手能力的確非常重要,由于諸多問題不是你懂得個(gè)大概就能把東西做出來,而是需要你深刻理解,尚有不斷失敗不斷改正,不斷反復(fù)去思考才干做好一種實(shí)驗(yàn)。而課堂上的檢查更是一種動(dòng)力,是讓我們把事情做好的動(dòng)力,一種對(duì)于你在實(shí)驗(yàn)上花的心思的檢查以及你的努力的肯定。其實(shí)有一段時(shí)間由于理論課沒有跟上,在匯編語言方面顯得很吃力,諸多東西都要惡補(bǔ),不斷看書問同窗,當(dāng)你發(fā)現(xiàn)自己懂得諸多東西,明白諸多東西的時(shí)候是很開心的。
這門課程令我學(xué)到諸多體驗(yàn)到了諸多,不僅是課本上的,也也許是可下的鉆研態(tài)度和解決問題的恒心。