版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、中南林業(yè)科技大學課程設計報告 設計名稱: 單片機計算器課程設計 姓 名: 汪琦 學 號: 20082124 專業(yè)班級: 電子信息工程一班 院(系): 計算機與信息工程學院 設計時間: 2010年12月28日星期二 設計地點: 中南林業(yè)科技大學電子信息樓 指導教師評語: 成績:簽名: 年 月 日目錄一、 題目二、 任務與要求(老師完成)三、 課程設計摘要及整體方框圖1.總體設計思路簡述··················
2、;··································2.硬件設計簡述··············
3、83;·········································3.軟件設計簡述·······&
4、#183;················································4.程序主流程
5、圖··················································
6、;······四、 課程設計原理分析及相關知識概述五、 結論六、 體會與收獲附件:1、 源程序代碼(根據(jù)需要選擇)2、整體電路原理圖(根據(jù)需要選擇)2、 元件表(根據(jù)需要選擇)3、 PCB板制作(根據(jù)需要選擇)4、焊接與調試(根據(jù)需要選擇)一、題目利用單片機芯片STC12C54、四位八段共陰數(shù)碼管,已制作好的電路板等器件設計制作一個計算器,用LED顯示計算數(shù)值及結果。二、任務與要求要求計算器能實現(xiàn)加減乘除四種運算,具體如下:1. 加法:四位整數(shù)加法,計算結果若超過四位則顯示計算錯誤2. 減法:四位整數(shù)減法,計算結果若小于零則顯示計算錯
7、誤3. 乘法:多位整數(shù)乘法,計算結果若超過四位則顯示計算錯誤4. 除法:整數(shù)除法5. 有清除功能三、課程設計簡述及整體方框圖1.總體設計思路簡述按照系統(tǒng)設計的功能的要求,初步確定設計系統(tǒng)由主控模塊、顯示模塊、鍵掃描接口電路共三個模塊組成,電路系統(tǒng)構成框圖如圖1.1所示。主控芯片使用STC12C54單片機,比 80C51速度更快,功能更強,由先進工藝制造,并帶有非易失性Flash程序存儲器。它是一種高性能、低功耗的8位COMS微處理芯片,市場應用最多。鍵盤電路采用4*4矩陣鍵盤電路。顯示模塊采用4枚共陽極數(shù)碼管和74ls273鎖存芯片構成等器件構成。2硬件設計簡述 單片機最小系統(tǒng)就是支持主芯片正
8、常工作的最小電路部分,包括主控芯片、復位電路和晶振電路。主控芯片選取STC12C5410AD芯片,因其具有良好的性能及穩(wěn)定性,價格便宜應用方便。晶振選取11.0592MHz,晶振旁電容選取22pF。采用按鍵復位電路,電阻分別選取560和10K,電容選取10F。鍵盤接口電路 計算器所需按鍵有: 數(shù)字鍵:1,2,3,4,5,6,7,8,9,0 功能鍵:+, - , *, / , = , C( 清零)共計16個按鍵,采用4*4矩陣鍵盤,鍵盤的行和列之間都有公共端相連,四行和四列的8個公共端分別接P1.0P1.7,這樣掃描P1口就可以完成對矩陣鍵盤的掃描,通過對16個按鍵進行編碼,從而得到鍵盤的口地址
9、,對比P1口的掃描結果和各按鍵的地址,我們就可以得到是哪個鍵按下,從而完成鍵盤掃描的功能。數(shù)碼管顯示電路 采用4位數(shù)碼管對計算數(shù)據(jù)和結果的顯示,這里選取共陽數(shù)碼管,利用NPN三極管對數(shù)碼管進行驅動,為了節(jié)省I/O資源,采取動態(tài)顯示的方法來顯示計算數(shù)據(jù)及結果,動態(tài)掃描。 為了實現(xiàn)數(shù)碼管的動態(tài)顯示,P2口輸出顯示值,通過P2口的二進制代碼送到數(shù)碼管進行顯示。P3.2P3.5用來作為位選端,控制哪幾位數(shù)碼管進行顯示。比如當P3.2為高電平時,其他位全給0,具體的在軟件中會有說明。此時就將掃描的數(shù)據(jù)送給指定數(shù)碼管顯示。3.軟件設計簡述鍵盤掃描子程序設計 要進行數(shù)據(jù)的計算就必須先進行數(shù)據(jù)的輸入,也就必須
10、確定按鍵輸入的數(shù)值是什么,這就需要對鍵盤進行掃描,從而確定究竟是哪個鍵按下。對于鍵盤的掃描,這里采用行列掃描的方法來完成對鍵盤的掃描。原理就是先確定按鍵在哪一行,接著再確定是哪一列,這樣就可以知道是哪個按鍵被按下了。我是將P1口作為按鍵掃描口的,比如開始先給P1口設置為0xf0,即P1.0P1.7為11110000,將它定義為e,再給P1口設置為0x0f,即P1.0P1.7為00001111,將它定義為f,并且定義temp=e|f,好了,接下來若按下的是按鍵sw1,則P1口變?yōu)?1100000,e就是0xe0,并在非常短的時間P1口變?yōu)?0001110,則f就是0x0e,那么temp就為0xe
11、e,同理,每個按鍵都會有一個對應的十六進制值,我把它們列出來進行一一對應就行了,下面是掃描按鍵圖。 以下為鍵盤掃描子程序的程序清單。uint kescan() uint ; P1=0xf0;e=P1; P1=0x0f;f=P1;temp=e|f;while(P1!=0x0f); if(temp=0xb7)=0;if(temp=0x7e)=1; if(temp=0xbe)=2; if(temp=0xde)=3; if(temp=0x7d)=4;if(temp=0xbd)=5;if(temp=0xdd)=6;if(temp=0x7b)=7;if(temp=0xbb)=8;if(temp=0xdb)
12、=9;if(temp=0x77)=10;if(temp=0xd7)=11;if(temp=0xe7)=12;if(temp=0xeb)=13;if(temp=0xed)=14;if(temp=0xee)=15;return();數(shù)碼管顯示電路采用4位數(shù)碼管對計算數(shù)據(jù)和結果的顯示,這里選取共陰極數(shù)碼管,利用NPN三極管對數(shù)碼管進行驅動,利用來實現(xiàn)數(shù)碼管的動態(tài)顯示,P2口輸出顯示值,P2口為段選,P3.2P3.5用來作為位選端,控制哪幾位數(shù)碼管進行顯示。下面根據(jù)程序來闡述。n是一個運算中產生的值,若它大于10000,執(zhí)行第一個if語句,如果則顯示FFFF,若在10000以,則將n分別除以1000、
13、100、10和對10取余,得到我們想要的四個數(shù),送顯示子程序顯示。其余減、乘、除的計算方法與加法的計算方法一樣,這里不再累述。 void dis(uint n) if(n/10000) for(i=0;i<4;i+)if(fu=1) P2=(DSY_CODE15&&0x7f);if(fu=0)P2=DSY_CODE15; P3=bit3-i; n=n/10; delay(4); P3=0x00; else if(n/1000) for(i=0;i<4;i+) if(fu=1) P2=(DSY_CODEn%10&0x7f);if(fu=0)P2=DSY_COD
14、En%10;P3=bit3-i;n=n/10;delay(4);P3=0x00; elseif(n/100)for(i=0;i<3;i+)if(fu=1) P2=(DSY_CODEn%10&0x7f);if(fu=0)P2=DSY_CODEn%10; P3=bit3-i; n=n/10; delay(4); P3=0x00;elseif(n/10)for(i=0;i<2;i+)if(fu=1)P2=(DSY_CODEn%10&0x7f);if(fu=0)P2=DSY_CODEn%10; P3=bit3-i; n=n/10; delay(4); P3=0x00;els
15、eif(n%10)if(fu=1) P2=(DSY_CODEn&0x7f);if(fu=0)P2=DSY_CODEn; P3=0x20; delay(4);運算子程序設計顯示加減乘除四個運算符void calculate(uint z) if(z=10)P2=0x76; /加法顯示H,并且點亮最高位的數(shù)碼管P3=0x20; if(z=11) P2=0x40; /減法顯示-, 并且點亮最高位的數(shù)碼管 P3=0x20; if(z=12) P2=0x80; /乘法顯示., 并且點亮最高位的數(shù)碼管 P3=0x20; if(z=13) P2=0x49; /除法顯示 并且點亮最高位的數(shù) P3=0x
16、20; 碼管 除法子程序設計除法的運算,可以顯示小數(shù)點void div(void)d=b/c; if(d/1000) for(i=0;i<4;i+) P2=DSY_CODEd%10;P3=bit3-i;d=d/10;delay(4);P3=0x00; elseif(d/100) d=10*b/c;for(i=0;i<4;i+)if(i=1) P2=(DSY_CODEd%10&0x7f);if(i!=1) P2=DSY_CODEd%10; P3=bit3-i; d=d/10; delay(4); P3=0x00;elseif(d/10)d=100*b/c;for(i=0;i&
17、lt;4;i+)if(i=2)P2=(DSY_CODEd%10&0x7f);if(i!=2)P2=DSY_CODEd%10; P3=bit3-i; d=d/10; delay(4); P3=0x00;elseif(d%10) d=1000*b/c;for(i=0;i<4;i+)if(i=3)P2=(DSY_CODEd%10&0x7f);if(i!=3)P2=DSY_CODEd%10; P3=bit3-i; d=d/10; delay(4); P3=0x00; elsed=(1000*b)/c;for(i=0;i<4;i+)if(i=3)P2=(DSY_CODE0&a
18、mp;0x7f);if(i!=3)P2=DSY_CODEd%10; P3=bit3-i; d=d/10; delay(4); P3=0x00;主程序見附錄1 4.程序主框圖 主程序流程四、課程設計原理分析及相關知識概述 本次課程設計用的STC12C54具有速度快、功耗低、抗干擾強的特點,有多種I/O端口模式,它默認為準雙向口/弱上拉,最大灌電流為20mA,拉電流為230uA,所以在三極管和芯片管腳間要接15k的電阻,(5v-1.8v)/300歐=10mA,八個led就為80 mA,超過50 mA的總電流,所以電阻選用511歐。若改為強推挽輸出模式,則根據(jù)拉電流最大為20mA可計算出,電阻選為1
19、k五、結論完成硬件和軟件的設計和制作后,進行系統(tǒng)的調試,并處理不斷出現(xiàn)的問題。對于計算器的性能,主要的衡量指標就在于計算的精度,本次制作的計算器性能情況如下:加法運算:四位整數(shù)加法運算,和值不超過9999,若超過上限,則顯示錯誤提示FFFF。減法運算:四位正整數(shù)減法運算,若結果為負,對其取絕對值。乘法運算:積不超過9999的整數(shù)乘法運算,若超出上限,顯示錯誤提示FFFF。除法運算:整數(shù)除法,既計算結果為可顯示小數(shù)。六、體會與收獲通過這次課程設計,最大的一點體會是單片機學的不夠扎實,不會的很多啊,當然這次的課程設計做計算器程序用的是c語言,不是課上初學的匯編,所以很難適應,盡管大家都知道匯編編這
20、個程序也很困難,但還是互相學習,到處找資料看,問同學,所以我的軟件主程序才能編譯成功,系統(tǒng)才能調試出結果。很感那些熱心教導我的同學和指導我的老師。首先在硬件電路的制作中,也就是焊板子,由于我的粗心,我芯片插槽的一個管腳沒焊進去,別的都好了,就這個腳沒有用了,后來在老師的幫助下,我將插槽里德那個管腳拔出來,換了個腳在插進去,然后用萬用表測試后證明是有效的,心里還是很高興的。整個硬件電路還是做得令自己比較滿意的。在軟件方面,感覺困難更多一些,一開始真的很著急,毫無頭緒啊,一時間,百度,論壇,貼吧逛了個遍,找了很多資料,也參考了同學的程序,其中每一個子程序模塊都認真去讀,去分析,化為己用,最重要的按
21、鍵掃描和顯示程序,還有包括加減乘除的運算程序,還了解了c語言在單片機編程中的一些特點,包括函數(shù)的聲明和調用等等。而且在用uvison編譯的時候出了很多問題,其中一個就是關于頭文件的,要加上“#include <STC12C5410AD.H>”,不僅如此,還要將有關STC12C5410AD的文件覆蓋在uvison安裝路徑下,這樣頭文件才有效啊,所以,一開始找不出問題所在,極其郁悶。但是總的來說,軟件設計能夠把結果調出來還是很激動的,盡管還有很多未知的問題沒有出現(xiàn)。附錄1 程序源代碼#include <STC12C5410AD.H>#include <intrins.
22、h>#define uchar unsigned char#define uint unsigned intuchar e,f,temp,fu=0;uint a=50,flag=0,key,dyh,bru,cru,i,fuhao=0;long c=0,d=0,b=0;uint code bit=0x04,0x08,0x10,0x20;uint code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e; void delay(uint x) uchar t;wh
23、ile(x-) for(t=120;t>0;t-); uint kescan() uint ; P1=0xf0;e=P1; P1=0x0f;f=P1;temp=e|f;while(P1!=0x0f); if(temp=0xb7)=0;if(temp=0x7e)=1; if(temp=0xbe)=2; if(temp=0xde)=3; if(temp=0x7d)=4;if(temp=0xbd)=5;if(temp=0xdd)=6;if(temp=0x7b)=7;if(temp=0xbb)=8;if(temp=0xdb)=9;if(temp=0x77)=10;if(temp=0xd7)=11
24、;if(temp=0xe7)=12;if(temp=0xeb)=13;if(temp=0xed)=14;if(temp=0xee)=15;return(); void dis(uint n) if(n/10000) for(i=0;i<4;i+)if(fu=1) P2=(DSY_CODE15&&0x7f);if(fu=0)P2=DSY_CODE15; P3=bit3-i; n=n/10; delay(4); P3=0x00; else if(n/1000) for(i=0;i<4;i+) if(fu=1) P2=(DSY_CODEn%10&0x7f);if(
25、fu=0)P2=DSY_CODEn%10;P3=bit3-i;n=n/10;delay(4);P3=0x00; elseif(n/100)for(i=0;i<3;i+)if(fu=1) P2=(DSY_CODEn%10&0x7f);if(fu=0)P2=DSY_CODEn%10; P3=bit3-i; n=n/10; delay(4); P3=0x00;elseif(n/10)for(i=0;i<2;i+)if(fu=1)P2=(DSY_CODEn%10&0x7f);if(fu=0)P2=DSY_CODEn%10; P3=bit3-i; n=n/10; delay(
26、4); P3=0x00;elseif(n%10)if(fu=1) P2=(DSY_CODEn&0x7f);if(fu=0)P2=DSY_CODEn; P3=0x20; delay(4);void caculate(uint z) if(z=10)P2=0x76;P3=0x20; if(z=11) P2=0x40; P3=0x20; if(z=12) P2=0x80; P3=0x20; if(z=13) P2=0x49;P3=0x20; void div(void)d=b/c; if(d/1000) for(i=0;i<4;i+) P2=DSY_CODEd%10;P3=bit3-i
27、;d=d/10;delay(4);P3=0x00; elseif(d/100) d=10*b/c;for(i=0;i<4;i+)if(i=1) P2=(DSY_CODEd%10&0x7f);if(i!=1) P2=DSY_CODEd%10; P3=bit3-i; d=d/10; delay(4); P3=0x00;elseif(d/10)d=100*b/c;for(i=0;i<4;i+)if(i=2)P2=(DSY_CODEd%10&0x7f);if(i!=2)P2=DSY_CODEd%10; P3=bit3-i; d=d/10; delay(4); P3=0x00
28、;elseif(d%10) d=1000*b/c;for(i=0;i<4;i+)if(i=3)P2=(DSY_CODEd%10&0x7f);if(i!=3)P2=DSY_CODEd%10; P3=bit3-i; d=d/10; delay(4); P3=0x00; elsed=(1000*b)/c;for(i=0;i<4;i+)if(i=3)P2=(DSY_CODE0&0x7f);if(i!=3)P2=DSY_CODEd%10; P3=bit3-i; d=d/10; delay(4); P3=0x00; void main() P3M1=0xff;P2M1=0xff; P2M0=0x00;P3M0=0x00;P1M0=0x00;P1M1=0x00; flag=0;cru=0;bru=0;dyh=0;while(1) P1=0xf0;if(P1!=0xf0) delay(30);if(P1!=0xf0)a=kescan(); if(a&g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版監(jiān)控設備銷售與維護保養(yǎng)合同3篇
- 二零二五年度果樹種植與農業(yè)科研合作承包合同2篇
- 二零二五版建筑工地場地勘查與風險評估委托合同3篇
- 二零二五版國際機場ATM設備場地租賃與廣告合作合同3篇
- 二零二五版礦業(yè)勘探承包作業(yè)合同樣本2篇
- 二零二五版智能停車場設計與施工合同3篇
- 二零二五版板房租賃合同附帶設施設備維修協(xié)議3篇
- 二零二五版抵押房屋買賣合同與房屋保險服務合同3篇
- 二零二五版辦公場地租賃與人力資源服務合同范本3篇
- 二零二五版雞蛋養(yǎng)殖基地技術改造合同3篇
- 廣東省佛山市2025屆高三高中教學質量檢測 (一)化學試題(含答案)
- 《國有控股上市公司高管薪酬的管控研究》
- 餐飲業(yè)環(huán)境保護管理方案
- 人教版【初中數(shù)學】知識點總結-全面+九年級上冊數(shù)學全冊教案
- 食品安全分享
- 礦山機械設備安全管理制度
- 計算機等級考試二級WPS Office高級應用與設計試題及答案指導(2025年)
- 造價框架協(xié)議合同范例
- 糖尿病肢端壞疽
- 心衰患者的個案護理
- 醫(yī)護人員禮儀培訓
評論
0/150
提交評論