久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4131|回復(fù): 1
收起左側(cè)

51單片機(jī)多位十進(jìn)制數(shù)計算器電路與程序設(shè)計

[復(fù)制鏈接]
ID:792112 發(fā)表于 2020-6-28 19:04 | 顯示全部樓層 |閱讀模式

    隨著社會的發(fā)展,科學(xué)的進(jìn)步,人們的生活水平在逐步地提高,尤其是微電子技術(shù)的發(fā)展猶如雨后春筍般的變化。電子產(chǎn)品的更新速度快就不足驚奇了。計算器在人們的日常中是比較常見的電子產(chǎn)品之一,如何使計算器技術(shù)更加的成熟。充分利用已有的軟件和硬件條件,設(shè)計出更出色的計算器,使其更好地為各個行業(yè)服務(wù),成了如今電子領(lǐng)域重要的研究課題。

現(xiàn)如今,人們的日常生活中已經(jīng)離不開計算器了,社會的各個角落都有它的身膨,比如商店、辦公室、學(xué)校。因此設(shè)計一款簡單實(shí)用的計算器會有很大的實(shí)際意義。


1.2設(shè)計目的
  •      為了培養(yǎng)學(xué)生在查閱資料、復(fù)習(xí)、學(xué)習(xí)知識的基礎(chǔ)上,進(jìn)行包括光、機(jī)、電系統(tǒng)的設(shè)計、計算、仿真、編程、調(diào)試等多個環(huán)節(jié)的綜合能力培養(yǎng);
  •      是對學(xué)生進(jìn)行設(shè)計前的一次大型練兵,進(jìn)一步培養(yǎng)學(xué)生獨(dú)立地分析、解決實(shí)際問題的實(shí)際能力。
  •      培養(yǎng)學(xué)生用專業(yè)的、簡潔的文字,清晰的圖表來表達(dá)自己設(shè)計思想的能力。

1.3 設(shè)計要求

1. 系統(tǒng)通過4×4的矩陣鍵盤輸入數(shù)字及運(yùn)算符。

2. 可以進(jìn)行多位十進(jìn)制數(shù)以內(nèi)的運(yùn)算(包括加,減,乘,除,冪次方,對數(shù)等功能),如果計算結(jié)果超過顯示范圍,則屏幕顯示E。

3. 可顯示輸入時的數(shù)字及結(jié)果;

4. 設(shè)計控制電路總體方案;

5. 電路的設(shè)計、仿真與調(diào)試。

2 總體設(shè)計方案分析

2.1 系統(tǒng)組成

本設(shè)計是一個可以進(jìn)行多位十進(jìn)制數(shù)以內(nèi)的運(yùn)算(包括加,減,乘,除,冪次方,對數(shù)等功能)的計算器,系統(tǒng)結(jié)構(gòu)框圖如圖2.1。它的硬件電路主要由五部分組成,一個AT89C51單片機(jī)芯片、一個八位共陽極的數(shù)碼管、一個四乘四的矩陣鍵盤、手動清零電路和起振電路。軟件程序主要由四部分組成:主程序、矩陣鍵盤掃描程序、算術(shù)運(yùn)算程序和顯示程序。

在硬件的選擇和連接上,單片機(jī)選擇AT89C51,數(shù)碼管選擇共陽機(jī)八位數(shù)碼管,鍵盤4*4矩陣鍵盤。數(shù)碼管的A,B,C,D,E,F,G,DP分別依次與單片機(jī)的P0.0—P0.7管腳相連,P0口做為單片機(jī)的字碼控制端,數(shù)碼管的1,2,3,4,5,6,7,8各引腳分別與單片機(jī)的P2.0—P2.7管腳相連,鍵盤的第0行到第3行依次與單片機(jī)的P1.1—P1.3,鍵盤的第0列到第3列依次與單片機(jī)的P1.4—P1.7,AT89C51接12MHZ晶振。

圖 2.1 系統(tǒng)結(jié)構(gòu)框圖

2.2 系統(tǒng)基本功能

1.計算器可顯示8位數(shù)字,開機(jī)運(yùn)行時,只有數(shù)碼管最低位顯示為“0”,其余位全部不顯示。

2.第一次按下時,顯示“D1”;第二次按下時,顯示“D1D2”;第三次按下時,顯示“D1D2D3”,8個全顯示完畢,再按下按鍵下時,顯示E。

3.可以設(shè)置計算范圍,對計算結(jié)果在該范圍內(nèi)的兩個無符號數(shù)進(jìn)行+、-、*、/、^、對數(shù)運(yùn)算,并顯示計算結(jié)果。輸入數(shù)字或結(jié)果超出設(shè)定范圍時,屏幕顯示E;做減法運(yùn)算時,當(dāng)被減數(shù)<減數(shù)時,屏幕顯示E;做除法運(yùn)算時,除數(shù)為0時,屏幕顯示E,以提示使用者輸入錯誤,應(yīng)清零后重新輸入。

4.在進(jìn)行加、乘、除運(yùn)算時,可直接按符號鍵進(jìn)行運(yùn)算,若需要進(jìn)行減、冪方、對數(shù)運(yùn)算時,按運(yùn)算符之前要先按“shift”鍵進(jìn)行轉(zhuǎn)換,再進(jìn)行運(yùn)算。

5.運(yùn)算時,按清零鍵清零,終止本次運(yùn)行,必須重新輸入數(shù)據(jù),運(yùn)算過程中,如果運(yùn)算的表達(dá)式是加、減、乘、除、冪方、對數(shù)混合運(yùn)算,可以連續(xù)運(yùn)算,無需按等號鍵,混合運(yùn)算過程運(yùn)算符不設(shè)優(yōu)先級。

3 硬件電路設(shè)計

3.1 主控芯片 AT89C51單片機(jī)簡介

AT89C51是一種帶4K字節(jié)FLASH存儲器(FPEROM-Flash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機(jī),如圖3.1。

單片機(jī)的可擦除只讀存儲器可以反復(fù)擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃速存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C051是它的一種精簡版本。AT89C51單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。

AT89C51 提供以下標(biāo)準(zhǔn)功能:4k字節(jié)Flash閃速存儲器,128字節(jié)內(nèi)部RAM,32 個I/O 口線,兩個16位定時/計數(shù)器,一個5向量兩級中斷結(jié)構(gòu),一個全雙工串行通信口,片內(nèi)振蕩器及時鐘電路。同時,AT89C51可降至0Hz的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式。空閑方式停止CPU的工作,但允許RAM,定時/計數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM中的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直到下一個硬件復(fù)位。

圖 3.1 AT89C51單片機(jī)結(jié)構(gòu)圖

3.2顯示模塊

7seg-mpx8-ca是共陽極數(shù)碼管顯示器,如圖3.2。它左下側(cè)的ABCDEFG DP是LED數(shù)碼管顯示器的I/O口,是段選信號,右下側(cè)的12345678是它的位選信號,從左到右分別是第一位到第八位,段選信號與位選信號分別接到單片機(jī)的不同輸出口。本次設(shè)計中段選信號接到了P0口,位選信號接到了P2口。

共陽極的字形顯示代碼為:

Uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

0x80,0x90,0x86 }.

位選信號代碼為:

uchar Digits[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

當(dāng)選中第一位時,段選信號就執(zhí)行從0到9的顯示。

圖3.2 七段數(shù)碼管顯數(shù)器

3.3鍵盤接口電路

采用4*4矩陣鍵盤。如圖3.3。采用軟件識別鍵值并執(zhí)行相應(yīng)的操作,鍵盤的第0行到第3行依次與單片機(jī)的P1.0—P1.3管腳相連,鍵盤的第0列到第3列依次與單片機(jī)的P1.4—P1.7管腳相連,計算機(jī)輸入數(shù)字和其他功能按鍵時要用到很多按鍵,如果采用獨(dú)立按鍵的方式,編程會很簡單,但是會占用大量的I/O口資源,因此在很多情況下都不采用這樣的方式,而是采用矩陣鍵盤的方式。矩陣鍵盤采用四條I/O線作為行線,四條I/O線作為列線組成鍵盤,在行線和列線的每個交叉點(diǎn)上設(shè)置一個按鍵。這樣鍵盤上按鍵的數(shù)量就為4*4個。這樣行列式鍵盤結(jié)構(gòu)能有效的提高單片機(jī)系統(tǒng)中I/O口的利用率。一般有16個鍵組成,在單片機(jī)中正好有一個P端口實(shí)現(xiàn)16個按鍵功能,這種形式在單片機(jī)系統(tǒng)中最常用。

按鍵識別是通過逐行掃描進(jìn)行判斷。某一行中如果有低電平產(chǎn)生,則辨別該低電平產(chǎn)生于哪一列,從而得到按鍵的行列地址,給按鍵賦值。

按鍵識別后,如果是數(shù)字鍵則直接放入數(shù)碼管顯示緩沖區(qū),如果再次有數(shù)字鍵按下,則應(yīng)將緩存區(qū)的數(shù)字向高位移一位,將剛輸入的數(shù)放入最低位,并且記錄按鍵次數(shù),每輸入一個鍵值都調(diào)用顯示程序顯示出來,如果是運(yùn)算符,則執(zhí)行相應(yīng)的運(yùn)算,然后再調(diào)用顯示程序顯示結(jié)果。

圖3.3 矩陣鍵盤結(jié)構(gòu)圖

3.4 算術(shù)運(yùn)算模塊

算術(shù)運(yùn)算模塊,在任何時候按下清零鍵,都必須退出當(dāng)前操作,重新進(jìn)行運(yùn)算。每次運(yùn)算結(jié)束也要按下清零鍵后,再進(jìn)行重新操作。運(yùn)算模塊由鍵盤和顯示器組成。由于按鍵不足,設(shè)計一個轉(zhuǎn)換鍵,可以對運(yùn)算符進(jìn)行轉(zhuǎn)換,將“+”和“-”、“*”和“^”、“/”和“l(fā)og”利用“shift”進(jìn)行轉(zhuǎn)換,實(shí)現(xiàn)六個運(yùn)算符的運(yùn)算。

3.5 總設(shè)計圖

將以上模塊連接起來,總設(shè)計圖如圖3.4。

圖3.4 總設(shè)計圖

4 軟件設(shè)計模塊

軟件程序主要由四部分組成:主程序、鍵盤掃描程序、算術(shù)運(yùn)算模塊程序和顯示程序,總程序設(shè)計圖如圖4.1。

圖4.1 總程序設(shè)計圖

4.1 顯示程序設(shè)計

采用動態(tài)顯示,由八位共陽極數(shù)碼管通過P0口,P2口與單片機(jī)相連,P0口做字碼控制端,P2口做數(shù)碼管的位控制端,動態(tài)顯示是每次數(shù)碼管只顯示一位,由于人的視覺停留是0.05到0.2秒之間,當(dāng)數(shù)碼管依次點(diǎn)亮各個位時,使循環(huán)的頻率高于人的視覺停留時間,人們就會認(rèn)為數(shù)碼管是同時點(diǎn)亮的,就可以達(dá)到動態(tài)顯示的效果。其中位控制是哪個數(shù)碼管亮,段控制是數(shù)碼管亮數(shù)字幾。本設(shè)計的難點(diǎn)是鍵盤識別和數(shù)值顯示,因?yàn)檫@里邊涉及到鍵盤輸入的數(shù)值在內(nèi)部要轉(zhuǎn)換成10進(jìn)制運(yùn)算,運(yùn)算結(jié)果要轉(zhuǎn)換成各個位的顯示數(shù)字輸出。

4.2 矩陣鍵盤掃描程序設(shè)計

矩陣鍵盤采用4行4列結(jié)構(gòu),每行每列各對應(yīng)一個I/O口。本設(shè)計鍵盤的第0行到第3行依次與單片機(jī)的P1.0—P1.3管腳相連,鍵盤的第0列到第3列依次與單片機(jī)的P1.4—P1.7管腳相連,程序運(yùn)行時依次掃描各行,查詢是否有鍵按下,如果有則進(jìn)入鍵盤識別處理程序,實(shí)現(xiàn)相應(yīng)的運(yùn)算,然后通過數(shù)碼管輸出結(jié)果,如果沒有按鍵就調(diào)用顯示程序顯示一個0,等待按鍵按下,在進(jìn)入按鍵掃描程序,這樣循環(huán)執(zhí)行。按鍵識別是根據(jù)按鍵時得到的列代碼與行代碼組合,來判斷是哪個鍵的。當(dāng)鍵盤按鍵按下時它的那一行、那一列的端口為低電平。因此,只要掃描行、列端口是否都為低電平就可以確定是哪個鍵被按下。

鍵掃程序的過程為:開始時,先判斷是否有鍵閉合,無鍵閉合時,返回繼續(xù)判斷,有鍵閉合時,先去抖動,然后確定是否有鍵按下,若無鍵按下,則返回繼續(xù)判斷是否有鍵閉合,若有鍵按下,則判斷鍵號,然后釋放,若釋放按鍵完畢,則返回,若沒有釋放按鍵,則返回繼續(xù)釋放。流程圖如圖4.2。

圖4.2 矩陣鍵盤掃描程序設(shè)計

4.3 算術(shù)運(yùn)算模塊設(shè)計

程序的過程為:先判斷輸入的運(yùn)算符是+、-、*、/、^、log 中的哪一個,只要把各運(yùn)算符分別做成模塊,用到時調(diào)用即可。若是“+”、“*”、“l(fā)og”或“^”,則要判斷運(yùn)算結(jié)果是否溢出,溢出則顯示“E”,沒溢出就顯示運(yùn)算結(jié)果,若是“/”,則要先判斷除數(shù)是否為零,為零就顯示錯誤信息,輸出“E”,不為零則顯示運(yùn)算結(jié)果,若是“-”,被減數(shù)小于減數(shù),結(jié)果應(yīng)為負(fù)數(shù),但因?yàn)槭菬o符號運(yùn)算,輸出‘E’,否則直接顯示運(yùn)算結(jié)果。其流程圖如圖4.3所示。

圖4.3 算術(shù)運(yùn)算程序設(shè)計流程圖
5 實(shí)驗(yàn)結(jié)果及分析

5.1乘法運(yùn)算超出范圍(溢出值999999

計算5400*200=1080000,溢出,顯示“E”。

鍵入第一個操作數(shù)5400,顯示如圖5.1:

圖5.1 鍵入5400

乘以第二個操作數(shù)200,如圖5.2:

圖5.2 鍵入200

顯示結(jié)果(超出范圍),如圖5.3:

圖5.3 結(jié)果溢出

5.2 冪方運(yùn)算

計算3^6=729,結(jié)果正確。

輸入3,如圖5.4:

圖5.4 輸入3

輸入冪次6,如圖5.5:

圖5.5 輸入冪次6

顯示結(jié)果729,結(jié)果正確。如圖5.6:

圖5.6 顯示結(jié)果729

5.3 除法運(yùn)算( 除數(shù)為0時,顯示錯誤信息“E”)


除數(shù)為0,如圖5.7:

圖5.7 鍵入除數(shù)為0

顯示結(jié)果“E”,如圖5.8:

圖5.8 顯示結(jié)果“E”

5.4 減法運(yùn)算(被減數(shù)小于減數(shù)時)

鍵入被減數(shù)1000,如圖5.9:

圖5.9 顯示1000

鍵入減數(shù)3000,如圖5.10:

圖 5.10 鍵入減數(shù)3000

顯示結(jié)果“E”,如圖5.11:

圖5.11 顯示結(jié)果

5.5 連續(xù)運(yùn)算

800*20/400+60=100

鍵入800,如圖5.12:

圖5.12 鍵入800

鍵入乘數(shù)20,如圖5.13:

圖5.13 鍵入20

按下除號時顯示上一步運(yùn)算結(jié)果,并繼續(xù)進(jìn)行下一步運(yùn)算,如圖5.14:

圖5.14 顯示上一步計算結(jié)果

繼續(xù)鍵入除數(shù)400,如圖5.15:

圖5.15 鍵入除數(shù)400

繼續(xù)加上60,如圖5.16:

圖5.16 加60

顯示結(jié)果100,如圖5.17:

圖5.17 顯示結(jié)果

6 評述與心得

本次的設(shè)計要求實(shí)現(xiàn)多位十進(jìn)制數(shù)計算器系統(tǒng)設(shè)計,我主要負(fù)責(zé)報告的整合和程序的調(diào)試?傮w來說,整個設(shè)計并不復(fù)雜,通過分析題目、查閱資料、比較不同方案,經(jīng)過多次調(diào)試與測試也基本實(shí)現(xiàn)了要求的內(nèi)容,但在實(shí)現(xiàn)過程中還是遇到了不少問題。整個設(shè)計包括主控芯片、顯示模塊、輸入模塊、運(yùn)算模塊。首先用protues連接電路時要注意各端口對應(yīng),電路圖盡量做到簡潔,整齊,確保連接正確。然后在輸入模塊我們采用4*4矩陣鍵盤,難點(diǎn)在于矩陣鍵盤掃描程序,要明確按鍵原理,并合理規(guī)范按鍵,按鍵分配上,我們提出用轉(zhuǎn)換鍵“shift”實(shí)現(xiàn)對運(yùn)算符的轉(zhuǎn)換,達(dá)到在按鍵有限的條件下,最大程度的實(shí)現(xiàn)多種運(yùn)算功能,結(jié)果較為滿意。除此之外,整個設(shè)計除過主程序還包括顯示程序、算數(shù)運(yùn)算程序等模塊,算數(shù)運(yùn)算模塊里面又涉及各個運(yùn)算符的相應(yīng)程序,整個程序的調(diào)試測試比較麻煩。在最初程序中,由于無符號整形字節(jié)的范圍限制,結(jié)果最大只能到65535,超過后將不能顯示正確答案。最后調(diào)整為長整型后,范圍擴(kuò)大至2^32,可自由設(shè)定計算器的溢出值,使得結(jié)果在超過溢出值后顯示“E”。對于除法,除數(shù)為0時,使顯示結(jié)果為“E”給出錯誤提示。對減數(shù)運(yùn)算結(jié)果為負(fù)時,使顯示結(jié)果為“E”給出錯誤提示。并實(shí)現(xiàn)連續(xù)運(yùn)算功能,可顯示中間結(jié)果。顯示模塊采用共陽極數(shù)碼管,通過查詢數(shù)字和相關(guān)字母對應(yīng)的碼表,編寫程序,實(shí)現(xiàn)輸入模塊到主控芯片內(nèi)部,芯片到數(shù)碼管的一系列字符-數(shù)字、數(shù)字-字符的轉(zhuǎn)化。多次調(diào)試后有了較為理想的結(jié)果,基本實(shí)現(xiàn)了老師的要求,但仍有不足,比如只能進(jìn)行無符號整形的運(yùn)算;最多只能進(jìn)行八位十進(jìn)制數(shù)的混合運(yùn)算;當(dāng)連續(xù)出現(xiàn)錯誤操作時,如連續(xù)輸入減號,程序不能自動復(fù)位,會產(chǎn)生連續(xù)錯誤;沒有刪除輸入功能,當(dāng)輸入出錯時,只能通過清零后重新輸入。這些都局限了該計算器系統(tǒng)的使用,也認(rèn)識到了自己的能力還需要很大的提高。

同時,本次為期兩周的設(shè)計讓我對單片機(jī)軟件與硬件的常用設(shè)計有了更深入的了解,包括單片機(jī)需按照統(tǒng)一節(jié)拍工作,而晶振是給單片機(jī)提供工作信號脈沖的。這個脈沖就是單片機(jī)的工作速度。晶振頻率的大小決定了單片機(jī)速度的快慢。而一般晶振電路都有這兩個小電容的,它是振蕩回路交聯(lián)電容,如果沒這兩個電容的話,振蕩部分會因?yàn)闆]有回路而停振,電路不能正常工作。對單片機(jī)的內(nèi)部結(jié)構(gòu)及接口相應(yīng)的功能也有了更深的理解記憶,對keil和proteus軟件的使用也有了進(jìn)本的掌握。

通過查閱資料,快速查找有效信息,提高了自己的文獻(xiàn)檢索能力。設(shè)計過程中的分析、組成電路、排查錯誤、調(diào)試測試、提高改進(jìn),也進(jìn)一步鍛煉了自己的思維,小組工作中,提高了自己的交流能力和團(tuán)隊(duì)合作意識,綜合能力得到提升,并取得了較為不錯的測試結(jié)果,比較滿意,感謝隊(duì)友,也感謝老師給我們提供這樣的機(jī)會,讓我們認(rèn)識自我,提升自我。以后我會繼續(xù)努力,多多學(xué)習(xí)跟專業(yè)有關(guān)的知識,把理論與實(shí)踐相結(jié)合,融會貫通,舉一反三。


仿真程序下載:

http://www.zg4o1577.cn/bbs/dpj-191483-1.html



回復(fù)

使用道具 舉報

ID:1008471 發(fā)表于 2022-3-5 22:46 | 顯示全部樓層
難理解
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品中文字幕在线 | 高清人人天天夜夜曰狠狠狠狠 | 久久国产婷婷国产香蕉 | 亚洲精品视频在线播放 | 久久久无码精品亚洲日韩按摩 | 国产欧美一区二区三区在线看 | 黄色一级免费看 | 奇米影视77 | 国产一区二区三区四区区 | 九九久久精品视频 | 91久久久久 | 国产精品久久久久久久久久久久 | 成年女人免费v片 | 国产精品久久久久久久久久久久 | 成人在线免费视频 | 亚洲午夜精品一区二区三区他趣 | 精品亚洲国产成av人片传媒 | 久久久免费精品 | 国产91在线播放精品91 | 日韩欧美国产精品一区二区 | 欧美精品综合在线 | 久久久久国色av免费观看性色 | 狠狠色综合久久丁香婷婷 | 黄a在线观看 | 香蕉视频久久久 | 在线免费激情视频 | 久久久精品综合 | 色狠狠一区 | 久久av一区二区三区 | 久久人爽 | 午夜爱爱网| 色视频网站免费 | 久久久精品视频免费看 | 日韩高清在线 | 欧美涩| 美女在线一区二区 | 综合精品 | h视频在线免费观看 | 欧美又大粗又爽又黄大片视频 | 欧美成人第一页 | 成人做爰999 |