基于單片機(jī)的簡易計(jì)算器設(shè)計(jì)_第1頁
基于單片機(jī)的簡易計(jì)算器設(shè)計(jì)_第2頁
基于單片機(jī)的簡易計(jì)算器設(shè)計(jì)_第3頁
基于單片機(jī)的簡易計(jì)算器設(shè)計(jì)_第4頁
基于單片機(jī)的簡易計(jì)算器設(shè)計(jì)_第5頁
已閱讀5頁,還剩40頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

目錄引言 1第一章設(shè)計(jì)原理及規(guī)定 21.1設(shè)計(jì)方案的擬定 21.2系統(tǒng)的設(shè)計(jì)方案 21.3系統(tǒng)的設(shè)計(jì)規(guī)定 2第二章硬件模塊設(shè)計(jì) 42.1單片機(jī)AT89C51 42.1.1AT89C51芯片的特點(diǎn) 52.1.2管腳說明 52.1.3振蕩器特性 72.1.4芯片擦除 72.2鍵盤控制模塊 72.2.1矩陣鍵盤的工作原理 82.2.2鍵盤電路重要器件介紹 82.3LCD顯示模塊 102.3.1顯示電路 112.3.2LCD1602重要技術(shù)參數(shù) 112.3.3引腳功能說明 112.4運(yùn)算模塊(單片機(jī)控制) 12第三章軟件設(shè)計(jì) 143.1功能介紹 143.2系統(tǒng)流程圖 143.3程序 16第四章系統(tǒng)調(diào)試 174.1軟件介紹 174.1.1KeiluVision2仿真軟件簡介 174.1.2protues簡介 174.2軟件調(diào)試 184.2.1軟件分析及常見故障 194.2.2仿真結(jié)果演示 204.3硬件調(diào)試 21結(jié)束語 23參考文獻(xiàn) 24附錄 25致謝 36引言計(jì)算工具最早誕生于中國,中國古代最早采用的一種計(jì)算工具叫籌策,也被叫做算籌。這種算籌多用竹子制成,也有用木頭,獸骨充當(dāng)材料的,約二百七十枚一束,放在布袋里可隨身攜帶。此外直到今天仍在使用的珠算盤,是中國古代計(jì)算工具領(lǐng)域中的另一項(xiàng)發(fā)明,明代時的珠算盤已經(jīng)與現(xiàn)代的珠算盤幾乎相同。17世紀(jì)初,西方國家的計(jì)算工具有了較大的發(fā)展,英國數(shù)學(xué)家納皮爾發(fā)明的“納皮爾算籌”,英國牧師奧卻德發(fā)明了圓柱型對數(shù)計(jì)算尺,這種計(jì)算尺不僅能做加、減、乘、除、乘方和開方運(yùn)算,甚至可以計(jì)算三角函數(shù)、指數(shù)函數(shù)和對數(shù)函數(shù)。這些計(jì)算工具不僅帶動了計(jì)算器的發(fā)展,也為現(xiàn)代計(jì)算器發(fā)展奠定了良好的基礎(chǔ),成為現(xiàn)代社會應(yīng)用廣泛的計(jì)算工具。1642年,年僅19歲的法國偉大科學(xué)家帕斯卡引用算盤的原理,發(fā)明了第一部機(jī)械式計(jì)算器,在他的計(jì)算器中有一些互相聯(lián)鎖的齒輪,一個轉(zhuǎn)過十位的齒輪會使另一個齒輪轉(zhuǎn)過一位,人們可以像撥電話號碼盤那樣,把數(shù)字撥進(jìn)去,計(jì)算結(jié)果就會出現(xiàn)在另一個窗口中,但是它只能做加減運(yùn)算。1694年,萊布尼茲在德國將其改善成可以進(jìn)行乘除的計(jì)算。此后,一直到20世紀(jì)50年代末才有電子計(jì)算器的出現(xiàn)。第一章設(shè)計(jì)原理及規(guī)定1.1設(shè)計(jì)方案的擬定本設(shè)計(jì)是以單片機(jī)AT89C51為核心的簡易計(jì)算器設(shè)計(jì),要通過芯片AT89C51實(shí)現(xiàn)計(jì)算器程序運(yùn)營來完畢加、減、乘和除的簡樸計(jì)算功能。本設(shè)計(jì)運(yùn)算模塊由AT89C51實(shí)現(xiàn),數(shù)據(jù)輸入模塊由4*4矩陣鍵盤電路實(shí)現(xiàn),輸出數(shù)據(jù)模塊由LCD顯示電路實(shí)現(xiàn),再外加一個時鐘電路和一個復(fù)位電路完畢整個簡易計(jì)算器的設(shè)計(jì)。1.2系統(tǒng)的設(shè)計(jì)方案本設(shè)計(jì)由以下幾部分組成:AT89C51單片機(jī)系統(tǒng)(運(yùn)算模塊)、鍵盤電路、顯示電路、時鐘電路和復(fù)位電路構(gòu)成,計(jì)算器系統(tǒng)框圖如圖1-1所示。圖1-1計(jì)算器系統(tǒng)框圖1.3系統(tǒng)的設(shè)計(jì)規(guī)定為了更好地實(shí)現(xiàn)系統(tǒng)的功能,硬件電路的設(shè)計(jì)應(yīng)當(dāng)遵循以下原則:1、優(yōu)化硬件電路采用軟件設(shè)計(jì)與硬件設(shè)計(jì)相結(jié)合的方法。盡管采用軟件來實(shí)現(xiàn)硬件系統(tǒng)的功能時,也許響應(yīng)的時間會比單純使用硬件時長,并且還要占用微解決器(MCU)的時間;但是,用軟件實(shí)現(xiàn)硬件的功能可以簡化硬件結(jié)構(gòu),提高電路的可靠性。所以,在設(shè)計(jì)本系統(tǒng)的時候,在滿足可靠性和實(shí)時性的前提下,盡也許地通過軟件來實(shí)現(xiàn)硬件功能。2、可靠性及抗干擾設(shè)計(jì)根據(jù)可靠性設(shè)計(jì)理論,系統(tǒng)所用芯片數(shù)量越少,系統(tǒng)的平均無端障時間越長。并且,所用芯片數(shù)量越少,地址和數(shù)據(jù)總線在電路板上受干擾的也許性也就越小。因此,系統(tǒng)的設(shè)計(jì)思想是在滿足功能的情況下爭取較少數(shù)量的芯片。3、靈活的功能擴(kuò)展功能擴(kuò)展是否靈活是衡量一個系統(tǒng)優(yōu)劣的重要指標(biāo)之一。一次設(shè)計(jì)往往不能完全考慮到系統(tǒng)的各個方面,系統(tǒng)需要不斷完善以及進(jìn)行功能升級。進(jìn)行功能擴(kuò)展時,應(yīng)當(dāng)在原有設(shè)計(jì)的基礎(chǔ)上,通過修改軟件程序和少量硬件完畢。對于本系統(tǒng)而言,就是規(guī)定在系統(tǒng)硬件不變的情況下,可以通過修改軟件程序,完畢功能的升級和擴(kuò)展。根據(jù)提出的系統(tǒng)設(shè)計(jì)方案,結(jié)合以上三條原則,擬定了系統(tǒng)硬件的設(shè)計(jì)。計(jì)算器重要由以下一些功能模塊組成:非編碼鍵盤模塊、運(yùn)算模塊(單片機(jī)內(nèi)部)和LCD液晶顯示模塊等。該系統(tǒng)的硬件設(shè)計(jì)采用了模塊化的設(shè)計(jì)方法。AT89C51單片機(jī)、LCD液晶顯示屏顯示電路和鍵盤電路是整個電路的核心,它們能實(shí)現(xiàn)系統(tǒng)的功能規(guī)定。簡易計(jì)算器重要涉及:鍵盤電路、運(yùn)算電路和輸出顯示電路。

第二章硬件模塊設(shè)計(jì)在本設(shè)計(jì)中重要用到的硬件:單片機(jī)AT89C51、液晶顯示屏LCD1602、4*4矩陣鍵盤。單片機(jī)AT89C51的硬件資源分派:(1)P3口:作為輸入口,與鍵盤連接,實(shí)現(xiàn)數(shù)據(jù)的輸入;(2)P0、P2口:作為輸出口(P2口為高位,P0口為低位),控制LCD液晶顯示屏顯示數(shù)據(jù)的結(jié)果;(3)P1口和部分P3口:作為液晶顯示屏LCD1602顯示輸出。2.1單片機(jī)AT89C51本設(shè)計(jì)所用單片機(jī)采用AT89C51單片機(jī),它兼容于MCS-51系列單片機(jī),并且具有1000次可擦寫的FLASHMEMORY,方便于系統(tǒng)的開發(fā)以及參數(shù)的修改。盡管它是8位機(jī),但它的解決精度完全滿足系統(tǒng)的設(shè)計(jì)規(guī)定。該種單片機(jī)的最高頻率可達(dá)成24MHz。在12MHz時,其解決速度完全達(dá)成設(shè)計(jì)規(guī)定,AT89C51的實(shí)物圖及引腳圖如圖2-1所示。圖2-1單片機(jī)AT89C51實(shí)物圖及引腳圖2.1.1AT89C51芯片的特點(diǎn)AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低電壓,高性能CMOS8位微解決器,俗稱單片機(jī),他的特點(diǎn)如下:1、與MCS-51兼容2、1000寫/擦循環(huán)3、4K字節(jié)可編程閃爍存儲器4、數(shù)據(jù)保存時間:20235、全靜態(tài)工作:0Hz-24Hz6、三級程序存儲器鎖定7、128*8位內(nèi)部RAM8、32可編程I/O線9、兩個16位定期器/計(jì)數(shù)器10、5個中斷源11、可編程串行通道12、低功耗的閑置和掉電模式13、片內(nèi)振蕩器和時鐘電路2.1.2管腳說明VCC:供電電壓。GND:接地。P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸取8TTL門電流。當(dāng)P0口的管腳第一次寫“1”時,被定義為高阻輸入。P0口可以用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FLASH編程時,P0口作為原碼輸入口,當(dāng)FLASH進(jìn)行校驗(yàn)時,P0口輸出原碼,此時P0口外部必須被拉高。P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接受輸出4TTL門電流。P1口管腳寫入“1”后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時,P1口作為第八位地址接受。P2口:P2口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P2口緩沖器可接受和輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。當(dāng)作為輸出時,P2口的管腳被外部拉低,將輸出電流,這是由于內(nèi)部上拉的緣故。當(dāng)P2口用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,P2口輸出地址的高八位。在給出地址“1”時,它運(yùn)用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時接受高八位地址信號和控制信號。P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接受和輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL),這是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口。P3口管腳備選功能如下:P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)P3.2/INT0(外部中斷0)P3.3/INT1(外部中斷1)P3.4T0(記時器0外部輸入)P3.5T1(記時器1外部輸入)P3.6/WR(外部數(shù)據(jù)存儲器寫選通)P3.7/RD(外部數(shù)據(jù)存儲器讀選通)P3口同時為閃爍編程和編程校驗(yàn)接受一些控制信號。RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機(jī)器周期的高電平時間。ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的低位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定期目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想嚴(yán)禁ALE的輸出可在SFR8EH地址上置0。此時,ALE只有在執(zhí)行MOVX時ALE才起作用。此外,該引腳被略微拉高。假如微解決器在外部執(zhí)行狀態(tài)ALE嚴(yán)禁,置位無效。/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取值期間,每個機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。/EA/VPP:當(dāng)/EA保持低電平時,則在此期間只管外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器,注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此時只管內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。2.1.3振蕩器特性XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。晶體振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅(qū)動器件,XTAL2應(yīng)不接。輸入至內(nèi)部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何規(guī)定,但必須保證脈沖的高低電平規(guī)定的寬度。2.1.4芯片擦除整個PEROM陣列和三個鎖定位的電擦除可通過對的的控制信號組合,并保持ALE管腳處在低電平10ms來完畢。在芯片擦操作中,代碼陣列全被寫“1”且在任何非空存儲字節(jié)被反復(fù)編程以前,該操作必須被執(zhí)行。此外,AT89C51設(shè)有穩(wěn)態(tài)邏輯,可以在低到零頻率的條件下表達(dá)靜態(tài)邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM、定期器、計(jì)數(shù)器、串口和中斷系統(tǒng)仍在工作。在掉電模式下,保存RAM的內(nèi)容并且凍結(jié)振蕩器,嚴(yán)禁所用其他芯片功能,直到下一個硬件復(fù)位為止。2.2鍵盤控制模塊計(jì)算器輸入數(shù)字和其他功能按鍵要用到很多按鍵,假如采用獨(dú)立按鍵的方式,在這種情況下,編程會很簡樸,但是會占用大量的I/O口資源,因此在很多情況下都不采用這種方式,而是采用矩陣鍵盤的方案。矩陣鍵盤采用四條I/O線作為行線,四條I/O線作為列線組成鍵盤,在行線和列線的每個交叉點(diǎn)上設(shè)立一個按鍵。這樣鍵盤上按鍵的個數(shù)就為4×4個。這種行列式鍵盤結(jié)構(gòu)能有效地提高單片機(jī)系統(tǒng)中I/O口的運(yùn)用率。2.2.1矩陣鍵盤的工作原理鍵盤可分為兩類:編碼鍵盤和非編碼鍵盤。編碼鍵盤是較多按鍵(20個以上)和專用驅(qū)動芯片的組合;當(dāng)按下某個按鍵時,它可以解決按鍵抖動、連擊等問題,直接輸出按鍵的編碼,無需系統(tǒng)軟件干預(yù)。通用計(jì)算機(jī)使用的鍵盤就是編碼鍵盤。在智能儀器中,使用并行接口芯片8279或串行接口HD7279均可以組成編碼鍵盤,同時還可以兼顧數(shù)碼管的顯示驅(qū)動,其相關(guān)的接口電路和接口軟件均可在芯片資料中得到。當(dāng)系統(tǒng)功能比較復(fù)雜,按鍵數(shù)量很多時,采用編碼鍵盤可以簡化軟件設(shè)計(jì)。而非編碼鍵盤成本低廉。從簡易和成本角度出發(fā),本設(shè)計(jì)選用的是非編碼鍵盤。如圖2-2所示。一般由16個鍵組成,在單片機(jī)中正好可以用一個P口實(shí)現(xiàn)16個按鍵功能,這種形式在單片機(jī)系統(tǒng)中也最常用。其矩陣圖所相應(yīng)的仿真圖如圖2-3所示。圖2-2矩陣鍵盤內(nèi)部電路圖圖2-3矩陣鍵盤布局圖2.2.2鍵盤電路重要器件介紹為了進(jìn)一步節(jié)省單片機(jī)I/O口資源,我們在設(shè)計(jì)中使用了MM74C922芯片。MM74C922是一款4*4鍵盤掃描IC,它可檢測到與之相連的4*4鍵盤的按鍵輸入,并通過數(shù)據(jù)輸出口將按鍵相應(yīng)的編碼輸出。其引腳圖如圖2-4所示。圖2-4MM74C922芯片引腳圖MM74C922引腳說明:(1)Y1-Y4(腳1-腳4):4*4鍵盤第一列至第四列。(2)X1-X4(腳11、10、8、7):4*4鍵盤第一行至第四行。(3)DOA-DOD(DataoutA-D,腳14-17):按鍵之BCD碼輸出,其中DOA為LSB,DOD為MSB。(4)VCC(腳18):電源腳,+3V至+15V(5)GND(腳9):接地管腳(6)OSC(Oscillator,腳5):鍵盤掃描電路之頻率所需外加電容的引腳。(7)KBM(KeyboardMask,腳6):內(nèi)部消除開關(guān)彈跳電路所外加電容的引腳。(8)OE(OutputEnable,腳13):芯片使能腳,接低電位可使芯片使能。(9)DA(DataAvailable,腳12):數(shù)據(jù)有效輸出腳。任一按鍵按下時,此腳位會輸出高電位,按鍵釋放后此腳又會恢復(fù)為低電位。如圖2-5所示,在本設(shè)計(jì)中,計(jì)算器輸入鍵盤的4條行線、4條列線分別連接到MM74C922的X1-X4、Y1-Y4引腳,MM74C922的數(shù)據(jù)輸出口與單片機(jī)的P2口相連,MM74C922的DA引腳通過一個非門連接到單片機(jī)的/INT0腳,當(dāng)MM74C922檢測到鍵盤輸入時,DA產(chǎn)生高電平,與之相連的/INT0檢測到低電平,給單片機(jī)一個中斷,單片機(jī)從P2口的低四位讀入鍵盤上按下的按鍵值。圖2-5鍵盤接口電路圖2.3LCD顯示模塊本設(shè)計(jì)采用LCD液晶顯示器來顯示輸入輸出數(shù)據(jù)。通過D0-D7引腳向LCD寫指令字或?qū)憯?shù)據(jù)以使LCD實(shí)現(xiàn)不同的功能或顯示相應(yīng)數(shù)據(jù)。LCD引腳圖如圖2-6所示。圖2-6LCD1602引腳圖LCD分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的比不帶背光的厚,在實(shí)際使用中是否帶背光并無多大差別,兩者尺寸差別如圖2-7所示。圖2-7LCD背光和不帶背光的尺寸對比圖2.3.1顯示電路當(dāng)系統(tǒng)需要顯示少量數(shù)據(jù)時,采用LCD液晶顯示屏進(jìn)行顯示是一種經(jīng)濟(jì)實(shí)用的方法。P1口作為液晶顯示的數(shù)據(jù)端口,P3.4-P3.6口作為其控制端口,控制LCD液晶顯示屏顯示輸出數(shù)據(jù)。顯示電路圖如圖2-8所示。圖2-8LCD液晶顯示電路2.3.2LCD1602重要技術(shù)參數(shù)顯示容量:16×2個字符芯片工作電壓:4.5—5.5V工作電流:2.0mA(5.0V)模塊最佳工作電壓:5.0V字符尺寸:2.95×4.35(W×H)mm2.3.3引腳功能說明LCD采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表2-1所示。表2-1引腳接口說明表編號符號引腳說明編號符號引腳說明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫選擇13D6數(shù)據(jù)6E使能信號14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負(fù)極第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度。第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器,低電平時選擇指令寄存器。第5腳:R/W為讀寫信號線,高電平時進(jìn)行讀操作,低電平時進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時可以讀忙信號,當(dāng)RS為高電平R/W為低電平時可以寫入數(shù)據(jù)。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負(fù)極。2.4運(yùn)算模塊(單片機(jī)控制)AT89C51單片機(jī)是在一塊芯片中集成了CPU、RAM、ROM、定期器/計(jì)數(shù)器和多功能I/O等一臺計(jì)算機(jī)所需要的基本功能部件。假如按功能劃分,它由如下功能部件組成,即微解決器(CPU)、數(shù)據(jù)存儲器(RAM)、程序存儲器(ROM/EPROM)、并行I/O口、串行口、定期器/計(jì)數(shù)器、中斷系統(tǒng)及特殊功能寄存器(SFR)。單片機(jī)是靠程序運(yùn)營的,并且可以修改。通過不同的程序?qū)崿F(xiàn)不同的功能,特別是一些特殊的功能,通過使用單片機(jī)編寫的程序可以實(shí)現(xiàn)高智能、高效率以及高可靠性!因此我們采用單片機(jī)作為計(jì)算器的重要功能部件,可以不久地實(shí)現(xiàn)運(yùn)算功能。此外系統(tǒng)還涉及時鐘電路和復(fù)位電路。

第三章軟件設(shè)計(jì)3.1功能介紹實(shí)際運(yùn)用中人們熟悉的計(jì)算器,其功能重要如下:1、鍵盤輸入;2、顯示數(shù)值;3、加、減、乘、除四則運(yùn)算;4、對錯誤輸入和輸出的控制及提醒。3.2系統(tǒng)流程圖在軟件設(shè)計(jì)中程序分別要完畢鍵盤輸入檢測、LCD初始化及顯示、算術(shù)運(yùn)算和錯誤解決及輸出等功能。對主程序進(jìn)行初始化,其他的程序選擇模塊式的方式。一方面對每個模塊進(jìn)行調(diào)試,當(dāng)模塊調(diào)試成功后,逐個地加入主程序中,最后完畢整個軟件部分的設(shè)計(jì)。系統(tǒng)流程圖如圖3-1所示。開始開始初始化參數(shù)初始化LCD顯示有鍵輸入?讀取鍵碼LCD顯示數(shù)字鍵清零鍵功能鍵狀態(tài)清零輸入數(shù)值數(shù)值送顯示緩沖YN根據(jù)上次功能鍵和輸入的數(shù)據(jù)計(jì)算結(jié)果結(jié)果送顯示緩沖本次功能鍵圖3-1系統(tǒng)流程圖3.3程序本設(shè)計(jì)程序采用C語言編程,程序分為多個模塊,由主程序、鍵值轉(zhuǎn)換和LCD系列程序等模塊組成。具體程序見附錄。

第四章系統(tǒng)調(diào)試4.1軟件介紹4.1.1KeiluVision2仿真軟件簡介KeiluVision2是德國Keil公司開發(fā)的基于Windows平臺的單片機(jī)集成開發(fā)環(huán)境,它包含一個高效的編譯器、一個項(xiàng)目管理器和一個MAKE工具。其中KeilC51是一種專門為單片機(jī)設(shè)計(jì)的高效率C語言編譯器,符合ANSI標(biāo)準(zhǔn),生成的程序代碼運(yùn)營速度極高,所需要的存儲器空間極小,完全可以與匯編語言媲美。KeiluVision2的界面如圖4-1所示,KeiluVision2允許同時打開、瀏覽多個源文獻(xiàn)。圖4-1KeiluVision2的界面4.1.2protues簡介protues軟件是英國Labcenterelectronics公司出版的EDA工具軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機(jī)及外圍器件。它是目前最佳的仿真單片機(jī)及外圍器件的工具。雖然目前國內(nèi)推廣剛起步,但已受到單片機(jī)愛好者、從事單片機(jī)教學(xué)的教師、致力于單片機(jī)開發(fā)應(yīng)用的科技工作者的青睞。Proteus是世界上著名的EDA工具(仿真軟件),從原理圖布圖、代碼調(diào)試到單片機(jī)與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計(jì),真正實(shí)現(xiàn)了從概念到產(chǎn)品的完整設(shè)計(jì)。它是目前世界上唯一將電路仿真軟件、PCB設(shè)計(jì)軟件和虛擬模型仿真軟件三合一的設(shè)計(jì)平臺,其解決器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2023年已經(jīng)增長了Cortex和DSP系列解決器,并連續(xù)增長其他系列解決器模型。在編譯方面,它也支持IAR、Keil和MPLAB等多種編譯器,界面圖如圖4-2所示。圖4-2protues界面圖4.2軟件調(diào)試4.2.1軟件分析及常見故障在本次設(shè)計(jì)中使用KeiluVision2和Proteus軟件仿真,其中使用KeiluVision2軟件匯編源程序,使用Proteus軟件對硬件電路進(jìn)行模擬。對的連接電路圖,使其能按照題目規(guī)定及設(shè)計(jì)初衷正常工作。從庫里對的拾取元器件,認(rèn)真合理地連線,做到不缺件,不缺線,選取合適的元件參考值,使其能正常工作。通過編譯,連接程序。使其生成.hex文獻(xiàn),并連入連好的Proteus圖中。測試該計(jì)算器是否能正常工作。若不能,一方面要檢查有沒有漏掉元器件,元器件是否都連接好。另一方面,要看元件各引腳是否都連接對的,有無接反的。最后要看元件的參考值是否選擇合理,電源電壓是否能帶動元器件正常工作。常見故障:1、邏輯錯誤:它是由設(shè)計(jì)錯誤或加工過程中的工藝性錯誤所導(dǎo)致的。這類錯誤涉及錯線、開路、短路等。2、元器件失效:有兩方面的因素:一是器件自身已損壞或性能不符合規(guī)定;二是組裝錯誤導(dǎo)致元件失效,如電解電容、集成電路安裝方向錯誤等。3、可靠性差:因其可靠性差的因素很多,如金屬化孔、接插件接觸不良會導(dǎo)致系統(tǒng)時好時壞,經(jīng)不起振動;走線和布局不合理也會引起系統(tǒng)可靠性差。4、電源故障:若樣機(jī)有電源故障,則加電后很容易導(dǎo)致器件損壞。電源故障涉及電壓值不符合設(shè)計(jì)規(guī)定,電源引線和插座不對,功率局限性,負(fù)載能力差等。調(diào)試方法:涉及多級調(diào)試和聯(lián)機(jī)調(diào)試。在調(diào)試過程中要針對也許出現(xiàn)的故障認(rèn)真分析,直至檢查出因素并排除。本次硬件調(diào)試過程中,對所出現(xiàn)的問題進(jìn)行了認(rèn)真的分析和改正,最后可以很好的達(dá)成設(shè)計(jì)規(guī)定的效果。系統(tǒng)仿真圖如圖4-3所示。圖4-3系統(tǒng)仿真圖4.2.2仿真結(jié)果演示下面以加、減、乘和除分別做仿真演示:(1)加法:以258和825作為加數(shù)和被加數(shù)運(yùn)算,結(jié)果為1083。加法仿真結(jié)果圖如圖4-4所示。圖4-4加法仿真結(jié)果圖(2)減法:以7654321和1234567作為被減數(shù)和減數(shù)運(yùn)算,結(jié)果為6419754。減法仿真結(jié)果圖如圖4-5所示。圖4-5減法仿真結(jié)果圖(3)乘法:以694和123作為乘數(shù)和被乘數(shù)運(yùn)算,結(jié)果為85362。乘法結(jié)果仿真圖如圖4-6所示。圖4-6乘法結(jié)果仿真圖(4)除法:以1250和5作為被除數(shù)和除數(shù)運(yùn)算,結(jié)果為250。除法結(jié)果仿真圖如圖4-7所示。圖4-7除法結(jié)果仿真圖由以上四種運(yùn)算結(jié)果可知軟件仿真均對的,沒有顯示錯誤。4.3硬件調(diào)試在protues里面把硬件圖畫好,把所有元器件的參數(shù)都設(shè)立好,程序在keil里面生成.hex文獻(xiàn),然后在protues里單片機(jī)芯片中導(dǎo)入此文獻(xiàn),運(yùn)營一切正常后開始準(zhǔn)備焊接硬件。在焊接硬件過程中一方面得準(zhǔn)備好所有必備的東西,比如所需元器件和焊接所用工具等。在焊接前應(yīng)先在面包板上把硬件插好調(diào)試,接通電源看能否顯示出結(jié)果,假如元器件都是好的并且結(jié)果可以顯示出,就可以焊接了。假如顯示不出來再檢查各個器件是否有損壞,并用萬用表挨個檢查,直至一切顯示正常再焊接。在焊接時要注意相鄰焊點(diǎn)不能粘在一起,連接線不能太長,并且注意焊點(diǎn)的虛焊、假焊。在使用電烙鐵時溫度不能太高也不能太低,一般在350度左右,溫度太低容易形成冷焊點(diǎn),太高則會燒壞電路板。電路板焊接好以后一方面測試一下各個元器件是否正常,焊點(diǎn)有無虛焊、連焊、假焊等現(xiàn)象,檢查沒有問題以后接通電源查看LCD顯示是否正常,假如一切顯示沒有問題把硬件妥善保管,防止不小心損壞。硬件電路實(shí)物圖如圖4-8所示。

圖4-8硬件電路實(shí)物圖

結(jié)束語通過這次簡易計(jì)算器的設(shè)計(jì),很大限度的提高了我的理解力和動手能力,也拓寬了知識面。在圖書館和網(wǎng)上查閱資料使我了解了更多的資料,也方便了我們以后的使用。在查詢的資料中讓我對單片機(jī)有了更進(jìn)一步的了解,能把學(xué)到的知識用活,而不只局限于理論方面。在硬件制作過程中,當(dāng)我把硬件都焊好以后接通電源LCD怎么都不顯示數(shù)字并且在很短的時間內(nèi)就會發(fā)熱,我查了焊接點(diǎn)和仿真圖都沒有問題,接著仔細(xì)查找了LCD顯示器各個管腳,發(fā)現(xiàn)兩個電壓管腳接反了,但在仿真時沒出現(xiàn)問題,而在實(shí)物中出現(xiàn)了問題,是由于仿真元件都是抱負(fù)化的,各個問題在實(shí)物中根據(jù)實(shí)際情況就會出現(xiàn)。編程時,充足使用了結(jié)構(gòu)化的思想。這樣一來,由于語句較少,程序調(diào)試也比較方便,功能模塊可以逐個地調(diào)試,充足體現(xiàn)了結(jié)構(gòu)化編程的優(yōu)勢。當(dāng)每個模塊都完畢時,將其功能互相整合就完畢了整體的設(shè)計(jì)。經(jīng)歷了從最初的不了解設(shè)計(jì)內(nèi)容到最后做出仿真結(jié)果的過程使我從主線上提高了對專業(yè)的結(jié)識及愛好,對于我們工科學(xué)生來說,學(xué)習(xí)了這些對我們以后工作有重大的影響。很感謝學(xué)校和老師給我們提供了這樣的平臺,能使我們的動手能力增強(qiáng)。感謝老師對我們提供的幫助。參考文獻(xiàn)[1]裴巖、劉利民單片機(jī)系統(tǒng)綜合設(shè)計(jì)與實(shí)踐[J].內(nèi)蒙古大學(xué)出版.2023.1[2]楊國林. C語言程序設(shè)計(jì)[J].內(nèi)蒙古大學(xué)出版社.2023.9[3]郭天祥. 新概念51單片機(jī)C語言程序[J].電子工業(yè)出版社.2023.1[4]LED與LCD顯示器的區(qū)別.[5]基于單片機(jī)簡易計(jì)算器的設(shè)計(jì).[6]基于單片機(jī)的簡易計(jì)算器設(shè)計(jì).[7]計(jì)算器模擬系統(tǒng)設(shè)計(jì).[8]計(jì)算器設(shè)計(jì)報(bào)告.[9]基于單片機(jī)的計(jì)算器.[10]AT89C51單片機(jī)簡介[11]KeiluVision2仿真軟件的使用說明μVision2集成開發(fā)環(huán)境/view/75ad363e5727a5e9856a61e7.html[12]4×4矩陣鍵盤計(jì)算器設(shè)計(jì)[13]HendersonD.Calibrationoffastsamplingoscilloscopes.MeasSciTechnol.1990.1[14]BarryRoss.Hands-OnGuidetoOscilloscopes,McGraw-Hill.1994,6[15][13]V.A.Krukov,R.V.Udovichenko.DebuggingDVMPrograms[J].ProgrammingandComputingSoftware,May.2023附錄#include<reg51.h>#include<math.h>#defineucharunsignedchar#defineuintunsignedint chartranslate(intkeycode);voidarithmetic();voidinit_LCM();voidwrite_data(charddata);voidwrite_com(charcommand);voidcheck_BF();voidclearLCD();voiddisplay(longa);voiddealerror(); voiddataoverflow();longx=0,y=0,num=0;intoperators,input,iny=0;charkey;charerror[5]="error";charoverflow[8]="overflow";sbitEN=P3^4;sbitR_W=P3^5;sbitRS=P3^6;main(){EA=1; EX0=1; IT0=1;P2=0xff; display(0); init_LCM(); write_data(0x30); while(1) { }}/**********鍵值轉(zhuǎn)化為鍵盤上按鍵值函數(shù)*************/chartranslate(intkeycode){ switch(keycode) { case0: return'7'; break; case1: return'4'; break; case2: return'1'; break; case3: return'c'; break; case4: return'8'; break; case5: return'5'; break; case6: return'2'; break; case7: return'0'; break; case8: return'9'; break; case9: return'6'; break; case10: return'3'; break; case11: return'='; break; case12: return'/'; break; case13: return'*'; break; case14: return'-'; break; case15: return'+'; break; }}/***********外部中斷0解決函數(shù)*************/voidINT_0(void)interrupt0using0{ key=translate(P2&0x0f); if(key<='9'&&key>='0')//判斷按下的鍵是否為數(shù)值 { num=num*10+(key-'0'); if(operators>0) { y=num; iny=1; } else x=num; if(num<&&num>-)//當(dāng)前數(shù)值是否超過限定范圍 { display(num); } else dataoverflow(); } else { switch(key) { case'c': x=0; y=0; num=0; iny=0; operators=0; display(num); break; case'=': arithmetic(); iny=0; operators=0; num=0; break; case'+': if(operators) arithmetic(); operators=1; num=0; break; case'-': if(operators) arithmetic(); operators=2; num=0; break; case'*': if(operators) arithmetic(); operators=3; num=0; break; case'/': if(operators) arithmetic(); operators=4; num=0; break; } }}/**********算術(shù)運(yùn)算函數(shù)*********/voidarithmetic(){ if(iny) { switch(operators) { case1: x=x+y; num=x; if(num<&&num>-) { display(num); } else dataoverflow(); break; case2: x=x-y; num=x; if(num<&&num>-) { display(num); } else dataoverflow(); break; case3: x=x*y; num=x; if(num<&&num>-) { display(num); } else dataoverflow(); break; case4: if(y==0) dealerror(); else { x=x/y; num=x; if(num<&&num>-)

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論