版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 硬件課程設(shè)計(jì)報(bào)告(電子計(jì)算器)
- 計(jì)算器課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)報(bào)告---計(jì)算器設(shè)計(jì)
- java計(jì)算器課程設(shè)計(jì)報(bào)告---模擬科學(xué)計(jì)算器
- java課程設(shè)計(jì)報(bào)告—計(jì)算器
- 簡(jiǎn)單計(jì)算器課程設(shè)計(jì)報(bào)告
- 簡(jiǎn)易計(jì)算器課程設(shè)計(jì)報(bào)告
- java計(jì)算器課程設(shè)計(jì)報(bào)告
- vb計(jì)算器課程設(shè)計(jì)報(bào)告
- mfc計(jì)算器課程設(shè)計(jì)報(bào)告
- 簡(jiǎn)單計(jì)算器課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告--計(jì)算器設(shè)計(jì)
- 課程設(shè)計(jì)-計(jì)算器
- 計(jì)算器java課程設(shè)計(jì)--簡(jiǎn)單計(jì)算器
- 自解析計(jì)算器課程設(shè)計(jì)報(bào)告
- 模擬科學(xué)計(jì)算器 課程設(shè)計(jì)報(bào)告
- 簡(jiǎn)易計(jì)算器vb課程設(shè)計(jì)報(bào)告
- 簡(jiǎn)易計(jì)算器vb課程設(shè)計(jì)報(bào)告報(bào)告
- c++課程設(shè)計(jì)--計(jì)算器設(shè)計(jì)報(bào)告
- 計(jì)算器課程設(shè)計(jì)---計(jì)算器仿真程序設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論