歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

《單片機(jī)原理及應(yīng)用》期末課程設(shè)計(jì)計(jì)算器模擬系統(tǒng)

  • 資源ID:28367589       資源大小:836KB        全文頁數(shù):26頁
  • 資源格式: DOC        下載積分:15積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要15積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請(qǐng)知曉。

《單片機(jī)原理及應(yīng)用》期末課程設(shè)計(jì)計(jì)算器模擬系統(tǒng)

數(shù)理與信息工程學(xué)院?jiǎn)纹瑱C(jī)原理及應(yīng)用期末課程設(shè)計(jì)計(jì)算器模擬系統(tǒng) 數(shù)理與信息工程學(xué)院?jiǎn)纹瑱C(jī)原理及應(yīng)用期末課程設(shè)計(jì) 題 目: 計(jì)算器模擬系統(tǒng) 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù)(專升本) 班 級(jí): 07計(jì)專升本 姓 名: 學(xué) 號(hào): 指導(dǎo)老師: 成 績(jī): ( 2008.6 )目 錄 第一節(jié) 引 言21.1 AT89C51單片機(jī)介紹21.2 LED數(shù)碼管顯示器概述51.3 輸入設(shè)備鍵盤的簡(jiǎn)述6第二節(jié) 系統(tǒng)總體方案及硬件設(shè)計(jì)72.1 設(shè)計(jì)要求72.2 設(shè)計(jì)方案72.3 硬件系統(tǒng)設(shè)計(jì)72.3.1時(shí)鐘電路設(shè)計(jì)72.3.2復(fù)位電路82.3.3顯示驅(qū)動(dòng)電路82.3.4蜂鳴器提示9第三節(jié) 軟件設(shè)計(jì)103.1鍵盤的掃描103.2按鍵的處理113.3 動(dòng)態(tài)數(shù)碼顯示12第四節(jié) Proteus軟件仿真134.1 Proteus ISIS簡(jiǎn)介134.2 Proteus工作過程134.2.1加法演示結(jié)果144.2.2減法演示結(jié)果144.2.3乘法演示結(jié)果154.2.4除法演示結(jié)果16結(jié) 束 語27參考文獻(xiàn)28計(jì)算器模擬系統(tǒng)數(shù)理與信息工程學(xué)院 07計(jì)算機(jī)專升本 指導(dǎo)教師: 第一節(jié) 引 言 本設(shè)計(jì)是一個(gè)計(jì)算器模擬系統(tǒng),可以實(shí)現(xiàn)加減乘除的運(yùn)算以及對(duì)計(jì)算器的數(shù)字信息的輸入和運(yùn)算結(jié)果并且顯示在相應(yīng)的LED上,輸入完畢要求有聲音提示。對(duì)于計(jì)算器模擬系統(tǒng)的實(shí)現(xiàn),很多種語言都可以實(shí)現(xiàn),但C語言是我們學(xué)到的一種高級(jí)語言程序,用它來實(shí)現(xiàn)程序較為簡(jiǎn)單,易于實(shí)現(xiàn)。又由于要求模擬的計(jì)算器顯示8位數(shù)字,所以采用八位LED動(dòng)態(tài)顯示,為了簡(jiǎn)化線路采用以軟件為主的接口方法,即不使用專門的硬件譯碼器,而采用軟件程序進(jìn)行譯碼。輸出采用動(dòng)態(tài)掃描的方式,每次中斷時(shí)間一到,選通所要顯示那一個(gè)的L ED ,并對(duì)其送相應(yīng)的二進(jìn)制代碼,使其顯示一位字符。中斷時(shí)間很短,人眼分辨不出,所以可以實(shí)現(xiàn)數(shù)字一起顯示出來由于輸入采用4X4矩陣式鍵盤,所以本設(shè)計(jì)避免了I/O口擴(kuò)展使程序簡(jiǎn)化。對(duì)于鍵盤為了消除抖動(dòng),需要進(jìn)行延遲,再判斷,確實(shí)有鍵按下后,可以根據(jù)該行不同的值用選擇分支語句進(jìn)行相應(yīng)的操作。 八個(gè)引腳用來掃描鍵盤的輸入,八個(gè)引腳用來驅(qū)動(dòng)八位LED顯示,八個(gè)引腳用作八位LED的位選信號(hào)。當(dāng)顯示器輸出大于八位時(shí),可以在剩下的I/O口中任意選一個(gè)用來使一揚(yáng)聲器發(fā)出聲音表示輸出超出預(yù)定的范圍。本設(shè)計(jì)實(shí)現(xiàn)功能:(1)計(jì)算器最多只能顯示8位數(shù)字,開機(jī)運(yùn)行時(shí),只有數(shù)碼管最低位顯示為“0”,其余位全部不顯示;(2)具有44鍵盤,分別表示09、/ 、和清零鍵CL,輸入的數(shù)字從設(shè)計(jì)的鍵盤輸入;(3)第一次按下時(shí),顯示“D1”;第二次按下時(shí),顯示“D1D2”;第三次按下時(shí),顯示“D1D2D3”,8個(gè)全顯示完畢,再按下按鍵下時(shí),發(fā)出“嘀”提示音;(4)可以對(duì)計(jì)算結(jié)果小于256的兩個(gè)無符號(hào)數(shù)進(jìn)行加、減、乘、除運(yùn)算,并顯示計(jì)算結(jié)果。(5)結(jié)果溢出時(shí)發(fā)出“嘀”報(bào)警聲。1.1 AT89C51單片機(jī)介紹AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機(jī)。AT89C2051是一種帶2K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器的單片機(jī)。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除100次。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡(jiǎn)版本。AT89C單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。圖1-1 AT89C51結(jié)構(gòu)圖管腳說明:VCC:供電電壓。GND:接地。P0口:P0口為一個(gè)8位漏級(jí)開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口,如下表所示:口管腳 備選功能P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P3.2 /INT0(外部中斷0)P3.3 /INT1(外部中斷1)P3.4 T0(記時(shí)器0外部輸入)P3.5 T1(記時(shí)器1外部輸入)P3.6 /WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)P3.7 /RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。 RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。ALE/PROG:當(dāng)訪問外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí), ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。/PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。/EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。振蕩器特性:XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時(shí)鐘源驅(qū)動(dòng)器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時(shí)鐘信號(hào)要通過一個(gè)二分頻觸發(fā)器,因此對(duì)外部時(shí)鐘信號(hào)的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。芯片擦除:整個(gè)PEROM陣列和三個(gè)鎖定位的電擦除可通過正確的控制信號(hào)組合,并保持ALE管腳處于低電平10ms 來完成。在芯片擦操作中,代碼陣列全被寫“1”且在任何非空存儲(chǔ)字節(jié)被重復(fù)編程以前,該操作必須被執(zhí)行。此外,AT89C51設(shè)有穩(wěn)態(tài)邏輯,可以在低到零頻率的條件下靜態(tài)邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM,定時(shí)器,計(jì)數(shù)器,串口和中斷系統(tǒng)仍在工作。在掉電模式下,保存RAM的內(nèi)容并且凍結(jié)振蕩器,禁止所用其他芯片功能,直到下一個(gè)硬件復(fù)位為止。1.2 LED數(shù)碼管顯示器概述LED,發(fā)光二極管,是一種固態(tài)的半導(dǎo)體器件,它可以直接把電轉(zhuǎn)化為光。LED的心臟是一個(gè)半導(dǎo)體的晶片,晶片的一端附在一個(gè)支架上,一端是負(fù)極,另一端連接電源的正極,使整個(gè)晶片被環(huán)氧樹脂封裝起來。半導(dǎo)體晶片由兩部分組成,一部分是P型半導(dǎo)體,在它里面空穴占主導(dǎo)地位,另一端是N型半導(dǎo)體,在這邊主要是電子。但這兩種半導(dǎo)體連接起來的時(shí)候,它們之間就形成一個(gè)“P-N結(jié)”。當(dāng)電流通過導(dǎo)線作用于這個(gè)晶片的時(shí)候,電子就會(huì)被推向P區(qū),在P區(qū)里電子跟空穴復(fù)合,然后就會(huì)以光子的形式發(fā)出能量,這就是LED發(fā)光的原理。而光的波長(zhǎng)也就是光的顏色,是由形成P-N結(jié)的材料決定的。LED的內(nèi)在特征決定了它是最理想的光源去代替?zhèn)鹘y(tǒng)的光源,它有著廣泛的用途。七段LED有7個(gè)發(fā)光二極管按”日”字形排列,所有二極管的陽極或陰極連在一起。當(dāng)某個(gè)發(fā)光二極管的陰極接低電平或陽極接高電平是時(shí),對(duì)應(yīng)二極管點(diǎn)亮,根據(jù)不同的組合。形成不同的字符0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f。 LED具有靜態(tài)和動(dòng)態(tài)顯示之分,動(dòng)態(tài)是一個(gè)字位一個(gè)字位各只LED輪流點(diǎn)亮,每個(gè)字位停留小于人的視覺,好像LED是點(diǎn)亮的。LCD顯示器有分段式和點(diǎn)陣式兩種結(jié)構(gòu)。LCD是一種被動(dòng)顯示器,由于它的功耗極低,抗干擾能力強(qiáng),因而在低功耗的單片機(jī)系統(tǒng)中大量使用。1.3 輸入設(shè)備鍵盤的簡(jiǎn)述鍵盤是有若干案件組成的開關(guān)矩陣,他能實(shí)現(xiàn)簡(jiǎn)單的人機(jī)對(duì)話。而與計(jì)算機(jī)系統(tǒng)的鍵盤有兩類:一類是編碼鍵盤,即鍵盤上比合建的識(shí)別由專門硬件來實(shí)現(xiàn);另一類是非編碼鍵盤,即鍵盤輸入及閉合鍵的識(shí)別由軟件來完成。圖1-2 輸入設(shè)備鍵盤圖第二節(jié) 系統(tǒng)總體方案及硬件設(shè)計(jì)2.1 設(shè)計(jì)要求設(shè)計(jì)具體要求:(1)要求模擬的計(jì)算器至少顯示8位數(shù)字,開機(jī)運(yùn)行時(shí),只有數(shù)碼管最低位顯示為“0”,其余位全部不顯示;(2)設(shè)計(jì)44鍵盤,分別表示09、/ 、和清零鍵CL,輸入的數(shù)字從設(shè)計(jì)的鍵盤輸入;(3)第一次按下時(shí),顯示“D1”;第二次按下時(shí),顯示“D1D2”;第三次按下時(shí),顯示“D1D2D3”,8個(gè)全顯示完畢,再按下按鍵下時(shí),給出“嘀”提示音;(4)可以對(duì)計(jì)算結(jié)果小于256的兩個(gè)無符號(hào)數(shù)進(jìn)行加法運(yùn)算,并顯示計(jì)算結(jié)果。對(duì)于、/、和的運(yùn)算為提高部分;(5)編寫程序,用proteus軟件進(jìn)行仿真。報(bào)告中給出操作過程及運(yùn)行效果圖。2.2 設(shè)計(jì)方案(1)I/O口擴(kuò)展問題本次設(shè)計(jì)要用到8個(gè)口作為輸出顯示LED的位選通信號(hào),8個(gè)口用作LED的驅(qū)動(dòng)而對(duì)于16個(gè)輸入鍵,可以用矩陣式4X4鍵盤僅用8個(gè)口來實(shí)現(xiàn),這樣可以節(jié)省I/O口,不過需要對(duì)各個(gè)鍵盤進(jìn)行動(dòng)態(tài)掃描。另外,還需要一個(gè)口作為輸入大于8位時(shí)的報(bào)警信號(hào)。這樣,還會(huì)剩余一些個(gè)I/O口。小于AT89C51的32個(gè)口,因此不需要進(jìn)行I/O口的擴(kuò)展。(2)語言的選擇根據(jù)設(shè)計(jì)要求需完成加減乘除的算術(shù)運(yùn)算,若使用匯編語言來編程,語句可能會(huì)較多而且比較復(fù)雜,編起來會(huì)不大方便。而采用現(xiàn)在比較流行的C語言來編寫會(huì)比較方便。2.3 硬件系統(tǒng)設(shè)計(jì)2.3.1時(shí)鐘電路設(shè)計(jì)本設(shè)計(jì)采用內(nèi)部時(shí)鐘產(chǎn)生方式。內(nèi)部振蕩方式所得的時(shí)鐘信號(hào)比較穩(wěn)定。在XTAL1和XTAL2兩端跨接晶體或陶瓷諧振器,與內(nèi)部反相器構(gòu)成穩(wěn)定的自激振蕩器。晶振選用的是12MHZ的內(nèi)部振蕩方式,電路如圖:電容器C1,C2起穩(wěn)定振蕩頻率,快速起振的作用,電容值取33P。 圖2-1 內(nèi)部振蕩結(jié)構(gòu)圖2.3.2復(fù)位電路采用上電+按鍵復(fù)位電路如下,上電后,由于電容充電,使RST持續(xù)一段高電平時(shí)間。當(dāng)單片機(jī)已在運(yùn)行之中時(shí),按下復(fù)位鍵也能使用使RST持續(xù)一段時(shí)間的高電平,從而實(shí)現(xiàn)上電加開關(guān)復(fù)位的操作。C3選擇30uF,R2選擇10K。這不僅能使單片機(jī)復(fù)位,而且還能使單片機(jī)的外圍芯片也同時(shí)復(fù)位。圖2-2 復(fù)位電路圖2.3.3顯示驅(qū)動(dòng)電路數(shù)碼管發(fā)光需要一定的電流,但單片機(jī)本身不可能提供足夠的電流,即拉電流和灌電流不能滿足要求,所以想要數(shù)碼管正常發(fā)光,就要加適當(dāng)?shù)尿?qū)動(dòng)電路。首先考慮數(shù)碼管的段碼輸出端,單片機(jī)的P0口可帶8個(gè)TTL負(fù)載,而其他的I/O口只能帶4個(gè)TTL負(fù)載,所以采用P0口作數(shù)碼管的段碼輸出端,但P0口是集電極開路輸出,要想輸出拉電流,必須加上拉電阻,提高驅(qū)動(dòng)能力,電路如圖所示。圖2-3 顯示驅(qū)動(dòng)電路圖2.3.4蜂鳴器提示在89s52的p3.6連一個(gè)蜂鳴器,在輸入8位數(shù)后,再輸入數(shù)時(shí),從p3.6腳輸入一低電平,并延時(shí)一定時(shí)間,蜂鳴器發(fā)出一“嘀”的聲音,提醒使用者輸入也達(dá)8位數(shù)。為限制電流,在電路中加一限流電阻。圖2-4 蜂鳴器電路圖第三節(jié) 軟件設(shè)計(jì)3.1鍵盤的掃描所有列鍵盤送高電平逐行送底電平進(jìn)行掃描是達(dá)姆否達(dá)姆進(jìn)行按鍵處理否達(dá)姆是達(dá)姆某列值為低電平該列值仍為低電平開始延時(shí) 圖3-1 鍵盤掃描流程圖對(duì)鍵盤的識(shí)別可以對(duì)鍵盤所有列送高電平1,然后逐行送低電平,并判斷列的值是否全為高電平,若不是說明該行有鍵按下,為了消除抖動(dòng),需要進(jìn)行一延遲環(huán)節(jié),再判斷,確實(shí)有鍵按下后,可以根據(jù)該行不同的值用選擇分支語句進(jìn)行相應(yīng)的操作。3.2按鍵的處理數(shù)值處理存儲(chǔ)并等待第二個(gè)操作數(shù)否否顯示并存儲(chǔ)數(shù)據(jù)運(yùn)算并顯示清零清零鍵 為零第一個(gè)按鍵操作數(shù)有有效鍵按下等于鍵清零是是是是否否否圖3-2 鍵盤處理流程圖當(dāng)有有效鍵按下后,需要對(duì)它進(jìn)行一系列判斷和處理。3.3 動(dòng)態(tài)數(shù)碼顯示數(shù)碼管采取的動(dòng)態(tài)掃描,每一位數(shù)碼管被點(diǎn)亮一小段時(shí)間,并且每只有一個(gè)被點(diǎn)亮次,就又熄滅,但當(dāng)掃描頻率大于一定時(shí),人眼就不能分辨出閃爍的現(xiàn)象,看起來就像一直被點(diǎn)亮,若掃描頻率太低,就會(huì)出現(xiàn)閃爍現(xiàn)象。第四節(jié) Proteus軟件仿真4.1 Proteus ISIS簡(jiǎn)介Proteus的ISIS是一款Labcenter出品的電路分析實(shí)物仿真系統(tǒng),可仿真各種電路和IC,并支持單片機(jī),元件庫(kù)齊全,使用方便,是不可多得的專業(yè)的單片機(jī)軟件仿真系統(tǒng)。該軟件的特點(diǎn): 全部滿足我們提出的單片機(jī)軟件仿真系統(tǒng)的標(biāo)準(zhǔn),并在同類產(chǎn)品中具有明顯的優(yōu)勢(shì)。具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)的仿真、RS一232動(dòng)態(tài)仿真、1 C調(diào)試器、SPI調(diào)試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號(hào)發(fā)生器等。 目前支持的單片機(jī)類型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各種外圍芯片。 支持大量的存儲(chǔ)器和外圍芯片??傊撥浖且豢罴瘑纹瑱C(jī)和SPICE分析于一身的仿真軟件,功能極其強(qiáng)大 ,可仿真51、AVR、PIC。4.2 Proteus工作過程單擊屏幕左下方的“開始”“程序”“Proteus 7 Professional” “ISIS 7 Professional”,出現(xiàn)如圖所示屏幕,表明進(jìn)入Proteus ISIS集成環(huán)境。圖4-1 Proteus界面圖4.2.1加法演示結(jié)果在鍵盤上依次按下如圖所示:圖4-2-1 按111LED顯示圖按下“+”號(hào)鍵后屏幕顯示如圖所示:圖4-2-2 按“+”號(hào)LED顯示圖在鍵盤上依次按下111 LED顯示如圖所示:圖4-2-3 按111LED顯示圖按下“=”號(hào)鍵后屏幕顯示正確結(jié)果222如圖所示:圖4-2-4 按“=”號(hào)111LED顯示圖4.2.2減法演示結(jié)果在鍵盤上依次按下87LED顯示如圖所示:圖4-2-5 按下87LED顯示圖按下“-”號(hào)鍵后屏幕顯示如圖所示:圖4-2-6 按“-”號(hào)LED顯示圖在鍵盤上依次按下32 LED顯示如圖所示:圖4-2-7 按下32LED顯示圖按下“=”號(hào)鍵后屏幕顯示正確結(jié)果55如圖所示:圖4-2-8 按“=”號(hào)LED顯示圖4.2.3乘法演示結(jié)果在鍵盤上依次按下35LED顯示如圖所示:圖4-2-9 按下35LED顯示圖按下“”號(hào)鍵后屏幕顯示如圖所示:圖4-2-10 按 “X”號(hào)LED顯示圖在鍵盤上依次按下12LED顯示如圖所示:圖4-2-11 按下12LED顯示圖按下“=”號(hào)鍵后屏幕顯示正確結(jié)果420如圖所示:圖4-2-12 按“=”號(hào)LED顯示圖4.2.4除法演示結(jié)果在鍵盤上依次按下62LED顯示如圖所示:圖4-2-13 按下62LED顯示圖按下“”號(hào)鍵后屏幕顯示如圖所示:圖4-2-14 按“”號(hào)LED顯示圖在鍵盤上依次按下2LED顯示如圖所示:圖4-2-15 按下2LED顯示圖按下“=”號(hào)鍵后屏幕顯示正確結(jié)果31如圖所示:圖4-2-16 按“=”號(hào)LED顯示圖系統(tǒng)具體代碼如下:#include<reg51.h>#include<absacc.h>sbit P1_0=P10;sbit P3_5=P35;sbit P3_6=P36;sbit P3_7=P37;sbit P3_4=P34;unsigned int num0,result;unsigned int number,num1;unsigned char code dispcode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00;unsigned char code dispbitcode=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;unsigned char dispbuf8=0,16,16,16,16,16,16,16;unsigned char disp8=0,16,16,16,16,16,16,16;unsigned char dispbitcount;unsigned char temp;unsigned char i,j;unsigned char key;unsigned char keypres;unsigned char yunsuanfu; /*運(yùn)算標(biāo)志符*/bit alarmflag; /*溢出報(bào)警標(biāo)識(shí)符*/bit eq; void rresult() /*拆分result并送入顯示數(shù)組*/ i=0;number=result; if(number<0) alarmflag=1; else for(i=0;i<9;i+) if(number=0) break; else dispbufi=number%10; number/=10; /*運(yùn)算num1值*/unsigned long int calcul() switch(yunsuanfu) case 1:result+=num1;return(result);break; case 2:result-=num1;return(result);break; case 3:result*=num1;return(result);break; case 4:result/=num1;return(result);break; default:yunsuanfu=0; /*/unsigned long int num1process(unsigned char *p,unsigned char count) num0=*p; while(count-1>0) for(i=0;i<count-1;i+) *(p+count-1)=(*(p+count-1)*10; num0+=*(p+count-1); count-; return(num0);/*/void reset(void) for(i=0;i<8;i+) dispbufi=dispi; keypres=0;/*/void change(unsigned char *p,unsigned char count) while(count>0) *(p+count)=*(p+count-1); count-; dispbuf0=key; /*中斷動(dòng)態(tài)顯示LED*/void t0(void) interrupt 1 TH0=(65536-4000) / 256; TL0=(65536-4000) % 256; P2=dispbitcodedispbitcount; P0=dispcodedispbufdispbitcount; dispbitcount+; if (dispbitcount=8) dispbitcount=0; if (alarmflag=1) for(i=0;i<50;i+) P1_0=P1_0; for(j=0;j<50;j+); alarmflag=0;void main(void) TMOD=0x01; TH0=(65536-3000) / 256; TL0=(65536-3000) % 256; TR0=1; ET0=1; EA=1; /*掃描1*/ while(1) P3=0xff; P3_4=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i>0;i-) for(j=100;j>0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=7; break; case 0x0d: key=8; break; case 0x0b: key=9; break; case 0x07: key=10; break; /*加法*/ if (key=10) yunsuanfu=1; result=num1process(dispbuf,keypres); reset(); if (key>=7&&key<10) keypres+; if(keypres=1) dispbuf0=key; else if(keypres<9) change(dispbuf,keypres); else if(keypres>8) alarmflag=1; temp=P3; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; P3=0xff; /*掃描2*/ P3_5=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i>0;i-) for(j=100;j>0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=4; break; case 0x0d: key=5; break; case 0x0b: key=6; break; case 0x07: key=11; break; if(key=11) /*減法*/ yunsuanfu=2; result=num1process(dispbuf,keypres); reset(); if (key>=4) && (key<7) keypres+; if(keypres=1) dispbuf0=key; else if(keypres<9) change(dispbuf,keypres); else if(keypres>8) alarmflag=1; temp=P3; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; P3=0xff; /*掃描3*/ P3_6=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i>0;i-) for(j=100;j>0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=1;break; case 0x0d: key=2; break; case 0x0b: key=3; break; case 0x07: key=12;break; /*乘法*/ if(key=12)yunsuanfu=3; result=num1process(dispbuf,keypres); reset(); if (key>=1) && (key<4) keypres+; if(keypres=1) dispbuf0=key; else if(keypres<9) change(dispbuf,keypres); else if(keypres>=9) alarmflag=1; temp=P3; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; P3=0xff; /*掃描4*/ P3_7=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i>0;i-) for(j=100;j>0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=0; break; case 0x0d: key=13; break; case 0x0b: key=14; break; case 0x07: key=15; break; if(key=15) /*除法*/ yunsuanfu=4; result=num1process(dispbuf,keypres); reset(); if(key=14) reset(); eq=0;if(key=13) if(eq!=1) num1=num1process(dispbuf,keypres); reset(); calcul(); rresult(); if(key=0&&keypres!=0) keypres+; if(keypres<9) change(dispbuf,keypres); if(keypres>8) alarmflag=1; temp=P3; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; 系統(tǒng)原理圖如下:圖4-2-17 系統(tǒng)原理圖結(jié) 束 語通過這次課程設(shè)計(jì),我對(duì)MCS-51單片機(jī)的學(xué)習(xí)有了進(jìn)一步的認(rèn)識(shí)。真正將課本上的理論知識(shí)聯(lián)系到了實(shí)際中。在這次設(shè)計(jì)中發(fā)現(xiàn)對(duì)單片機(jī)的硬件設(shè)計(jì),軟件設(shè)計(jì)掌握的深度不夠,但通過此次課程設(shè)計(jì),卻改變了很多,首先對(duì)于硬件電路的工作原理有了進(jìn)一步的學(xué)習(xí),同樣就有了進(jìn)一步的認(rèn)識(shí);其次軟件方面,在程序的設(shè)計(jì),程序的調(diào)試方面都學(xué)到了很多東西,學(xué)會(huì)了 利用WAVE6000系統(tǒng)調(diào)試程序,檢查其中的錯(cuò)誤并做相應(yīng)的修改,再將它連到電路中對(duì)它的實(shí)際運(yùn)行的結(jié)果有個(gè)直觀的了解。也通過查閱大量的書籍 進(jìn)一步提高了單片機(jī)語言編程的掌握,得到靈活的運(yùn)用。也在查閱資料中學(xué)習(xí)了好多他們的思路和方法。在已度過的大學(xué)的時(shí)間里我們大多數(shù)接觸的是專業(yè)基礎(chǔ)課。我們?cè)谡n堂上掌握的僅僅是專業(yè)基礎(chǔ)課的理論面,如何去鍛煉我們的實(shí)踐面?如何把我們所學(xué)到的專業(yè)基礎(chǔ)理論知識(shí)用到實(shí)踐中去呢?我想單片機(jī)課程設(shè)計(jì)就為我們提供了良好的實(shí)踐平臺(tái)。在剛開始的時(shí)間余老師就和我們講了許多單片機(jī)運(yùn)用于實(shí)際方面的例的,那時(shí)我就被單片機(jī)牢牢吸引住,打算這學(xué)期一定要學(xué)好也像余老師那樣能作品,但到這次課程設(shè)計(jì)中我發(fā)現(xiàn)理論與實(shí)踐之間真的距離很大,編寫的程序從理論上沒有錯(cuò)誤,可就是不能運(yùn)行。雖然我用的是PROTUES仿真但我還是要去考慮一些關(guān)硬件的東西,這樣才能使自己的軟件程序與硬件配套,然后做出一份合格的作品。一開始編寫的程序混亂,缺乏邏輯性,甚至自己調(diào)試時(shí)都覺得很費(fèi)勁。通過翻閱資料才有所了解,后來通過老師的幫助,終于做出了一份相對(duì)比較滿意的程序。雖然我做的程序極其簡(jiǎn)單,但我實(shí)際收獲的卻遠(yuǎn)遠(yuǎn)不止這些。參考文獻(xiàn)1 張?chǎng)危A臻,陳書謙.單片機(jī)原理及應(yīng)用.電子工業(yè)出版社,20062 周明德.微機(jī)計(jì)算機(jī)系統(tǒng)原理及應(yīng)用(第五版).清華大學(xué)出版社,20073 朱定華.單片機(jī)原理與接口技術(shù)(M).電子工業(yè)出版社,2001,44 劉源,李勛 單片機(jī)實(shí)用教程.北京航空航天大學(xué)出版社5 余發(fā)山.單片機(jī)原理及應(yīng)用技術(shù).中國(guó)礦業(yè)大學(xué)出版社,20046 康華光.電子技術(shù)基礎(chǔ). 高等教育出版社 7 呂淑萍.微型計(jì)算機(jī)原理及應(yīng)用.哈爾濱工程大學(xué)出版社, 2004 8 陸紅偉.微機(jī)原理實(shí)驗(yàn)與課程設(shè)計(jì)指導(dǎo)書.中國(guó)電力出版社,2006 9 沙占友.單片機(jī)外圍電路設(shè)計(jì).電子工業(yè)出版社,200310 趙亮等.單片機(jī)c語言編程與實(shí)例.人民郵電出版社 25

注意事項(xiàng)

本文(《單片機(jī)原理及應(yīng)用》期末課程設(shè)計(jì)計(jì)算器模擬系統(tǒng))為本站會(huì)員(仙***)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!