簡(jiǎn)易計(jì)算器的設(shè)計(jì)_第1頁(yè)
簡(jiǎn)易計(jì)算器的設(shè)計(jì)_第2頁(yè)
簡(jiǎn)易計(jì)算器的設(shè)計(jì)_第3頁(yè)
簡(jiǎn)易計(jì)算器的設(shè)計(jì)_第4頁(yè)
簡(jiǎn)易計(jì)算器的設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、信息科學(xué)與技術(shù)學(xué)院?jiǎn)纹瑱C(jī)課程設(shè)計(jì)報(bào)告題目名稱: 簡(jiǎn)易計(jì)算器的設(shè)計(jì) 學(xué)生姓名: 學(xué) 號(hào): 2010508121 專業(yè)班級(jí): 電子信息工程2010級(jí) 指導(dǎo)教師: 時(shí) 間: 2013年7月2日 摘要:近年來(lái)隨著科技的飛速發(fā)展,單片機(jī)的應(yīng)用正在不斷深入,同時(shí)帶動(dòng)傳統(tǒng)控制檢測(cè)技術(shù)日益更新。在實(shí)時(shí)檢測(cè)和自動(dòng)控制的單片機(jī)應(yīng)用系統(tǒng)中,單片機(jī)往往作為一個(gè)核心部件來(lái)使用,但僅單片機(jī)方面的知識(shí)是不夠的,還應(yīng)根據(jù)具體硬件結(jié)構(gòu)、軟硬件結(jié)合,來(lái)加以完善。計(jì)算機(jī)在人們的日常生活中是比較常見(jiàn)的電子產(chǎn)品之一??墒撬€在發(fā)展之中,以后必將出現(xiàn)功能更加強(qiáng)大的計(jì)算機(jī),基于這樣的理念,本次設(shè)計(jì)是用AT89C51單片機(jī)、LED顯示器、控

2、制按鍵為元件來(lái)設(shè)計(jì)的計(jì)算器。利用此設(shè)計(jì)熟悉單片機(jī)微控制器及C語(yǔ)言編程,對(duì)其片資源及各個(gè)I/O端口的功能和基本用途的了解。關(guān)鍵詞:51單片機(jī);LED ;控制按鍵目 錄1方案選擇1 1.1題目要求1 1.2設(shè)計(jì)方案1 1.3 方案原理 12硬件原理電路圖的設(shè)計(jì)與分析12.1 各部分電路的設(shè)計(jì)思路12.2各部分電路的功能特性52.3 原理電路圖63程序設(shè)計(jì)與分析63.1 各模塊程序的設(shè)計(jì)73.2完整的程序框圖84系統(tǒng)仿真圖94.1 計(jì)算機(jī)硬件連線圖94.2仿真結(jié)果94.3 PCB圖115系統(tǒng)評(píng)價(jià)126心得體會(huì)12參考文獻(xiàn)12附錄131. 方案選擇1.1 題目要求(1)通過(guò)小鍵盤實(shí)現(xiàn)數(shù)據(jù)的輸入,并在L

3、ED數(shù)碼管上顯示(2)實(shí)現(xiàn)+、-、*、/ (3)在LED數(shù)碼管上顯示結(jié)果(4)并有清零,退出功能1.2設(shè)計(jì)方案(1) 鍵盤部分要求實(shí)現(xiàn)+、-、*、/四種運(yùn)算。另外包括數(shù)字鍵(09)、清除鍵和等號(hào)鍵,共需要16個(gè)鍵,故采用16 個(gè)按鍵即可。 (2) 對(duì)于輸入的數(shù)據(jù)可以選擇在LCD上顯示也可以選擇在LED數(shù)碼管顯示。由于要設(shè)計(jì)的是簡(jiǎn)單的計(jì)算器,可以進(jìn)行簡(jiǎn)單的四則運(yùn)算,對(duì)數(shù)字的大小范圍要求不高,故我們采用可以進(jìn)行六位數(shù)字的運(yùn)算,選用6 個(gè)LED 數(shù)碼管顯示數(shù)據(jù)和結(jié)果。(3)在LED上顯示數(shù)據(jù)時(shí),利用AT89C51的引腳來(lái)控制驅(qū)動(dòng)電路從而實(shí)現(xiàn)位選。(4)在選擇主控機(jī)時(shí)本設(shè)計(jì)選用AT89C51。由于AT

4、89C51不但繼承了MCS-51的原有功能,而且AT89C51單片機(jī)內(nèi)的4KB Flash存儲(chǔ)器可在線編程或使用編程器重復(fù)編程,且價(jià)錢較低,故選用AT89C51單片機(jī)作為主控機(jī)。1.3 方案原理計(jì)算器一般由運(yùn)算器、控制器、存儲(chǔ)器、鍵盤、顯示器、電源和一些可選外圍設(shè)備及電子組成。該系統(tǒng)通過(guò)AT89C51單片機(jī)控制,實(shí)現(xiàn)對(duì)4*4鍵盤掃描進(jìn)行實(shí)時(shí)的按鍵檢測(cè),并把檢測(cè)數(shù)據(jù)存儲(chǔ)下來(lái),并顯示在LED數(shù)碼管上。鍵盤是計(jì)算器的輸入部件,顯示器是計(jì)算器的輸出部件。整個(gè)計(jì)算器系統(tǒng)的工作過(guò)程為:首先存儲(chǔ)單元初始化,顯示初始值和鍵盤掃描,判斷按鍵位置,查表得出按鍵值,單片機(jī)則對(duì)數(shù)據(jù)進(jìn)行儲(chǔ)存與相應(yīng)處理轉(zhuǎn)換,之后送入數(shù)碼

5、管顯示。2硬件原理電路圖的設(shè)計(jì)與分析2.1 各部分電路的設(shè)計(jì)思路 2.1.1 系統(tǒng)模塊圖:2.1.2 輸入模塊鍵盤掃描計(jì)算器輸入數(shù)字和其他功能按鍵要用到很多按鍵,如果采用獨(dú)立按鍵的方式,在這種情況下,編程會(huì)很簡(jiǎn)單,但是會(huì)占用大量的I/O 口資源,因此在很多情況下都不采用這種方式。為此,我們引入了矩陣鍵盤的應(yīng)用,采用四條I/O 線作為行線,四條I/O 線作為列線組成鍵盤。在行線和列線的每個(gè)交叉點(diǎn)上設(shè)置一個(gè)按鍵。這樣鍵盤上按鍵的個(gè)數(shù)就為4×4個(gè)。這種行列式鍵盤結(jié)構(gòu)能有效地提高單片機(jī)系統(tǒng)中I/O 口的利用率。計(jì)算器的鍵盤布局如圖2 所示:一般有16 個(gè)鍵組成,在單片機(jī)中正好可以用一個(gè)P 口

6、實(shí)現(xiàn)16 個(gè)按鍵功能,這種形式在單片機(jī)系統(tǒng)中也最常用。 圖2、矩陣鍵盤布局圖 圖3、矩陣鍵盤內(nèi)部電路圖2.1.2 單片機(jī)模塊AT89C51 單片機(jī)是在一塊芯片中集成了CPU、RAM、ROM、定時(shí)器/計(jì)數(shù)器和多功能I/O等一臺(tái)計(jì)算機(jī)所需要的基本功能部件。如果按功能劃分,它由如下功能部件組成,即微處理器(CPU)、數(shù)據(jù)存儲(chǔ)器(RAM)、程序存儲(chǔ)器(ROM/EPROM)、并行I/O 口、串行口、定時(shí)器/計(jì)數(shù)器、中斷系統(tǒng)及特殊功能寄存器(SFR)。單片機(jī)是靠程序運(yùn)行的,并且可以修改。通過(guò)不同的程序?qū)崿F(xiàn)不同的功能,尤其是特殊的獨(dú)特的一些功能,通過(guò)使用單片機(jī)編寫(xiě)的程序可以實(shí)現(xiàn)高智能,高效率,以及高可靠性!

7、因此我們采用單片機(jī)作為計(jì)算器的主要功能部件,可以進(jìn)行很快地實(shí)現(xiàn)運(yùn)算功能。2.1.3 運(yùn)算模塊 用LED顯示數(shù)據(jù)時(shí)分為位選和段選。此模塊用P1.0P1.3四個(gè)P1口引腳來(lái)控制位選,用P0口來(lái)控制數(shù)碼管的段選。由于選用的是六位數(shù)的LED所以有六個(gè)位選,而在用P1引腳時(shí)只有4個(gè)引腳可供用,所以選用74HC138譯碼器來(lái)控制6個(gè)位選。用74HC245鎖存器來(lái)儲(chǔ)存數(shù)據(jù)。2.1.4 顯示模塊通常的數(shù)碼顯示器是由7 段條形的LED 組成,點(diǎn)亮適當(dāng)?shù)淖侄?,就可顯示出不同的數(shù)字。我們采用8 段數(shù)碼管,其中位于顯示器右下角的LED 作小數(shù)點(diǎn)用。LED 顯示器有兩種不同的形式:共陰極和共陽(yáng)極。本次設(shè)計(jì)采用共陽(yáng)極接法

8、。數(shù)字09的共陽(yáng)極字形代碼如下表:顯示字型gfedcba段碼001111110c0h100001100f9h210110110a4h310011110b0h4110011099h5110110192h6111110182h700001110f8h8111111180h9110111190h2.2各部分電路的功能特性 2.2.1 輸入模塊功能 本設(shè)計(jì)采用P2口控制鍵盤。當(dāng)無(wú)按鍵閉合時(shí),P2.0P2.3 與P2.4P2.7 之間開(kāi)路。當(dāng)有鍵閉合時(shí),與閉合鍵相連的兩條I/O 口線之間短路。確定按鍵編號(hào)的方法:第一步,置列線P2.4P2.7 為輸入狀態(tài),從行線P2.0P2.3 輸出低電平,讀入列線數(shù)據(jù)

9、,若某一列線為低電平,則該列線上有鍵閉合。第二步,行線輪流輸出低電平,從列線P2.4P2.7 讀入數(shù)據(jù),若有某一列為低電平,則對(duì)應(yīng)行線上有鍵按下。綜合一二兩步的結(jié)果,可確定按鍵編號(hào)。判斷有無(wú)按鍵按下的方法是:當(dāng)有鍵按下時(shí)蜂鳴器會(huì)發(fā)出聲音,沒(méi)有按下時(shí)則不會(huì)有聲音。但是鍵閉合一次只能進(jìn)行一次鍵功能操作,因此須等到按鍵釋放后,再進(jìn)行鍵功能操作,否則按一次鍵,有可能會(huì)連續(xù)多次進(jìn)行同樣的鍵操作。2.2.2 單片機(jī)模塊功能AT89C51是整個(gè)設(shè)計(jì)的核心模塊。利用AT89C51的P0口控制數(shù)碼管的段選,從而實(shí)現(xiàn)數(shù)字09的顯示,P2口控制按鍵,用P1口的前三個(gè)引腳與74HC138譯碼器相連,從而實(shí)現(xiàn)對(duì)數(shù)碼管位

10、選的控制。2.2.3 運(yùn)算模塊的功能選用74HC138譯碼器來(lái)控制位選。這樣可以節(jié)約P1口,在寫(xiě)程序時(shí)不至于發(fā)生混亂,簡(jiǎn)單明了。2.2.4 顯示模塊的功能LED 顯示發(fā)光二極管LED 是單片機(jī)應(yīng)用系統(tǒng)中的一宗簡(jiǎn)單而常用的輸出設(shè)備,其在系統(tǒng)中的主要作用是顯示單片機(jī)的輸出數(shù)據(jù)、狀態(tài)等。因而作為典型的外圍器件,LED 顯示單元是反映系統(tǒng)輸出和操作輸入的有效器件。LED 具備數(shù)字接口可以方便的和系統(tǒng)連接;它的優(yōu)點(diǎn)是價(jià)格低,壽命長(zhǎng),對(duì)電壓電流的要求低及容易實(shí)現(xiàn)多路等。2.3 原理電路圖3程序設(shè)計(jì)與分析在程序設(shè)計(jì)方法上,模塊化程序設(shè)計(jì)是單片機(jī)應(yīng)用中最常用的程序設(shè)計(jì)方法。設(shè)計(jì)的中心思想是把一個(gè)復(fù)雜應(yīng)用程序按

11、整體功能劃分成若干相對(duì)獨(dú)立的程序模塊,各模塊可以單獨(dú)設(shè)計(jì)、編程和調(diào)試,然后組合起來(lái)。這種方法便于設(shè)計(jì)和調(diào)試,容易實(shí)現(xiàn)多個(gè)程序共存,但各個(gè)模塊之間的連接有一定的難度。根據(jù)需要我們可以采用自上而下的程序設(shè)計(jì)方法,此方法先從主程序開(kāi)始設(shè)計(jì),然后再編制各從屬程序和子程序,層層細(xì)化逐步求精,最終完成一個(gè)復(fù)雜程序的設(shè)計(jì)。3.1 各模塊程序的設(shè)計(jì)3.1.1 按鍵掃描 在C語(yǔ)言的基礎(chǔ)上,采用P2口控制鍵盤。當(dāng)無(wú)按鍵閉合時(shí),P2.0P2.3 與P2.4P2.7 之間開(kāi)路。當(dāng)有鍵閉合時(shí),與閉合鍵相連的兩條I/O 口線之間短路。確定按鍵編號(hào)的方法:第一步,置列線P2.4P2.7 為輸入狀態(tài),從行線P2.0P2.3

12、輸出低電平,讀入列線數(shù)據(jù),若某一列線為低電平,則該列線上有鍵閉合。第二步,行線輪流輸出低電平,從列線P2.4P2.7 讀入數(shù)據(jù),若有某一列為低電平,則對(duì)應(yīng)行線上有鍵按下。綜合一二兩步的結(jié)果,可確定按鍵編號(hào)。3.1.2 驗(yàn)證數(shù)據(jù)的有效性 由于選用的是六位的數(shù)碼管,可達(dá)到的最大數(shù)據(jù)為99999,當(dāng)輸入的數(shù)據(jù)或計(jì)算出的數(shù)據(jù)結(jié)果大于99999時(shí),會(huì)出錯(cuò)。具體用如下語(yǔ)句來(lái)實(shí)現(xiàn):bit check_num(float f_num) if (f_num >= 100000)return 1;return 0;3.1.3 數(shù)碼管顯示 數(shù)碼管有段選和位選,不同的數(shù)據(jù)控制不同的位,因此采用C語(yǔ)言中的選擇語(yǔ)句

13、來(lái)實(shí)現(xiàn)對(duì)數(shù)碼管顯示的程序控制。3.1.4 計(jì)算程序 簡(jiǎn)單的計(jì)算器有加、減、乘、除四種運(yùn)算。此部分程序框圖如下:數(shù)值送緩沖顯示錯(cuò)誤信息送緩沖顯示 除數(shù)為0?運(yùn)算溢出?減除乘加運(yùn)算符是?開(kāi) 始 Y Y N N3.2完整的程序框圖開(kāi) 始 初始化參數(shù)初始化LED顯示有按鍵入?讀取按鍵 Y數(shù)字鍵?讀取數(shù)值 N Y N清零鍵?數(shù)值送顯示緩沖狀態(tài)清零 Y N功能鍵? N LED顯示等待數(shù)值輸入結(jié)果送顯示緩沖執(zhí)行本次功能鍵根據(jù)上次功能鍵和輸入的數(shù)據(jù)計(jì)算結(jié)果數(shù)值送顯示緩沖 Y 4系統(tǒng)仿真圖4.1 系統(tǒng)仿真連線圖4.2仿真結(jié)果 4.2.1 加法4.2.2 減法4.2.3 乘法4.2.4 除法4.3 PCB圖5 系

14、統(tǒng)評(píng)價(jià) 本設(shè)計(jì)實(shí)現(xiàn)了簡(jiǎn)單計(jì)算器的數(shù)據(jù)輸入以及加、減、乘、除、清零等功能。對(duì)于簡(jiǎn)單的數(shù)據(jù)可以進(jìn)行運(yùn)算,比較方便簡(jiǎn)潔。在硬件設(shè)計(jì)方面所用到的器件相對(duì)較少,但主控元件引腳較多,想要完全掌握有點(diǎn)困難,而且在選擇端口的時(shí)候有點(diǎn)復(fù)雜。在軟件方面,實(shí)現(xiàn)了設(shè)計(jì)的要求,程序語(yǔ)句簡(jiǎn)單,但是代碼比較多,容易記錯(cuò)。由于是簡(jiǎn)單的計(jì)算器所以最大值能達(dá)到99999,適合做簡(jiǎn)單數(shù)字較小的運(yùn)算,精確讀可達(dá)到0.0001,對(duì)要求嚴(yán)格的數(shù)字精確度不是太高。針對(duì)以上問(wèn)題,在熟悉更多器件的情況下,可以利用更換元器件來(lái)改進(jìn)。6心得體會(huì)通過(guò)該計(jì)算器的設(shè)計(jì)我深入學(xué)習(xí)數(shù)碼管掃描和鍵盤控制,提高了對(duì)51系列單片機(jī)的實(shí)際應(yīng)用能力。同時(shí)也掌握應(yīng)用程

15、序控制51系列單片機(jī)進(jìn)行簡(jiǎn)單的數(shù)學(xué)運(yùn)算。提高了對(duì)51系列單片機(jī)的編程能力。這門課是最能理論聯(lián)系實(shí)際的課,我們的目的是做出東西,為了這我們需要學(xué)關(guān)于這方面的各種知識(shí),從被動(dòng)性的接受知識(shí)變成了主動(dòng)性的尋找知識(shí)。在此制作過(guò)程中使我們?cè)趩纹瑱C(jī)的基本原理、單片機(jī)應(yīng)用系統(tǒng)開(kāi)發(fā)過(guò)程,以及在常用編程設(shè)計(jì)思路技巧的掌握方面都能向前邁了一大步,為日后成為合格的應(yīng)用型人才打下良好的基礎(chǔ)。同時(shí),也深刻認(rèn)識(shí)到要做出來(lái)一個(gè)東西真的不是一件容易的事,它需要將各個(gè)方面的知識(shí)都記起來(lái)再加以運(yùn)用,因此這就需要我們有很好的知識(shí)基礎(chǔ)。參考文獻(xiàn)1張毅剛,彭喜元等.單片機(jī)原理及應(yīng)用(第2版).北京.高等教育出版社,20102孫育才等.M

16、CS-51系列單片微型計(jì)算機(jī)及其應(yīng)用(第4版)上海.東南大學(xué)出版社,20043單片機(jī)應(yīng)用技術(shù)(C語(yǔ)言).北京.中國(guó)勞動(dòng)社會(huì)保障出版社,20064武慶生,仇梅等著.單片機(jī)原理與應(yīng)用.北京.電子科技大學(xué)出版,1998 5朱定華著.單片機(jī)原理與接口技術(shù).西安.電子工業(yè)出版社,20016龔運(yùn)新著.單片機(jī)C語(yǔ)言開(kāi)發(fā)技術(shù).北京.北京清華大學(xué)出版社,2006 7周立功.單片機(jī)實(shí)驗(yàn)與實(shí)踐.北京.北京航空航天大學(xué)出版社,2004附錄: 程序代碼:20 #include <reg52.h>typedef unsigned char uint8;typedef unsigned int uint16;t

17、ypedef unsigned long uint32;typedef char int8; typedef int int16;typedef long int32;sbit KeyIn1 = P24; / P2.4引腳控制KeyIn1;sbit KeyIn2 = P25; / 用P2.5引腳控制KeyIn2sbit KeyIn3 = P26; / 用P2.6引腳控制KeyIn3sbit KeyIn4 = P27; / 用P2.7引腳控制KeyIn4sbit KeyOut1 = P23; / 用P2.3引腳控制KeyOut1 sbit KeyOut2 = P22; / 用P2.2引腳控制Ke

18、yOut2sbit KeyOut3 = P21; / 用P2.1引腳控制KeyOut3sbit KeyOut4 = P20; / 用P2.0引腳控制KeyOut4sbit ADDR0 = P10; /P1.0引腳控制74HC138譯碼器的A引腳sbit ADDR1 = P11; /P1.1引腳控制74HC138譯碼器的B引腳sbit ADDR2 = P12; /P1.2引腳控制74HC138譯碼器的C引腳sbit ADDR3 = P13; /P1.3引腳控制74HC138譯碼器的E1引腳sbit ENLED = P14; /P1.4引腳控制74HC138譯碼器的E2 E3引腳sbit BUZZ

19、 = P16; /用P1.6引腳控制蜂鳴器;#define FADD10 /給FADD賦值為10#define FSUB11 /給FSUB賦值為11#define FMUL12 /給FMUL賦值為12 #define FDIV13 /給FDIV賦值為13#define FRES14 /給FRES賦值為14#define FEQU15 /給FEQU賦值為15 #define KEY_DELAY 300/按鍵延時(shí)賦值300#define BUZ_DELAY 80/蜂鳴器延時(shí)賦值80code uint8 Ledcode13=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf

20、8,0x80,0x90,0xff,0xbf,0x86; /數(shù)字09以及-,E的共陽(yáng)極字形代碼uint8 Led_n=0;uint8 Led_buf6;float Tmp1=0, Tmp2=0; /給Tmp1、Tmp2賦初值為0int8 C_flag=0;/* 延時(shí)*/void delay(uint16 n)while (n-);/* 蜂鳴器發(fā)聲*/void buzzer_sound(void)uint16 i;for (i=0; i<BUZ_DELAY; i+)BUZZ = BUZZ;delay(100); /延時(shí)100BUZZ = 1;/* 按鍵掃描*/int8 scan_key(vo

21、id)int8 val=-1;KeyOut1 = 0; /按鍵第一列閉合KeyOut2 = 1;KeyOut3 = 1;KeyOut4 = 1;if (KeyIn1 = 0) /第一列第一行為數(shù)字1delay(KEY_DELAY);if (KeyIn1 = 0)val = 1;if (KeyIn2 = 0) /第一列第二行為數(shù)字2delay(KEY_DELAY);if (KeyIn2 = 0)val = 2;if (KeyIn3 = 0) /第一列第三行為數(shù)字3delay(KEY_DELAY);if (KeyIn3 = 0)val = 3;if (KeyIn4 = 0) /第一列第四行為加號(hào)鍵

22、delay(KEY_DELAY);if (KeyIn4 = 0)val = FADD;while (KeyIn1 = 0)|(KeyIn2 = 0)|(KeyIn3 = 0)|(KeyIn4 = 0);KeyOut1 = 1; /第二列閉合KeyOut2 = 0;KeyOut3 = 1;KeyOut4 = 1;if (KeyIn1 = 0) /第二列第一行為數(shù)字4delay(KEY_DELAY);if (KeyIn1 = 0)val = 4;if (KeyIn2 = 0) /第二列第二行為數(shù)字5delay(KEY_DELAY);if (KeyIn2 = 0)val = 5;if (KeyIn3

23、 = 0) /第二列第三行為數(shù)字6delay(KEY_DELAY);if (KeyIn3 = 0)val = 6;if (KeyIn4 = 0) /第二列第四行為減號(hào)鍵delay(KEY_DELAY);if (KeyIn4 = 0)val = FSUB;while (KeyIn1 = 0)|(KeyIn2 = 0)|(KeyIn3 = 0)|(KeyIn4 = 0);KeyOut1 = 1;KeyOut2 = 1;KeyOut3 = 0;KeyOut4 = 1;if (KeyIn1 = 0)delay(KEY_DELAY);if (KeyIn1 = 0)val = 7;if (KeyIn2 =

24、 0)delay(KEY_DELAY);if (KeyIn2 = 0)val = 8;if (KeyIn3 = 0)delay(KEY_DELAY);if (KeyIn3 = 0)val = 9;if (KeyIn4 = 0)delay(KEY_DELAY);if (KeyIn4 = 0)val = FMUL;while (KeyIn1 = 0)|(KeyIn2 = 0)|(KeyIn3 = 0)|(KeyIn4 = 0);KeyOut1 = 1;KeyOut2 = 1;KeyOut3 = 1;KeyOut4 = 0;if (KeyIn1 = 0)delay(KEY_DELAY);if (Ke

25、yIn1 = 0)val = FRES;if (KeyIn2 = 0)delay(KEY_DELAY);if (KeyIn2 = 0)val = 0;if (KeyIn3 = 0)delay(KEY_DELAY);if (KeyIn3 = 0)val = FEQU;if (KeyIn4 = 0)delay(KEY_DELAY);if (KeyIn4 = 0)val = FDIV;while (KeyIn1 = 0)|(KeyIn2 = 0)|(KeyIn3 = 0)|(KeyIn4 = 0);if (val > 0)buzzer_sound();return val;/* 驗(yàn)證數(shù)據(jù)有效性

26、*/bit check_num(float f_num) /最大輸入數(shù)為99999if (f_num >= 100000)return 1;return 0;/* 制作數(shù)碼管錯(cuò)誤標(biāo)志*/void make_led_error(void)int8 i;for (i=0; i<5; i+)Led_bufi = Ledcode10;/不顯示任何數(shù)字Led_buf5 = Ledcode12;/錯(cuò)誤標(biāo)志E送到顯示緩沖/* 制作數(shù)碼管整數(shù)數(shù)據(jù)*/void make_led_inumber(int32 i_num)bit s_flag=0; /定義負(fù)數(shù)標(biāo)志位int16 sit;int8 i;if

27、 (i_num < 0) /如果數(shù)值為負(fù)s_flag = 1; /負(fù)數(shù)標(biāo)志位有效i_num = -i_num;/轉(zhuǎn)為正數(shù)顯示ET0 = 0;for (i=4, sit=10000; i>=1; i-, sit/=10)if (i_num >= sit)break;Led_bufi = Ledcode10;i_num -= i_num/sit*sit;for (;i>=1; i-, sit/=10)Led_bufi = Ledcodei_num/sit;i_num -= i_num/sit*sit;Led_buf0 = Ledcodei_num & 0x7F;/最

28、后一位顯示小數(shù)點(diǎn)if (s_flag)Led_buf5 = Ledcode11;elseLed_buf5 = Ledcode10;ET0 = 1; /允許T0中斷/* 制作數(shù)碼管浮點(diǎn)數(shù)據(jù)*/void make_led_fnumber(float f_num)bit s_flag=0;int32 num;int16 sit;int8 i, decimal, dot_sit=0;if (f_num < 0)s_flag = 1;f_num = -f_num;num = (int32)(f_num*10000+0.5);/將浮點(diǎn)型數(shù)據(jù)轉(zhuǎn)化為長(zhǎng)整形for (decimal=4; decimal&

29、gt;0; decimal-)if (num % 10 != 0)break;num /= 10;dot_sit = decimal;if (f_num >= 10000)dot_sit = 0;else if (f_num >= 1000)if (decimal >= 1)dot_sit = 1;else if (f_num >= 100)if (decimal >= 2)dot_sit = 2;else if (f_num >= 10)if (decimal >= 3)dot_sit = 3;for (i=0; i<dot_sit; i+)f

30、_num *= 10;num = (int32)(f_num+0.5);ET0 = 0;for (i=4, sit=10000; i>=1; i-, sit/=10)if (num >= sit)break;if (i = dot_sit)break;Led_bufi = Ledcode10;num -= num/sit*sit;for (;i>=1; i-, sit/=10)Led_bufi = Ledcodenum/sit;num -= num/sit*sit;Led_buf0 = Ledcodenum;Led_bufdot_sit &= 0x7F;/顯示小數(shù)點(diǎn)i

31、f (s_flag)Led_buf5 = Ledcode11;elseLed_buf5 = Ledcode10;ET0 = 1;/*數(shù)碼管顯示*/void show_num(uint8 *buf)ENLED = 1; /74HC138譯碼器的E2 、E3無(wú)效switch (Led_n)case 0: /位選為0,則P1.0、P1.1、P1.2都為0,譯碼器Y0有效ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;P0 = buf0;break;case 1: /位選為1,則P1.0為1,P1.1、P1.2都為0,譯碼器Y1有效ADDR0 = 1;ADDR1 = 0;ADDR2 = 0

32、;P0 = buf1;break;case 2: /位選為2,則P1.2為1,P1.,0、P1.2都為0,譯碼器Y2有效ADDR0 = 0;ADDR1 = 1;ADDR2 = 0;P0 = buf2;break;case 3: /位選為3,則P1.3為0,P1.,0、P1.2都為1,譯碼器Y3有效ADDR0 = 1;ADDR1 = 1;ADDR2 = 0;P0 = buf3;break;case 4: ADDR0 = 0;ADDR1 = 0;ADDR2 = 1;P0 = buf4;break;case 5: ADDR0 = 1;ADDR1 = 0;ADDR2 = 1;P0 = buf5;break;ENLED = 0;if (Led_n >= 5)Led_n = 0;elseLed_n+;/* 計(jì)算程序*/void calculate(int8

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論