版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 單片機(jī)課程設(shè)計(jì)---數(shù)字時(shí)鐘的設(shè)計(jì)</p><p> 摘要: 近年來(lái)隨著計(jì)算機(jī)在社會(huì)領(lǐng)域的滲透和大規(guī)模集成電路的發(fā)展,單片機(jī)的應(yīng)用正在不斷地走向深入,由于它具有功能強(qiáng),體積小,功耗低,價(jià)格便宜,工作可靠,使用方便等特點(diǎn),因此特別適合于與控制有關(guān)的系統(tǒng),越來(lái)越廣泛地應(yīng)用于自動(dòng)控制,智能化儀器,儀表,數(shù)據(jù)采集,軍工產(chǎn)品以及家用電器等各個(gè)領(lǐng)域,單片機(jī)往往是作為一個(gè)核心部件來(lái)使用,在根據(jù)具體硬件結(jié)
2、構(gòu),以及針對(duì)具體應(yīng)用對(duì)象特點(diǎn)的軟件結(jié)合,以作完善。</p><p> 本次做的數(shù)字鐘是以單片機(jī)(AT89C51)為核心,結(jié)合相關(guān)的元器件(共陰極LED數(shù)碼顯示器等)再配以相應(yīng)的軟件,達(dá)到制作簡(jiǎn)易數(shù)字鐘的目的,其硬件部分難點(diǎn)在于元器件的選擇、布局及焊接。</p><p> 正文: 本設(shè)計(jì)的構(gòu)想:通過(guò)單片機(jī)控制數(shù)字時(shí)鐘,將時(shí)間顯示在LED數(shù)碼管上。通過(guò)按鍵來(lái)顯示執(zhí)行個(gè)部分的功能,比如調(diào)時(shí)、
3、秒表、鬧鐘等。</p><p> 本設(shè)計(jì)的工作原理如下:在單片機(jī)最小系統(tǒng)的基礎(chǔ)上,使用I/O口連接按鍵、LED數(shù)碼管。通過(guò)單片機(jī)定時(shí)器中斷來(lái)獲取比較準(zhǔn)確的時(shí)間。本程序中用定時(shí)器中斷0,TOMD=0x01,每1ms產(chǎn)生一次中斷,所以對(duì)定時(shí)器所裝的初值:TH0 = (65536-1000)/256,TL0 = (65536-1000)%256。然后在主函數(shù)中執(zhí)行初始化函數(shù)、按鍵函數(shù),顯示函數(shù),來(lái)實(shí)現(xiàn)所設(shè)計(jì)的數(shù)字時(shí)鐘
4、的功能。</p><p><b> 實(shí)驗(yàn)的原來(lái)圖如下:</b></p><p><b> 實(shí)驗(yàn)的流程圖如下:</b></p><p><b> 功能介紹:</b></p><p> 開(kāi)機(jī)時(shí),顯示00-00-00的時(shí)間開(kāi)始計(jì)時(shí)。最上面的led發(fā)光二極管亮一秒滅一秒。<
5、;/p><p> 按鍵“選擇”。當(dāng)?shù)谝淮伟聪聲r(shí),最上面的led發(fā)光二極管不再亮滅閃爍,計(jì)數(shù)器停止工作,同時(shí)顯示調(diào)時(shí)的發(fā)光二極管會(huì)亮,此時(shí)按下按鍵“加加”,可以實(shí)現(xiàn)秒的加。第二次按下“選擇”按鍵時(shí),按按鍵“加加”可以實(shí)現(xiàn)分的加。第三次按下“選擇”按鍵時(shí),按按鍵“加加”可以實(shí)現(xiàn)時(shí)的加。第四次按下“選擇”按鍵時(shí),會(huì)變成秒表的顯示,同時(shí)計(jì)數(shù)器開(kāi)始工作,最上面的led發(fā)光二極管發(fā)生亮滅閃爍,顯示調(diào)時(shí)的發(fā)光二極管會(huì)滅,顯示秒表
6、的發(fā)光二極管會(huì)亮。按按鍵“加加”可以實(shí)現(xiàn)秒表的工作,再按“加加”,秒表停止工作,再按“加加”,秒表清零。第五次按下“選擇”按鍵時(shí),數(shù)碼管顯示定鬧鐘的功能。顯示秒表的發(fā)光二極管會(huì)滅,顯示鬧鐘的發(fā)光二極管會(huì)亮。按按鍵“加加”可以實(shí)現(xiàn)鬧鐘分的調(diào)整。第六次按下“選擇”按鍵時(shí),按鍵“加加”可以實(shí)現(xiàn)鬧鐘時(shí)的調(diào)整。第六次按下“選擇”按鍵時(shí),顯示鬧鐘的發(fā)光二極管會(huì)滅。</p><p> 通過(guò)上面,定鬧鐘完成后,我們按下“鬧鐘開(kāi)
7、啟”按鍵,當(dāng)?shù)竭_(dá)定時(shí)時(shí)間時(shí),鬧鐘會(huì)發(fā)出蜂鳴聲,同時(shí)數(shù)碼管顯示“HELLO-_-”字樣,蜂鳴聲可持續(xù)一分鐘,當(dāng)然我們也可以通過(guò)“鬧鐘開(kāi)啟”按鍵關(guān)掉鬧鐘。</p><p><b> 參考文獻(xiàn):</b></p><p> 趙亮,侯國(guó)瑞,《單片機(jī)C語(yǔ)音編程與實(shí)例》,人民郵電出版社,2003年九月第一版。</p><p> 閻石,《數(shù)字電路基礎(chǔ)》,
8、高等教育出版社,1997年第四版</p><p> 吳金戌,沈慶陽(yáng),郭廷杰,《8051單片機(jī)實(shí)踐與應(yīng)用》,清華大學(xué)出版社</p><p> 《單片機(jī)接口技術(shù)》 胡漢才 高等教育出版社</p><p><b> 程序示例:</b></p><p> #include <reg52.h></p&
9、gt;<p> #define uchar unsigned char;</p><p> #define uint unsigned int;</p><p> uchar code talbe[] = {0x3f,0x06,0x5b,0x4f,</p><p> 0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//
10、數(shù)碼管顯示</p><p> uchar code table[] = {0x76,0x79,0x38,0x38,0x3f,0x01,0x08,0x01};</p><p> uchar code weii[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};</p><p> uchar code wei[] = {
11、0x7f,0xbf,0xdb,0xef,0xf7,0xdb,0xfd,0xfe}; //數(shù)碼管的位選</p><p> int a[8],b[8],c[8]; // 定義a[8]時(shí)間,b[8]秒表,c[8] 鬧鐘的定時(shí)</p><p> uint tt,ttm,i,x,y,z,key_state1,flag_mode,key_state2,flag_jia;</p>
12、<p> int shi,fen,miao,m_shi,m_fen,m_miao,n_shi,n_fen,n_miao;//定義時(shí)間秒表鬧鐘顯示變量</p><p> sbit k_mode = P1^0;//定義設(shè)置開(kāi)關(guān)</p><p> sbit k_jia = P1^1;//定義加加開(kāi)關(guān)</p><p> sbit k_naozhong =
13、 P1^2;//定義鬧鐘按鍵開(kāi)關(guān)</p><p> sbit button = P1^7;// 鬧鐘的輸出控制端</p><p> sbit shan = P1^3; //led亮一秒滅一秒</p><p> sbit tiaos = P1^4; //當(dāng)調(diào)整時(shí)間時(shí)此控制的led亮</p><p> sbit miaob = P1^
14、5; //當(dāng)用到秒表時(shí)此控制的led亮</p><p> sbit dings = P1^6;//當(dāng)定鬧鐘時(shí)間時(shí)此控制的led亮</p><p> void init(); //聲明初始化函數(shù)</p><p> void diaplay(); //聲明顯示函數(shù)</p><p> void delay(z);
15、//聲明延遲函數(shù)</p><p> void key(); //聲明按鍵函數(shù)</p><p> void naozhong(); //聲明鬧鐘函數(shù)</p><p> /***主函數(shù)***/</p><p> void main() //主函數(shù)</p><p><b> {</b
16、></p><p><b> init ();</b></p><p><b> while (1)</b></p><p><b> {</b></p><p> if (tt%2 == 0) //每2ms掃描一次按鍵</p><p>&
17、lt;b> {</b></p><p><b> key ();</b></p><p><b> }</b></p><p> diaplay ();</p><p> naozhong();</p><p><b> }</b
18、></p><p><b> }</b></p><p> /***初始化函數(shù)***/</p><p> void init ()</p><p><b> {</b></p><p><b> shi = 0;</b></p>
19、;<p><b> fen = 0;</b></p><p><b> miao = 0;</b></p><p> m_shi = 0;</p><p> m_fen = 0;</p><p> m_miao = 0;</p><p> n_shi
20、 = 0;</p><p> n_fen = 0;</p><p> n_miao = 0;</p><p><b> tt = 0;</b></p><p><b> ttm = 0;</b></p><p> TMOD = 0x01; //選擇工作模式1&
21、lt;/p><p> TH0 = (65536-1000)/256;//給定時(shí)器裝初值</p><p> TL0 = (65536-1000)%256;</p><p> EA = 1; //打開(kāi)總中斷</p><p> ET0 = 1; //打開(kāi)定時(shí)器/計(jì)數(shù)器0</p><p> TR0 =
22、1; //開(kāi)始計(jì)數(shù)</p><p><b> }</b></p><p> /***中斷1***/</p><p> void time () interrupt 1</p><p><b> {</b></p><p> TH0 = (65536-1000
23、)/256; //重裝初值 </p><p> TL0 = (65536-1000)%256;</p><p><b> tt++;</b></p><p> if (flag_mode == 4) //當(dāng)變量flag_mode=4時(shí),運(yùn)行秒表程序</p><p><b> {</b>
24、;</p><p> if (flag_jia == 1)</p><p><b> {</b></p><p><b> ttm ++;</b></p><p> if (ttm == 10)</p><p><b> { </b></
25、p><p><b> ttm = 0;</b></p><p><b> m_miao++;</b></p><p> if (m_miao == 100)</p><p><b> { </b></p><p> m_miao = 0;</
26、p><p><b> m_fen ++;</b></p><p> if (m_fen == 60)</p><p><b> { </b></p><p> m_fen = 0;</p><p><b> m_shi ++;</b></p&
27、gt;<p> if (m_shi == 24)</p><p><b> { </b></p><p> m_shi = 0;</p><p><b> }</b></p><p><b> }</b></p><p><
28、b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if (flag_jia == 2)</p><p><b> {</b></p><p> ttm++; tt
29、m--;</p><p><b> }</b></p><p> if (flag_jia == 3)</p><p><b> {</b></p><p> flag_jia = 0;</p><p> m_shi = 0;</p><p>
30、; m_fen = 0;</p><p> m_miao = 0;</p><p><b> ttm = 0;</b></p><p><b> }</b></p><p><b> }</b></p><p> if (tt == 1000
31、) </p><p> { shan =! shan;</p><p><b> tt = 0;</b></p><p><b> miao++;</b></p><p> if (miao == 60)</p><p><b> { </b&
32、gt;</p><p><b> miao = 0;</b></p><p><b> fen ++;</b></p><p> if (fen == 60)</p><p><b> { </b></p><p><b> fen
33、= 0;</b></p><p><b> shi ++;</b></p><p> if (shi == 24)</p><p><b> { </b></p><p><b> shi = 0;</b></p><p><b
34、> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> /***顯示函數(shù)
35、***/</p><p> void diaplay ()</p><p><b> {</b></p><p> a[0] = miao%10;</p><p> a[1] = miao/10;</p><p> a[2] = 10;</p><p> a[3
36、] = fen%10;</p><p> a[4] = fen/10;</p><p> a[5] = 10;</p><p> a[6] = shi%10;</p><p> a[7] = shi/10;</p><p> b[0] = m_miao%10;</p><p> b[
37、1] = m_miao/10;</p><p> b[2] = 10;</p><p> b[3] = m_fen%10;</p><p> b[4] = m_fen/10;</p><p> b[5] = 10;</p><p> b[6] = m_shi%10;</p><p>
38、 b[7] = m_shi/10;</p><p> c[0] = n_miao%10;</p><p> c[1] = n_miao/10;</p><p> c[2] = 10;</p><p> c[3] = n_fen%10;</p><p> c[4] = n_fen/10;</p>
39、<p> c[5] = 10;</p><p> c[6] = n_shi%10;</p><p> c[7] = n_shi/10;</p><p> for (i = 0;i<8;i++)</p><p><b> {</b></p><p> if (button
40、 == 1)//鬧鐘時(shí)顯示 hello-_-</p><p><b> { </b></p><p> P2 = weii[i];</p><p> P0 = table[i];</p><p><b> }</b></p><p><b> else&
41、lt;/b></p><p><b> {</b></p><p> if (flag_mode == 4) //當(dāng)flag_mode=4時(shí)顯示秒表</p><p><b> {</b></p><p> miaob = 0;dings = 1;tiaos = 1;</
42、p><p> P2 = wei[i];</p><p> P0 = talbe[b[i]];</p><p><b> }</b></p><p> else if(flag_mode==5||flag_mode==6)//當(dāng)flag_mode=5或flag_mode=6時(shí)顯示定時(shí)數(shù)值</p><
43、;p><b> {</b></p><p> dings = 0;miaob =1;tiaos = 1;</p><p> P2 = wei[i];</p><p> P0 = talbe[c[i]];</p><p><b> }</b></p><p>
44、 else //其他時(shí)候顯示時(shí)間</p><p><b> {</b></p><p> miaob = 1;dings = 1;</p><p> P2 = wei[i];</p><p> P0 = talbe[a[i]];</p><p><b>
45、 }</b></p><p><b> }</b></p><p><b> delay(4);</b></p><p><b> }</b></p><p><b> }</b></p><p> /***
46、延遲函數(shù)***/</p><p> void delay (z)</p><p><b> {</b></p><p> for(x=z;x>0;x--)</p><p> for(y=110;y>0;y--);</p><p><b> }</b>&l
47、t;/p><p> /***按鍵函數(shù)***/</p><p> void key()</p><p><b> {</b></p><p> switch (key_state1)//設(shè)置按鍵程序的編寫(xiě)</p><p><b> {</b></p>&l
48、t;p> case 0:if(k_mode == 0)</p><p> key_state1 = 1;</p><p><b> break;</b></p><p> case 1:if(k_mode ==0)</p><p> key_state1 = 2;</p><p>
49、<b> break; </b></p><p> case 2:if(k_mode == 1)</p><p> key_state1 = 3;</p><p><b> break; </b></p><p> case 3:if(k_mode == 1)</p><
50、;p> key_state1 = 4;</p><p><b> break;</b></p><p> case 4:flag_mode ++;</p><p> key_state1 = 0;</p><p><b> break; </b></p><p
51、><b> }</b></p><p> switch (key_state2)//加加按鍵程序的編寫(xiě)</p><p><b> {</b></p><p> case 0:if(k_jia == 0)</p><p> key_state2 = 1;</p><
52、;p><b> break;</b></p><p> case 1:if(k_jia == 0)</p><p> key_state2 = 2;</p><p><b> break; </b></p><p> case 2:if(k_jia == 1)</p>
53、<p> key_state2 = 3;</p><p><b> break; </b></p><p> case 3:if(k_jia == 1)</p><p> key_state2 = 4;</p><p><b> break;</b></p><
54、;p> case 4:flag_jia ++;</p><p> key_state2 = 0;</p><p><b> break; </b></p><p><b> } </b></p><p> switch (flag_mode) //調(diào)整時(shí)間,秒表,鬧鐘<
55、;/p><p><b> {</b></p><p> case 1:TR0 = 0; tiaos = 0; //設(shè)置按鍵為1時(shí),計(jì)數(shù)停止</p><p> if (flag_jia == 1) //此時(shí)加加按鍵按下時(shí)秒加1</p><p><b> {</b></p>&l
56、t;p><b> miao++;</b></p><p> if (miao == 60)</p><p><b> {</b></p><p><b> miao = 0;</b></p><p><b> }</b></p>
57、<p> flag_jia = 0;</p><p><b> }</b></p><p><b> break;</b></p><p> case 2: if (flag_jia == 1) //設(shè)置按鍵為2時(shí),如果加加按鍵被按下分加1</p><p><b>
58、; {</b></p><p><b> fen++;</b></p><p> if (fen == 60)</p><p><b> {</b></p><p><b> fen = 0;</b></p><p><b&g
59、t; }</b></p><p> flag_jia = 0;</p><p><b> }</b></p><p><b> break;</b></p><p> case 3: if (flag_jia == 1) //設(shè)置按鍵為3時(shí),如果加加按鍵被按下分加1</
60、p><p><b> {</b></p><p><b> shi++;</b></p><p> if (shi == 24)</p><p><b> {</b></p><p><b> shi = 0;</b><
61、/p><p><b> }</b></p><p> flag_jia = 0;</p><p><b> }</b></p><p><b> break;</b></p><p> case 4: TR0 = 1;break; //設(shè)置按
62、鍵為4時(shí),時(shí)間調(diào)整完成,計(jì)數(shù)器開(kāi)始工作</p><p> case 5: if (flag_jia == 1) //設(shè)置按鍵為5時(shí),如果加加按鍵被按下,鬧鐘的秒加1</p><p><b> {</b></p><p><b> n_fen ++;</b></p><p> if (n
63、_fen == 60) </p><p><b> {</b></p><p> n_fen = 0;</p><p><b> }</b></p><p> flag_jia = 0; </p><p><b> }</b>&l
64、t;/p><p><b> break;</b></p><p> case 6: if (flag_jia == 1) //設(shè)置按鍵為6時(shí),如果加加按鍵被按下,鬧鐘的分加1</p><p><b> {</b></p><p><b> n_shi ++;</b>&l
65、t;/p><p> if (n_shi == 24) </p><p><b> {</b></p><p> n_shi = 0;</p><p><b> }</b></p><p> flag_jia = 0; </p><p&g
66、t;<b> }</b></p><p><b> break;</b></p><p> case 7: TR0 = 1;</p><p> flag_mode = 0;</p><p><b> break;</b></p><p>&l
67、t;b> }</b></p><p><b> }</b></p><p> /***鬧鐘函數(shù)***/</p><p> void naozhong()</p><p><b> {</b></p><p> if (k_naozhong ==
68、0 && shi==n_shi && fen==n_fen)</p><p><b> {</b></p><p> button = 1;</p><p><b> }</b></p><p> else button = 0;</p><
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)--數(shù)字時(shí)鐘
- 單片機(jī)數(shù)字時(shí)鐘課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)(數(shù)字時(shí)鐘)
- 單片機(jī)課程設(shè)計(jì)報(bào)告---單片機(jī)數(shù)字時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)的數(shù)字時(shí)鐘設(shè)計(jì)
- 課程設(shè)計(jì)-單片機(jī)基于單片機(jī)的數(shù)字時(shí)鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---單片機(jī)數(shù)字時(shí)鐘.doc
- 單片機(jī)課程設(shè)計(jì)---數(shù)字時(shí)鐘的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)數(shù)字時(shí)鐘
- 單片機(jī)數(shù)字時(shí)鐘控制課程設(shè)計(jì)
- 數(shù)字時(shí)鐘的課程設(shè)計(jì)--基于單片機(jī)的數(shù)字時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)報(bào)告---基于單片機(jī)的數(shù)字時(shí)鐘設(shè)計(jì)
- 單片機(jī)數(shù)字時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)數(shù)字時(shí)鐘
- 數(shù)字電子時(shí)鐘-單片機(jī)課程設(shè)計(jì)
- 多功能數(shù)字時(shí)鐘 單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-單片機(jī)課程設(shè)計(jì)---電子時(shí)鐘
- 課程設(shè)計(jì)---基于51單片機(jī)的數(shù)字時(shí)鐘
- 單片機(jī)數(shù)字時(shí)鐘課程設(shè)計(jì)--單片機(jī)多功能電子鐘設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論