




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、中南林業(yè)科技大學(xué)課程設(shè)計(jì)報(bào)告 設(shè)計(jì)名稱: 單片機(jī)計(jì)算器課程設(shè)計(jì) 姓 名: 汪琦 學(xué) 號(hào): 20082124 專業(yè)班級(jí): 電子信息工程一班 院(系): 計(jì)算機(jī)與信息工程學(xué)院 設(shè)計(jì)時(shí)間: 2010年12月28日星期二 設(shè)計(jì)地點(diǎn): 中南林業(yè)科技大學(xué)電子信息樓 指導(dǎo)教師評(píng)語(yǔ): 成績(jī):簽名: 年 月 日目錄一、 題目二、 任務(wù)與要求(老師完成)三、 課程設(shè)計(jì)摘要及整體方框圖1.總體設(shè)計(jì)思路簡(jiǎn)述··················
2、;··································2.硬件設(shè)計(jì)簡(jiǎn)述··············
3、83;·········································3.軟件設(shè)計(jì)簡(jiǎn)述·······&
4、#183;················································4.程序主流程
5、圖··················································
6、;······四、 課程設(shè)計(jì)原理分析及相關(guān)知識(shí)概述五、 結(jié)論六、 體會(huì)與收獲附件:1、 源程序代碼(根據(jù)需要選擇)2、整體電路原理圖(根據(jù)需要選擇)2、 元件表(根據(jù)需要選擇)3、 PCB板制作(根據(jù)需要選擇)4、焊接與調(diào)試(根據(jù)需要選擇)一、題目利用單片機(jī)芯片STC12C54、四位八段共陰數(shù)碼管,已制作好的電路板等器件設(shè)計(jì)制作一個(gè)計(jì)算器,用LED顯示計(jì)算數(shù)值及結(jié)果。二、任務(wù)與要求要求計(jì)算器能實(shí)現(xiàn)加減乘除四種運(yùn)算,具體如下:1. 加法:四位整數(shù)加法,計(jì)算結(jié)果若超過(guò)四位則顯示計(jì)算錯(cuò)誤2. 減法:四位整數(shù)減法,計(jì)算結(jié)果若小于零則顯示計(jì)算錯(cuò)
7、誤3. 乘法:多位整數(shù)乘法,計(jì)算結(jié)果若超過(guò)四位則顯示計(jì)算錯(cuò)誤4. 除法:整數(shù)除法5. 有清除功能三、課程設(shè)計(jì)簡(jiǎn)述及整體方框圖1.總體設(shè)計(jì)思路簡(jiǎn)述按照系統(tǒng)設(shè)計(jì)的功能的要求,初步確定設(shè)計(jì)系統(tǒng)由主控模塊、顯示模塊、鍵掃描接口電路共三個(gè)模塊組成,電路系統(tǒng)構(gòu)成框圖如圖1.1所示。主控芯片使用STC12C54單片機(jī),比 80C51速度更快,功能更強(qiáng),由先進(jìn)工藝制造,并帶有非易失性Flash程序存儲(chǔ)器。它是一種高性能、低功耗的8位COMS微處理芯片,市場(chǎng)應(yīng)用最多。鍵盤(pán)電路采用4*4矩陣鍵盤(pán)電路。顯示模塊采用4枚共陽(yáng)極數(shù)碼管和74ls273鎖存芯片構(gòu)成等器件構(gòu)成。2硬件設(shè)計(jì)簡(jiǎn)述 單片機(jī)最小系統(tǒng)就是支持主芯片正
8、常工作的最小電路部分,包括主控芯片、復(fù)位電路和晶振電路。主控芯片選取STC12C5410AD芯片,因其具有良好的性能及穩(wěn)定性,價(jià)格便宜應(yīng)用方便。晶振選取11.0592MHz,晶振旁電容選取22pF。采用按鍵復(fù)位電路,電阻分別選取560和10K,電容選取10F。鍵盤(pán)接口電路 計(jì)算器所需按鍵有: 數(shù)字鍵:1,2,3,4,5,6,7,8,9,0 功能鍵:+, - , *, / , = , C( 清零)共計(jì)16個(gè)按鍵,采用4*4矩陣鍵盤(pán),鍵盤(pán)的行和列之間都有公共端相連,四行和四列的8個(gè)公共端分別接P1.0P1.7,這樣掃描P1口就可以完成對(duì)矩陣鍵盤(pán)的掃描,通過(guò)對(duì)16個(gè)按鍵進(jìn)行編碼,從而得到鍵盤(pán)的口地址
9、,對(duì)比P1口的掃描結(jié)果和各按鍵的地址,我們就可以得到是哪個(gè)鍵按下,從而完成鍵盤(pán)掃描的功能。數(shù)碼管顯示電路 采用4位數(shù)碼管對(duì)計(jì)算數(shù)據(jù)和結(jié)果的顯示,這里選取共陽(yáng)數(shù)碼管,利用NPN三極管對(duì)數(shù)碼管進(jìn)行驅(qū)動(dòng),為了節(jié)省I/O資源,采取動(dòng)態(tài)顯示的方法來(lái)顯示計(jì)算數(shù)據(jù)及結(jié)果,動(dòng)態(tài)掃描。 為了實(shí)現(xiàn)數(shù)碼管的動(dòng)態(tài)顯示,P2口輸出顯示值,通過(guò)P2口的二進(jìn)制代碼送到數(shù)碼管進(jìn)行顯示。P3.2P3.5用來(lái)作為位選端,控制哪幾位數(shù)碼管進(jìn)行顯示。比如當(dāng)P3.2為高電平時(shí),其他位全給0,具體的在軟件中會(huì)有說(shuō)明。此時(shí)就將掃描的數(shù)據(jù)送給指定數(shù)碼管顯示。3.軟件設(shè)計(jì)簡(jiǎn)述鍵盤(pán)掃描子程序設(shè)計(jì) 要進(jìn)行數(shù)據(jù)的計(jì)算就必須先進(jìn)行數(shù)據(jù)的輸入,也就必須
10、確定按鍵輸入的數(shù)值是什么,這就需要對(duì)鍵盤(pán)進(jìn)行掃描,從而確定究竟是哪個(gè)鍵按下。對(duì)于鍵盤(pán)的掃描,這里采用行列掃描的方法來(lái)完成對(duì)鍵盤(pán)的掃描。原理就是先確定按鍵在哪一行,接著再確定是哪一列,這樣就可以知道是哪個(gè)按鍵被按下了。我是將P1口作為按鍵掃描口的,比如開(kāi)始先給P1口設(shè)置為0xf0,即P1.0P1.7為11110000,將它定義為e,再給P1口設(shè)置為0x0f,即P1.0P1.7為00001111,將它定義為f,并且定義temp=e|f,好了,接下來(lái)若按下的是按鍵sw1,則P1口變?yōu)?1100000,e就是0xe0,并在非常短的時(shí)間P1口變?yōu)?0001110,則f就是0x0e,那么temp就為0xe
11、e,同理,每個(gè)按鍵都會(huì)有一個(gè)對(duì)應(yīng)的十六進(jìn)制值,我把它們列出來(lái)進(jìn)行一一對(duì)應(yīng)就行了,下面是掃描按鍵圖。 以下為鍵盤(pán)掃描子程序的程序清單。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ù)碼管對(duì)計(jì)算數(shù)據(jù)和結(jié)果的顯示,這里選取共陰極數(shù)碼管,利用NPN三極管對(duì)數(shù)碼管進(jìn)行驅(qū)動(dòng),利用來(lái)實(shí)現(xiàn)數(shù)碼管的動(dòng)態(tài)顯示,P2口輸出顯示值,P2口為段選,P3.2P3.5用來(lái)作為位選端,控制哪幾位數(shù)碼管進(jìn)行顯示。下面根據(jù)程序來(lái)闡述。n是一個(gè)運(yùn)算中產(chǎn)生的值,若它大于10000,執(zhí)行第一個(gè)if語(yǔ)句,如果則顯示FFFF,若在10000以,則將n分別除以1000、
13、100、10和對(duì)10取余,得到我們想要的四個(gè)數(shù),送顯示子程序顯示。其余減、乘、除的計(jì)算方法與加法的計(jì)算方法一樣,這里不再累述。 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);運(yùn)算子程序設(shè)計(jì)顯示加減乘除四個(gè)運(yùn)算符void calculate(uint z) if(z=10)P2=0x76; /加法顯示H,并且點(diǎn)亮最高位的數(shù)碼管P3=0x20; if(z=11) P2=0x40; /減法顯示-, 并且點(diǎn)亮最高位的數(shù)碼管 P3=0x20; if(z=12) P2=0x80; /乘法顯示., 并且點(diǎn)亮最高位的數(shù)碼管 P3=0x20; if(z=13) P2=0x49; /除法顯示 并且點(diǎn)亮最高位的數(shù) P3=0x
16、20; 碼管 除法子程序設(shè)計(jì)除法的運(yùn)算,可以顯示小數(shù)點(diǎn)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;主程序見(jiàn)附錄1 4.程序主框圖 主程序流程四、課程設(shè)計(jì)原理分析及相關(guān)知識(shí)概述 本次課程設(shè)計(jì)用的STC12C54具有速度快、功耗低、抗干擾強(qiáng)的特點(diǎn),有多種I/O端口模式,它默認(rèn)為準(zhǔn)雙向口/弱上拉,最大灌電流為20mA,拉電流為230uA,所以在三極管和芯片管腳間要接15k的電阻,(5v-1.8v)/300歐=10mA,八個(gè)led就為80 mA,超過(guò)50 mA的總電流,所以電阻選用511歐。若改為強(qiáng)推挽輸出模式,則根據(jù)拉電流最大為20mA可計(jì)算出,電阻選為1
19、k五、結(jié)論完成硬件和軟件的設(shè)計(jì)和制作后,進(jìn)行系統(tǒng)的調(diào)試,并處理不斷出現(xiàn)的問(wèn)題。對(duì)于計(jì)算器的性能,主要的衡量指標(biāo)就在于計(jì)算的精度,本次制作的計(jì)算器性能情況如下:加法運(yùn)算:四位整數(shù)加法運(yùn)算,和值不超過(guò)9999,若超過(guò)上限,則顯示錯(cuò)誤提示FFFF。減法運(yùn)算:四位正整數(shù)減法運(yùn)算,若結(jié)果為負(fù),對(duì)其取絕對(duì)值。乘法運(yùn)算:積不超過(guò)9999的整數(shù)乘法運(yùn)算,若超出上限,顯示錯(cuò)誤提示FFFF。除法運(yùn)算:整數(shù)除法,既計(jì)算結(jié)果為可顯示小數(shù)。六、體會(huì)與收獲通過(guò)這次課程設(shè)計(jì),最大的一點(diǎn)體會(huì)是單片機(jī)學(xué)的不夠扎實(shí),不會(huì)的很多啊,當(dāng)然這次的課程設(shè)計(jì)做計(jì)算器程序用的是c語(yǔ)言,不是課上初學(xué)的匯編,所以很難適應(yīng),盡管大家都知道匯編編這
20、個(gè)程序也很困難,但還是互相學(xué)習(xí),到處找資料看,問(wèn)同學(xué),所以我的軟件主程序才能編譯成功,系統(tǒng)才能調(diào)試出結(jié)果。很感那些熱心教導(dǎo)我的同學(xué)和指導(dǎo)我的老師。首先在硬件電路的制作中,也就是焊板子,由于我的粗心,我芯片插槽的一個(gè)管腳沒(méi)焊進(jìn)去,別的都好了,就這個(gè)腳沒(méi)有用了,后來(lái)在老師的幫助下,我將插槽里德那個(gè)管腳拔出來(lái),換了個(gè)腳在插進(jìn)去,然后用萬(wàn)用表測(cè)試后證明是有效的,心里還是很高興的。整個(gè)硬件電路還是做得令自己比較滿意的。在軟件方面,感覺(jué)困難更多一些,一開(kāi)始真的很著急,毫無(wú)頭緒啊,一時(shí)間,百度,論壇,貼吧逛了個(gè)遍,找了很多資料,也參考了同學(xué)的程序,其中每一個(gè)子程序模塊都認(rèn)真去讀,去分析,化為己用,最重要的按
21、鍵掃描和顯示程序,還有包括加減乘除的運(yùn)算程序,還了解了c語(yǔ)言在單片機(jī)編程中的一些特點(diǎn),包括函數(shù)的聲明和調(diào)用等等。而且在用uvison編譯的時(shí)候出了很多問(wèn)題,其中一個(gè)就是關(guān)于頭文件的,要加上“#include <STC12C5410AD.H>”,不僅如此,還要將有關(guān)STC12C5410AD的文件覆蓋在uvison安裝路徑下,這樣頭文件才有效啊,所以,一開(kāi)始找不出問(wèn)題所在,極其郁悶。但是總的來(lái)說(shuō),軟件設(shè)計(jì)能夠把結(jié)果調(diào)出來(lái)還是很激動(dòng)的,盡管還有很多未知的問(wèn)題沒(méi)有出現(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. 本站所有資源如無(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 票務(wù)與支付協(xié)議
- 個(gè)人出資投資協(xié)議范本
- 懸掛物品安裝協(xié)議
- 教育機(jī)構(gòu)合伙協(xié)議格式范文
- 續(xù)簽勞動(dòng)合同的簽署方式
- 績(jī)效反饋培訓(xùn)協(xié)議
- 2025年統(tǒng)計(jì)學(xué)期末考試題庫(kù):統(tǒng)計(jì)推斷與檢驗(yàn)方法在2025年社會(huì)科學(xué)研究中的應(yīng)用試卷
- 2025年統(tǒng)計(jì)學(xué)期末考試題庫(kù):學(xué)術(shù)論文寫(xiě)作規(guī)范與格式試題
- 紡織品購(gòu)銷合同范本
- 2025年輔導(dǎo)員招聘考試題庫(kù):學(xué)生職業(yè)生涯規(guī)劃指導(dǎo)課程實(shí)施與效果試題
- GB/T 34936-2017光伏發(fā)電站匯流箱技術(shù)要求
- 《高速鐵路無(wú)砟軌道修理規(guī)則》第九章維修工機(jī)具、常備材料與作業(yè)車輛停留線課件
- 三年級(jí)《中國(guó)古代寓言故事》知識(shí)考試題庫(kù)(含答案)
- 摩擦學(xué)發(fā)展前沿課件
- 吊車牽引放線跨越公路和停電10千伏線路方案說(shuō)明
- (通用版)醫(yī)院收費(fèi)員考試試題及答案
- 錘擊預(yù)應(yīng)力管樁文明施工與環(huán)境保護(hù)
- 質(zhì)量管理體系七項(xiàng)原則
- 裝飾裝修工程中的危險(xiǎn)源辨識(shí)與風(fēng)險(xiǎn)評(píng)價(jià)表參考模板范本
- 班主任經(jīng)驗(yàn)交流一等獎(jiǎng)?wù)n件
- 國(guó)航特殊餐食代碼表
評(píng)論
0/150
提交評(píng)論