版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 摘 要</b></p><p> 近年來隨著計(jì)算機(jī)在社會領(lǐng)域的滲透和大規(guī)模集成電路的發(fā)展,單片機(jī)的應(yīng)用正在不斷地走向深入,由于它具有功能強(qiáng),體積小,功耗低,價(jià)格便宜,工作可靠,使用方便等特點(diǎn),因此特別適合于與控制有關(guān)的系統(tǒng),越來越廣泛地應(yīng)用于自動控制,智能化儀器,儀表,數(shù)據(jù)采集,軍工產(chǎn)品以及家用電器等各個(gè)領(lǐng)域,單片機(jī)往往是作為一個(gè)核心部件來使用,在根據(jù)具體硬
2、件結(jié)構(gòu),以及針對具體應(yīng)用對象特點(diǎn)的軟件結(jié)合,以作完善。</p><p> 本次設(shè)計(jì)中以單片機(jī)的發(fā)展過程和發(fā)展方向?yàn)楸尘?,介紹了單片機(jī)的輸入輸出的工作原理和操作方法,中斷的工作原理和操作方法,74HC573驅(qū)動器的工作原理和與數(shù)碼管連接的方法。</p><p> 本次做的數(shù)字鐘是以單片機(jī)(STC89C52)為核心,結(jié)合相關(guān)的元器件(共陰極LED數(shù)碼管、驅(qū)動器74HC573等),再配以相應(yīng)
3、的軟件,是它具有時(shí),分,秒顯示的功能,并且時(shí),分,秒還可以調(diào)整。此次設(shè)計(jì)電子數(shù)字鐘是為了了解電子數(shù)字鐘的原理,從而學(xué)會制作電子數(shù)字鐘。而且通過電子數(shù)字鐘的制作進(jìn)一步的了解各種在制作中用到的中小規(guī)模集成電路的作用及實(shí)用方法。通過它可以進(jìn)一步學(xué)習(xí)與掌握單片機(jī)原理與使用方法。</p><p> 關(guān)鍵詞:單片機(jī) STC89C52 共陰極LED數(shù)碼顯示器 74HC573驅(qū)動器</p><p&
4、gt;<b> 一.設(shè)計(jì)目的</b></p><p> 1、實(shí)現(xiàn)時(shí)鐘的基本功能</p><p> 2、能夠手動對時(shí)間的調(diào)整</p><p><b> 3、實(shí)現(xiàn)跑秒功能</b></p><p><b> 二.?dāng)?shù)字鐘基本原理</b></p><p>
5、; 它是利用單片機(jī)的內(nèi)部的定時(shí)/計(jì)數(shù)器工作與定時(shí)方式,對機(jī)器周期計(jì)數(shù)形成基準(zhǔn)時(shí)間(如10ms)然后用另外一個(gè)計(jì)數(shù)器或軟件計(jì)數(shù)的形式對基準(zhǔn)時(shí)間進(jìn)行計(jì)數(shù)形成秒(如對10ms計(jì)數(shù)100次),“秒”計(jì)數(shù)60次形成“分”,“分”計(jì)數(shù)60次形成“時(shí)”,“時(shí)”計(jì)數(shù)24次形成“天”并清零,然后通過譯碼器,數(shù)碼管把他們的內(nèi)容在相應(yīng)的位置顯示出來。在具體的設(shè)計(jì)時(shí)定時(shí)器采用中斷方式工作,對時(shí)鐘的形成在終中斷序中實(shí)現(xiàn),在主程序只是對定時(shí)/計(jì)數(shù)器的定義初始化,
6、調(diào)用顯示程序和控制程序的初始化。另外為了使用的方便,也設(shè)計(jì)了按鍵,可以通過按鍵對時(shí)分秒進(jìn)行調(diào)整,這樣程序就加了按鍵程序。</p><p> 三.單片機(jī)數(shù)字時(shí)鐘的程序設(shè)計(jì)</p><p><b> 3.1主程序</b></p><p> 主程序是先開始,系統(tǒng)初始化、定時(shí)器初始化,脈沖基時(shí)開始跑秒后進(jìn)行按鍵檢測。若沒有按鍵設(shè)置,顯示當(dāng)前時(shí)間;
7、若有按鈕按下,按鍵調(diào)時(shí),檢測完后,</p><p> 就可以顯示更新后的時(shí)間。</p><p><b> 主程序流程:</b></p><p> 3.2定時(shí)中斷(走時(shí))子程序流程</p><p> 定時(shí)器中斷時(shí),先檢測50ms脈沖是否計(jì)數(shù)20次,計(jì)數(shù)到20次,秒就加1;</p><p>
8、 如果沒計(jì)滿60,就返回顯示時(shí)間,如果秒計(jì)滿60秒,就清零秒,給分加1;檢測分鐘,如果沒計(jì)滿60,繼續(xù)計(jì)時(shí),返回顯示時(shí)間,如果滿60,就清零分鐘,給小時(shí)加1;檢測小時(shí),如果沒計(jì)滿24,就繼續(xù)計(jì)時(shí),返回顯示時(shí)間,如果計(jì)滿24,就清零,給秒加1,顯示時(shí)間。</p><p> 3.3按鍵掃描子程序:</p><p> 按鍵調(diào)試程序,是檢測是否有按鍵按下:</p><p&g
9、t; 如果小時(shí) 增加鍵/減小鍵 按下,就給小時(shí) 加1/減1</p><p> 如果分鐘 增加鍵/減小鍵 按下,就給分鐘 加1/減1</p><p> 如果秒 增加鍵/減小鍵 按下,就給秒 加1/減1</p><p> 如果顯示鍵(key7)按下,則顯示當(dāng)前時(shí)間</p><p><b> 3.4程序代碼</b&
10、gt;</p><p> #include<reg52.h></p><p> #define uint unsigned int</p><p> #define uchar unsigned char </p><p> sbit dula=P2^0;//段選</p><p> sbit w
11、ela=P2^1;//位選</p><p> sbit key1=P1^0;</p><p> sbit key2=P1^1;</p><p> sbit key3=P1^2;</p><p> sbit key4=P1^3;</p><p> sbit key5=P1^4;</p><p
12、> sbit key6=P1^5;</p><p> sbit key7=P1^6;</p><p> sbit key8=P1^7;</p><p> char flag=0;</p><p> int num1=0,num2,shi,shih,shil,fen,fenh,fenl,miao,miaoh,miaol,p,ph
13、,pl;</p><p> void delayms(uint z)</p><p><b> {</b></p><p><b> uint x,y;</b></p><p> for(x=z;x>0;x--)</p><p> for(y=110;y>
14、;0;y--);</p><p><b> }</b></p><p> uchar code table[]={0x3f,0x06,0x5b,0x4f,</p><p> 0x66,0x6d,0x7d,0x07,</p><p> 0x7f,0x6f,0x77,0x7c,</p><p>
15、; 0x39,0x5e,0x79,0x71}; //共陰</p><p> void diaplay(int shih,int shil,int fenh,int fenl,int miaoh,int miaol,int ph,int pl)//動態(tài)顯示</p><p><b> {</b></p><p><b> dula
16、=1;</b></p><p> P0=table[ph];</p><p><b> dula=0;</b></p><p><b> P0=0xff;</b></p><p><b> wela=1;</b></p><p>
17、P0=0xbf;//1011 1111</p><p><b> wela=0;</b></p><p> delayms(1);</p><p><b> dula=1;</b></p><p> P0=table[pl];</p><p><b> d
18、ula=0;</b></p><p><b> P0=0xff;</b></p><p><b> wela=1;</b></p><p> P0=0x7f;// 0111 1111</p><p><b> wela=0;</b></p>&
19、lt;p> delayms(1);</p><p><b> dula=1;</b></p><p> P0=table[miaol];</p><p><b> dula=0;</b></p><p><b> P0=0xff;</b></p>
20、<p><b> wela=1;</b></p><p> P0=0xdf;//1101 1111</p><p><b> wela=0;</b></p><p> delayms(1);</p><p><b> dula=1;</b></p>
21、;<p> P0=table[miaoh];</p><p><b> dula=0;</b></p><p><b> P0=0xff;</b></p><p><b> wela=1;</b></p><p> P0=0xef;//1110 1111
22、</p><p><b> wela=0;</b></p><p> delayms(1);</p><p><b> dula=1;</b></p><p> P0=table[fenl];</p><p><b> dula=0;</b>&
23、lt;/p><p><b> P0=0xff;</b></p><p><b> wela=1;</b></p><p> P0=0xf7;//1111 0111</p><p><b> wela=0;</b></p><p> delayms(
24、1);</p><p><b> dula=1;</b></p><p> P0=table[fenh];</p><p><b> dula=0;</b></p><p><b> P0=0xff;</b></p><p><b>
25、 wela=1;</b></p><p> P0=0xfb;//1111 1011</p><p><b> wela=0;</b></p><p><b> dula=1;</b></p><p> P0=table[shil];</p><p><
26、;b> dula=0;</b></p><p><b> P0=0xff;</b></p><p> delayms(1);</p><p><b> wela=1;</b></p><p> P0=0xfd;//1111 1101</p><p>
27、;<b> wela=0;</b></p><p> delayms(1);</p><p><b> dula=1;</b></p><p> P0=table[shih];</p><p><b> dula=0;</b></p><p>
28、<b> P0=0xff;</b></p><p><b> wela=1;</b></p><p> P0=0xfe;//1111 1110</p><p><b> wela=0;</b></p><p> delayms(1);</p><p
29、><b> }</b></p><p> void keyscan()//鍵盤掃描</p><p><b> {</b></p><p> if(key1==0)</p><p><b> {</b></p><p> delayms(
30、10);</p><p> if(key1==0)</p><p><b> {</b></p><p> shi++;shih=shi/10;shil=shi%10;</p><p> if(shi==24) shi=0;</p><p> while(!key1); </p&g
31、t;<p><b> }</b></p><p><b> }</b></p><p> if(key2==0)</p><p><b> {</b></p><p> delayms(10);</p><p> if(key2
32、==0)</p><p><b> {</b></p><p> shi--;if(shi<0) shi=23;</p><p> shih=shi/10;shil=shi%10;</p><p> if(shi==0) shi=24;</p><p> while(!key2);
33、 </p><p><b> }</b></p><p><b> }</b></p><p> if(key3==0)</p><p><b> {</b></p><p> delayms(10);</p><p>
34、 if(key3==0)</p><p><b> {</b></p><p> fen++;fenh=fen/10;fenl=fen%10;</p><p> if(fen==60) fen=0;</p><p> while(!key3);</p><p><b> }&
35、lt;/b></p><p><b> }</b></p><p> if(key4==0)</p><p><b> {</b></p><p> delayms(10);</p><p> if(key4==0)</p><p>&
36、lt;b> {</b></p><p> fen--;if(fen<0) fen=59;</p><p> fenh=fen/10;fenl=fen%10;</p><p> if(fen==0) fen=60;while(!key4);</p><p><b> }</b></p
37、><p><b> }</b></p><p> if(key5==0)</p><p><b> {</b></p><p> delayms(10);</p><p> if(key5==0)</p><p><b> {<
38、/b></p><p> miao++;miaoh=miaoh/10;miaol=miao%10;</p><p> if(miao==60) miao=0;while(!key5);</p><p><b> }</b></p><p><b> }</b></p>&
39、lt;p> if(key6==0)</p><p><b> {</b></p><p> delayms(10);</p><p> if(key6==0)</p><p><b> {</b></p><p> miao--;if(miao<0)
40、miao=59;</p><p> miaoh=miaoh/10;miaol=miao%10;</p><p> if(miao==0) miao=60;while(!key6);</p><p><b> }</b></p><p><b> }</b></p><p&
41、gt; if(key7==0)</p><p><b> { </b></p><p> delayms(10); </p><p> if(key7==0)</p><p><b> {</b></p><p> while(key7==0);</p
42、><p> if(flag==1)</p><p><b> flag=0;</b></p><p><b> else</b></p><p><b> flag=1;</b></p><p><b> }</b></
43、p><p><b> }</b></p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p> TMOD=0x01;//工作方式0</p><p>
44、 TH0=(65536-9174)/256;//裝初值,11.0592晶振定時(shí)1ms為9174</p><p> TL0=(65536-9174)%256;//機(jī)器周期為12*(1/11059200)=1.09us</p><p> //N=1ms/1.09us=9174</p><p><b> EA=1;</b></p>
45、<p><b> ET0=1;</b></p><p><b> TR0=1;</b></p><p> while(1) </p><p><b> {</b></p><p> keyscan();</p><p>
46、if(flag==1)</p><p><b> { </b></p><p> dula=1;</p><p> diaplay();</p><p><b> dula=0;</b></p><p> delayms(2);</p>&
47、lt;p><b> wela=1;</b></p><p><b> P0=0x00;</b></p><p><b> wela=0;</b></p><p><b> }</b></p><p><b> else</b
48、></p><p> diaplay(shih,shil,fenh,fenl,miaoh,miaol,ph,pl);</p><p><b> }</b></p><p><b> }</b></p><p> void T0_time() interrupt 1</p>
49、<p><b> {</b></p><p> TH0=(65536-9174)/256;</p><p> TL0=(65536-9174)%256;</p><p><b> num1++;</b></p><p> if(num1==1)//跑秒</p>
50、<p><b> {</b></p><p> num1=0;p++;</p><p><b> ph=p/10;</b></p><p><b> pl=p%10;</b></p><p> if(p==100) p=0,miao++;</p>
51、<p> if(miao==60)miao=0,fen++;</p><p> miaoh=miao/10;</p><p> miaol=miao%10;</p><p> if(fen==60)fen=0,shi++;</p><p> fenh=fen/10;</p><p> f
52、enl=fen%10;</p><p> if(shi==24)shi=0;</p><p> shih=shi/10;</p><p> shil=shi%10;</p><p><b> }</b></p><p><b> }</b></p>
53、<p><b> 四、心得體會</b></p><p> 首先要感謝張老師對程序的指導(dǎo)與調(diào)試,特別是學(xué)到了對按鍵消抖的處理方法,按照按鍵上升沿的特點(diǎn)對按鍵進(jìn)行消抖,還有就是對程序整體設(shè)計(jì)思路的提高,讓主要的功能分成幾個(gè)部分來進(jìn)行判斷,而不是全部都放在一些想要實(shí)現(xiàn)的子程序中根據(jù)自己的意愿來實(shí)現(xiàn),要對程序整體的首先要考慮的成熟和完善。這次的課程設(shè)計(jì),總體的來說對于一個(gè)程序的設(shè)計(jì)
54、的能力有了更大的提高,一個(gè)再簡單的程序,牽扯到的知識是方方面面的,所以對綜合能力也有一定的要求。以下是設(shè)計(jì)各個(gè)模塊時(shí)想到的考慮到的方面,分類進(jìn)行描述。</p><p> 1、硬件配置:從開始的晚上向大四借到的51單片機(jī)開始,這個(gè)單片機(jī)板子是沒有用過的,于是要來了開發(fā)板電路圖,了解單片機(jī)的GPIO,然后結(jié)合電路圖開始構(gòu)思,根據(jù)設(shè)計(jì)要求,所需開發(fā)板上的硬件有:51芯片、數(shù)碼管、驅(qū)動數(shù)碼管的74HC573的兩塊芯片&
55、lt;/p><p> 然后看開發(fā)板電路圖對GPIO進(jìn)行配置,根據(jù)電路圖,首先用杜邦線將PO口的8位與573口想接,然后對兩片573的上拉使能端(即段選、位選)進(jìn)行配置、截至單片機(jī)P2^0口和P2^1口</p><p><b> 2、設(shè)計(jì)思路:</b></p><p> 利用單片機(jī)的計(jì)數(shù)器,產(chǎn)生出相當(dāng)準(zhǔn)確的時(shí)間模值,可以通過累加進(jìn)位的辦法產(chǎn)生,
56、跑秒級時(shí)間、秒、分、時(shí)</p><p><b> 顯示時(shí)間</b></p><p> 然后設(shè)計(jì)按鍵、可以對時(shí)間的時(shí)、分、秒,來調(diào)整時(shí)間</p><p> 其次,跑秒,與時(shí)間顯示設(shè)計(jì)在一起,當(dāng)跑秒記到最大值然后向秒進(jìn)位,并且設(shè)置停止鍵顯示當(dāng)前時(shí)間,可實(shí)現(xiàn)跑秒的功能</p><p> 最后是如何顯示當(dāng)前的時(shí)間,注意到
57、鎖存器的配置功能,硬件電路本身OE=0,當(dāng)LE=1,Q=D時(shí),顯示值為當(dāng)前值,可實(shí)現(xiàn)動態(tài)顯示功能。當(dāng)LE=0,Q=Q*時(shí),當(dāng)前的顯示值只與最后一次所存的數(shù)據(jù)有關(guān),可以實(shí)現(xiàn)按鍵按下,靜態(tài)顯示的功能</p><p> 74HC573功能圖:</p><p> 3、軟件編寫、調(diào)試:</p><p> 軟件的編寫、調(diào)試需要keil和STC-ISP V31兩個(gè)軟件來實(shí)
58、現(xiàn),一個(gè)程序的編寫,是對一個(gè)個(gè)功能逐個(gè)實(shí)現(xiàn),各個(gè)擊破來編寫的,編寫程序的時(shí)候,需要編寫之后生成hex文件,查看自己編寫是所要達(dá)到顯示的狀態(tài),與單片機(jī)程序下載進(jìn)去之后所顯示的狀態(tài),是否一致,若不一致,則應(yīng)回過頭來,檢查硬件的配置管腳,也可用萬用表示波器來檢測的狀態(tài),反復(fù)調(diào)試反復(fù)驗(yàn)證,會得到自己構(gòu)思讓單片機(jī)按照自己所想,所顯示的結(jié)果。一個(gè)程序是不可能一次性編寫成功的,即使顯示功能完好,還有很大的不足可以提高,例如可以再對程序資源的使用進(jìn)行優(yōu)
59、化,對程序的編寫進(jìn)行注釋改寫,使程序更為易懂、熟練</p><p><b> 4、改進(jìn)</b></p><p> 程序設(shè)計(jì)時(shí)欠考慮工作在方式0,仍需改進(jìn)的使單片機(jī)工作在方式2</p><p> 附錄1:開發(fā)板硬件電路圖</p><p> 用杜邦線將P0口依次與數(shù)碼管J2口相接,J2兩個(gè)接口接至P2^0和P2^1構(gòu)
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 51單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)
- 課程設(shè)計(jì)----單片機(jī)電子時(shí)鐘
- 51單片機(jī)電子時(shí)鐘課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- 51單片機(jī)電子時(shí)鐘課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- 51單片機(jī)電子時(shí)鐘課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- 單片機(jī)課程設(shè)計(jì)---單片機(jī)電子時(shí)鐘
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)--- 單片機(jī)電子時(shí)鐘設(shè)計(jì)
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 51單片機(jī)電子時(shí)鐘--程序
- 基于89c51單片機(jī)電子時(shí)鐘課程設(shè)計(jì)
評論
0/150
提交評論