簡(jiǎn)易計(jì)算器-單片機(jī)課程設(shè)計(jì)報(bào)告.docx_第1頁(yè)
簡(jiǎn)易計(jì)算器-單片機(jī)課程設(shè)計(jì)報(bào)告.docx_第2頁(yè)
簡(jiǎn)易計(jì)算器-單片機(jī)課程設(shè)計(jì)報(bào)告.docx_第3頁(yè)
簡(jiǎn)易計(jì)算器-單片機(jī)課程設(shè)計(jì)報(bào)告.docx_第4頁(yè)
簡(jiǎn)易計(jì)算器-單片機(jī)課程設(shè)計(jì)報(bào)告.docx_第5頁(yè)
已閱讀5頁(yè),還剩16頁(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)介

目錄一、概述2二、實(shí)驗(yàn)內(nèi)容3三、硬件設(shè)計(jì)31 設(shè)計(jì)總體框圖32 實(shí)際電路4(1)復(fù)位電路4(2)時(shí)鐘電路5(3)EA/VPP(31腳)的功能和接法6(4)鍵盤輸入電路6(5)數(shù)碼管顯示電路7四、軟件設(shè)計(jì)91 程序內(nèi)容92 C語(yǔ)言程序9五、Protues仿真9六、設(shè)計(jì)總結(jié)10七、附錄111 C語(yǔ)言程序:112焊接電路板實(shí)物圖193 芯片引腳圖19一、概述單片機(jī)課程設(shè)計(jì)是一門實(shí)踐課程,要求學(xué)生具有制作調(diào)試單片機(jī)最小系統(tǒng)及外設(shè)的能力,能夠掌握單片機(jī)內(nèi)部資源的使用。單片機(jī)課程設(shè)計(jì)內(nèi)容包括硬件設(shè)計(jì)、制作及軟件編寫、調(diào)試,學(xué)生在熟練掌握焊接技術(shù)的基礎(chǔ)上,能熟練使用單片機(jī)軟件開(kāi)發(fā)環(huán)境Keil C51編程調(diào)試,并使用STC ISP調(diào)試工具采用串口下載方式聯(lián)調(diào)制作的單片機(jī)最小系統(tǒng)。單片機(jī)課程設(shè)計(jì)題目包含基本部分及擴(kuò)展部分,基本部分即單片機(jī)最小系統(tǒng)部分,擴(kuò)展部分是對(duì)單片機(jī)內(nèi)部資源及外部IO口的功能擴(kuò)展,使制作的單片機(jī)系統(tǒng)具有一定的功能。二、實(shí)驗(yàn)內(nèi)容自制一個(gè)單片機(jī)最小系統(tǒng),包括串口下載、復(fù)位電路,采用外部小鍵盤輸入數(shù)據(jù),能夠?qū)崿F(xiàn)加法、乘法及一個(gè)科學(xué)計(jì)算,計(jì)算結(jié)果顯示在四位一體的數(shù)碼管上。三、硬件設(shè)計(jì)1 設(shè)計(jì)總體框圖2 實(shí)際電路(1)復(fù)位電路在單片機(jī)系統(tǒng)中,復(fù)位電路是非常關(guān)鍵的,當(dāng)程序跑飛(運(yùn)行不正常)或死機(jī)(停止運(yùn)行)時(shí),就需要進(jìn)行復(fù)位。MCS-5l 系列單片機(jī)的復(fù)位引腳RST( 第9 管腳) 出現(xiàn)2個(gè)機(jī)器周期以上的高電平時(shí),單片機(jī)就執(zhí)行復(fù)位操作。如果RST 持續(xù)為高電平,單片機(jī)就處于循環(huán)復(fù)位狀態(tài)。復(fù)位操作通常有兩種基本形式:上電自動(dòng)復(fù)位和開(kāi)關(guān)復(fù)位。上電瞬間,電容兩端電壓不能突變,此時(shí)電容的負(fù)極和RESET 相連,電壓全部加在了電阻上,RESET 的輸入為高,芯片被復(fù)位。隨之+5V電源給電容充電,電阻上的電壓逐漸減小,最后約等于0,芯片正常工作。并聯(lián)在電容的兩端為復(fù)位按鍵,當(dāng)復(fù)位按鍵沒(méi)有被按下的時(shí)候電路實(shí)現(xiàn)上電復(fù)位,在芯片正常工作后,通過(guò)按下按鍵使RST管腳出現(xiàn)高電平達(dá)到手動(dòng)復(fù)位的效果。一般來(lái)說(shuō),只要RST 管腳上保持10ms 以上的高電平,就能使單片機(jī)有效的復(fù)位。本次課程設(shè)計(jì)選用開(kāi)關(guān)復(fù)位電路,設(shè)計(jì)如下:(2)時(shí)鐘電路XTAL1(19 腳) :芯片內(nèi)部振蕩電路輸入端。XTAL2(18 腳) :芯片內(nèi)部振蕩電路輸出端。XTAL1 和XTAL2 是獨(dú)立的輸入和輸出反相放大器,它們可以被配置為使用石英晶振的片內(nèi)振蕩器,或者是器件直接由外部時(shí)鐘驅(qū)動(dòng)。本次課程設(shè)計(jì)采用的是內(nèi)時(shí)鐘模式,即采用利用芯片內(nèi)部的振蕩電路,在XTAL1、XTAL2 的引腳上外接定時(shí)元件(一個(gè)石英晶體和兩個(gè)電容),內(nèi)部振蕩器便能產(chǎn)生自激振蕩。一般來(lái)說(shuō)晶振可以在1.2 12MHz 之間任選,甚至可以達(dá)到24MHz 或者更高,但是頻率越高功耗也就越大。在本次課程設(shè)計(jì)采用的11.0592M 的石英晶振。和晶振并聯(lián)的兩個(gè)電容的大小對(duì)振蕩頻率有微小影響,可以起到頻率微調(diào)作用。當(dāng)采用石英晶振時(shí),電容可以在20 40pF 之間選擇(本實(shí)驗(yàn)套件使用30pF);當(dāng)采用陶瓷諧振器件時(shí),電容要適當(dāng)?shù)卦龃笠恍?,?0 50pF 之間。通常選取33pF 的陶瓷電容就可以了。具體電路如下:(3)EA/VPP(31腳)的功能和接法51 單片機(jī)的EA/VPP(31 腳) 是內(nèi)部和外部程序存儲(chǔ)器的選擇管腳。當(dāng)EA 保持高電平時(shí),單片機(jī)訪問(wèn)內(nèi)部程序存儲(chǔ)器;當(dāng)EA 保持低電平時(shí),則不管是否有內(nèi)部程序存儲(chǔ)器,只訪問(wèn)外部存儲(chǔ)器。對(duì)于現(xiàn)今的絕大部分單片機(jī)來(lái)說(shuō),其內(nèi)部的程序存儲(chǔ)器(一般為flash)容量都很大,因此基本上不需要外接程序存儲(chǔ)器,而是直接使用內(nèi)部的存儲(chǔ)器。 在本實(shí)驗(yàn)套件中,EA 管腳接到了VCC 上,只使用內(nèi)部的程序存儲(chǔ)器。(4)鍵盤輸入電路在鍵盤中按鍵數(shù)量較多時(shí),為了減少I/O口的占用,通常將按鍵排列成矩陣形式,如圖1所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過(guò)一個(gè)按鍵加以連接。這樣,一個(gè)端口(如P1口)就可以構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見(jiàn),在需要的鍵數(shù)比較多時(shí),采用矩陣法來(lái)做鍵盤是合理的。由于本次實(shí)驗(yàn)是制作簡(jiǎn)易計(jì)算器,按鍵需求較多,所以輸入設(shè)備選擇為一個(gè)矩陣鍵盤,具體電路設(shè)計(jì)如下:(5)數(shù)碼管顯示電路數(shù)碼管按段數(shù)可分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個(gè)發(fā)光二極管單元(多一個(gè)小數(shù)點(diǎn)顯示);按能顯示多少個(gè)“8”可分為1位、2位、3位、4位、5位、6位、7位等數(shù)碼管。按發(fā)光二極管單元連接方式可分為共陽(yáng)極數(shù)碼管和共陰極數(shù)碼管。共陽(yáng)數(shù)碼管是指將所有發(fā)光二極管的陽(yáng)極接到一起形成公共陽(yáng)極(COM)的數(shù)碼管,共陽(yáng)數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時(shí),相應(yīng)字段就點(diǎn)亮,當(dāng)某一字段的陰極為高電平時(shí),相應(yīng)字段就不亮。共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管,共陰數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到地線GND上,當(dāng)某一字段發(fā)光二極管的陽(yáng)極為高電平時(shí),相應(yīng)字段就點(diǎn)亮,當(dāng)某一字段的陽(yáng)極為低電平時(shí),相應(yīng)字段就不亮。本次課程設(shè)計(jì)采用共陰數(shù)碼管作為顯示設(shè)備,驅(qū)動(dòng)芯片采用3態(tài)8位緩沖器芯片,具體型號(hào)為SN74LS244N,位選采用4個(gè)NPN三極管驅(qū)動(dòng),具體型號(hào)為S9013,具體電路如下:四、軟件設(shè)計(jì)1 程序內(nèi)容本次課程設(shè)計(jì)的程序包括:主程序(實(shí)現(xiàn)乘法,加法,科學(xué)計(jì)算等),延時(shí)子程序,鍵盤掃描子程序,數(shù)碼管顯示子程序。2 C語(yǔ)言程序見(jiàn)附錄五、Protues仿真具體仿真圖如下:需要說(shuō)明的是,本次仿真主要檢驗(yàn)程序是否正確,所以省去了復(fù)位電路,晶振電路,電源電路等。因?yàn)樵诜抡嬷羞@些電路沒(méi)有不會(huì)影響程序的運(yùn)行。這樣可以節(jié)省時(shí)間,避免做些無(wú)用功,同時(shí)電路看起來(lái)更簡(jiǎn)潔,更易理解,把最關(guān)鍵的與程序有關(guān)的電路連接凸顯出來(lái)。六、設(shè)計(jì)總結(jié)在本次課程設(shè)計(jì)中我體會(huì)最深刻的就是“理想是豐滿的,現(xiàn)實(shí)是殘酷的”。平常在學(xué)習(xí)中,我們只學(xué)習(xí)了書(shū)本上理論的知識(shí),知道原理。具體做起實(shí)物來(lái)問(wèn)題百出!在這次實(shí)驗(yàn)中,困擾我很深的是數(shù)碼管的顯示問(wèn)題,一直想用三極管來(lái)進(jìn)行位選,實(shí)現(xiàn)動(dòng)態(tài)顯示,但是電路連接好后三極管基極只要給一點(diǎn)電壓(大約超過(guò)0.7V左右),集電極和發(fā)射極就導(dǎo)通,從而導(dǎo)致數(shù)碼管一直導(dǎo)通,顯示出數(shù)字8,不受程序控制。剛出現(xiàn)這個(gè)問(wèn)題的時(shí)候,我一直沒(méi)找出是軟件還是硬件問(wèn)題。直到用萬(wàn)用表測(cè)出基極電壓才找出問(wèn)題。但是我換了基極電阻的大小,最后還是沒(méi)有沒(méi)有解決問(wèn)題。最后我改變了硬件電路連接,決定直接把位選接到P2口,這樣雖然亮度沒(méi)有原來(lái)的強(qiáng),但是由于有驅(qū)動(dòng)芯片,亮度還是比較滿意,可以滿足要求。這樣就解決了之前的問(wèn)題。在整個(gè)課程設(shè)計(jì)過(guò)程中,還遇到了其他的小問(wèn)題,在這里不一一贅述了。這次課程設(shè)計(jì)題目看起來(lái)簡(jiǎn)單,但還是從中學(xué)到了些有用的東西。尤其要感謝老師的嚴(yán)格要求,這樣加強(qiáng)了我把這次課程設(shè)計(jì)做好的動(dòng)力。七、附錄1 C語(yǔ)言程序:#include /52系列單片機(jī)頭文件#include#include #define uchar unsigned char#define uint unsigned int#define cheng0#define jia1#define kaifang 2sbit wei1=P30; /定義4個(gè)位選端口sbit wei2=P31;sbit wei3=P32;sbit wei4=P33; uchar code table= /數(shù)碼管編碼0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint);void display(uint shi);uchar keyboard();uchar key_ok=0;uchar num_key=0;/按鍵號(hào) uchar count=0;/按鍵有效標(biāo)識(shí) void main()uint a=0,num1=0,num2=0,num3=0,num_count=1;char fuhao=0;/while(1)display(456);while(1) a=keyboard();if(key_ok=1)key_ok=0;if(count=1&a10)if(num_count=1)num1=a*1;else num2=a*1;if(num_count=3) num_count=1;else if(a10)if(num_count=1) num1=num1*10+a;else num2=num2*10+a;if(a=11)count=0;fuhao=cheng;if(num_count=3)num1=num3;num_count=2;else if(a=12)count=0;fuhao=jia;if(num_count=3)num1=num3;num_count=2;else if(a=13)count=0;fuhao=kaifang;if(num_count=3)num1=num3; if(fuhao=kaifang)num3=sqrt(num1);num1=0;num2=0;num_count=3;else if(a=16)count=0;if(fuhao=cheng)num3=num1*num2;else if(fuhao=jia)num3=num1+num2;num1=0;num2=0;num_count=3; if(num_count=1) display(num1);else if(num_count=2)display(num2);else if(num_count=3)display(num3); void delayms(int t)int x,y;for(x=0;xt;x+)for(y=0;y=10)P1=tableshi;P3=0xfB;delayms(2);P3=0xfF;delayms(3);if(a=100)P1=tablebai;P3=0xfD;delayms(2);P3=0xff;delayms(3);if(a=1000)P1=tableqian;P3=0xfE;delayms(2);P3=0xfF;delayms(3);/*不完善的顯示判斷程序,不如上面的好if(a=1000)P3=0xf0;P1=tableqian;/wei1=1;P3=0xf8;delayms(5);P3=0xf0;P1=tablebai;/wei2=1;P3=0xf4;delayms(5);P3=0xf0;P1=tableshi;/wei3=1;P3=0xf2;delayms(5);P3=0xf0;P1=tablege;/wei4=1;P3=0XF1;delayms(5);else if(a=100)wei1=0;P1=tablebai;wei2=1;delayms(5);wei2=0;P1=tableshi;wei3=1;delayms(5);wei3=0;P1=tablege;wei4=1;delayms(5);else if(a=10)wei2=0;P1=tableshi;wei3=1;delayms(5);wei3=0;P1=tablege;wei4=1;delayms(5);else wei3=0;P1=tablege;wei4=1;delayms(5);*/矩陣鍵盤.無(wú)按鍵動(dòng)作時(shí)其返回值num_key=0,否則返回按鍵號(hào)num_key*檢測(cè)高四位 unsigned char keyboard() / unsigned char num_key=0;/按鍵號(hào) unsigned char temp=0;/讀取P2口線數(shù)據(jù) static unsigned char temp_code=0;/用于保存按鍵值 static unsigned char temp_circle=0xFE;/保存P2線上的循環(huán)掃描值 static unsigned char num_check=0;/低電平計(jì)數(shù) static unsigned char key_flag=0;/按鍵有效標(biāo)識(shí) P2=temp_circle;/0xFX temp=P2;/讀取P2口線數(shù)據(jù) if(temp!=temp_circle)/有按鍵動(dòng)作 num_check+;/低電平計(jì)數(shù)|逢低電平加1 if(num_check=5)/連續(xù)10次(10ms)低電平有效 key_flag=1;/按鍵有效標(biāo)識(shí)置1 temp_code=temp;/保存按鍵值 else/松手OR無(wú)按鍵動(dòng)作,此時(shí)應(yīng)該改變掃描線 num_check=0; if(key_flag=1)/按鍵有效判斷 key_flag=0; count+;key_ok=1; switch(temp_code)/讀取按鍵號(hào) /P20線 case 0xEE: num_key=4; break; case 0xDE: num_key=3; break; case 0xBE: num_key=2; break; case 0x7E: num_key=1; break; /P21線 case 0xED: num_key=8; break; case 0xDD: num_key=7; break; case 0xBD: num_key=6; break; case 0x7D: num_key=5; break; /P22線 case 0xEB: num_key=12; break; case 0xDB: num_key=11; break; case 0xBB: num_key=0; break; case 0x7B: num_k

溫馨提示

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