版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 緒 論</b></p><p><b> 摘要:</b></p><p> 單片機是一種集成在電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統(tǒng)、定時器/計時器等功能(可能還包括顯示驅(qū)動電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器
2、等電路)集成到一塊硅片上構(gòu)成的一個小而完善的計算機系統(tǒng)。、</p><p> 電子鬧鐘是采用數(shù)字電路實現(xiàn)對.時,分,秒.數(shù)字顯示的計時裝置,廣泛用于個人家庭,車站, 碼頭辦公室等公共場所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度,遠遠超過老式鐘表, 鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地擴展了鐘表原先的報時功能。諸如定時自動報警、按時自
3、動打鈴、時間程序自動控制、定時廣播、自動起閉路燈、定時開關(guān)烘箱、通斷動力設(shè)備、甚至各種定時電氣的自動啟用等,所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。數(shù)字鐘已成為人們?nèi)粘I钪校罕夭豢缮俚谋匦杵?,廣泛用于個人家庭以及車站、碼頭、劇場、辦公室等公共場所,給人們的生活、學(xué)習(xí)、工作、娛樂帶來極大的方便。由于數(shù)字集成電路技術(shù)的發(fā)展和采用了先進的石英技術(shù),使數(shù)字鐘具有走時準確、性能穩(wěn)定、攜帶方便等優(yōu)點,它還用于計時自動報時及自動控制的領(lǐng)域。因此,研究數(shù)
4、字鐘及擴大其應(yīng)用,有著非?,F(xiàn)實的意義。</p><p> 關(guān)鍵字:C52、單片機、定時鬧鐘、電子設(shè)計</p><p><b> 設(shè)計目的和要求</b></p><p> 1.1設(shè)計任務(wù):設(shè)計一個可控制的定時鬧鐘。</p><p><b> 1.2設(shè)計目的:</b></p>&l
5、t;p> 1.了解定時鬧鐘的組成及工作原理。</p><p> 2.進一步熟悉和掌握單片機的結(jié)構(gòu)和工作原理。</p><p><b> 1.3設(shè)計要求:</b></p><p><b> A.基本要求:</b></p><p> 1).由晶振電路產(chǎn)生1HZ標準秒信號。</p&g
6、t;<p> 2).秒、分為00-59六十進制計數(shù)器。</p><p> 3).時為00-23二十四進制計數(shù)器。</p><p> 4).可手動校正:能分別進行秒、分、時的校正。只要將開關(guān)置于手動位置,可分別對秒、分、時進行連續(xù)脈沖輸入調(diào)整。</p><p> 5).當時間到達鬧鐘設(shè)定時間時,蜂鳴器發(fā)出報警聲。</p><p
7、><b> B.提高要求:</b></p><p> a).通過按鈕快速切換鬧鐘顯示。</p><p> b).通過計算機串口在PC上快速設(shè)定時間鬧鐘</p><p><b> c).整點報時。</b></p><p><b> 系統(tǒng)設(shè)計</b></p&g
8、t;<p><b> 2.1硬件系統(tǒng):</b></p><p> 2.1.1電源電路:</p><p> 電源是單片機系統(tǒng)的重要組成部分,它不僅為系統(tǒng)提供多路電壓源,還直接影響到系統(tǒng)的技術(shù)指標和抗干擾性能。AT89C51單片機和一般的數(shù)字芯片一樣,都是5V電壓供電,所以可以共用一個5V電源。另外,為了提高電源的穩(wěn)定性,在離電源的最近處做好退耦處理,
9、即用一個47UF和一個10UF電容,以濾去干擾,保證電源的穩(wěn)定。</p><p> 2.1.2 AT89C51單片機</p><p> AT89C51是一種帶4K字節(jié)閃存可編程可擦除只讀存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機。</p><
10、;p> 使用時VCC接電源,GND接地。P0-P3可作為輸入或者輸出端口。RST接復(fù)位電路。</p><p><b> 2.1.3時鐘電路</b></p><p> 單片機的時鐘產(chǎn)生方法有兩種:內(nèi)部時鐘方式和外部時鐘方式。本系統(tǒng)中AT89C51單片機采用內(nèi)部時鐘方式。最常用的內(nèi)部時鐘方式是采用外接晶體和電容組成的并聯(lián)諧振回路。振蕩晶體可在1.2MHz~12
11、MHz之間。電容值無嚴格要求,但電容取值對振蕩頻率輸出的穩(wěn)定性、大小和振蕩電路起振速度有少許影響,一般可在20pF~100pF之間取值。</p><p><b> 單片機的時鐘產(chǎn)生</b></p><p><b> 、</b></p><p> 2.1.4數(shù)碼管顯示電路</p><p> 要
12、同時使得6個數(shù)碼管點亮,所需的IO口是很多的。為了節(jié)省單片機的IO口,通常采用動態(tài)掃描的顯示方法,將每個數(shù)碼管的同名段連在一起,分6次向數(shù)碼管寫數(shù)據(jù),每次對6個數(shù)碼管寫相同的數(shù)據(jù),每次選通一個數(shù)碼管,完成掃描,通過調(diào)整、縮短掃描的時間,由于人眼的視覺暫留作用,使得人們看起來就像同時顯示一樣,以達到動態(tài)顯示的目的.</p><p><b> 2.2設(shè)計原理</b></p>&l
13、t;p> 2.2.1 系統(tǒng)總體方案</p><p> 1)由于要顯示數(shù)字時間,所以需要6位數(shù)碼管。</p><p> 2)時間的定時用時鐘電路,修改時間和定時用手動按鍵控制,報警聲通過喇叭發(fā)出。</p><p> 3)AT89S52單片機加上外圍器件(6個共陰數(shù)碼管,限流電阻和一個蜂鳴器)和應(yīng)用程序(KEIL編譯軟件),構(gòu)成相應(yīng)的應(yīng)用系統(tǒng)。</p
14、><p> 2.2.2 系統(tǒng)設(shè)計方框圖</p><p> 2.2.3 軟件設(shè)計流程</p><p><b> 實驗結(jié)果和討論</b></p><p> 在確立了編程設(shè)計的基本思路后,我們開始查找相關(guān)的編程資料,然后采用C語言對軟件設(shè)計的要求進行編譯。一開始進展很慢,并且編程過程中出現(xiàn)個各種錯誤,經(jīng)過大量時間的編譯與完
15、善,我們終于逐步完成定時鬧鐘的軟件設(shè)計過程。</p><p><b> 最終程序如下:</b></p><p> #include<reg51.h></p><p> #define uint unsigned int</p><p> #define uchar unsigned char</
16、p><p> uchar code shu[]={0x3f,0x06,0x5b,0x4f,</p><p> 0x66,0x6d,0x7d,0x07,</p><p> 0x7f,0x6f}; //0~9</p><p> uchar code shu2[]={0xbf,0x86,0xdb,0xcf,</p&
17、gt;<p> 0xe6,0xed,0xfd,0x87,</p><p> 0xff,0xef}; //帶小數(shù)點0~9</p><p> uchar code wei[]={0xef,0xdf,0xbf,0x7f,0xf7,0xfb};//數(shù)碼管位選碼</p><p> uchar x[]={0,0,0,0};</p
18、><p> uchar y[]={0,0,0,0,0,0};</p><p> uint hour=12,min,sec,h=22,m=0;</p><p> uint a,s1=1,s2=1,s3=0,i=0,status=0,num=0,class=0;</p><p> bit flag=0;</p><p>
19、; sbit P3_7=P3^7;</p><p> void delay(uint t); </p><p> void keyprint(unsigned char key);</p><p> void display();</p><p> void timer0();</p><p> vo
20、id sint()interrupt 4 //串口中斷,實現(xiàn)PC上快速設(shè)定時間與鬧鐘</p><p><b> {</b></p><p><b> s3++;</b></p><p><b> s3=s3%4;</b></p><p> if(RI&&am
21、p;s3==1)</p><p><b> { </b></p><p><b> RI=0;</b></p><p> hour=SBUF;</p><p><b> }</b></p><p> if(RI&&s3==2)
22、</p><p><b> {</b></p><p><b> RI=0;</b></p><p><b> min=SBUF;</b></p><p><b> }</b></p><p> if(RI&&am
23、p;s3==3)</p><p><b> {</b></p><p><b> RI=0;</b></p><p><b> h=SBUF;</b></p><p><b> }</b></p><p> if(RI&a
24、mp;&s3==0)</p><p><b> {</b></p><p><b> RI=0;</b></p><p><b> m=SBUF;</b></p><p><b> }</b></p><p><
25、;b> if(!TI)</b></p><p><b> TI=0; </b></p><p><b> }</b></p><p> void delay(uint t) </p><p><b> {</b></p><
26、;p><b> uint i;</b></p><p> while(t--)</p><p> for(i=0;i<125;i++);</p><p><b> }</b></p><p> main() </p><p><b&
27、gt; { </b></p><p><b> uchar n;</b></p><p> uchar input;</p><p><b> n=0x0f;</b></p><p> TMOD=0x21; </p><p> TH0=(65
28、536-5000)/256; </p><p> TL0=(65536-5000)%256; </p><p><b> TH1=0xfd;</b></p><p><b> TL1=0xfd;</b></p><p> SCON=0x50; </p><p&
29、gt; PCON=0x00;</p><p><b> TR1=1;</b></p><p> IP=0x10; </p><p> TR0=1; </p><p> IE=0x92; //開定時器0,串口中斷</p><p> while(1)
30、 //鍵掃描程序 </p><p> { </p><p> input=P2&0x0f;</p><p> if(input!=0x0f&&s1==1) </p><p><b> { </b></p><p> d
31、elay(10);</p><p><b> s1=0;</b></p><p> if(input!=0x0f&&s2==1)</p><p><b> {</b></p><p> s2=0; //按住不放</p><p> n =
32、 input; //n用來暫時存放鍵值</p><p><b> }</b></p><p><b> }</b></p><p> if(input==0x0f&&s1==0)</p><p><b> {</b></p><
33、;p><b> s1=1; </b></p><p><b> s2=1;</b></p><p> keyprint(n);</p><p><b> n=0x0f;</b></p><p><b> }</b></p>&
34、lt;p> if((hour==h&&min==m)||(h!=0&&min==0)) </p><p><b> {</b></p><p> if(sec==0)</p><p><b> P3_7=0;</b></p><p> if(sec
35、==1)</p><p><b> P3_7=1;</b></p><p> if(sec==2)</p><p><b> P3_7=0;</b></p><p> if(sec==3)</p><p><b> P3_7=1;</b><
36、;/p><p> if(sec==4)</p><p><b> P3_7=0;</b></p><p> if(sec==5)</p><p><b> P3_7=1;</b></p><p><b> } </b></p>&
37、lt;p><b> else </b></p><p><b> P3_7=1;</b></p><p> if(h>=24) </p><p><b> h=0; </b></p><p> display();</p><p>
38、;<b> }</b></p><p><b> }</b></p><p> void keyprint(unsigned char key) //各個按鍵功能</p><p><b> { </b></p><p> if(key==0x0e)</p&g
39、t;<p><b> {</b></p><p><b> num++;</b></p><p> if(num==1) {class=1;}</p><p> if(num==2) {class=2;num=0;}</p><p><b> }</b&g
40、t;</p><p> if(key==0x0d)</p><p><b> {</b></p><p><b> status++;</b></p><p> if(status>=5)</p><p><b> status=0;</b&g
41、t;</p><p><b> }</b></p><p> if(key==0x0b)</p><p><b> {</b></p><p> if(status==1)</p><p><b> {</b></p><p
42、> if(min<59)min++;</p><p> else {min=0;hour++;}</p><p><b> }</b></p><p> if(status==2)</p><p><b> {</b></p><p> if(hou
43、r<23) hour++;</p><p> else hour=0;</p><p><b> }</b></p><p> if(status==3)</p><p><b> {</b></p><p> if(m<59)m++;</p&g
44、t;<p> else {m=0;h++;}</p><p><b> }</b></p><p> if(status==4)</p><p><b> {</b></p><p> if(h<23) h++;</p><p><b>
45、; else h=0;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void display() //數(shù)碼管數(shù)值顯示函數(shù)</p>
46、<p><b> {</b></p><p> uchar d=0;</p><p> if(class==1||class==0)</p><p><b> { </b></p><p> x[0]=hour/10; // 顯示時的十位</p>
47、<p> x[1]=hour%10; // 顯示時的個位</p><p> x[2]=min/10; // 顯示分的十位</p><p> x[3]=min%10; // 顯示分的個位</p><p> while(d<4)</p><p><b>
48、{</b></p><p> P2=wei[d];</p><p> P0=shu[x[d]];</p><p><b> delay(1);</b></p><p><b> d++;</b></p><p><b> }</b>
49、</p><p><b> }</b></p><p> else if(class==2)</p><p><b> {</b></p><p> y[0]=h/10; // 顯示時的十位</p><p> y[1]=h%10;
50、 // 顯示時的個位</p><p> y[2]=m/10; // 顯示分的十位</p><p> y[3]=m%10; // 顯示分的個位</p><p><b> d=0; </b></p><p> if(flag==0)// 每過0.5s小數(shù)
51、點閃爍一次</p><p><b> {</b></p><p> while(d<4)</p><p><b> {</b></p><p> P2=wei[d];</p><p> P0=shu2[y[d]];</p><p>&l
52、t;b> delay(1);</b></p><p><b> d++;</b></p><p><b> }</b></p><p><b> }</b></p><p> else if(flag==1)</p><p>
53、<b> {</b></p><p> while(d<4)</p><p><b> {</b></p><p> P2=wei[d];</p><p> P0=shu[y[d]];</p><p><b> delay(1);</b>
54、;</p><p><b> d++;</b></p><p><b> }</b></p><p><b> } </b></p><p><b> }</b></p><p><b> }</b
55、></p><p> void timer0() interrupt 1 //定時器0方式1中斷函數(shù)</p><p><b> { </b></p><p> uint count;</p><p> TH0=(65536-5000)/256; // 定時器0設(shè)置初始值1ms中斷初始值<
56、;/p><p> TL0=(65536-5000)%256; </p><p><b> TR0=1;</b></p><p> count++; //正常計時</p><p> if(count>=100) </p><p><b>
57、 {</b></p><p><b> flag=1;</b></p><p> if(count>=200) // 定時 1S 到,以下為時鐘的正常走鐘邏輯 </p><p><b> {</b></p><p><b> flag
58、=0;</b></p><p><b> count=0;</b></p><p><b> sec++;</b></p><p> if(sec>= 60)</p><p> { </p><p><b>
59、 sec=0;</b></p><p> min++; //秒到60分加一,秒清零</p><p><b> }</b></p><p> if(min>= 60) </p><p> { </p><p><b> min=0; &
60、lt;/b></p><p> hour++; //分到60時加一,分清零</p><p><b> }</b></p><p> if(hour>= 24) </p><p><b> { </b></p><p> hour=0; //時到
61、24立即變?yōu)?</p><p><b> }</b></p><p><b> } </b></p><p><b> }</b></p><p><b> }</b></p><p><b> 結(jié)論</
62、b></p><p> 4.1本次課程設(shè)計的特點:</p><p> 本次課程設(shè)計對單片機這么課程的知識原理要求比較高,具有一定的編程要求。設(shè)計出的定時鬧鐘比較貼近生活產(chǎn)品,實用性計較強,因此達到了知識與實踐相結(jié)合,學(xué)以致用的目的。</p><p><b> 4.2主要貢獻:</b></p><p> 讓我
63、們再一次深入了解了單片機的基本知識和原理,給予我們一定的單片機設(shè)計經(jīng)驗,強化了教學(xué)目標。</p><p><b> 4.3心得與體會:</b></p><p> 課程設(shè)計是培養(yǎng)學(xué)生綜合運用所學(xué)知識,發(fā)現(xiàn)、提出、分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學(xué)生實際工作能力的具體訓(xùn)練和考察過程。</p><p> 回顧起此次單片機課程設(shè)計
64、,我仍感慨頗多,學(xué)到了很多的東西。同時不僅鞏固了以前所學(xué)過的知識,而且還學(xué)到了很多在書本上所沒有學(xué)到過的知識。在實際設(shè)計中才發(fā)現(xiàn),書本上理論性的東西與在實際運用中的還是有一定的出入的,所以有些問題不但要深入地理解,而且要不斷地更正以前的錯誤思維。一切問題必須要靠自己一點一滴的解決,而在解決的過程當中你會發(fā)現(xiàn)自己在飛速的提升。對于單片機設(shè)計,其硬件電路是比較簡單的,主要是解決程序設(shè)計中的問題,而程序設(shè)計是一個很靈活的東西,它反映了你解決問
65、題的邏輯思維和創(chuàng)新能力,它才是一個設(shè)計的靈魂所在。因此可以說單片機的設(shè)計是軟件和硬件的結(jié)合,二者是密不可分的。</p><p><b> 五.參考文獻</b></p><p> 【1】《C51單片機技術(shù)教程》 人民郵電出版社</p><p><b> ——田希輝、薛亮儒</b></p><p>
66、; 【2】《單片機應(yīng)用技術(shù)選編》 北京航空航天大學(xué)出版社</p><p><b> ——何立民</b></p><p><b> 六.附 錄:</b></p><p> 1.主要使用軟件:Keil C語言編寫軟件</p><p> Protues 仿真軟件</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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機定時鬧鐘課程設(shè)計
- 定時鬧鐘—單片機課程設(shè)計
- 單片機課程設(shè)計—定時鬧鐘設(shè)計
- 單片機課程設(shè)計—定時鬧鐘設(shè)計
- 單片機課程設(shè)計---定時鬧鐘設(shè)計
- 單片機課程設(shè)計--定時鬧鐘設(shè)計
- 課程設(shè)計--單片機定時鬧鐘設(shè)計報告
- 單片機課程設(shè)計---定時鬧鐘的設(shè)計
- 單片機課程設(shè)計——定時鬧鐘的設(shè)計
- 單片機課程設(shè)計--簡單定時鬧鐘系統(tǒng)
- 基于單片機的定時鬧鐘課程設(shè)計
- 單片機課程設(shè)計--基于51單片機的定時鬧鐘設(shè)計
- 單片機課程設(shè)計---- lcd電子定時鬧鐘設(shè)計
- c51單片機課程設(shè)計定時鬧鐘
- 單片機課程設(shè)計—帶有l(wèi)cd的定時鬧鐘
- 單片機課程設(shè)計--定時鬧鐘報告書
- 單片機課程設(shè)計--帶有l(wèi)cd顯示的定時鬧鐘
- 單片機課程設(shè)計(電子鬧鐘)
- 單片機定時鬧鐘論文
- 單片機課程設(shè)計--定時插座
評論
0/150
提交評論