版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 課 程 設(shè) 計</b></p><p> 課程名稱:__單片機課程設(shè)計 </p><p> 題目名稱:__倒計時器設(shè)計 </p><p> 學(xué)生學(xué)院:_物理與光電工程學(xué)院 </p><p> 專業(yè)班級:_光信息科學(xué)與技術(shù)10(1)班</p>&l
2、t;p> 學(xué) 號:_XXXXXXX_ </p><p> 2012年12月3日</p><p> 摘要·····················
3、183;································2</p><p>
4、一、本設(shè)計任務(wù)、實現(xiàn)方法及完成的功能······················3</p><p> 1、功能要求······
5、3;····································
6、183;········3</p><p> 2、實現(xiàn)方法·······················
7、·····························3</p><p> 二、設(shè)計的實現(xiàn)過程 ··
8、····································3<
9、;/p><p> 1、矩陣電路································
10、183;···················4</p><p> 2、數(shù)碼顯示和驅(qū)動電路 ··········
11、3;····························4</p><p> 3、復(fù)位電路···
12、183;····································
13、··········· 5</p><p> 4、晶振電路····················
14、83;·······························6</p><p> 三、系統(tǒng)的軟件
15、設(shè)計····································
16、183;··4</p><p> 1、按鍵掃描函數(shù) ankey()···························&
17、#183;···········4</p><p> 2、動態(tài)數(shù)碼管顯示函數(shù)···················
18、······················5</p><p> 3、初始化函數(shù)設(shè)計·········&
19、#183;···································6
20、 4、中斷函數(shù)設(shè)計···································
21、;···········6四、總體程序························
22、183;····················7</p><p> 五、結(jié)束語···········&
23、#183;···································12<
24、;/p><p><b> 倒計時課程設(shè)計 </b></p><p><b> 一:課程設(shè)計的要求</b></p><p><b> 1、功能要求:</b></p><p> 實現(xiàn)最長99S的倒計時功能;利用數(shù)碼管或液晶屏顯示數(shù)字;利用按鍵可以設(shè)置倒計時時間;設(shè)置倒計時開始
25、啟動鍵;時間到,聲(光)報警,示意倒計時時間到。</p><p><b> 2、實現(xiàn)方法:</b></p><p> 單片機采用51系列,分析功能要求,設(shè)計方案,編寫程序(keil c51 軟件),利用Proteus進行仿真。</p><p><b> 二:設(shè)計的實現(xiàn)過程</b></p><p&g
26、t; proteus仿真下總原理框架圖如下</p><p><b> 接線:</b></p><p> 、XTAL1、XTAL2為晶振接入</p><p> 、RST為清零電路接入</p><p> 、P1口為鍵盤電路接入</p><p> 、P2口為數(shù)碼管的段選</p>
27、<p> 、P3..7為LED的選通</p><p> 、P0.6、P0.7分別為數(shù)碼管的十位、個位的選通</p><p><b> 原件清單:</b></p><p> AT89C51單片機1個、1k電阻3個、12MHz晶振1個、33pF電容1個、1uF電容1個、10uf的電容一個、獨立按鍵1個、4行3列矩陣按鍵1個、LE
28、D指示燈1個、兩位動態(tài)共陰數(shù)碼管1個、帶9個引腳的上拉電阻1個、電源3個、地若2個</p><p><b> 模塊組成設(shè)計</b></p><p> ?。?)、矩陣鍵盤電路</p><p> 矩陣鍵盤電路原理:以上矩陣采用了4*3的結(jié)構(gòu),通過ankey()子函數(shù)不斷逐行逐行地掃描矩陣鍵盤電路,一旦判斷有按鍵按下立即反饋給倒計時時鐘循環(huán)函數(shù)。
29、</p><p><b> 掃描電路子程序:</b></p><p> void ankey() //鍵盤掃描</p><p><b> {</b></p><p> uchar temp,key;</p><p> P1=0xef;//第1行</p>
30、<p><b> temp=P1;</b></p><p> temp=temp&0x0f;//temp高4位清0;</p><p> if(temp!=0x0f) //判斷是否有鍵按下</p><p><b> {</b></p><p> delayms(10);
31、 //延時,消除抖動</p><p> if(temp!=0xf0)//判斷是否有鍵按下</p><p><b> {</b></p><p> temp=P1; //重新讀取P1口</p><p> switch(temp)//判斷哪個鍵按下</p><p><b> {&l
32、t;/b></p><p> case 0xeb:</p><p><b> key=1;</b></p><p><b> break;</b></p><p> case 0xed:</p><p><b> key=2;</b>&l
33、t;/p><p><b> break;</b></p><p> case 0xee:</p><p><b> key=3;</b></p><p><b> break;</b></p><p><b> }</b>&l
34、t;/p><p> text(key);</p><p> while(temp!=0x0f)//判斷按鍵是否釋放</p><p><b> {</b></p><p><b> temp=P1;</b></p><p> temp=temp&0x0f;<
35、/p><p><b> } </b></p><p><b> }</b></p><p><b> }</b></p><p> ?。?)、數(shù)碼管顯示和驅(qū)動電路</p><p> 數(shù)碼管顯示電路原理:通關(guān)P0.6和P0.7的位選通信號控制數(shù)碼
36、管十位個位的選通,然后通過P2口的段選信號控制數(shù)碼管的顯示數(shù)字。</p><p> 驅(qū)動電路:屬于上拉電阻,起到增大P1口的輸出電壓。</p><p><b> 數(shù)碼管顯示程序:</b></p><p> void display(uchar numdis) //動態(tài)數(shù)碼管顯示子函數(shù)</p><p><b&
37、gt; {</b></p><p> uchar shi,ge; //分離兩個分別要顯示的數(shù)</p><p> shi=numdis/10;</p><p> ge=numdis%10;</p><p><b> sw=0;</b></p><p> P2=
38、table[shi]; //送十位段選數(shù)據(jù)</p><p> delayms(5);//延時</p><p><b> sw=1;</b></p><p><b> gw=0;</b></p><p> P2=table[ge]; //送個位段選數(shù)據(jù)</p><
39、p> delayms(5);</p><p><b> gw=1;</b></p><p><b> }</b></p><p><b> 、復(fù)位電路:</b></p><p> 復(fù)位電路原理:RST為高電平有效,電路中的按鍵一旦按下則RST端由低電平變?yōu)楦唠娖?/p>
40、,因而實現(xiàn)總電路的復(fù)位。</p><p><b> 晶振電路:</b></p><p> 晶振電路為系統(tǒng)提供了合適的時鐘信號。</p><p><b> 中斷子函數(shù):</b></p><p> void T0_time() interrupt 1//定時器0中斷函數(shù)</p>
41、<p><b> {</b></p><p> TH0=(65536-50000)/256;//重裝初值</p><p> TL0=(65536-50000)%256;</p><p> numt0++;//50ms中斷一次</p><p><b> }</b></
42、p><p><b> 初始函數(shù):</b></p><p> void init() //初始化函數(shù)</p><p><b> {</b></p><p> TMOD=0x01;//設(shè)置定時器0為工作方式1(0000 0001)</p><p> TH0=(6553
43、6-50000)/256;//裝初值50ms一次中斷</p><p> TL0=(65536-50000)%256;</p><p> EA=1; // 開總中斷</p><p> ET0=1; //開定時器0中斷</p><p><b> TR0=0; </b></p><p>
44、sw=1;//關(guān)數(shù)碼管十位位選</p><p> gw=1; //關(guān)數(shù)碼管個位位選</p><p><b> }</b></p><p><b> 3.總程序</b></p><p> #include <reg51.h> </p><p>
45、 #define uchar unsigned char</p><p> #define uint unsigned int </p><p> sbit sw=P0^6;//十位位選</p><p> sbit gw=P0^7;//個位位選</p><p> sbit led=P3^7;//LED燈</p>&l
46、t;p> uchar code table[]={</p><p> 0x3f,0x06,0x5b,0x4f,</p><p> 0x66,0x6d,0x7d,0x07,</p><p> 0x7f,0x6f};//編碼定義</p><p> uchar numt0,num;</p><p> voi
47、d delayms(uint);</p><p> void text(uchar);</p><p> void display(uchar numdis) //動態(tài)數(shù)碼管顯示子函數(shù)</p><p><b> {</b></p><p> uchar shi,ge; //分離兩個分別要顯示的數(shù)
48、</p><p> shi=numdis/10;</p><p> ge=numdis%10;</p><p><b> sw=0;</b></p><p> P2=table[shi]; //送十位段選數(shù)據(jù)</p><p> delayms(5);//延時</p>
49、<p><b> sw=1;</b></p><p><b> gw=0;</b></p><p> P2=table[ge]; //送個位段選數(shù)據(jù)</p><p> delayms(5);</p><p><b> gw=1;</b></p>
50、;<p><b> }</b></p><p> void delayms(uint x)//延時x ms</p><p><b> {</b></p><p><b> uint i,j;</b></p><p> for(i=x;i>0;i
51、--) //i=x即延時約x毫秒</p><p> for(j=110;j>0;j--);</p><p><b> }</b></p><p> void ankey() //鍵盤掃描</p><p><b> {</b></p><p> uchar t
52、emp,key;</p><p> P1=0xef;//第1行</p><p><b> temp=P1;</b></p><p> temp=temp&0x0f;//temp高4位清0;</p><p> if(temp!=0x0f) //判斷是否有鍵按下</p><p><
53、;b> {</b></p><p> delayms(10); //延時,消除抖動</p><p> if(temp!=0xf0)//判斷是否有鍵按下</p><p><b> {</b></p><p> temp=P1; //重新讀取P1口</p><p> sw
54、itch(temp)//判斷按鍵按下情況 </p><p><b> {</b></p><p> case 0xeb:</p><p><b> key=1;</b></p><p><b> break;</b></p><p>
55、case 0xed:</p><p><b> key=2;</b></p><p><b> break;</b></p><p> case 0xee:</p><p><b> key=3;</b></p><p><b> b
56、reak;</b></p><p><b> }</b></p><p> text(key);</p><p> while(temp!=0x0f)//判斷按鍵是否釋放</p><p><b> {</b></p><p><b> temp
57、=P1;</b></p><p> temp=temp&0x0f;</p><p><b> } </b></p><p><b> }</b></p><p><b> }</b></p><p> P1=0xdf;
58、//第2行</p><p><b> temp=P1;</b></p><p> temp=temp&0x0f;</p><p> if(temp!=0x0f)</p><p><b> {</b></p><p> delayms(10);</p&g
59、t;<p> if(temp!=0xf0)</p><p><b> {</b></p><p><b> temp=P1;</b></p><p> switch(temp)</p><p><b> {</b></p><p>
60、; case 0xdb:</p><p><b> key=4;</b></p><p><b> break;</b></p><p> case 0xdd:</p><p><b> key=5;</b></p><p><b>
61、 break;</b></p><p> case 0xde:</p><p><b> key=6;</b></p><p><b> break;</b></p><p><b> }</b></p><p> text(ke
62、y);</p><p> while(temp!=0x0f)</p><p><b> {</b></p><p><b> temp=P1;</b></p><p> temp=temp&0x0f;</p><p><b> } </
63、b></p><p><b> }</b></p><p><b> }</b></p><p> P1=0xbf;//第3行</p><p><b> temp=P1;</b></p><p> temp=temp&0x0f;&
64、lt;/p><p> if(temp!=0x0f)</p><p><b> {</b></p><p> delayms(10);</p><p> if(temp!=0xf0)</p><p><b> {</b></p><p><b
65、> temp=P1;</b></p><p> switch(temp)</p><p><b> {</b></p><p> case 0xbb:</p><p><b> key=7;</b></p><p><b> break
66、;</b></p><p> case 0xbd:</p><p><b> key=8;</b></p><p><b> break;</b></p><p> case 0xbe:</p><p><b> key=9;</b>
67、;</p><p><b> break;</b></p><p><b> }</b></p><p> text(key);</p><p> while(temp!=0x0f)</p><p><b> {</b></p>
68、<p><b> temp=P1;</b></p><p> temp=temp&0x0f;</p><p><b> } </b></p><p><b> }</b></p><p><b> }</b></p&
69、gt;<p> P1=0x7f;//第4行</p><p><b> temp=P1;</b></p><p> temp=temp&0x0f;</p><p> if(temp!=0x0f)</p><p><b> {</b></p><p&g
70、t; delayms(10);</p><p> if(temp!=0xf0)</p><p><b> {</b></p><p><b> temp=P1;</b></p><p> switch(temp)</p><p><b> {</b
71、></p><p> case 0x7b:</p><p><b> key=10;</b></p><p><b> break;</b></p><p> case 0x7d:</p><p><b> key=0;</b></
72、p><p><b> break;</b></p><p> case 0x7e:</p><p><b> key=11;</b></p><p><b> break;</b></p><p><b> }</b><
73、/p><p> text(key);</p><p> while(temp!=0x0f)</p><p><b> {</b></p><p><b> temp=P1;</b></p><p> temp=temp&0x0f;</p><
74、p><b> } </b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void text(uchar key)//判斷鍵盤掃描結(jié)果,并倒計時&l
75、t;/p><p><b> {</b></p><p> static uchar n,bb,s,i;//靜態(tài)局部變量</p><p><b> s=1;</b></p><p> if(key==0||key==1||key==2||key==3||key==4||key==5||key==6
76、||key==7||key==8||key==9)</p><p> n++;//有數(shù)字鍵被按下,n加1</p><p> if(key==11)</p><p><b> n=3;</b></p><p><b> i++;</b></p><p> if(key
77、==10)</p><p> n=4;//*和#被按下,n置3</p><p><b> switch(n)</b></p><p><b> {</b></p><p> case 1: bb=key;num=key;break;//第1次按下數(shù)字鍵</p><p>
78、; case 2: bb=bb*10+key;n=0;num=bb;break;//第2次按下數(shù)字鍵 </p><p><b> case 3:{</b></p><p> if(i%2==0)</p><p><b> TR0=1;</b></p><p>&l
79、t;b> else</b></p><p><b> TR0=0;</b></p><p><b> }</b></p><p><b> n=0; </b></p><p><b> break;</b></p>
80、<p> case 4: num=bb;//*被按下,開始倒計時</p><p> TR0=1;//啟動定時器0中斷</p><p> while(s==1)</p><p><b> {</b></p><p><b> ankey();</b></p>
81、<p> if(numt0==20)//如果到了20次,說明1秒時間到</p><p><b> {</b></p><p> numt0=0;//然后把numt0清0重新再計20次</p><p> num--;//num自減</p><p> if(num==0)//如果num等0
82、</p><p><b> {</b></p><p> TR0=0;//關(guān)閉定時器0中斷</p><p> s=0; //推出循環(huán)</p><p> led=0;//點亮LED燈</p><p><b> }</b></p><p><
83、;b> }</b></p><p> display(num);//顯示num</p><p><b> }</b></p><p> break;</p><p><b> }</b></p><p><b> }<
84、;/b></p><p> void init() //初始化函數(shù)</p><p><b> {</b></p><p> TMOD=0x01;//設(shè)置定時器0為工作方式1(0000 0001)</p><p> TH0=(65536-50000)/256;//裝初值50ms一次中斷</p>
85、;<p> TL0=(65536-50000)%256;</p><p> EA=1; // 開總中斷</p><p> ET0=1; //開定時器0中斷</p><p><b> TR0=0; </b></p><p> sw=1;//關(guān)數(shù)碼管十位位選</p><p&g
86、t; gw=1; //關(guān)數(shù)碼管個位位選</p><p><b> }</b></p><p> void main()//主函數(shù)</p><p><b> {</b></p><p> init();//初始化函數(shù)</p><p><b> num=0;
87、</b></p><p> while(1) //循環(huán)</p><p><b> {</b></p><p> ankey(); //鍵盤掃描</p><p> display(num);//動態(tài)數(shù)碼管顯示</p><p><b> }</b><
88、/p><p><b> }</b></p><p> void T0_time() interrupt 1//定時器0中斷函數(shù)</p><p><b> {</b></p><p> TH0=(65536-50000)/256;//重裝初值</p><p> TL0=
89、(65536-50000)%256;</p><p> numt0++;//50ms中斷一次</p><p><b> }</b></p><p><b> 總結(jié)心得 </b></p><p> 課程設(shè)計由始至終都是將所學(xué)知識理論與動手實踐相結(jié)合的試驗田地,無疑,本次單片機課程不僅讓
90、我們重溫了一次單片機的理論知識,使我對單片機的認識變得更加深刻,也無形地提高了我的實踐設(shè)計能力。</p><p> 設(shè)計過程中,在分析問題與解決問題的探索過程,對于我來說是一種享受,在面對一個又一個新問題的出現(xiàn),自己一個又一個地攻破,那種喜悅真的無與倫比,我對單片機產(chǎn)生的濃厚興趣也由此而生。</p><p> 總的來說,今次的課程設(shè)計我收益良多,也堅定了我對實踐出真知的不可磨滅的真理的
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設(shè)計--倒計時
- 單片機課程設(shè)計-30s倒計時
- 單片機60倒計時課程設(shè)計
- 單片機【倒計時音樂鬧鐘】課程設(shè)計
- 99倒計時課程設(shè)計
- 單片機課程設(shè)計--籃球倒計時牌設(shè)計
- 單片機答辯倒計時器課程設(shè)計報告
- 60秒倒計時器-單片機課程設(shè)計
- 單片機課程設(shè)計---六十秒倒計時電路設(shè)計
- 60秒倒計時器-單片機課程設(shè)計報告
- 單片機課程設(shè)計--- 設(shè)計并實現(xiàn)可編倒計時裝置
- 單片機原理及應(yīng)用課程設(shè)計--答辯倒計時器
- 籃球倒計時課程設(shè)計--籃球板倒計時設(shè)計
- 單片機60s倒計時匯編語言
- 單片機課程設(shè)計--簡單的倒計時器的設(shè)計與制作
- 開題報告--單片機倒計時電路設(shè)計
- 單片機課程設(shè)計--基于at89c51的60秒倒計時設(shè)計
- 單片機課程設(shè)計---基于at89c51的60秒倒計時設(shè)計
- 單片機課程設(shè)計-基于at89c51的60秒倒計時設(shè)計
- 單片機課程設(shè)計基于89c51的倒計時牌設(shè)計
評論
0/150
提交評論