版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 微機原理課程設計</b></p><p> 課程名稱: 簡易計算器設計</p><p><b> 班 級: </b></p><p> 二○一三年 一 月 二 日</p><p><b> 簡易計算器設計</b></p>
2、<p><b> 一、設計任務</b></p><p> 基本任務:用8088設計一個能實現(xiàn)0-9整數(shù)加法運算的計算器,和用2位LED數(shù)碼顯示。鍵盤包括0-9及“+”和“=”12個按鍵。</p><p> 拓展任務:鍵盤新增加4個按鍵,分別為“C”,“-”,“*”,“/”。能實現(xiàn)簡單的清0操作,減法運算,乘法運算,和除法運算。</p>
3、<p><b> 二、設計要求</b></p><p> 1.畫出連接線路圖或功能模塊引腳連接圖。</p><p> 2.采用8088CPU作主控制器,8255作為并行接口電路實現(xiàn)按鍵的掃描以及數(shù)碼管的顯示。</p><p> 3.采用2個共陰極型LED,只需顯示0—255范圍內的值。</p><p>
4、; 三、簡易計算器功能簡介</p><p> 1.能實現(xiàn)一位的加運算,例如:9+9=18;通過按鍵分別輸入“9”,“+”,“9”,“=”后LED燈上將顯示出“18”。</p><p> 2.能實現(xiàn)一位的減運算,且不能出現(xiàn)負數(shù)。例如:9-8=1;通過按鍵分別輸入“9”,“-”,“8”,“=”后LED燈上將顯示出“01”。</p><p> 3.能實現(xiàn)一位的乘法
5、運算,例如:3*5=15;通過按鍵分別輸入“3”,“*”,“5”,“=”后LED燈上將顯示出“15”。</p><p> 4.能實現(xiàn)一位的除法運算,且只能顯示商整數(shù)的部分;例如:9/3=3;通過按鍵分別輸入“9”,“/”,“3”,“=”后LED燈上將顯示出“03”。</p><p> 5.能實現(xiàn)清0操作,當按下C時候,LED上顯示“00”。</p><p>
6、四、總體方案與設計說明</p><p><b> 4.1總體方案</b></p><p> 通過8255A的C口實現(xiàn)開關矩陣鍵盤的接入,通過鍵盤的不斷掃描,如果有按鍵按下,通過查表法,分別將輸入的數(shù)據(jù)讀入到AL并保存在NUM1和NUM2中,將輸入的字符保存在OPER中。將8255A的A端口和B端口分別接上共陰極的LED燈,將輸入的數(shù)據(jù)通過查表法,將七段碼送共陰極的
7、LED燈顯示。當按下“=”時候,通過判斷出OPER中的字符,8088來實現(xiàn)不同的操作,并將結果在LED燈上顯示。當按下“C”時候,將數(shù)據(jù)先清零,同時LED燈上顯示為“00”。</p><p><b> 4.2設計說明 </b></p><p> 1.共陰極的LED燈上顯示輸入的數(shù)據(jù)和顯示結果</p><p> 2.鍵盤實現(xiàn)數(shù)字0~9的輸入
8、,功能鍵分別對應鍵盤上的的“C”,“+”,“-”,“*”,“/”,“=”</p><p> 3.運算順序,先按下數(shù)字鍵,接著按下功能鍵,再按下數(shù)字鍵,當按下“=”時候,將結果顯示在LED燈上。按下“C”,重新實現(xiàn)運算。</p><p> 五、硬件電路的設計及描述</p><p><b> 5.1 硬件電路</b></p>&
9、lt;p> 鍵盤輸入及LED數(shù)碼管通過8255A接口與系統(tǒng)總線連接,鍵盤的16個按鍵組成4*4矩陣,其中4根矩陣線作為8255A的輸出線與PC3~PC0連接,4根矩陣線作為8255A的輸入線與PC7~PC4連接。鍵盤采用逐次掃描原理,16個按鍵中0~9為數(shù)字健,+、-、*、/、=作為加、減、乘,除、等號功能鍵,C為清零鍵。LED燈通過與8255A的PA口和PB口連接,用于顯示輸入的數(shù)和結果顯示。</p><p
10、> 5.2可編程并行通信接口芯片8255A工作原理</p><p> ?。?)并行輸入/輸出端口A,B,C</p><p> 8255A內部包括三個8位的輸入輸出端口,分別是端口A、端口B、端口C,相應信號線是PA7~PA0、PB7~PB0、PC7~PC0。端口都是8位,都可以作為輸入或輸出。通常將端口A和端口B定義為輸入/輸出的數(shù)據(jù)端口,而端口C則既可以作數(shù)據(jù)端口,又可以作為
11、端口A和端口B的狀態(tài)和控制信息的傳送端口。</p><p> ?。?)A組和B組控制部件</p><p> 端口A和端口C的高4位(PC7~PC4)構成A組;由A組控制部件實現(xiàn)控制功能。 端口B和端口C的低4位(PC3~PC0)構成B組;由B組控制部件實現(xiàn)控制功能。 A組和B組利用各自的控制單元來接收讀寫控制部件的命令和CPU通過數(shù)據(jù)總線(D0~D7)送來的控制字,并根據(jù)他們來定義各個
12、端口的操作方式。</p><p> ?。?)數(shù)據(jù)總線緩沖存儲器</p><p> 三態(tài)雙向8位緩沖器,是8255A與8086CPU之間的數(shù)據(jù)接口。與I/O操作有關的數(shù)據(jù)、控制字和狀態(tài)信息都是通過該緩沖器進行傳送。</p><p> (4) 讀/寫控制部件</p><p> 8255A完成讀/寫控制功能的部件。能接收CPU的控制命令,并根
13、據(jù)控制命令向各個功能部件發(fā)出操作指令。 </p><p> CS 片選信號:由CPU輸入,有效時表示該8255A被選中。 RD, WR 讀、寫控制信號:由CPU輸入。RD有效表示CPU讀8255A,WR有效表示CPU寫8255A。RESET 復位信號:由CPU輸入。RESET信號有效,清除8255
14、A中所有控制字寄存器內容,并將各個端口置成輸入方式。</p><p> 定義工作方式控制字:</p><p> 工作方式0:8255A中各端口的基本輸入/輸出方式。</p><p> 本次設計用到PA7~PA0和PB7~PB0都作為輸出端口,PC7~PC0分別作為輸出和輸入端口。因而通過端口383H初始化8255A為88H。</p><p&
15、gt;<b> 5.3鍵盤模塊設計</b></p><p> 鍵盤是常用信息輸入元件,其實鍵盤也是由一個個按鈕組成,如果是獨立按鈕的話必須要需要一個I/O口對它進行檢測,而鍵盤往往這需要鍵盤按鈕數(shù)一半的I/O口數(shù)對它進行檢測,也許對一個比較簡單的系統(tǒng)I/O口數(shù)一般不是問題,但對于一個大型、復雜的系統(tǒng)來說I/O資源就顯得非常珍貴了,盡量減少I/O使用是非常利于降低成本,另外一方面鍵盤比用獨
16、立按鍵要美觀。我設計時使用的是4*4行列式鍵盤. </p><p> 基本工作原理:通過8255A的PC3~PC0的輸出接鍵盤矩陣的行線,同時PC7~PC4輸入接鍵盤矩陣的列線。列線還通過電阻接高電平。當PC3~PC0的輸出全部為低電平時候,從PC7~PC4輸入的開關狀態(tài)全部為高電平時,則無按鍵閉合;否則有按鍵閉合。有按鍵閉合后,在逐行逐列檢測,確定是哪個鍵閉合。確定的方法是:將按鍵的位置按行輸出值和列輸入值進
17、行編碼。其編碼關系對應如下表5-1.將上述定義的對應關系和十六進制的順序,將按鍵的編碼排成數(shù)據(jù)表,放在數(shù)據(jù)區(qū)中。再根據(jù)這種編碼規(guī)則將掃描的鍵盤的行值和列值組合成代碼。將該代碼與數(shù)據(jù)區(qū)中的數(shù)據(jù)表比較,即可確定閉合的按鍵。</p><p> 表5-1鍵盤編碼及對應關系</p><p> 5.4 LED燈模塊設計</p><p> 發(fā)光二極管顯示器(LED)是微型計
18、算機應用系統(tǒng)中常用的輸出裝置,本次采用的為共陰極顯示。先將LED的段碼制成表,然后對應保存到數(shù)據(jù)區(qū)中,通過查表的方法,找到對應的段碼,通過8255A的A口和B口送出顯示。器段碼對應關系如下:</p><p> 5.5鍵盤及LED的設計電路</p><p> 5.6硬件電路設計圖</p><p> 六、軟件的設計與實現(xiàn)</p><p>&
19、lt;b> 6.1程序流程圖</b></p><p><b> 6.2程序清單</b></p><p> stacksegmentstack'stack'</p><p> dw64dup(0)</p><p> stackends</p><p
20、> datasegment</p><p> KEYTAB DB0E7H,0EBH,0DBH,0BBH,0EDH,0DDH,0BDH,0EEH,0DEH,0BEH</p><p> DB7EH,7DH,7BH,77H,0B7H,0D7H</p><p> SEGPT DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH
21、,6FH</p><p> NUM1 DB 0</p><p> NUM2 DB 0</p><p> OPER DB 0</p><p><b> dataends</b></p><p> codesegment</p><p> mai
22、nproc far</p><p> assumess:stack,cs:code,ds:data</p><p><b> pushds</b></p><p><b> subax,ax</b></p><p><b> pushax</b></p&
23、gt;<p> movax,data</p><p><b> movds,ax</b></p><p> MOVDX,383H;初始化8255A</p><p> MOVAL,88H</p><p><b> OUTDX,AL</b></p>&
24、lt;p> LOP1:MOVDX,382H;進行全鍵盤檢測</p><p><b> MOVAL,0</b></p><p><b> OUTDX,AL</b></p><p> MOVDX,382H;判斷是否有鍵按下</p><p><b> INA
25、L,DX</b></p><p> ANDAL,0F0H</p><p> CMPAL,0F0H</p><p><b> JELOP1</b></p><p> MOVBX,0;數(shù)據(jù)區(qū)的位移量送BX</p><p> MOVAH,77H;檢測鍵盤的行的輸
26、出值</p><p> LOP2:MOVDX,382H;檢測鍵盤的一行</p><p><b> MOVAL,AH</b></p><p><b> OUTDX,AL</b></p><p> MOVDX,382H</p><p><b>
27、INAL,DX</b></p><p> ANDAL,0F0H</p><p> CMPAL,0F0H</p><p><b> JNELOP3</b></p><p> RORAH,1;該行無鍵閉合檢測另一行</p><p><b> JMP
28、LOP2</b></p><p> LOP3:ANDAH,0FH</p><p><b> ORAL,AH</b></p><p> LOP4:CMPAL,KEYTAB[BX];將閉合的按鍵值轉換為該鍵代表的數(shù)</p><p> CMPBX,9;判斷是否為數(shù)字0-9中的數(shù)</
29、p><p><b> JLELOP5</b></p><p> CMPBX,0EH;判斷是否為“=”號</p><p> JEDISP;為“=”則進行顯示結果</p><p> CMPBX,0AH;判斷是否為“+”</p><p> JELOP6;</p
30、><p> CMPBX,0BH;判斷是否為“-”</p><p> JELOP6;</p><p> CMPBX,0CH;判斷是否為“*”</p><p> JELOP6;</p><p> CMPBX,0DH;判斷是否為“/”</p><p> JE
31、LOP6;</p><p> CMP BX,0FH;判斷是否為“C”</p><p> JECLEAR;進入清0程序</p><p><b> INCBX</b></p><p><b> JMPLOP4</b></p><p>
32、 LOP5:MOVAL,SEGPT[BX];將按鍵值送出來顯示</p><p> MOVDX,381H;將按鍵值送8255a的B口顯示</p><p><b> OUTDX,AL</b></p><p> CMPOPER,0;</p><p> JELOP7 ;&
33、lt;/p><p> MOVNUM2,BL;保存第二個數(shù)</p><p><b> JMPLOP1</b></p><p> LOP6:MOVOPER,BL;保存運算符</p><p><b> JMPLOP1</b></p><p> LOP7:
34、MOVNUM1,BL;保存第一個數(shù)</p><p> JMPLOP1;</p><p> DISP:MOVCL,OPER;將運算符送入cl中</p><p> CMPCL,0AH</p><p> JEADD1;進入加法運算程序</p><p> CMPCL,0BH<
35、/p><p> JESUB1;進入減法運算程序</p><p> CMPCL,0CH</p><p> JEMUL1;進入乘法運算程序</p><p> CMPCL,0DH</p><p> JEDIV1;進入除法運算程序</p><p> ADD1:MOV
36、AL,NUM1</p><p> ADDAL,NUM2;進行兩個數(shù)的加法運算</p><p> MOVCH,AL;暫存運算結果</p><p> MOVCL,10;準備顯示結果</p><p> MOVAH,0;將8位二進制碼擴展成16位二進制碼</p><p> DIVCL
37、;</p><p> MOVBL,AH;暫存運算后的個位</p><p> MOVBH,0;</p><p> MOVDX,381H;</p><p> MOVAL,SEGPT[BX];</p><p> OUTDX,AL;運算的個位的結果送B口顯示</p><
38、p> MOVAL,CH;將運算結果送回AL中</p><p> MOVAH,0;將8位二進制碼擴展成16位二進制碼</p><p> DIVCL;</p><p> MOVAH,0;</p><p> DIVCL;將運算結果的十位保存在AH中</p><p> M
39、OVBL,AH;暫存運算后的十位</p><p> MOVBH,0;</p><p> MOVDX,380H;</p><p> MOVAL,SEGPT[BX];</p><p> OUTDX,AL;運算的十位的結果送A口顯示</p><p> JMPLOP1;等待清0鍵按
40、下</p><p> SUB1: MOVAL,NUM1</p><p> ADDAL,NUM2;進行兩個數(shù)的減法運算</p><p> MOVCH,AL;暫存運算結果</p><p> MOVCL,10;準備顯示結果</p><p> MOVAH,0;將8位二進制碼擴展成16位二
41、進制碼</p><p> DIVCL;</p><p> MOVBL,AH;暫存運算后的個位</p><p> MOVBH,0;</p><p> MOVDX,381H;</p><p> MOVAL,SEGPT[BX];</p><p> OUTDX
42、,AL;運算的個位的結果送B口顯示</p><p> MOVAL,CH;將運算結果送回AL中</p><p> MOVAH,0;將8位二進制碼擴展成16位二進制碼</p><p> DIVCL;</p><p> MOVAH,0;</p><p> DIVCL;將運算
43、結果的十位保存在AH中</p><p> MOVBL,AH;暫存運算后的十位</p><p> MOVBH,0;</p><p> MOVDX,380H;</p><p> MOVAL,SEGPT[BX];</p><p> OUTDX,AL;運算的十位的結果送A口顯示</p
44、><p> JMPLOP1;等待清0鍵按下</p><p> MUL1: MOVAL,NUM1 </p><p> MULNUM2;進行兩個數(shù)的乘法運算</p><p> MOVCH,AL;暫存運算結果</p><p> MOVCL,10;準備顯示結果</p><
45、p> MOVAH,0;將8位二進制碼擴展成16位二進制碼</p><p> DIVCL;</p><p> MOVBL,AH;暫存運算后的個位</p><p> MOVBH,0;</p><p> MOVDX,381H;</p><p> MOVAL,SEGPT[BX
46、];</p><p> OUTDX,AL;運算的個位的結果送B口顯示</p><p> MOVAL,CH;將運算結果送回AL中</p><p> MOVAH,0;將8位二進制碼擴展成16位二進制碼</p><p><b> DIVCL;</b></p><p>
47、 MOVAH,0;</p><p> DIVCL;將運算結果的十位保存在AH中</p><p> MOVBL,AH;暫存運算后的十位</p><p> MOVBH,0;</p><p> MOVDX,380H;</p><p> MOVAL,SEGPT[BX];</
48、p><p> OUTDX,AL;運算的十位的結果送A口顯示</p><p> JMPLOP1;等待清0鍵按下</p><p> DIV1: MOVAL,NUM1</p><p> MOV AH,0</p><p> DIVNUM2;進行兩個數(shù)的除法運算</p><
49、;p> MOVCH,AL;暫存運算結果</p><p> MOVCL,10;準備顯示結果</p><p> MOVAH,0;將8位二進制碼擴展成16位二進制碼</p><p> DIVCL ;</p><p> MOVBL,AH;暫存運算后的個位</p><p>
50、 MOVBH,0;</p><p> MOVDX,381H;</p><p> MOVAL,SEGPT[BX];</p><p> OUTDX,AL;運算的個位的結果送B口顯示</p><p> MOVAL,CH;將運算結果送回AL中</p><p> MOVAH,0;將8位
51、二進制碼擴展成16位二進制碼</p><p> DIVCL;</p><p> MOVAH,0;</p><p> DIVCL ;將運算結果的十位保存在AH中</p><p> MOVBL,AH;暫存運算后的十位</p><p> MOVBH,0;</p>
52、<p> MOVDX,380H;</p><p> MOVAL,SEGPT[BX];</p><p> OUTDX,AL;運算的十位的結果送A口顯示</p><p> JMPLOP1;等待清0鍵按下</p><p> CLEAR:MOVSI,OFFSET NUM1 ;將數(shù)據(jù)1的偏移地址給s
53、i</p><p> MOVAL,0;</p><p> MOV[SI],AL;將數(shù)據(jù)清0</p><p> MOVSI,OFFSET NUM2 ;將數(shù)據(jù)2的偏移地址給</p><p> MOVAL,0;</p><p> MOV[SI],AL;將數(shù)據(jù)2清0</p>
54、<p> MOVSI,OFFSET OPER ;將運算符標志的偏移地址給si</p><p> MOVAL,0;</p><p> MOV[SI],AL;將運算符清0</p><p> MOVDX,380H;將LED燈進行顯示的十位清0</p><p> MOVAL,SEGPT[0];</p
55、><p> OUTDX,AL;</p><p> MOVDX,381H;將LED燈進行顯示的個位清0</p><p> MOVAL,SEGPT[0];</p><p> OUTDX,AL</p><p> JMP LOP1 ;重新進行鍵盤檢測</p><p>&
56、lt;b> ret</b></p><p> main endp</p><p> code ends</p><p> end main</p><p> 七、功能的實現(xiàn)及結果描述</p><p> 1.進行加運算,通過按鍵分別輸入“8”,“+”,“7”,“=”后LED燈上將顯示
57、出“15”。</p><p> 2.進行減運算,通過按鍵分別輸入“6”,“-”,“5”,“=”后LED燈上將顯示出“01”。</p><p> 3.進行乘法運算,通過按鍵分別輸入“3”,“*”,“5”,“=”后LED燈上將顯示出“15”。</p><p> 4.進行除法運算,通過按鍵分別輸入“9”,“/”,“3”,“=”后LED燈上將顯示出“03”。</
58、p><p> 5.能實現(xiàn)清0操作,當按下C時候,LED上顯示“00”。</p><p><b> 八、課程設計體會</b></p><p> 這次微機課程設計是自由選擇題目,開始的時候,我們選擇了簡易計算器設計的題目,看起來不是很難,但是真正做起來才發(fā)現(xiàn)其困難之處。</p><p> 本次的課程設計是一個相對而言比較
59、難的設計,因為這次設計不僅僅是課本上知識的整合,還需我們對所學的知識有足夠深得認識。剛開時的時候,感覺思路很清晰。以為做起來很簡單,當真正深入的時候發(fā)現(xiàn)是有不少的問題。我們首先完成了基本任務,最后自己想擴展一下,就加入了減法,乘法和除法的運算。最后只能解決乘法的運算問題。對于減法和除法只考慮最基本的功能。</p><p> 首先8255A的初始化和8088的接線也是十分簡單,但是等到編成的時候發(fā)現(xiàn)有很多不懂得地
60、方,覺得很容易的算法在編程中很難實現(xiàn)。于是我們開始查看課本和有關的資料,知道了一些編程常用的方法。受益匪淺。而后我們用心編寫這程序。經(jīng)過我們的努力終于完成了相應的要求。</p><p> 在課程設計中還碰到的一個問題是運算結果怎樣顯示的問題。例如6+5=11時,要顯示兩個“1”,“1”。開始不知道怎樣查表顯示,最后通過參考書籍完成,計算出得值為轉換成BCD數(shù)后分別送偏移量,來查表顯示出來。</p>
61、<p> 這次課程設計,讓我對8255A和8088有了更進一步的認識,更重要的是培養(yǎng)了我們面對問題、解決問題的能力。從理論知識上我對8088和8255的作用、功能以及初始化更加熟悉,并且有了客觀上的理解。同時對鍵盤的使用和數(shù)碼管顯示問題也完全弄懂了。這次課程設計還是比較成功的。</p><p> 當然我們還有很多不足之處,比如知識掌握的不夠全面,研究的深度不夠,有問題畏畏縮縮不敢問,程序編寫不會查
62、漏補缺。同時還沒使計算器的功能更加的完善,這說明們我的惰性也很強。這些都是我需要去改進的地方。我們會在以后的學習中多加注意。</p><p><b> 九、參考文獻</b></p><p> [1] 朱定華,微機原理、匯編與接口技術,清華大學出版社,2010</p><p> [2] 孟志華,微機原理及應用實驗指導書,武科大信息學院,20
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論