版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p> 課程設(shè)計的目的和要求.........................1</p><p> 題目.........................................1</p><p> 主要器件說明.................................
2、1</p><p> 電路設(shè)計框圖.................................7</p><p> 各部分電路...................................8</p><p> 程序.........................................10</p><p> 心
3、得體會.....................................16</p><p> 參考文獻(xiàn).....................................16</p><p> 一、課程設(shè)計目的和要求</p><p><b> 目的:</b></p><p> ?。?)培養(yǎng)學(xué)生綜合運(yùn)
4、用所學(xué)理論知識分析和解決實際問題的能力。</p><p> (2)鍛煉學(xué)生的獨立工作能力,也是對前期理論與實踐教學(xué)效果的檢驗。</p><p> ?。?)通過課程設(shè)計使學(xué)生深入理解單片機(jī)的基本原理,硬件結(jié)構(gòu)和工作原理。掌握程序的編制方法和程序調(diào)試的方法,掌握常用接口的設(shè)計及使用。掌握一般接口的擴(kuò)展方法及接口的調(diào)試過程。為學(xué)生將來在電子信息工程、測試計量技術(shù)及儀器、通信工程、電子科學(xué)與技術(shù)
5、及其他領(lǐng)域應(yīng)用單片機(jī)技術(shù)打下良好基礎(chǔ)及應(yīng)用實踐能力。</p><p><b> 2.要求:</b></p><p> 本課程設(shè)計重視培養(yǎng)并提高學(xué)生創(chuàng)新設(shè)計能力、理論與實際相結(jié)合的綜合素質(zhì)、單片機(jī)系統(tǒng)硬件設(shè)計能力,軟件編程技巧,軟硬件聯(lián)合調(diào)試技巧及技能等實踐能力。</p><p> (1)選題要求:滿足課程設(shè)計的教學(xué)目的與要求,使學(xué)生得到全
6、面的綜合訓(xùn)練,題目難度和工作量應(yīng)適合學(xué)生的知識和能力狀況。</p><p> ?。?)學(xué)生根據(jù)課程實際任務(wù)書的要求合理地安排設(shè)計進(jìn)度,</p><p> ?。?)學(xué)生對自己課程設(shè)計的題目,應(yīng)概念清楚,設(shè)計方案合理,硬件設(shè)計正確,程序編制正確合理,調(diào)試結(jié)果符合設(shè)計要求,課程設(shè)計報告書撰寫規(guī)范。</p><p><b> 題目</b></p
7、><p> 實現(xiàn)最長99S的倒計時功能;利用數(shù)碼管或液晶屏顯示數(shù)字;利用按鍵可以設(shè)置倒計時時間;設(shè)置倒計時開始啟動鍵;時間到,聲(光)報警,示意倒計時時間到。</p><p> 三、所需主要器件說明</p><p> AT89C51單片機(jī)1個、兩位動態(tài)共陰數(shù)碼管1個、9個引腳的排阻、電阻3個、12MHz晶振1個、33pF電容2個、10uF極性電容1個、獨立按鍵1個
8、、4行3列矩陣按鍵1個、LED指示燈1個、電源和地若干</p><p><b> 1、AT89C51</b></p><p> AT89C51是一個低功耗,高性能CMOS 8位單片機(jī),片內(nèi)含4k Bytes ISP(In-system programmable)的可反復(fù)擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)制造,
9、兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲單元,功能強(qiáng)大的微型計算機(jī)的AT89C51可為許多嵌入式控制應(yīng)用系統(tǒng)提供高性價比的解決方案。AT89C單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。 其工作電壓在4.5-5V,一般我們選用+5V電壓。外形及引腳排列如圖2所示 </p><p> 圖二 at89c51外形及引腳</p>
10、<p><b> 主要特性</b></p><p> ·與MCS-51 兼容 </p><p> ·4K字節(jié)可編程閃爍存儲器 </p><p> ·壽命:1000寫/擦循環(huán)</p><p> ·數(shù)據(jù)保留時間:10年</p><p>
11、·全靜態(tài)工作:0Hz-24MHz</p><p> ·三級程序存儲器鎖定</p><p> ·128×8位內(nèi)部RAM</p><p> ·32可編程I/O線</p><p> ·兩個16位定時器/計數(shù)器</p><p><b> ·
12、;5個中斷源 </b></p><p><b> ·可編程串行通道</b></p><p> ·低功耗的閑置和掉電模式</p><p> ·片內(nèi)振蕩器和時鐘電路 </p><p><b> 管腳說明</b></p><p>
13、 (1)電源及時鐘引腳(4個)</p><p> Vcc: 電源接入引腳</p><p><b> Vss:接地引腳</b></p><p> XTAL1:晶振震蕩器接入的一個引腳(采用外部振蕩器時,此引腳接地);</p><p> XTAL2:晶體振蕩器的另一個引腳(采用外部振蕩器時,此引腳作為外部振
14、 蕩器信號的輸入端)。</p><p> (2)控制線引腳(4個)</p><p> RST/Vpd:復(fù)位信號輸入引腳/備用電源輸入引腳;</p><p> ALE:地址鎖存允許信號輸出引腳/編程脈沖輸入引腳:</p><p> EA:內(nèi)外存儲器選擇引腳/片外EPROM編程電壓輸入引腳;</p>&l
15、t;p> PSEN:外部程序存儲器選通信號輸出引腳。</p><p> (3)并行I/O引腳</p><p> P0.0-P0.7:一般I/O口引腳或數(shù)據(jù)/低位地址總線復(fù)用引腳;</p><p> P1.0-P1.7:一般I/O口引腳;</p><p> P2.0-P2.7:一般I/O口引腳或高位地址總線引腳;</p&g
16、t;<p> P3.0-P3.7:一般I/O口引腳或第二功能引腳</p><p><b> 振蕩器特性:</b></p><p> XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅(qū)動器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘
17、信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。 </p><p> 2、LED數(shù)碼管顯示器概述</p><p> 本設(shè)計中采用的是7SEG–MPX2-CC–BLUE型號雙數(shù)碼管,它是一種半導(dǎo)體發(fā)光器件,其基本單元是發(fā)光二極管。實物如圖3所示:</p><p> 圖3 共陰雙數(shù)碼管 </p><p> 共陰數(shù)碼管是指將所有
18、發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管。共陰數(shù)碼管在應(yīng)用時應(yīng)將公共極COM接到地線GND上,當(dāng)某一字段發(fā)光二極管的陽極為高電平時,相應(yīng)字段就點亮。當(dāng)某一字段的陽極為低電平時,相應(yīng)字段就不亮。</p><p> 共陰極接法:把發(fā)光二極管的陰極連在一起構(gòu)成公共陰極,使用時公共陰極接地。每個發(fā)光二極管的陽極通過電阻與輸入端相連。</p><p> LED數(shù)碼顯示器的顯示段碼。
19、 為了顯示字符,要為LED顯示器段碼(或稱字形代碼),組成一個8字形字符的7段,再加上1個小數(shù)點位,共計8段,因此提供給LED顯示器的顯示段碼為1個字節(jié)。各段碼位的對應(yīng)關(guān)系如下表所示.十六進(jìn)制數(shù)及空白字符與P的顯示如下表:</p><p><b> 3、矩陣鍵盤</b></p><p> 在鍵盤中按鍵數(shù)量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式,如
20、圖3所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接</p><p> 圖3 4行3列矩陣鍵盤</p><p><b> 四、程序框圖</b></p><p><b> N</b></p><p><b> Y</b></p&
21、gt;<p><b> 主程序</b></p><p><b> 五、部分電路連接</b></p><p> 1、矩陣按鍵掃描函數(shù)ankey()</p><p> 矩陣按鍵的原理和方法:矩陣按鍵的兩端都與單片機(jī)的I/O口相連,在檢測時,人為的通過單片機(jī)I/O口送出低電平。檢測時,先送一行為低電平,其余
22、幾列全為高電平,確定行數(shù),然后立即輪流檢測一次各列是否有低電平,若檢測到某一行為低電平,則確定列數(shù),這樣就可以確定按下那個數(shù)字。</p><p> 本設(shè)計用的是4行3列矩陣按鍵,它接AT89C51單片機(jī)的P1口,接法如圖所示:</p><p> 當(dāng)按下0~9數(shù)字鍵時,會產(chǎn)生相應(yīng)數(shù)值賦給矩陣按鍵掃描函數(shù)中以定義的參數(shù)key,當(dāng)按下*或#鍵時,會分別產(chǎn)生10或11賦給key。若key=10
23、,則將前面按下的數(shù)字送給顯示器;若key=11時調(diào)用對矩陣按鍵掃描進(jìn)行相應(yīng)處理函數(shù)text(uchar )且key賦給它,text(uchar )函數(shù)對key值進(jìn)行相應(yīng)處理:如果只按下一次數(shù)字鍵,那這數(shù)字就會是倒計時的個位,如果按下兩次數(shù)字鍵,那第一次的數(shù)字就會是倒計時的十位,第二次數(shù)字的數(shù)字就會是倒計時的個位,當(dāng)按下#或*鍵時,開始倒計時。</p><p> 2、動態(tài)數(shù)碼管顯示函數(shù)</p>&l
24、t;p> 動態(tài)數(shù)碼管顯示就是輪流向各位數(shù)碼管送出段選及相應(yīng)的位選,利用發(fā)光管的余輝和人眼視覺暫留作用,使人眼感覺各位數(shù)碼管同時都在顯示,實際上多位數(shù)碼管是一位一位輪流顯示的,只是輪流比較快,我們分辨不出來。本設(shè)計用的是兩位動態(tài)共陰數(shù)碼管顯示,它和單片機(jī)的連接如圖所示:</p><p> 其中那排阻是驅(qū)動電路。</p><p><b> 3、復(fù)位電路如圖:</b&
25、gt;</p><p> RST為復(fù)位信號輸入端,高電平有效。系統(tǒng)上電后,當(dāng)已經(jīng)進(jìn)行過倒計時,這時想進(jìn)行不同時間的倒計時,只要按下復(fù)位按鈕后,就可以進(jìn)行新的倒計時。</p><p><b> 4、總電路圖</b></p><p><b> 六、總體程序</b></p><p> #inclu
26、de <reg51.h> </p><p> #define uchar unsigned char</p><p> #define uint unsigned int </p><p> sbit sw=P0^6;//十位位選</p><p> sbit gw=P0^7;//個位位選</p>
27、<p> sbit led=P3^7;//LED燈</p><p> uchar code table[]={</p><p> 0x3f,0x06,0x5b,0x4f,</p><p> 0x66,0x6d,0x7d,0x07,</p><p> 0x7f,0x6f};//編碼定義</p><p&g
28、t; uchar numt0,num;</p><p> void delayms(uint);</p><p> void text(uchar);</p><p> void display(uchar numdis) //動態(tài)數(shù)碼管顯示子函數(shù)</p><p><b> {</b></p>
29、<p> uchar shi,ge; //分離兩個分別要顯示的數(shù)</p><p> shi=numdis/10;</p><p> ge=numdis%10;</p><p><b> sw=0;</b></p><p> P2=table[shi]; //送十位段選數(shù)據(jù)<
30、/p><p> delayms(5);//延時</p><p><b> sw=1;</b></p><p><b> gw=0;</b></p><p> P2=table[ge]; //送個位段選數(shù)據(jù)</p><p> delayms(5);</p>
31、<p><b> gw=1;</b></p><p><b> }</b></p><p> void delayms(uint x)//延時x ms</p><p><b> {</b></p><p><b> uint i,j;<
32、;/b></p><p> for(i=x;i>0;i--) //i=x即延時約x毫秒</p><p> for(j=110;j>0;j--);</p><p><b> }</b></p><p> void ankey() //鍵盤掃描</p><p><b&
33、gt; {</b></p><p> uchar temp,key;</p><p> P1=0xf7;//第1行 11110111</p><p><b> temp=P1;</b></p><p> temp=temp&0xf0;//temp低4位清0;</p><
34、p> if(temp!=0xf0) //判斷是否有鍵按下</p><p><b> {</b></p><p> delayms(5); //延時,消除抖動</p><p><b> {</b></p><p> temp=P1; //重新讀取P1口</p><p
35、> switch(temp)//判斷哪個鍵按下</p><p><b> {</b></p><p> case 0xe7:</p><p><b> key=1;</b></p><p><b> break;</b></p><p>
36、 case 0xd7:</p><p><b> key=2;</b></p><p><b> break;</b></p><p> case 0xb7:</p><p><b> key=3;</b></p><p><b>
37、 break;</b></p><p><b> }</b></p><p> text(key);</p><p> while(temp!=0xf0)//判斷按鍵是否釋放</p><p><b> {</b></p><p><b> te
38、mp=P1;</b></p><p> temp=temp&0xf0;</p><p><b> } </b></p><p><b> }</b></p><p><b> }</b></p><p> P1=0xf
39、b;//第2行 </p><p><b> temp=P1;</b></p><p> temp=temp&0xf0;</p><p> if(temp!=0xf0)</p><p><b> {</b></p><p> delayms(5);<
40、/p><p><b> {</b></p><p><b> temp=P1;</b></p><p> switch(temp)</p><p><b> {</b></p><p> case 0xeb:</p><p>
41、;<b> key=4;</b></p><p><b> break;</b></p><p> case 0xdb:</p><p><b> key=5;</b></p><p><b> break;</b></p><
42、;p> case 0xbb:</p><p><b> key=6;</b></p><p><b> break;</b></p><p><b> }</b></p><p> text(key);</p><p> while(t
43、emp!=0xf0)</p><p><b> {</b></p><p><b> temp=P1;</b></p><p> temp=temp&0xf0;</p><p><b> } </b></p><p><b&g
44、t; }</b></p><p><b> }</b></p><p> P1=0xfd;//第3行</p><p><b> temp=P1;</b></p><p> temp=temp&0xf0;</p><p> if(temp!=0x
45、f0)</p><p><b> {</b></p><p> delayms(5);</p><p><b> {</b></p><p><b> temp=P1;</b></p><p> switch(temp)</p>
46、<p><b> {</b></p><p> case 0xed:</p><p><b> key=7;</b></p><p><b> break;</b></p><p> case 0xdd:</p><p><b&
47、gt; key=8;</b></p><p><b> break;</b></p><p> case 0xbd:</p><p><b> key=9;</b></p><p><b> break;</b></p><p>&
48、lt;b> }</b></p><p> text(key);</p><p> while(temp!=0xf0)</p><p><b> {</b></p><p><b> temp=P1;</b></p><p> temp=temp&
49、amp;0xf0;</p><p><b> } </b></p><p><b> }</b></p><p><b> }</b></p><p> P1=0xfe;//第4行</p><p><b> temp=P1;&l
50、t;/b></p><p> temp=temp&0xf0;</p><p> if(temp!=0xf0)</p><p><b> {</b></p><p> delayms(5);</p><p><b> {</b></p>&
51、lt;p><b> temp=P1;</b></p><p> switch(temp)</p><p><b> {</b></p><p> case 0xee:</p><p><b> key=10;</b></p><p>&l
52、t;b> break;</b></p><p> case 0xde:</p><p><b> key=0;</b></p><p><b> break;</b></p><p> case 0xbe:</p><p><b> k
53、ey=11;</b></p><p><b> break;</b></p><p><b> }</b></p><p> text(key);</p><p> while(temp!=0xf0)</p><p><b> {</b&
54、gt;</p><p><b> temp=P1;</b></p><p> temp=temp&0xf0;</p><p><b> } </b></p><p><b> }</b></p><p><b> }&l
55、t;/b></p><p><b> }</b></p><p> void text(uchar key)//判斷鍵盤掃描結(jié)果,并倒計時</p><p><b> {</b></p><p> static uchar n,bb,s;//靜態(tài)局部變量</p><p
56、><b> s=1;</b></p><p> if(key==0||key==1||key==2||key==3||key==4||key==5||key==6||key==7||key==8||key==9)</p><p> n++;//有數(shù)字鍵被按下,n加1</p><p> if(key==10)</p>
57、<p> n=3; //*被按下,n置3</p><p> if(key==11)</p><p> n=4;//#被按下,n置4</p><p><b> switch(n)</b></p><p><b> {</b></p><p> case 1
58、: bb=key;key=20;display(bb);break;//第1次按下數(shù)字鍵</p><p> case 2: bb=bb*10+key;n=0;key=20;display(bb);break;//第2次按下數(shù)字鍵</p><p> case 3:{ num=bb;</p><p> }break;//顯示倒計時時間</p><
59、;p> case 4: { num=bb;//開始倒計時</p><p> while(s==1)</p><p><b> {</b></p><p> TR0=1;//啟動定時器0中斷</p><p> if(numt0==20)//如果到了20次,說明1秒時間到</p><p&
60、gt;<b> {</b></p><p> numt0=0;//然后把numt0清0重新再計20次</p><p> num--;//num自減</p><p> if(num==0)//如果num等0</p><p><b> {</b></p><p> T
61、R0=0;//關(guān)閉定時器0中斷</p><p> s=0; //退出循環(huán)</p><p> led=0;//點亮LED燈</p><p><b> }</b></p><p><b> }</b></p><p> display(num);//顯示num<
62、/p><p><b> }</b></p><p> } break;}</p><p><b> }</b></p><p> void init() //初始化函數(shù)</p><p><b> {</b></p><p
63、> TMOD=0x01;//設(shè)置定時器0為工作方式1(0000 0001)</p><p> TH0=(65536-50000)/256;//裝初值50ms一次中斷</p><p> TL0=(65536-50000)%256;</p><p> EA=1; //開總中斷</p><p> ET0=1; //允許定時器0中斷
64、</p><p> TR0=0; //定時器0計時開始</p><p> sw=1;//關(guān)數(shù)碼管十位位選</p><p> gw=1; //關(guān)數(shù)碼管個位位選</p><p><b> }</b></p><p> void main()//主函數(shù)</p><p&g
65、t;<b> {</b></p><p> init();//初始化函數(shù)</p><p><b> num=0;</b></p><p> while(1) //循環(huán)</p><p><b> {</b></p><p> ankey();
66、//鍵盤掃描</p><p> display(num);//動態(tài)數(shù)碼管顯示</p><p><b> }</b></p><p><b> }</b></p><p> void T0_time() interrupt 1//定時器0中斷函數(shù)</p><p>&
67、lt;b> {</b></p><p> TH0=(65536-50000)/256;//重裝初值(晶振為12MHz時為定時50毫秒)</p><p> TL0=(65536-50000)%256;</p><p> numt0++;//50ms中斷一次</p><p><b> }</b&
68、gt;</p><p><b> 七、心得體會</b></p><p> 我們學(xué)的單片機(jī)課程是匯編的,對我而言,這是一門苦澀難懂的課程,而且與教材配套的課件完全跟課本一樣,老師本人也不太愿意用那本教材,結(jié)果只能無奈地照本宣科地把教材過一遍。說實在話,直到這門課程結(jié)束,我對單片機(jī)還知之甚少。我明白,作為一名大學(xué)生,決不能再依賴?yán)蠋?,必須學(xué)會如何學(xué)習(xí),必須提高自學(xué)能力
69、。但是,可能是惰性,正如朱光潛先生說的,“人容易朝抵抗力最低的路徑走”,經(jīng)過多次讀閱教材都未能摸出一個所以然來,我最終還是放棄了。因為這次課程設(shè)計,我接觸到了郭天祥的《51單片機(jī)C用語言教程》,我才知道當(dāng)初的學(xué)習(xí)方法太錯了,原以為必須完全了解其內(nèi)部結(jié)構(gòu)原理后,才能去實踐,殊不知實踐中學(xué)習(xí)才是最好的方法,于是就浪費(fèi)了很多時間,又被打擊了信心。后悔無補(bǔ)于事,最糟糕莫過于重頭再來!</p><p> 這次單片機(jī)設(shè)計,
70、我選擇了相對比較簡單的題目,查閱了不少網(wǎng)絡(luò)資源和書籍,試著去理解往年師兄師姐做的課程設(shè)計的電路連接、程序的編寫,才慢慢地摸到了門檻。雖然,至今我還無法完全靠自己完成設(shè)計,但是萬事開頭難,只要踏出了第一步,以后就能不斷地提高自己??偟膩碚f,通過這次單片機(jī)設(shè)計,我沒有取得很大的進(jìn)步,但收獲卻不少。如果沒有這次“被迫”練手的機(jī)會,我恐怕早就放棄這門學(xué)科?,F(xiàn)在我至少知道應(yīng)該如何去學(xué)單片機(jī),我有信心學(xué)好這門課,即使從零開始!</p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計--基于at89c51的99秒倒計時器設(shè)計
- 課程設(shè)計--基于AT89C51的99秒倒計時器設(shè)計.doc
- 單片機(jī)課程設(shè)計--基于at89c51的60秒倒計時設(shè)計
- 單片機(jī)課程設(shè)計---基于at89c51的60秒倒計時設(shè)計
- 單片機(jī)課程設(shè)計-基于at89c51的60秒倒計時設(shè)計
- 基于at89c51單片機(jī)的led數(shù)字倒計時器設(shè)計
- 倒計時器課程設(shè)計
- 課程設(shè)計----籃球競賽24秒倒計時器
- 課程設(shè)計--倒計時計時器的設(shè)計
- 課程設(shè)計報告---倒計時器
- 智能倒計時器課程設(shè)計
- 智能倒計時器課程設(shè)計
- 24秒籃球倒計時器課程設(shè)計
- 數(shù)字顯示30秒倒計時器課程設(shè)計報告
- 24秒籃球倒計時器課程設(shè)計
- 60秒倒計時器-單片機(jī)課程設(shè)計
- 99倒計時課程設(shè)計
- eda課程設(shè)計報告--籃球競賽30秒倒計時器
- 60秒倒計時器-單片機(jī)課程設(shè)計報告
- 課程設(shè)計---單片機(jī)at89c51的定時器實現(xiàn)60s倒計時
評論
0/150
提交評論