硬件課程設(shè)計(jì)報(bào)告--計(jì)算器_第1頁(yè)
已閱讀1頁(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、<p><b>  硬件課程設(shè)計(jì)報(bào)告</b></p><p><b>  摘 要</b></p><p>  單片機(jī)是指一個(gè)集成在一塊芯片上的完整計(jì)算機(jī)系統(tǒng)。盡管它的大部分功能集成在一塊小芯片上,但是它具有一個(gè)完整計(jì)算機(jī)所需要的大部分部件:CPU、內(nèi)存、內(nèi)部和外部總線系統(tǒng),目前大部分還會(huì)具有外存。同時(shí)集成諸如通訊接口、定時(shí)器,實(shí)時(shí)時(shí)鐘

2、等外圍設(shè)備。而現(xiàn)在最強(qiáng)大的單片機(jī)系統(tǒng)甚至可以將聲音、圖像、網(wǎng)絡(luò)、復(fù)雜的輸入輸出系統(tǒng)集成在一塊芯片上。目前單片機(jī)滲透到我們生活的各個(gè)領(lǐng)域,幾乎很難找到哪個(gè)領(lǐng)域沒(méi)有單片機(jī)的蹤跡。導(dǎo)彈的導(dǎo)航裝置,飛機(jī)上各種儀表的控制,計(jì)算機(jī)的網(wǎng)絡(luò)通訊與數(shù)據(jù)傳輸,工業(yè)自動(dòng)化過(guò)程的實(shí)時(shí)控制和數(shù)據(jù)處理,廣泛使用的各種智能IC卡,民用豪華轎車的安全保障系統(tǒng),錄像機(jī)、攝像機(jī)、全自動(dòng)洗衣機(jī)的控制,以及程控玩具、電子寵物等等,這些都離不開(kāi)單片機(jī)。更不用說(shuō)自動(dòng)控制領(lǐng)域的機(jī)器

3、人、智能儀表、醫(yī)療器械了。因此,單片機(jī)的學(xué)習(xí)、開(kāi)發(fā)與應(yīng)用將造就一批計(jì)算機(jī)應(yīng)用與智能化控制的科學(xué)家、工程師。本設(shè)計(jì)通過(guò)將矩陣鍵盤(pán)、數(shù)碼管、蜂鳴器及單片機(jī)結(jié)合起來(lái),構(gòu)成一個(gè)簡(jiǎn)單的計(jì)算器。此計(jì)算器可進(jìn)行1萬(wàn)以內(nèi)的加減乘除運(yùn)算,并通過(guò)數(shù)碼管顯示。當(dāng)運(yùn)算結(jié)果溢出時(shí),蜂鳴器會(huì)發(fā)出報(bào)警,同時(shí)數(shù)碼管顯示E(error)。按鍵的同時(shí)蜂鳴器會(huì)發(fā)生,表示</p><p><b>  關(guān)鍵詞:</b></p&

4、gt;<p>  單片機(jī);4*4矩陣鍵盤(pán);數(shù)碼管;蜂鳴器;復(fù)位電路</p><p><b>  目 錄</b></p><p>  1 設(shè)計(jì)任務(wù)與要求………………………………………………………………………5</p><p>  1.1課程介紹……………………………………………………………………………5</p>

5、<p>  1.2計(jì)算器的設(shè)計(jì)與要求………………………………………………………………5</p><p>  2 總體方案…………………………………………………………………………5</p><p>  2.1硬件部分…………………………………………………………………………5</p><p>  2.2軟件部分…………………………………………………………………

6、……5</p><p>  3硬件方案………………………………………………………………6</p><p>  3.1硬件組成…………………………………………………………………………6</p><p>  3.2各模塊功能介紹 …………………………………………………………………7</p><p>  3.2.1 4*4矩陣鍵盤(pán)………………………

7、…………………………………………7</p><p>  3.2.2 4位數(shù)碼管顯示電路…………………………………………………………7</p><p>  3.2.1 單片機(jī)介紹…………………………………………………………………8</p><p>  4軟件方案………………………………………………………………10</p><p>  4.1程序

8、組成…………………………………………………………………………10</p><p>  4.2程序流程圖…………………………………………………………………10</p><p>  4.3程序清單…………………………………………………………………12</p><p>  5系統(tǒng)設(shè)計(jì)過(guò)程中的問(wèn)題及解決方案…………………………………………………12</p>&

9、lt;p>  5.1問(wèn)題1及解決方案………………………………………………………………12</p><p>  5.2問(wèn)題2及解決方案………………………………………………………………12</p><p>  5.2問(wèn)題3及解決方案………………………………………………………………12</p><p>  6實(shí)驗(yàn)總結(jié)與體會(huì)…………………………………………………………

10、……12</p><p>  附錄……………………………………………………………………………………13</p><p><b>  1 設(shè)計(jì)任務(wù)與要求</b></p><p><b>  1.1 課程介紹</b></p><p>  《硬件課程設(shè)計(jì)》是繼《微機(jī)原理與接口技術(shù)》課程教學(xué)后的一個(gè)重要的綜

11、合實(shí)踐教學(xué)環(huán)節(jié),它能起到鞏固課堂和書(shū)本上所學(xué)知識(shí),加強(qiáng)綜合能力,提高系統(tǒng)設(shè)計(jì)水平,啟發(fā)創(chuàng)新思想的效果。課程設(shè)計(jì)的目地是綜合這些基礎(chǔ)知識(shí),就具體問(wèn)題讓學(xué)生做出軟、硬件解決方案并付諸實(shí)施,以培養(yǎng)解決實(shí)際問(wèn)題的能力。要求每個(gè)學(xué)生都能自己動(dòng)手獨(dú)立設(shè)計(jì)完成一個(gè)典型的微機(jī)應(yīng)用小系統(tǒng)。</p><p>  1.2 計(jì)算器的設(shè)計(jì)與要求</p><p>  通過(guò)4*4鍵盤(pán)獲得按鍵信息,蜂鳴器隨著按鍵發(fā)聲。單

12、片機(jī)處理按鍵信息,計(jì)算后以4位數(shù)碼管顯示。若計(jì)算結(jié)果溢出,則蜂鳴器長(zhǎng)響提示。按下復(fù)位鍵,則可以實(shí)現(xiàn)單片機(jī)的復(fù)位。</p><p>  要求:具有計(jì)算器的基本按鍵(0~9數(shù)字鍵、加減乘除鍵、清零鍵、等于鍵)。</p><p>  可以進(jìn)行1萬(wàn)以內(nèi)的加減乘除運(yùn)算,正確顯示結(jié)果。</p><p>  通過(guò)數(shù)碼管正確顯示運(yùn)算結(jié)果。</p><p> 

13、 以蜂鳴器表示按鍵正確按下,并可以溢出報(bào)警。</p><p><b>  2 總體方案</b></p><p><b>  2.1 硬件部分</b></p><p>  在此設(shè)計(jì)中主要用到的部件有:4*4鍵盤(pán)電路、4位數(shù)碼管顯示電路、單片機(jī)最小系統(tǒng)、復(fù)位電路、蜂鳴器電路。利用分步操作,先實(shí)現(xiàn)各部分的子功能,再將這些子功能有

14、機(jī)地結(jié)合到一起,實(shí)現(xiàn)系統(tǒng)的整體設(shè)計(jì)要求。</p><p><b>  各模塊功能如下:</b></p><p>  4*4鍵盤(pán)電路:通過(guò)鍵盤(pán)掃描程序,獲得按鍵信息。</p><p>  4位數(shù)碼管顯示電路:顯示輸入信息及運(yùn)算結(jié)果。</p><p>  復(fù)位電路:實(shí)現(xiàn)單片機(jī)的復(fù)位操作。</p><p&g

15、t;  蜂鳴器電路:表示按鍵已按下,并可以溢出報(bào)警。</p><p><b>  2.2 軟件部分</b></p><p>  相應(yīng)的程序清單中分為鍵盤(pán)掃描子程序、顯示子程序、計(jì)算子程序及初始化子程序。在主程序中分別調(diào)用各子程序,實(shí)現(xiàn)計(jì)算器的功能。</p><p><b>  3 硬件方案</b></p>&

16、lt;p><b>  3.1 硬件組成</b></p><p>  硬件部分由4*4鍵盤(pán)電路、4位數(shù)碼管顯示電路、單片機(jī)最小系統(tǒng)、復(fù)位電路、蜂鳴器電路組成。各部分的連接關(guān)系如下:</p><p>  3.2各功能模塊介紹</p><p>  3.2.1 4*4矩陣鍵盤(pán)</p><p>  矩陣式鍵盤(pán)的結(jié)構(gòu)與工作原理

17、</p><p>  在鍵盤(pán)中按鍵數(shù)量較多時(shí),為了減少I/O口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤(pán)中,每條水平線和垂直線在交叉處不直接連通,而是通過(guò)一個(gè)按鍵加以連接。這樣,一個(gè)端口就可以構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線用于鍵盤(pán)多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤(pán),而直接用端口線則只能多出一鍵。由此可見(jiàn),在需要的鍵數(shù)比較多時(shí),采用矩陣法來(lái)做鍵盤(pán)是合理的。&l

18、t;/p><p>  矩陣式結(jié)構(gòu)的鍵盤(pán)顯然比直接法要復(fù)雜一些,識(shí)別也要復(fù)雜一些,列線通過(guò)電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒(méi)有按下時(shí),所有的輸出端都是高電平,代表無(wú)鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會(huì)被拉低,這樣,通過(guò)讀入輸入線的狀態(tài)就可得知是否有鍵按下了。</p><p>  鍵盤(pán)掃描程序一般應(yīng)包括以下內(nèi)容:&

19、lt;/p><p><b>  判別有無(wú)鍵按下。</b></p><p>  鍵盤(pán)掃描取得閉合鍵的行、列值。</p><p>  用計(jì)算法或查表法得到鍵值。</p><p>  判斷閉合鍵是否釋放,如沒(méi)釋放則繼續(xù)等待。</p><p>  將閉合鍵號(hào)保存,同時(shí)轉(zhuǎn)去執(zhí)行該閉合鍵的功能。</p>

20、;<p>  3.2.2 4位數(shù)碼管顯示電路</p><p>  數(shù)碼管可以分為共陽(yáng)極與共陰極兩種,共陽(yáng)極就是把所有LED的陽(yáng)極連接到共同接點(diǎn),而每個(gè)LED的陰極分別為a、b、c、d、e、f、g及 dp(小數(shù)點(diǎn));共陰極則是把所有LED的陰極連接到共同接點(diǎn),而每個(gè)LED的陽(yáng)極分別為a、b、c、d、e、f、g及dp(小數(shù)點(diǎn))。8個(gè)LED分別與上面那個(gè)圖中的a~dp各段相對(duì)應(yīng),通過(guò)控制各個(gè)LED的亮滅來(lái)

21、顯示數(shù)字。</p><p>  還有一種比較常用的是四位數(shù)碼管,內(nèi)部的4個(gè)數(shù)碼管共用a~dp這8根數(shù)據(jù)線,為人們的使用提供了方便,因?yàn)槔锩嬗?個(gè)數(shù)碼管,所以它有4個(gè)公共端,加上 a~dp,共有12個(gè)引腳。引腳排列依然是從左下角的那個(gè)腳(1腳)開(kāi)始,以逆時(shí)針?lè)较蛞?次為1~12腳,下圖中的數(shù)字與之一一對(duì)應(yīng)。</p><p>  動(dòng)態(tài)顯示驅(qū)動(dòng):數(shù)碼管動(dòng)態(tài)顯示接口是單片機(jī)中應(yīng)用最為廣泛的一種顯示

22、方式之一,動(dòng)態(tài)驅(qū)動(dòng)是將所有數(shù)碼管的8個(gè)顯示筆劃“a,b,c,d,e,f,g,dp”的同名端連在一起,另外為每個(gè)數(shù)碼管的公共極增加位選通控制電路,位選通由各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時(shí),所有數(shù)碼管都接收到相同的字形碼,但究竟是那個(gè)數(shù)碼管會(huì)顯示出字形,取決于單片機(jī)對(duì)位選通端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開(kāi),該位就顯示出字形,沒(méi)有選通的數(shù)碼管就不會(huì)亮。通過(guò)分時(shí)輪流控制各個(gè)數(shù)碼管的端,就使各個(gè)數(shù)碼管輪流受控

23、顯示,這就是動(dòng)態(tài)驅(qū)動(dòng)。在輪流顯示過(guò)程中,每位數(shù)碼管的點(diǎn)亮?xí)r間為1~2ms,由于人的視覺(jué)暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位數(shù)碼管并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感,動(dòng)態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低。</p><p>  3.2.3 單片機(jī)介紹</p><p>  1.主要特性:·

24、4K字節(jié)可編程閃爍存儲(chǔ)器 ·全靜態(tài)工作:0Hz-24Hz·三級(jí)程序存儲(chǔ)器鎖定·128*8位內(nèi)部RAM·32可編程I/O線·兩個(gè)16位定時(shí)器/計(jì)數(shù)器·5個(gè)中斷源 ·可編程串行通道·低功耗的閑置和掉電模式·片內(nèi)振蕩器和時(shí)鐘電路 2.管腳說(shuō)明: VCC:供電電壓。 GND:接地。 P0口:P0口為一

25、個(gè)8位漏級(jí)開(kāi)路雙向I/O口,每腳可吸收8TTL門(mén)電流。當(dāng)P1口的管腳第一次寫(xiě)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門(mén)電流。P1口管腳寫(xiě)入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部

26、下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。  P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門(mén)電流,當(dāng)P2口被寫(xiě)“1”時(shí),其管腳</p><p><b>  4 軟件方案</b></p><p><b>  4.1 程序組成</b>&

27、lt;/p><p>  軟件部分由主函數(shù)、初始化子函數(shù)、延時(shí)子函數(shù)、鍵盤(pán)掃描子函數(shù)、計(jì)算子函數(shù)組成及顯示子函數(shù)。</p><p>  主函數(shù):負(fù)責(zé)調(diào)用各子程序,實(shí)現(xiàn)計(jì)算器的整體功能。</p><p>  初始化子函數(shù):將各變量進(jìn)行初始化。</p><p>  鍵盤(pán)掃描子函數(shù):實(shí)現(xiàn)鍵盤(pán)掃描功能,獲得按鍵值。</p><p>

28、  計(jì)算子函數(shù):根據(jù)按鍵所得的運(yùn)算符號(hào),進(jìn)行加減乘除運(yùn)算。</p><p>  顯示子函數(shù):顯示按鍵信息及運(yùn)算結(jié)果。</p><p><b>  4.2 程序流程圖</b></p><p><b>  流程圖如下:</b></p><p><b>  4.3 程序清單</b>&

29、lt;/p><p><b>  程序清單見(jiàn)附錄</b></p><p>  5 系統(tǒng)設(shè)計(jì)過(guò)程中的問(wèn)題及解決方案</p><p>  5.1 問(wèn)題1及解決方案</p><p><b>  數(shù)碼管顯示混亂。</b></p><p>  程序中的變量使用的是unsigned char型

30、,輸入或計(jì)算所得的數(shù)據(jù)超過(guò)范圍,因此造成顯示混亂。只需將變量的類型改為unsigned int型即可。</p><p>  5.2 問(wèn)題2及解決方案</p><p>  鍵盤(pán)按下時(shí)沒(méi)有效果。</p><p>  矩陣鍵盤(pán)的掃描原理是逐行掃描,并回讀行列信息,與設(shè)定的值進(jìn)行比較以確定是哪一個(gè)鍵按下。由于硬件電路中行列均焊接了電阻,使得電壓信號(hào)比較微弱,因此單片機(jī)回讀到

31、錯(cuò)誤的信息。解決方法是拆掉所焊接的電阻。</p><p>  5.3 問(wèn)題3及解決方案</p><p>  程序中所計(jì)算的結(jié)果有誤。</p><p>  這是因?yàn)楫?dāng)沒(méi)有鍵按下時(shí),程序反復(fù)進(jìn)入上一次進(jìn)入的子程序,造成計(jì)算結(jié)果錯(cuò)誤及顯示錯(cuò)誤。因此,要在程序中設(shè)定一個(gè)標(biāo)志符號(hào),保證只有在有鍵按下的情況下才進(jìn)入相應(yīng)的子程序。</p><p>  5.

32、4 問(wèn)題4及解決方案</p><p>  關(guān)于蜂鳴器的各種問(wèn)題。</p><p>  蜂鳴器的高電平斷應(yīng)接到電源開(kāi)關(guān)的后面,若直接接到電源正極,當(dāng)單片機(jī)還沒(méi)上電時(shí)蜂鳴器便一直響。經(jīng)過(guò)反復(fù)試驗(yàn),控制蜂鳴器的程序段應(yīng)放到鍵盤(pán)掃描子程序的末端,這樣每當(dāng)有鍵按下時(shí)蜂鳴器便會(huì)隨之響一下。至于蜂鳴器發(fā)聲的持續(xù)時(shí)間也要經(jīng)過(guò)反復(fù)試驗(yàn),才能得到合適的效果。</p><p><b

33、>  6 實(shí)驗(yàn)總結(jié)與體會(huì)</b></p><p>  通過(guò)此次硬件課程設(shè)計(jì),了解了單片機(jī)的基本使用及功能,并初步掌握了單片機(jī)C語(yǔ)言程序的編寫(xiě)。在程序編寫(xiě)過(guò)程中,學(xué)會(huì)了程序逐步改進(jìn)的方法,對(duì)照硬件的仿真軟件,逐步改善程序的功能。</p><p>  在搭建硬件電路時(shí),要做到耐心仔細(xì)。因?yàn)橛布附渝e(cuò)誤會(huì)直接導(dǎo)致設(shè)計(jì)的失敗。當(dāng)發(fā)現(xiàn)硬件有錯(cuò)誤時(shí),要認(rèn)真檢查所焊接的每一條電路,對(duì)照

34、所設(shè)計(jì)的電路圖查處錯(cuò)誤。在焊接時(shí),為避免線路過(guò)于混亂,可設(shè)計(jì)適當(dāng)?shù)牟遽?,這樣可以簡(jiǎn)化電路的焊接以及電路的排錯(cuò)。</p><p>  此外,在此次設(shè)計(jì)過(guò)程中,深刻體會(huì)到應(yīng)該加強(qiáng)專業(yè)知識(shí)的學(xué)習(xí),不管是在硬件還是在軟件方面。同時(shí),要加強(qiáng)動(dòng)手實(shí)踐的能力,將課本所學(xué)知識(shí)運(yùn)用到實(shí)踐中去,這樣才能真正掌握所學(xué)的知識(shí)。</p><p><b>  附錄</b></p>

35、<p><b>  程序清單如下:</b></p><p>  #include<reg51.h></p><p>  #define uint unsigned int//宏定義</p><p>  #define uchar unsigned char</p><p>  uchar

36、code table[]={//數(shù)碼管顯示表</p><p>  0x3f,0x06,0x5b,0x4f,</p><p>  0x66,0x6d,0x7d,0x07,</p><p>  0x7f,0x6f,0x77,0x7c,</p><p>  0x39,0x5e,0x79,0x71};</p><p&g

37、t;  uint num,num1,temp,ge,shi,bai,qian;//程序中用到的變量</p><p>  unit flag,flag2,previous,current,sign;</p><p>  sbit speaker=P0^0;</p><p>  //用P0^0控制蜂鳴器</p><p>  void del

38、ay(uint z);</p><p>  void ini();//子函數(shù)聲明</p><p>  void store(uint num2);</p><p>  void calculate(uint sign1);</p><p>  uint keyscan();</p><p>  void

39、 display(uint aa);</p><p>  /*在主函數(shù)中分別調(diào)用各子函數(shù),實(shí)現(xiàn)計(jì)算器的整體功能。首先進(jìn)行初始化,然后根據(jù)所按下的數(shù)值調(diào)用相應(yīng)的子函數(shù)。*/</p><p>  void main()//主函數(shù)</p><p><b>  {</b></p><p><b>  

40、ini();</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  num1=keyscan();//調(diào)用鍵盤(pán)掃描子函數(shù)</p><p>  if(num1<10)//若按鍵小于10,則調(diào)用子函數(shù)

41、</p><p><b>  {</b></p><p>  store(num);</p><p><b>  flag2=0;</b></p><p><b>  }</b></p><p>  if(num1==10)//若按鍵為10,則調(diào)

42、用初始化子函數(shù)</p><p><b>  {</b></p><p><b>  ini();</b></p><p><b>  flag2=0;</b></p><p><b>  }</b></p><p>  if(num

43、1==11)//若按鍵為11,則調(diào)用計(jì)算子函數(shù)</p><p><b>  {</b></p><p>  calculate(sign);</p><p><b>  flag2=0;</b></p><p>  current=0;</p><p><b

44、>  } </b></p><p>  if(num1>11 && num1<16)//否則調(diào)用顯示子函數(shù)并保存標(biāo)志</p><p><b>  {</b></p><p>  display(previous);</p><p><b>  flag=1;

45、</b></p><p>  sign=num1;</p><p><b>  flag2=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b&g

46、t;</p><p>  void ini()//初始化子函數(shù)</p><p><b>  {</b></p><p>  speaker=1;//初始化各種標(biāo)志</p><p><b>  sign=0;</b></p><p><b&g

47、t;  flag=0;</b></p><p>  previous=0;</p><p>  current=0;</p><p>  qian=0;bai=0;shi=0;ge=0;</p><p>  P1=0xfe;//計(jì)算器初始時(shí)顯示數(shù)字0</p><p>  P3=table[0

48、];</p><p>  delay(1);</p><p><b>  }</b></p><p>  void delay(uint z)</p><p><b>  {</b></p><p><b>  uint x,y;</b></p&

49、gt;<p>  for(x=z;x>0;x--)</p><p>  for(y=110;y>0;y--);</p><p><b>  }</b></p><p>  void store(uint num2)//此函數(shù)用于組裝數(shù)字</p><p><b>  {<

50、;/b></p><p>  if(flag==0)</p><p><b>  {</b></p><p>  if(flag2==1)</p><p>  {previous=previous*10+num2;}//前一位乘10便得到當(dāng)前的數(shù)值</p><p><b>  e

51、lse</b></p><p>  previous=previous;</p><p>  display(previous);</p><p><b>  }</b></p><p>  if(flag==1)</p><p><b>  {</b></

52、p><p>  if(flag2==1)</p><p>  {current=current*10+num2;}</p><p><b>  else</b></p><p>  current=current;</p><p>  display(current);</p><

53、p><b>  }</b></p><p><b>  }</b></p><p>  /*計(jì)算子函數(shù)是根據(jù)標(biāo)志進(jìn)行相應(yīng)的計(jì)算,當(dāng)計(jì)算結(jié)果發(fā)生溢出時(shí)顯示E(error),并使蜂鳴器長(zhǎng)響報(bào)警。*/</p><p>  void calculate(uint sign1)</p><p><

54、b>  {</b></p><p>  if(flag2==1)</p><p><b>  {</b></p><p>  switch(sign1)</p><p><b>  {</b></p><p>  case 15:previous=previ

55、ous+current;break;//根據(jù)標(biāo)志進(jìn)行相應(yīng)計(jì)算</p><p>  case 14:previous=previous-current;break;</p><p>  case 13:previous=previous*current;break;</p><p>  case 12:previous=previous/current;break;

56、</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(flag2==0)</p><p><b>  {</b></p><p>  previous=previous;</p><

57、;p><b>  }</b></p><p>  if(previous<0 || previous>9999 )//溢出處理,若發(fā)生溢出則蜂鳴器</p><p>  {//報(bào)警并顯示字母E(error)</p><p>  speaker=0;</p><p>  delay(1

58、0);</p><p><b>  P1=0xfe;</b></p><p>  P3=table[14];</p><p><b>  delay(1);</b></p><p><b>  }</b></p><p><b>  else&

59、lt;/b></p><p>  display(previous);</p><p><b>  }</b></p><p>  /*顯示子函數(shù)主要是將當(dāng)前數(shù)值的各位進(jìn)行分離,分別顯示各位。*/</p><p>  void display(uint num3)//顯示子函數(shù)</p>

60、<p><b>  {</b></p><p><b>  uint i;</b></p><p><b>  i=0;</b></p><p>  qian=num3/1000;//分離該數(shù)字的各位</p><p>  bai=num3%1000/10

61、0;</p><p>  shi=num3%100/10;</p><p>  ge=num3%10;</p><p>  while(num3!=0)</p><p><b>  {</b></p><p>  num3=num3/10;</p><p><b>

62、;  i=i+1;</b></p><p><b>  }</b></p><p>  P1=0xfe;//通過(guò)位選信號(hào)依次顯示該數(shù)字的各位</p><p>  P3=table[ge];//P3口用于輸出段選信號(hào)</p><p><b>  delay(1);</b&g

63、t;</p><p><b>  if(i>1)</b></p><p><b>  {</b></p><p><b>  P1=0xfd;</b></p><p>  P3=table[shi];</p><p>  delay(1);&

64、lt;/p><p><b>  }</b></p><p><b>  if(i>2)</b></p><p><b>  {</b></p><p><b>  P1=0xfb;</b></p><p>  P3=table[

65、bai];</p><p><b>  delay(1);</b></p><p><b>  }</b></p><p><b>  if(i>3)</b></p><p><b>  {</b></p><p><b

66、>  P1=0xf7;</b></p><p>  P3=table[qian];</p><p><b>  delay(1);</b></p><p><b>  }</b></p><p><b>  }</b></p><p>

67、  /*鍵盤(pán)掃描子函數(shù)采用逐行掃描的方法,依次掃描4*4鍵盤(pán)的各行。掃描的步驟包括消抖、判斷是哪行哪列的鍵被按下以及松手檢測(cè)。將4*4鍵盤(pán)編號(hào),這樣可以將所按下鍵對(duì)應(yīng)的編號(hào)返回主函數(shù),便實(shí)現(xiàn)矩陣鍵盤(pán)的掃描。*/</p><p>  uint keyscan()//鍵盤(pán)掃描子函數(shù)</p><p><b>  {</b></p><p&

68、gt;<b>  P2=0xfe;</b></p><p><b>  temp=P2;</b></p><p>  temp=temp&0xf0;</p><p>  while(temp!=0xf0)</p><p><b>  {</b></p>&

69、lt;p><b>  delay(5);</b></p><p><b>  temp=P2;</b></p><p>  temp=temp&0xf0;</p><p>  while(temp!=0xf0)</p><p><b>  {</b></p&

70、gt;<p><b>  temp=P2;</b></p><p>  switch(temp)</p><p><b>  {</b></p><p>  case 0xee:num=10;flag2=1;</p><p><b>  break;</b><

71、;/p><p>  case 0xde:num=0;flag2=1;</p><p><b>  break;</b></p><p>  case 0xbe:num=11;flag2=1;</p><p><b>  break;</b></p><p>  case 0x7e

72、:num=12;flag2=1;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  while(temp!=0xf0)</p><p><b>  {</b></p><p><b>

73、  temp=P2;</b></p><p>  temp=temp&0xf0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>

74、;  P2=0xfd;</b></p><p><b>  temp=P2;</b></p><p>  temp=temp&0xf0;</p><p>  while(temp!=0xf0)</p><p><b>  {</b></p><p><

75、;b>  delay(5);</b></p><p><b>  temp=P2;</b></p><p>  temp=temp&0xf0;</p><p>  while(temp!=0xf0)</p><p><b>  {</b></p><p&

76、gt;<b>  temp=P2;</b></p><p>  switch(temp)</p><p><b>  {</b></p><p>  case 0xed:num=1;flag2=1;</p><p><b>  break;</b></p><

77、;p>  case 0xdd:num=2;flag2=1;</p><p><b>  break;</b></p><p>  case 0xbd:num=3;flag2=1;</p><p><b>  break;</b></p><p>  case 0x7d:num=13;flag2

78、=1;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  while(temp!=0xf0)</p><p><b>  {</b></p><p><b>  temp=P2;<

79、;/b></p><p>  temp=temp&0xf0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  P2=0xfb;&l

80、t;/b></p><p><b>  temp=P2;</b></p><p>  temp=temp&0xf0;</p><p>  while(temp!=0xf0)</p><p><b>  {</b></p><p><b>  delay

81、(5);</b></p><p><b>  temp=P2;</b></p><p>  temp=temp&0xf0;</p><p>  while(temp!=0xf0)</p><p><b>  {</b></p><p><b> 

82、 temp=P2;</b></p><p>  switch(temp)</p><p><b>  {</b></p><p>  case 0xeb:num=4;flag2=1;</p><p><b>  break;</b></p><p>  case

83、0xdb:num=5;flag2=1;</p><p><b>  break;</b></p><p>  case 0xbb:num=6;flag2=1;</p><p><b>  break;</b></p><p>  case 0x7b:num=14;flag2=1;</p>

84、<p><b>  break;</b></p><p><b>  }</b></p><p>  while(temp!=0xf0)</p><p><b>  {</b></p><p><b>  temp=P2;</b></p

85、><p>  temp=temp&0xf0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  P2=0xf7;</b></

86、p><p><b>  temp=P2;</b></p><p>  temp=temp&0xf0;</p><p>  while(temp!=0xf0)</p><p><b>  {</b></p><p><b>  delay(5);</b>

87、;</p><p><b>  temp=P2;</b></p><p>  temp=temp&0xf0;</p><p>  while(temp!=0xf0)</p><p><b>  {</b></p><p><b>  temp=P2;<

88、/b></p><p>  switch(temp)</p><p><b>  {</b></p><p>  case 0xe7:num=7;flag2=1;</p><p><b>  break;</b></p><p>  case 0xd7:num=8;fl

89、ag2=1;</p><p><b>  break;</b></p><p>  case 0xb7:num=9;flag2=1;</p><p><b>  break;</b></p><p>  case 0x77:num=15;flag2=1;</p><p>&l

90、t;b>  break;</b></p><p><b>  }</b></p><p>  while(temp!=0xf0)</p><p><b>  {</b></p><p><b>  temp=P2;</b></p><p&g

91、t;  temp=temp&0xf0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(flag2==1)</p><p><b>  {

92、</b></p><p>  speaker=0;</p><p>  delay(100);</p><p>  speaker=1;</p><p><b>  }</b></p><p>  return num;</p><p><b>  }

溫馨提示

  • 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ù)僅提供信息存儲(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)論