基于C51單片機(jī)簡(jiǎn)易計(jì)算器的課程設(shè)計(jì)論文_第1頁(yè)
基于C51單片機(jī)簡(jiǎn)易計(jì)算器的課程設(shè)計(jì)論文_第2頁(yè)
基于C51單片機(jī)簡(jiǎn)易計(jì)算器的課程設(shè)計(jì)論文_第3頁(yè)
基于C51單片機(jī)簡(jiǎn)易計(jì)算器的課程設(shè)計(jì)論文_第4頁(yè)
基于C51單片機(jī)簡(jiǎn)易計(jì)算器的課程設(shè)計(jì)論文_第5頁(yè)
已閱讀5頁(yè),還剩19頁(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é)院基于C51單片機(jī)的簡(jiǎn)易計(jì)算器目錄1. 緒論32. 系統(tǒng)軟件設(shè)計(jì)方案42.1設(shè)計(jì)目標(biāo)和實(shí)現(xiàn)方法42.2整體方案論證43. 系統(tǒng)硬件的設(shè)計(jì)與介紹53.1復(fù)位電路的設(shè)計(jì)與運(yùn)用53.2時(shí)鐘振蕩器電路的設(shè)計(jì)與運(yùn)用63.3輸入電路的設(shè)計(jì)63.4輸出電路的設(shè)計(jì)84. 系統(tǒng)程序的設(shè)計(jì)與介紹114.1 LED顯示程序流程圖設(shè)計(jì)114.2讀鍵輸入程序流程圖設(shè)計(jì)134.3主程序流程圖設(shè)計(jì)144.4仿真與調(diào)試155. 結(jié)論17元件清單18附錄1簡(jiǎn)易計(jì)算器源程序191.緒論 中國(guó)古代最早采用的一種計(jì)算工具叫籌策,又被叫做算籌。這種算籌多是用竹子制成,也有用木頭,獸骨充當(dāng)材料的。大約二百七十枚一

2、束,放在布袋里可以隨身攜帶。 直到今天仍在使用的珠算盤,是中國(guó)古代計(jì)算工具領(lǐng)域中的另一項(xiàng)發(fā)明,明代時(shí)期的珠算盤已經(jīng)與現(xiàn)代的珠算盤幾乎沒(méi)有差別。 17世紀(jì)初,西方國(guó)家的計(jì)算工具已經(jīng)有了較大的發(fā)展,英國(guó)數(shù)學(xué)家納皮爾發(fā)明的納皮爾算籌,英國(guó)牧師奧卻德發(fā)明了圓柱型對(duì)數(shù)計(jì)算尺,這種計(jì)算尺不僅能做加減乘除、乘方、開(kāi)方運(yùn)算,甚至可以計(jì)算三角函數(shù),指數(shù)函數(shù)和對(duì)數(shù)函數(shù),這些計(jì)算工具不僅帶動(dòng)了計(jì)算器的快速發(fā)展,也為實(shí)現(xiàn)現(xiàn)代計(jì)算器發(fā)展奠定了良好的基礎(chǔ),成為現(xiàn)代社會(huì)應(yīng)用廣泛的計(jì)算工具。 1642年,年僅19歲的法國(guó)偉大科學(xué)家帕斯卡引用算盤的原理,發(fā)明了世界上第一部機(jī)械式計(jì)算器,在他的計(jì)算器中有一些互相聯(lián)鎖的齒輪,一個(gè)轉(zhuǎn)

3、過(guò)十位的齒輪會(huì)使另一個(gè)齒輪轉(zhuǎn)過(guò)一位,人們可以像撥盤那樣,把數(shù)字撥進(jìn)去,計(jì)算結(jié)果就會(huì)出現(xiàn)在另外一個(gè)窗口中,但是只能做加減計(jì)算。1694年,萊布尼茲在德國(guó)將其改進(jìn)成可以進(jìn)行乘除的計(jì)算。此后,一直要到20世紀(jì)50年代末才有了電子計(jì)算器的出現(xiàn)。2. 軟件設(shè)計(jì)方案2.1 設(shè)計(jì)目標(biāo)和實(shí)現(xiàn)方法為了滿足簡(jiǎn)易計(jì)算器的基本要求,可以進(jìn)行基本的運(yùn)算(加減乘除),數(shù)據(jù)歸零和出錯(cuò)警告提示,我們采用基于51單片機(jī)設(shè)計(jì)計(jì)算器,并用七段共陰級(jí)LED 數(shù)碼管顯示數(shù)據(jù),4*4的矩陣鍵盤實(shí)現(xiàn)數(shù)據(jù)的輸入。2.2 整體方案論述根據(jù)簡(jiǎn)單計(jì)算器的功能和本方案中的設(shè)計(jì)指標(biāo)要求,本系統(tǒng)選用了MCS 51 單片機(jī)為主控機(jī)。通過(guò)擴(kuò)展必要的外圍接口

4、電路,實(shí)現(xiàn)對(duì)簡(jiǎn)單計(jì)算器的設(shè)計(jì)。具體設(shè)計(jì)考慮如下:由于要設(shè)計(jì)的是簡(jiǎn)單的計(jì)算器,可以進(jìn)行基本的四則運(yùn)算,對(duì)數(shù)字的大小圍要求不高,故我們采用可以進(jìn)行四位數(shù)字的運(yùn)算,選用8 個(gè)LED 數(shù)碼管顯示數(shù)據(jù)和運(yùn)算結(jié)果。另外鍵盤包括數(shù)字鍵(09)、符號(hào)鍵(+、-、)、清除鍵和等號(hào)鍵,故只需要16 個(gè)按鍵即可。系統(tǒng)模塊圖: 圖2-1 系統(tǒng)模塊圖3. 系統(tǒng)硬件的設(shè)計(jì)3.1 復(fù)位電路的設(shè)計(jì)上電復(fù)位的原理:VCC上電時(shí),C充電,在10K電阻上出現(xiàn)了電壓,使單片機(jī)復(fù)位;幾個(gè)毫秒后,C充滿,10K電阻上電流降為0,電壓也為0,使得單片機(jī)進(jìn)入工作狀態(tài)。 手動(dòng)復(fù)位的原理:工作期間,按下S,C放電。S松手,C又充電,在10K電阻

5、上出現(xiàn)電壓,使得單片機(jī)復(fù)位。幾個(gè)毫秒后,單片機(jī)進(jìn)入工作狀態(tài)。 如SW復(fù)位鍵按下時(shí):RST經(jīng)1k電阻接VCC,獲得10k電阻上所分得電壓,形成高電平,進(jìn)入“復(fù)位狀態(tài)”。 當(dāng)SW復(fù)位鍵斷開(kāi)時(shí):RST經(jīng)10k電阻接地,電流降為0,電阻上的電壓也將為0,RST降為低電平,開(kāi)始正常工作 。對(duì)于成熟產(chǎn)品,從降低成本角度,可以使用上電復(fù)位。另外,作為產(chǎn)品,最好使用上電復(fù)位。因?yàn)槭褂谜咄ǔ](méi)有專業(yè)知識(shí),就知道斷電通電,對(duì)他們來(lái)說(shuō),按鍵復(fù)位成了擺設(shè)。按鍵復(fù)位比較適合樣品制作或者實(shí)驗(yàn)室調(diào)試場(chǎng)合,上電復(fù)位電路成本也低一些。 綜上所述我們?cè)诒痉桨钢羞x用了上電自動(dòng)復(fù)位電路。上位自動(dòng)復(fù)位電路圖和手動(dòng)復(fù)位電路圖如下圖兩種復(fù)

6、位方式 如圖31:3.2 時(shí)鐘振蕩電路的設(shè)計(jì)能夠產(chǎn)生振蕩電流的電路叫做振蕩電路。一般由電阻、電感、電容等元件和電子器件所組成。由電感線圈l和電容器c相連而成的lc電路是最簡(jiǎn)單的一種振蕩電路,其固有頻率為f=sx(12lc。 一種不用外加激勵(lì)就能自行產(chǎn)生交流信號(hào)輸出的電路。它在電子科學(xué)技術(shù)領(lǐng)域中得到廣泛地應(yīng)用,如通信系統(tǒng)中發(fā)射機(jī)的載波振蕩器、接收機(jī)中的本機(jī)振蕩器、醫(yī)療儀器以與測(cè)量?jī)x器中的信號(hào)源等。 XTAL1:反向振蕩放大器的輸入與部時(shí)鐘工作電路的輸入。XTAL2:來(lái)自反向振蕩器的輸出。XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片振蕩器。石晶振蕩和瓷振蕩均可采用此

7、振動(dòng)器。如采用外部時(shí)鐘源驅(qū)動(dòng)器件,XTAL2應(yīng)不接。有余輸入至部時(shí)鐘信號(hào)要通過(guò)一個(gè)二分頻觸發(fā)器,因此對(duì)外部時(shí)鐘信號(hào)的脈寬無(wú)任何要求,但必須保證脈沖的高低電平要求的寬度。使用片振蕩器,可以節(jié)省IO引腳,減少成本,但是部振蕩器使用阻容震蕩,導(dǎo)致它的精度不高,如果使用了串口、或者PWM等對(duì)時(shí)鐘比較敏感的功能,最好還是使用外部晶體振蕩。在本方案中我們選擇了部時(shí)鐘方式,如下圖:兩種時(shí)鐘方式 如圖32:3.3 輸入電路的設(shè)計(jì)每一個(gè)按鍵都有它的行值和列值,行值和列值的組合就是識(shí)別這個(gè)按鍵的編碼。矩陣的行線和列線分別通過(guò)兩并行接口和CPU通信。鍵盤的一端(列線)通過(guò)電阻接VCC,而接地是通過(guò)程序輸出數(shù)字“0”

8、實(shí)現(xiàn)的。鍵盤處理程序的任務(wù)是:確定有無(wú)鍵按下,判斷哪一個(gè)鍵按下,鍵的功能是什么?還要消除按鍵在閉合或斷開(kāi)時(shí)的抖動(dòng)。兩個(gè)并行口中,一個(gè)輸出掃描碼,使按鍵逐行動(dòng)態(tài)接地;另一個(gè)并行口輸入按鍵狀態(tài),由行掃描值和回饋信號(hào)共同形成鍵編碼而識(shí)別按鍵,通過(guò)軟件查表,查出該鍵的功能。當(dāng)無(wú)按鍵閉合時(shí),P10P13 與P14P17 之間開(kāi)路;當(dāng)有鍵閉合時(shí),與閉合鍵相連的兩條I/O 口線之間短路。判斷有無(wú)按鍵按下的方法是:第一步,置列線P14P17 為輸入狀態(tài),從行線P10P13 輸出低電平,讀入列線數(shù)據(jù),若某一列線為低電平,則該列線上有鍵閉合。第二步,行線輪流輸出低電平,從列線P14P17 讀入數(shù)據(jù),若有某一列為低

9、電平,則對(duì)應(yīng)行線上表示有鍵按下。綜合一二兩步的結(jié)果,可以確定按鍵編號(hào)。但是鍵閉合一次只能進(jìn)行一次鍵功能操作,因此須等到按鍵釋放后,再進(jìn)行鍵功能操作,否則按一次鍵,有可能會(huì)連續(xù)多次進(jìn)行同樣的鍵操作。鍵盤是單片機(jī)系統(tǒng)中常用的人機(jī)對(duì)話輸入設(shè)備,用戶通過(guò)鍵盤向單片機(jī)輸入數(shù)據(jù)或者指令。鍵盤控制程序需要完成的任務(wù)有:監(jiān)測(cè)是否有鍵按下,有鍵按下時(shí),在無(wú)硬件去抖的動(dòng)電路時(shí),應(yīng)用軟件延時(shí)方法消除按鍵抖動(dòng)影響;當(dāng)有多個(gè)鍵同時(shí)按下時(shí),只處理一個(gè)按鍵,不管一次按鍵持續(xù)多長(zhǎng)時(shí)間,僅執(zhí)行一次按鍵功能程序。矩陣按鍵掃描程序是一種節(jié)省IO口的方法,按鍵數(shù)目越多節(jié)省IO口就越可觀,思路:先判斷某一列(行)是否有按鍵按下,再判斷

10、該行(列)是那一只鍵按下。但是,在程序的寫(xiě)法上,采用了最簡(jiǎn)單的方法,使得程序的效率最高。本程序中,如果檢測(cè)到了某個(gè)鍵按下了,就不再檢測(cè)其它的按鍵,這完全能滿足絕大多數(shù)需要,又能節(jié)省大量的CPU時(shí)間。本鍵盤掃描程序的優(yōu)點(diǎn)在于:不使用專門的按鍵延時(shí)程序,提高了CPU效率,也不用中斷來(lái)掃描鍵盤,節(jié)省了硬件資源。另外,本鍵盤掃描程序,每次掃描占用CPU時(shí)最短,不論有鍵按下或者無(wú)鍵按下都可以在很短的時(shí)間完成一次掃描。本鍵盤掃描子程序名叫key,每次要掃描時(shí)用lcall key調(diào)用即可。鍵盤可分為兩類:編碼鍵盤和非編碼鍵盤。編碼鍵盤是較多按鍵(20個(gè)以上)和專用驅(qū)動(dòng)芯片的組合,當(dāng)按下某個(gè)鍵時(shí),它能夠處理按

11、鍵抖動(dòng)、連擊等問(wèn)題,直接輸出按鍵的編碼,無(wú)需系統(tǒng)軟件干預(yù)。通用PC機(jī)使用的標(biāo)準(zhǔn)鍵盤就是編碼鍵盤。在智能儀器中,使用并行接口芯片8279或串行接口芯片HD7279均可以組成編碼鍵盤,同時(shí)還可以兼顧數(shù)碼管的顯示驅(qū)動(dòng),其相關(guān)的接口電路和接口軟件均可以在相關(guān)資料中得到。當(dāng)系統(tǒng)功能比較復(fù)雜,案件數(shù)量很多時(shí),采用編碼鍵盤可以簡(jiǎn)化軟件設(shè)計(jì)。但大多數(shù)智能儀器和電子產(chǎn)品的按鍵數(shù)目都不很多(20個(gè)以),為了降低成本和簡(jiǎn)化電路通常采用非編碼鍵盤。非編碼鍵盤的電路由設(shè)計(jì)者根據(jù)需要自己決定,按鍵信息通過(guò)接口軟件來(lái)獲取。本課題需要16個(gè)按鍵,故選擇非編碼鍵盤,為了減少所占用的端口,由P1口采用4*4矩陣式鍵盤。 圖3-3

12、 鍵盤樣式3.4 輸出電路設(shè)計(jì)數(shù)碼管按段數(shù)分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個(gè)發(fā)光二極管單元(多一個(gè)小數(shù)點(diǎn)顯示);按能顯示多少個(gè)“8”可分為1位、2位、4位等等數(shù)碼管;按發(fā)光二極管單元連接方式分為共陽(yáng)極數(shù)碼管和共陰極數(shù)碼管。共陽(yáng)級(jí)數(shù)碼管是指將所有發(fā)光二極管的陽(yáng)極接到一起形成公共陽(yáng)極(COM)的數(shù)碼管。共陽(yáng)級(jí)數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時(shí),相應(yīng)字段就點(diǎn)亮。當(dāng)某一字段的陰極為高電平時(shí),對(duì)應(yīng)的字段就不亮。共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管。共陰數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到地線GND上,當(dāng)

13、某一字段發(fā)光二極管的陽(yáng)極為高電平時(shí),相應(yīng)字段就點(diǎn)亮。當(dāng)某一字段的陽(yáng)極為低電平時(shí),對(duì)應(yīng)的字段就不亮。LED顯示器由七段發(fā)光二極管組成,排列成8字形狀,因此也成為七段LED顯示器,器排列形狀如下圖所示: 圖3-4 LED段碼為了顯示數(shù)字或符號(hào),要為L(zhǎng)ED顯示器提供代碼,即字形代碼。七段發(fā)光二極管,再加上一個(gè)小數(shù)點(diǎn)位,共計(jì)8段,因此提供的字形代碼的長(zhǎng)度正好是一個(gè)字節(jié)。簡(jiǎn)易計(jì)算器用到的數(shù)字09的共陰極字形代碼如下表3-1所示:顯示字型gfedcBa段碼001111113fh1000011006h210110115bh310011114fh4110011066h511011016dh611111017d

14、h7000011107h811111117fh911011116fh表3-5 09七段數(shù)碼管共陰級(jí)字形代碼由于數(shù)值單元存放的是二進(jìn)制數(shù),而我們大家熟悉的是十進(jìn)制數(shù),所以應(yīng)將數(shù)值單元中的二進(jìn)制數(shù)字轉(zhuǎn)換為十進(jìn)制數(shù)字,即BCD碼。要通過(guò)數(shù)碼管顯示出當(dāng)前的數(shù)值,還必須將BCD碼進(jìn)一步轉(zhuǎn)換為七段碼,轉(zhuǎn)換的最終結(jié)果數(shù)據(jù)存放于顯示緩沖區(qū)30H-33H單元中,其中30H單元存放數(shù)值的個(gè)位七段碼,31H單元存放數(shù)值的十位七段碼,32H單元存放數(shù)值的百位七段碼,33H單元存放數(shù)值的千位七段碼。本方案設(shè)計(jì)中由P1口輸出字形碼,P0口輸出字位碼。先將存放于30H單元的數(shù)值個(gè)位七段碼由P1口輸出,同時(shí)P0口輸出使數(shù)值個(gè)

15、位顯示數(shù)碼管點(diǎn)亮的字位碼。由于采用的是共陰數(shù)碼管,所以只有該位數(shù)碼管對(duì)應(yīng)的P0.0為1,其他位P0.1-P0.3位0,點(diǎn)亮延時(shí)10MS。然后P1口輸出數(shù)值十位七段碼,P0.1位1,數(shù)值十位數(shù)碼管點(diǎn)亮,延時(shí)10MS。接著P1口輸出數(shù)值百位七段碼,P0.2為1,數(shù)值百位數(shù)碼管點(diǎn)亮,延時(shí)10MS。最后P1口輸出數(shù)值千位七段碼,P0.3為1,數(shù)值千位數(shù)碼管點(diǎn)亮,延時(shí)10MS。發(fā)光二極管LED 是單片機(jī)應(yīng)用系統(tǒng)中的一種簡(jiǎn)單而最常用的輸出設(shè)備,其在系統(tǒng)中的主要作用是顯示單片機(jī)的輸出數(shù)據(jù)、狀態(tài)等。因而作為典型的外圍器件,LED 顯示單元是反映系統(tǒng)輸出和操作輸入的有效元器件。LED 具備數(shù)字接口可以方便的和單

16、片機(jī)引腳連接;它的優(yōu)點(diǎn)是價(jià)格低,壽命長(zhǎng),對(duì)電壓電流的要求低以與容易實(shí)現(xiàn)多路等,因而在單片機(jī)應(yīng)用系統(tǒng)中獲得了廣泛的應(yīng)用,所以在此設(shè)計(jì)中我首先選用了LED作為顯示器件。如圖3-10所示:圖3-6 數(shù)碼顯示管4. 程序設(shè)計(jì)本方案中的程序設(shè)計(jì)采用了模塊化設(shè)計(jì),各部分程序都分別進(jìn)行獨(dú)立的設(shè)計(jì),最后主程序通過(guò)調(diào)用各模塊程序來(lái)運(yùn)行,編程中所使用的語(yǔ)言全部都是C語(yǔ)言,可以利用keil軟件進(jìn)行靈活的編譯,編譯完成后也可生成HEX文件,利用ISP編程軟件通過(guò)串口寫(xiě)到單片機(jī)中。本方案程序設(shè)計(jì)中部分包括主程序模塊、液晶顯示模塊、功能按鍵和控制輸出等部分。下面僅僅敘述了各部分程序設(shè)計(jì)的基本思想和流程圖,詳細(xì)程序請(qǐng)參閱附

17、錄。4.1 讀鍵輸入程序流程圖為了實(shí)現(xiàn)鍵盤的數(shù)據(jù)輸入功能和命令處理功能,每個(gè)鍵都有其處理子程序,為此每個(gè)鍵都對(duì)應(yīng)一個(gè)碼鍵碼。為了得到被按鍵的鍵碼,現(xiàn)使用行掃描法識(shí)別按鍵。列掃描信號(hào)進(jìn)行讀入行的信號(hào)判斷該列是否有列的輸出是則進(jìn)行按照行列計(jì)算鍵盤的值,查表取得鍵碼并返回若否則進(jìn)行再次掃描。程序框圖如下41圖:開(kāi)始初始化地址讀入行掃描信號(hào)輸出列掃描信號(hào)等待按鍵釋放該列有信號(hào)?四列掃描完?返回根據(jù)行列計(jì)算鍵值返回列掃描信號(hào)位移查表得鍵碼是否是否 鍵盤輸入流程圖41 4.2 LED顯示程序流程圖設(shè)計(jì)LED數(shù)碼管要正常顯示,就要用驅(qū)動(dòng)電路來(lái)驅(qū)動(dòng)數(shù)碼管的各個(gè)段碼,從而顯示出我們需要的數(shù)位,因此根據(jù)LED數(shù)碼

18、管的驅(qū)動(dòng)方式的不同,可以分為靜態(tài)式和動(dòng)態(tài)式兩類。 A、 靜態(tài)顯示驅(qū)動(dòng): 靜態(tài)驅(qū)動(dòng)也稱直流驅(qū)動(dòng)。靜態(tài)驅(qū)動(dòng)是指每個(gè)數(shù)碼管的每一個(gè)段碼都由一個(gè)單片機(jī)的I/O埠進(jìn)行驅(qū)動(dòng),或者使用如BCD碼二-十進(jìn)位*器*進(jìn)行驅(qū)動(dòng)。靜態(tài)驅(qū)動(dòng)的優(yōu)點(diǎn)是編程簡(jiǎn)單,顯示亮度高,缺點(diǎn)是占用I/O埠多,如驅(qū)動(dòng)5個(gè)數(shù)碼管靜態(tài)顯示則需要58=40根I/O埠來(lái)驅(qū)動(dòng),要知道一個(gè)89S51單片機(jī)可用的I/O埠才32個(gè)呢。故實(shí)際應(yīng)用時(shí)必須增加*驅(qū)動(dòng)器進(jìn)行驅(qū)動(dòng),增加了硬體電路的復(fù)雜性。 B、 動(dòng)態(tài)顯示驅(qū)動(dòng): 數(shù)碼管動(dòng)態(tài)顯示介面是單片機(jī)中應(yīng)用最為廣泛的一種顯示方式之一,動(dòng)態(tài)驅(qū)動(dòng)是將所有數(shù)碼管的8個(gè)顯示筆劃a,b,c,d,e,f,g,dp 的同名端

19、連在一起,另外為每個(gè)數(shù)碼管的公共極COM增加位元選通控制電路,位元選通由各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時(shí),所有數(shù)碼管都接收到一樣的字形碼,但究竟是哪個(gè)數(shù)碼管會(huì)顯示出字形,取決于單片機(jī)對(duì)位元選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開(kāi),該位元就會(huì)顯示出字形,沒(méi)有選通的數(shù)碼管就不會(huì)亮。 透過(guò)分時(shí)輪流控制各個(gè)LED數(shù)碼管的COM端,就使各個(gè)數(shù)碼管輪流受控顯示,這就是動(dòng)態(tài)驅(qū)動(dòng)。在輪流顯示過(guò)程中,每位元數(shù)碼管的點(diǎn)亮?xí)r間為12ms,由于人的視覺(jué)暫留現(xiàn)象與發(fā)光二極體的余輝效應(yīng),盡管實(shí)際上各位數(shù)碼管并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示資料,不會(huì)

20、有閃爍感,動(dòng)態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O埠,而且功耗更低。綜上所述我們?cè)诒驹O(shè)計(jì)方案中選用了動(dòng)態(tài)顯示。6位LED顯示的程序框圖如圖4-2所示:圖4-2 LED顯示流程圖4.3主程序設(shè)計(jì)主程序進(jìn)行程序中用到的一些存儲(chǔ)單元的初始化,數(shù)值顯示和4*4鍵盤掃描。首先,進(jìn)行存儲(chǔ)單元初始化,給數(shù)碼管顯示單元30H-33H賦予“0000”字形數(shù)據(jù),將數(shù)值計(jì)數(shù)單元,存儲(chǔ)單元,23H-25H,34H-37H,38H,39H,3AH,3BH,3CH,賦予初值零。之后,調(diào)用鍵盤掃描子程序,和數(shù)碼管顯示數(shù)據(jù)轉(zhuǎn)換程序,數(shù)碼管動(dòng)態(tài)顯示子程序。主程序不斷進(jìn)行鍵盤掃描,數(shù)碼管顯示數(shù)據(jù)轉(zhuǎn)換子程序和動(dòng)態(tài)顯示

21、子程序。 首先初始化參數(shù),送LED低位顯示“0”,功能鍵(“+” 、“-” 、“*” 、“/” 、 “+” )位不顯示。然后掃描鍵盤看是否有鍵輸入,若有,讀取鍵碼。判斷鍵碼是數(shù)字鍵、清零鍵還是“+” 、“” 、“*”“/” ,是數(shù)值鍵則送LED顯示并保存數(shù)值,是清零鍵則做清零處理,是功能鍵則又判斷是“=”還是運(yùn)算鍵,若是“=”則計(jì)算最后結(jié)果并送LED顯示,若是運(yùn)算鍵則保存相對(duì)運(yùn)算程序的首地址。運(yùn)算主程序框圖如4-3所示:圖4-3 運(yùn)算主程序框圖4.4仿真與調(diào)試在程序設(shè)計(jì)方法上,模塊化程序設(shè)計(jì)是單片機(jī)應(yīng)用中最常用的程序設(shè)計(jì)方法。設(shè)計(jì)的中心思想是把一個(gè)復(fù)雜應(yīng)用程序按整體功能劃分成若干相對(duì)獨(dú)立的程序

22、模塊,各模塊可以進(jìn)行單獨(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ì)。這種方法比較符合人們的日常思維,缺點(diǎn)是一級(jí)的程序錯(cuò)誤會(huì)對(duì)整個(gè)程序產(chǎn)生影響。功能和操作:加減乘除運(yùn)算和顯示。A:上電后,屏幕初始化,按下“ON/C”鍵。B: 計(jì)算。按下數(shù)字鍵,屏幕顯示要運(yùn)算的第一個(gè)數(shù)字,再按下符號(hào)鍵,然后再按下數(shù)字鍵,屏幕顯示要運(yùn)算的第二個(gè)數(shù)字,最后按下“”號(hào)鍵,屏幕上顯示出計(jì)算結(jié)果。C:如果要再次

23、計(jì)算,可以按下“ON/C”鍵清零,或者按下單片機(jī)的復(fù)位鍵,重新初始化。硬件聯(lián)系圖如下圖: 硬件連線圖4.45 結(jié)論課程設(shè)計(jì)是培養(yǎng)學(xué)生運(yùn)用所學(xué)的專業(yè)知識(shí),發(fā)現(xiàn),提出,分析和解決實(shí)際問(wèn)題,鍛煉實(shí)際動(dòng)手能力的重要環(huán)節(jié),是對(duì)學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察,隨著科學(xué)技術(shù)日新月異的發(fā)展,單片機(jī)已經(jīng)成為當(dāng)今計(jì)算機(jī)應(yīng)用中空前活躍的領(lǐng)域,在生活中可以說(shuō)遍布我們生活之中。這次設(shè)計(jì)進(jìn)一步端正了我的學(xué)習(xí)態(tài)度,學(xué)會(huì)了實(shí)事,嚴(yán)謹(jǐn)?shù)淖黠L(fēng),對(duì)自己要嚴(yán)格要求。急于求成是不好的,通過(guò)此次畢業(yè)設(shè)計(jì)我深有體會(huì)。如果省略了那些必要的步驟,急于求成,不僅會(huì)浪費(fèi)時(shí)間,還會(huì)適得其反。我覺(jué)得動(dòng)手之前,應(yīng)該有清楚的步驟,這一步是很重要的。就目

24、前來(lái)說(shuō),我的動(dòng)手能力雖然還有差距,但我知道,通過(guò)我的不懈努力,在動(dòng)手方面,我會(huì)得到提高。這一點(diǎn),我堅(jiān)信。在此次的課程設(shè)計(jì)中我最大的體會(huì)就是進(jìn)一步認(rèn)識(shí)到了理論聯(lián)系實(shí)踐的重要性。一份耕耘,一份收獲。通過(guò)這段時(shí)間的設(shè)計(jì),讓我明白科學(xué)的思維方法和學(xué)習(xí)方法是多么重要,只有這樣才能夠有很高的效率,才能夠讓自己的工作更完美??偠灾?,此次畢業(yè)設(shè)計(jì)讓我學(xué)到了好多平時(shí)在課堂上學(xué)不到的東西,增加了我的知識(shí)運(yùn)用能力,增強(qiáng)我的實(shí)際操作能力。老師給我們提供這么好的機(jī)會(huì),為我們之后走向社會(huì)奠定了一個(gè)好的基礎(chǔ)。在我做課程設(shè)計(jì)的整個(gè)過(guò)程中,無(wú)論是在設(shè)計(jì)的選題、構(gòu)思和資料的收集方面,還是在設(shè)計(jì)的研究方法以與成文定稿方面,或是在

25、論文的寫(xiě)作過(guò)程中,都得到了許多同學(xué)的寶貴建議,在此一并致以誠(chéng)摯的意。感所有關(guān)心、支持、幫助過(guò)我的同學(xué)。6 元件清單元件數(shù)量單價(jià)(元)12M晶振 11STC89C52芯片14輕觸按鍵200.1排阻10.5四位一體公陰數(shù)碼管21.5電阻若干0.5杜邦線400.1排針400.1電容若干0.5總計(jì)19.5附錄1 簡(jiǎn)易計(jì)算器源程序#include #define uchar unsigned char#define uint unsigned int#define duan P0/數(shù)碼管顯示段選定義#define wei P2/數(shù)碼管顯示位選定義#define key P3/鍵盤接口定義sbit OFF

26、 = P10;/關(guān)機(jī)鍵定義unsigned long int shu1,shu2;/進(jìn)行運(yùn)算的兩個(gè)變量數(shù)uchar num;/鍵盤掃描返回值char flag1,flag_shu,flag_fuhao,fuhao,newkey;/flag1開(kāi)機(jī)標(biāo)志newkey新按鍵標(biāo)志,fuhao運(yùn)算符char key_shu;/按鍵值unsigned char code Wela=0xdf,0xef,0xf7,0xfb,0xfd,0xfe;/六位數(shù)碼管的位選unsigned char code Duan=0x3f,0x06,0x5b,/ 0 1 20x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00; /3 4 5 6 7 8 9 無(wú)顯示共陰極數(shù)碼管uchar keyscan();/鍵盤掃描函數(shù)void display(unsigned long int );/數(shù)碼管顯示函數(shù)void delay(uint i)/延時(shí)函數(shù)while(i-);/* 主函數(shù)*/void main()flag1=0;/標(biāo)志關(guān)機(jī)w

溫馨提示

  • 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)論