《基于AT89S52單片機設(shè)計定時炸彈的畢業(yè)設(shè)計》由會員分享,可在線閱讀,更多相關(guān)《基于AT89S52單片機設(shè)計定時炸彈的畢業(yè)設(shè)計(19頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、單片機技術(shù)定時炸彈的設(shè)計說明書題目 定時炸彈 院系 電氣工程系_班級 車輛電子111_姓名 袁湘華 _目錄1設(shè)計目的2作品意義3功能簡介4電路原理圖5程序6心得體會7不足與改進8元器件清單摘要:在一次看電影的時候,我看到了一個爆炸場面。雖然電影中是恐怖分子的不法行為引起的爆炸,但是我卻想到了定時炸彈在控制和實現(xiàn)等各方面的優(yōu)點,因而突發(fā)靈感,想要利用51單片機自己制作一個模仿的定時炸彈,一來是想要鍛煉自己的實際動手能和創(chuàng)新思維,而來是想要提高自己的視野和團隊合作精神。1設(shè)計目的:鍛煉自己的各方面的綜合能力,包括創(chuàng)新、設(shè)計、焊接、調(diào)試、編程等知識水平和溝通、交流、團結(jié)協(xié)作等一些綜合素質(zhì),深入了解5
2、2單片機的實際應(yīng)用。2作品意義:定時炸彈是一個危險的物品,但我們不能因為危險而遠(yuǎn)離它,恰恰相反我要去深入了解它,了解它的原理這樣才不會懼怕它并用它造福。在一些人工開鑿方面,光靠人力是很難實現(xiàn)的,而且也存在這安全性問題,用定時炸彈來實現(xiàn)卻要方便得多,不僅速度快、效率高、風(fēng)險小,而且也便于實時性地操作,控制起來極為方便,可以滿足很多方面的要求。3功能簡介 3.1、開機輸入密碼才可使用,此密碼作為拆彈密碼(初始密碼為0123) 3.2、可以隨意輸入1小時以內(nèi)的定時時間,并顯示。 3.3、倒計時時間能夠顯示直至結(jié)束為止。 3.4、時間少于10秒進行聲光提示。 3.5、每次按鍵時都有聲光提示。 3.6、
3、允許在指定時間內(nèi)輸入密碼進行拆彈。密碼錯誤會導(dǎo)致提前爆炸。 3.7、按下解鎖密碼鍵后不論解除危險都將剩最后10秒。解鎖失敗馬上爆炸。3.8、也可以剪斷紅線或藍(lán)線進行拆彈,剪錯線都有引發(fā)爆炸的可能。 3.9、倒計時結(jié)束時進行模仿爆炸,同時有聲光提示。4電路原理圖PCB圖單片機STC89C52按 鍵部 分指示電 路電源模 塊顯示電路爆炸部分定時炸彈總體電路框圖5程序#includesbit beep=P36;sbit red=P30;sbit green=P31;sbit end=P37;unsigned char a,K;unsigned char D=10; unsigned char C=1
4、1; unsigned char E=12;unsigned char F=13;unsigned char temp,i;unsigned char code init4=0,1,2,3;unsigned char show4=0;unsigned char min=0; /分unsigned char sec=0; /秒unsigned char n,m; /最后倒計時10計時次數(shù)bit flag=0;/標(biāo)示確認(rèn)鍵是否按下bit flag0=0;/密碼錯誤標(biāo)示位bit flag1=0;/密碼輸入足夠bit time1=0;/時間設(shè)置完標(biāo)志位unsigned char number=0;vo
5、id Delay(int t) unsigned int i,j;for(i=0;it;i+)/延時t個1msfor(j=0;j112;j+);/延時約1msunsigned char ScanKey44()unsigned char key,hey;P1=0x0f;if(P1&0x0f)=0x0f) return F;Delay(5);if(P1&0x0f)=0x0f) return F;key=(P1&0x0f);P1=0xf0;hey=(P1&0xf0);key=(key|hey);while(P1!=0xf0);switch(key)case 0x11:K=1;break;case 0
6、x12:K=2;break;case 0x14:K=3;break;case 0x18:K=C;break; case 0x21:K=4;break;case 0x22:K=5;break;case 0x24:K=6;break;case 0x28:K=D;break; case 0x41:K=7;break;case 0x42:K=8;break;case 0x44:K=9;break;case 0x48:K=E;break; case 0x82:K=0;break;default :K=F;break;return(K);void disp(unsigned char post,unsig
7、ned char past) switch(post)case 0:P0=P0&0XF0;P0=P0|past;break;/p0=PASTcase 1:P0&=0X0f;P0|=past4;break;case 3:P2&=0XF0;P2|=past;break;case 2:P2&=0X0f;P2|=past4;break;Delay(10);void led_init()/數(shù)碼管初始化disp(0,0);disp(1,0);disp(2,0);disp(3,0);void led_ok()/解鎖成功disp(0,8);disp(1,8);disp(2,8);disp(3,8);green
8、=0;void clean() /清除函數(shù) number=0; flag1=0; flag0=0; led_init(); flag=0; flag0=0;void int1() /定時中斷初始化TMOD=0x11;TH0=0x4c;TL0=0xf7;TH1=0x4c;TL1=0xf7;IT0=1;EX0=1;IT1=1;EX1=1;ET0=1;TR0=0;TR1=0;ET1=1;EA=1;void main()unsigned char num,i=0;int1(); led_init();red=1;green=1;end=1;beep=1; while(1)num=ScanKey44()
9、;if(num!=F)/有鍵按下 if(!flag0) if(num=D)/按下確認(rèn)鍵flag=1;if(flag1) /密碼輸入完畢f(xié)or(i=0;i4;i+)flag0=1;if(showi!=initi)/校驗錯誤clean();flag=1;red=0;beep=0;Delay(500);beep=1;red=1;break;if(flag0)/密碼輸入正確min=0;sec=0;P0=0xff;P2=0XFF;number=0;green=0;TR1=0;else if(num=C)/按下clean鍵clean();else if(flag=1) /之前按下確認(rèn)鍵 if(num=9)
10、 /按下數(shù)字鍵 number+; beep=0;Delay(100);beep=1;shownumber-1=num;disp(number-1,num);if(number=4)flag1=1;number=0; else /密碼對時 設(shè)置時間if(!time1)/沒設(shè)置時間if(num=9)switch(number)case 0:min=min+num*10;disp(number,num);number+;break;case 1:min=min+num;disp(number,num);number+;break;case 2:if(num3) time1=1;elseif(num=
11、D)TR0=1;if(TR0=1)&(min=0)&(sec1) EA=0;end=0;beep=0;green=1;red=0;while(1);/解鎖/if(TR0=1)&(num=E)clean();TR0=0;TR1=1;flag=1;if(flag=1) /之前按下確認(rèn)鍵 if(num=9) /按下數(shù)字鍵 number+; shownumber-1=num;disp(number-1,num);if(number=4)flag1=1; if(flag1=1) /密碼輸入完畢f(xié)or(i=0;i=10) time=0;m+;if(min=0)&(sec=2)m=0;if(sec0)sec
12、-;elseif(sec=0)&(min0)sec=59;min-;disp(0,min/10%10);disp(1,min%10);disp(2,sec/10%10);disp(3,sec%10); void timer1(void) interrupt 3 /按下解鎖鍵最后10秒static char tim=0; TH1=0x4c; TL1=0xf7; tim+; if(tim=10) tim=0;beep=beep;red=red;n+;if(n=20)led_init();EA=0;red=0;green=1;beep=0; end=0; void int0(void) interr
13、upt 0 /解鎖失敗爆炸 led_init(); TR0=0; EA=0; end=0; red=0; beep=0;void int3(void) interrupt 2 /解鎖成功 led_ok(); TR0=0; green=0; red=1; EA=0; end=1;6心得體會首先在設(shè)計這個項目的時候我開始考慮的是用到定時器作為倒計時的裝置,然后聲光模擬爆炸情形。后面發(fā)現(xiàn)過于簡單,而后加了矩陣按鍵,以及密碼鎖的原理應(yīng)用,和爆炸電路。由于加了這么多的部分,故課程設(shè)計的過程中,我感觸最深的當(dāng)屬查閱大量的設(shè)計資料了,數(shù)字電路部分有AT89S52單片機、CD4511譯碼器、數(shù)碼管等等,模擬電
14、路部分有三端穩(wěn)壓器、三極管、發(fā)光二極管、蜂鳴器、繼電器以及電阻電容等等。為了讓自己的設(shè)計更加完善,查閱這方面的設(shè)計資料是十分必要的,同時也是必不可少的,花費了我一天的時間。由于原理圖的設(shè)計出現(xiàn)了不少的問題對后面的調(diào)試造成了許多困難,比如在原理圖里面的三極管與封裝的引腳不同,使之連線出錯,單片機的IO口用高低平難以驅(qū)動蜂鳴器及LED燈。而后我用低電平驅(qū)動得以實現(xiàn)功能;對于爆炸電路的P3,7口驅(qū)動繼電器與參數(shù)不符驅(qū)動不了,而后百度資料才改好。硬件電路的調(diào)試成功對于軟件的編程起到了有利的局面。由于思路不夠嚴(yán)謹(jǐn),一直未能調(diào)試成功,不得已的情況下請教了大三的學(xué)長后,順著他提供的思路下去,我也一步步走向了
15、成功。通過這次的制作設(shè)計我深刻的體會到一個人想要完成一個項目是十分有難度的,做電子制作設(shè)計需要有嚴(yán)謹(jǐn)?shù)乃枷?,正確的思路以及堅持不懈、永不放棄的決心。帶著這樣的態(tài)度,我的項目才得以成功。7不足與改進首先數(shù)碼管經(jīng)過CD4511譯碼出來后“6”和“9”的顯示有一橫沒有。其次在顯示的時候第一位數(shù)碼管的顯示會有點混亂。最后在進行模擬爆炸的時候,我采用的是用一個極性電容反接加上正電壓讓它過壓爆炸。但是實際上在倒計時完后10才爆炸。改進:將模擬爆炸的電容采用較小容量的電容可延短電源爆炸響應(yīng)時間。8元器件清單元件清單材料數(shù)目材料數(shù)目單片機AT89S521三極管S9012212M晶振1蜂鳴器130pF瓷片電容2綠發(fā)光二極管1電解電容22uF/25V1紅發(fā)光二極管1電解電容47uF/16V140P鎖警11k排阻(一排8個)1液晶插槽40P2三端穩(wěn)壓器KA78151金屬膜電阻100歐2三端穩(wěn)壓器KA78051200歐1繼電器1330歐30獨立共陰數(shù)碼管41k歐3譯碼器CD4511422k歐1帶鎖開關(guān)133k歐1小按鈕1262K4電源插座116P底座5