數(shù)電課程設(shè)計基于AT89S51單片機的 多功能數(shù)字鐘的設(shè)計
課程設(shè)計任務(wù)書學(xué)生姓名: * 專業(yè)班級:電子科學(xué)與技術(shù)0803班指導(dǎo)教師: * 工作單位: 信息工程學(xué)院 題 目: 多功能數(shù)字鐘的設(shè)計 初始條件:本設(shè)計既可以使用集成譯碼器、計數(shù)器、定時器、脈沖發(fā)生器和必要的門電路等。本設(shè)計也可以使用單片機系統(tǒng)構(gòu)建多功能數(shù)字鐘。用數(shù)碼管顯示時間計數(shù)值。要求完成的主要任務(wù): (包括課程設(shè)計工作量及技術(shù)要求,以及說明書撰寫等具體要求)1、課程設(shè)計工作量:1周。2、技術(shù)要求: 設(shè)計一個數(shù)字鐘。要求用六位數(shù)碼管顯示時間,格式為00:00:00。具有60進制和24進制(或12進制)計數(shù)功能,秒、分為60進制計數(shù),時為24進制(或12進制)計數(shù)。有譯碼、七段數(shù)碼顯示功能,能顯示時、分、秒計時的結(jié)果。設(shè)計提供連續(xù)觸發(fā)脈沖的脈沖信號發(fā)生器,具有校時單元、鬧鐘單元和整點報時單元。確定設(shè)計方案,按功能模塊的劃分選擇元、器件和中小規(guī)模集成電路,設(shè)計分電路,畫出總體電路原理圖,闡述基本原理。3、查閱至少5篇參考文獻。按武漢理工大學(xué)課程設(shè)計工作規(guī)范要求撰寫設(shè)計報告書。全文用A4紙打印,圖紙應(yīng)符合繪圖規(guī)范。時間安排:1、 2010 年 6 月 28 日集中,作課設(shè)具體實施計劃與課程設(shè)計報告格式的要求說明。2、 2010 年 6 月 29 日,查閱相關(guān)資料,學(xué)習(xí)電路的工作原理。2、 2010 年 6 月 30 日 至 2010 年 7 月 1 日,方案選擇和電路設(shè)計。2、 2010 年 6 月 30 日 至 2010 年 7 月 1 日,電路調(diào)試和設(shè)計說明書撰寫。3、 2010 年 7 月 2 日上交課程設(shè)計成果及報告,同時進行答辯。課設(shè)答疑地點:鑒主13樓電子科學(xué)與技術(shù)實驗室。指導(dǎo)教師簽名: 年 月 日系主任(或責(zé)任教師)簽名: 年 月 日摘要數(shù)字鐘是一種用數(shù)字電路技術(shù)實現(xiàn)時、分、秒計時的裝置,與機械式時鐘相比具有更高的準(zhǔn)確性和直觀性,且無機械裝置,具有更更長的使用壽命,因此得到了廣泛的使用。本文基于單片機技術(shù)原理,以單片機AT89S51作為核心控制器,通過硬件電路的制作以及軟件程序的編制,設(shè)計制作出一個數(shù)字時鐘系統(tǒng)。本文設(shè)計的系統(tǒng)要求可以對時、分、秒進行動態(tài)掃描顯示計時,還具有整點提醒和鬧鈴功能。該電路系統(tǒng)采用AT89S51單片機作為核心,功耗小,能在3V的低壓工作,電壓可選用35V電壓供電。本文從硬件電路到單片機控制器再到微處理器程序進行了一系列的設(shè)計,最終將各模塊整合到Proteus中進行仿真,最終在Proteus中仿真的結(jié)果令人滿意。關(guān)鍵字:AT89S51,動態(tài)掃描AbstractDigital Clock is a digital circuit technology with the hours, minutes, seconds, timing devices, and mechanical clock higher than the accuracy and intuitive, and no mechanical devices, with more longer life, so be widespread use. Based on principles of SCM technology to MCU AT89S51 as the core controller, through hardware design and software programming for the design to produce a digital clock system. System requirements for this design can be hours, minutes, seconds, and dynamic scanning display timing, and also has alarm function to remind the whole point. The circuit system uses AT89S51 microcontroller as a core, low power, low-voltage work in 3V, the voltage can choose 3 5V supply voltage.This single chip controller from the hardware circuit to process and then to a series of microprocessor design, the module will eventually be integrated into the Proteus in the simulation, the final in the Proteus in the simulation results are satisfactory. Keywords: AT89S51, dynamic scanning設(shè)計目的設(shè)計一個數(shù)字電子鐘,使它滿足以下要求: 設(shè)計一個數(shù)字鐘。要求用六位數(shù)碼管顯示時間,格式為00:00:00。具有60進制和24進制(或12進制)計數(shù)功能,秒、分為60進制計數(shù),時為24進制(或12進制)計數(shù)。有譯碼、七段數(shù)碼顯示功能,能顯示時、分、秒計時的結(jié)果。設(shè)計提供連續(xù)觸發(fā)脈沖的脈沖信號發(fā)生器,具有校時單元、鬧鐘單元和整點報時單元。方案設(shè)計與論證.設(shè)計方向選擇本數(shù)字鐘的設(shè)計可以采用門電路結(jié)合其他芯片來組建數(shù)字鐘,但考慮到在使用門電路的過程中使用的器件和芯片會很多,接法比較復(fù)雜,而且對于有些要求如整點報時和鬧鈴實現(xiàn)會有點困難。所以選擇門電路來設(shè)計多功能時鐘會比較復(fù)雜和繁瑣。本次設(shè)計還可以使用單片機來設(shè)計電路,相對于門電路來說單片機的設(shè)計比較簡單,而且功能比較全面,但、編寫程序會是單片機的一個難點。時鐘芯片的選擇方案和論證直接采用單片機定時計數(shù)器提供秒的信號,使用程序?qū)崿F(xiàn)年、月、日、星期、時、分、秒計數(shù)。采用此種方案雖然存在時間誤差,但是可以減少芯片的使用,節(jié)約成本,所以采用此方案。電路設(shè)計最終方案決定綜上各方案所述,對此次作品的方案選定:采用AT89S52作為主控制系統(tǒng);使用內(nèi)部時鐘電路外接晶振提供時鐘震蕩電路;顯示方法采用 LED數(shù)碼管動態(tài)掃描方法。圖(1)為本次設(shè)計的總電路圖: 圖(1) 設(shè)計總電路圖部分電路的設(shè)計.LED數(shù)碼管電路設(shè)計本次設(shè)計中我們采用了8個共陽LED7段數(shù)碼管構(gòu)成了數(shù)碼顯示電路,其中位選接在單片機的P0口,而在實際之中我們會在之間接一個鎖存器,實現(xiàn)電流的放大,不然數(shù)碼管會很暗,影響我們的觀察。本設(shè)計中鎖存器使用的是74HC573,其引腳圖和功能表如圖(2)所示。數(shù)碼管的段選接在單片機的P口。電路圖如圖(3)所示: 圖(2)74HC573引腳圖和功能表 圖(3)LED數(shù)碼管顯示電路.蜂鳴器報時系統(tǒng)設(shè)計本設(shè)計用報時和鬧鈴采用的是蜂鳴器組成的發(fā)聲電路,蜂鳴器接在單片機的口,在之間接一個三極管實現(xiàn)電流的放大,這樣才可以正常的發(fā)出聲音。其部分電路圖如圖()所示:圖()蜂鳴器電路圖在這個電路中我們選擇的三極管是PNP三極管8550,可以有效地完成我們所需要的功能。程序設(shè)計.程序流程圖我們采用的是C語言編的,其流程圖如圖(5)所示:開始初始化整點報時?蜂鳴器響鬧鈴?調(diào)用顯示函數(shù)按鍵功能調(diào)節(jié) 圖(5)程序流程圖語言源程序#include <AT89X52.H>unsigned char code displayCode=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;unsigned char hour,minute,second;unsigned char clockhour,clockminute;unsigned int num;unsigned char select,oneminute;bit bdata modeselect;void delay();void display(unsigned char temp,unsigned char mode);void sound() while(num<2000) P3_0=0; P3_0=1; void initial()P0=0;TMOD=0x22;IE=0xCF;IT0=1;IT1=1;T2CON=0;RCAP2L=0xf0;RCAP2H=0x1f;TH2=0x1c;TL2=0xf0;IP=0X06;TH0=0x48;TL0=0x48;TH1=0X48; TR0=1; PCON=0x01; hour=12;minute=0;second=0;num=0;select=0;clockhour=12;clockminute=0;modeselect=0; void interrupt0()interrupt 0 using 3 TR1=1; select+; if(select=7) select=0; if(select=1) ET2=1;oneminute=second-1;void timer0()interrupt 1 using 3num+;if(num=5000)num=0;second+; if(second=60) minute+;second=0; if(minute=60) hour+;minute=0; if(hour=24) hour=0;void interrupt1()interrupt 2 using 3 oneminute=second-1; modeselect=0; ET2=!ET2; switch(select) case 4:hour+;if(hour=24)hour=0;break;case 5:minute+;if(minute=60)minute=0;break;case 6:second+;if(second=60)second=0;break;case 2:clockhour+;if(clockhour=24)clockhour=0;break;case 3:clockminute+;if(clockminute=60)clockminute=0;break; default:break;void timer1()interrupt 3 using 3if(select)if(second=oneminute)select=0;TR1=0;void timer2()interrupt 5 using 3sound();TF2=0;if(minute!=clockminute&&hour=clockhour)TR2=0;void delay()unsigned char i=255;while(-i);void display(unsigned char temp,unsigned char mode) if(temp=4|temp=2) P0=0; else P0=1; if(mode) P1=displayCodehour/10; else P1=displayCodeclockhour/10; delay(); if(temp=4|temp=2) P0=0; else P0=2; if(mode) P1=displayCodehour%10; else P1=displayCodeclockhour%10; delay(); if(temp=1|temp=2|temp=3) P0=0; else P0=4; P1=0xbf; delay(); if(temp=5|temp=3) P0=0; else P0=8; if(mode) P1=displayCodeminute/10; else P1=displayCodeclockminute/10; delay(); if(temp=5|temp=3) P0=0; else P0=16; if(mode) P1=displayCodeminute%10; else P1=displayCodeclockminute%10; delay(); if(temp=1|temp=2|temp=3) P0=0; else P0=32; P1=0xbf; delay(); if(temp=6) P0=0; else P0=64; if(mode) P1=displayCodesecond/10; else P1=displayCode0; delay(); if(temp=6) P0=0; else P0=128; if(mode) if(ET2) P1=displayCodesecond%10+128;elseP1=displayCodesecond%10; else P1=displayCode0; delay();void main()initial();sound();while(1)switch(select) case 0: display(0,1); break;case 1:if(num<=2500) display(1,0); else display(0,0); break; case 2:if(num<=2500) display(2,0); else display(0,0); break; case 3:if(num<=2500) display(3,0); else display(0,0); break; case 4:if(num<=2500) display(4,1); else display(0,1); break; case 5:if(num<=2500) display(5,1); else display(0,1); break; case 6:if(num<=2500) display(6,1); else display(0,1); break; default:break;if(second=0)if(minute=0|minute=30)sound(); if(minute=clockminute&&hour=clockhour) TR2=1; modeselect=1;if(modeselect=1&&hour=clockhour&&!(minute-clockminute)%5) TR2=1;電路的設(shè)計與仿真我們使用的仿真軟件是,系統(tǒng)的仿真圖如圖()所示:圖()系統(tǒng)仿真圖心得與體會在此次的數(shù)字鐘設(shè)計過程中,更進一步地熟悉了芯片的結(jié)構(gòu)及掌握了各芯片的工作原理和其具體的使用方法。每次課程設(shè)計是一次難得的鍛煉機會,讓我們能夠充分利用所學(xué)過的理論知識還有自己的想象的能力,另外還讓我們學(xué)習(xí)查找資料的方法,以及自己處理分析電路,設(shè)計電路的能力。我相信是對我的一個很好的提高。平時在學(xué)習(xí)理論知識的時候,我們應(yīng)該更注重實踐,應(yīng)付考試有考試的方法。這次的課程設(shè)計讓我懂得了它們在實際中的用途,還有我們身邊的很多數(shù)字鐘電路,這些都是我們自己可以實現(xiàn)的,以前那些神秘的東西在不斷的學(xué)習(xí)過程中變得不再那么神秘,我相信,以后還有更多的謎底被揭開。通過這次課程設(shè)計,我還更加深了理論知識的學(xué)習(xí)。這次的設(shè)計電路我用到了單片機的不少功能,通過自己分析和設(shè)計更好地運用了它們,而且還學(xué)會了它們更多的功能,發(fā)現(xiàn)它們的功能遠比書上說的多很多,可以利用不同的接法設(shè)計出各種各樣不同的電路出來。模電課程設(shè)計學(xué)到得方法在這里可以繼續(xù)使用,比如MULTISIM等學(xué)習(xí)軟件,給設(shè)計提供了很大的便利。課程設(shè)計機會不多,這學(xué)期很好,有足夠的時間,上學(xué)期因為模電課程設(shè)計臨近期末才給出來,做得很匆忙,覺得不是敷衍老師,而是敷衍自己。雖然自己很努力的做了,但覺得做得不夠好,難免有點遺憾。這學(xué)期本來課不多,課程設(shè)計又給得比較早,自己認(rèn)真做了,覺得還是小有收獲。碰到的問題越讓人絕望,解決問題之后的喜悅程度就越高。作為工科類的學(xué)生,以后工作了難免要碰到許許多多的問題,不要絕望,堅持,直到看到勝利的曙光。參考文獻1 伍時和,吳友宇,凌玲。數(shù)字電子技術(shù)基礎(chǔ),2 王法能. 單片機原理及應(yīng)用M. 科學(xué)出版社,20043 陳 寧. 單片機技術(shù)應(yīng)用基礎(chǔ)M. 南京:南京信息職業(yè)技術(shù)學(xué)院, 20054 劉 勇. 數(shù)字電路 M. 電子工業(yè)出版社, 2005