單片機電子時鐘實驗報告_第1頁
單片機電子時鐘實驗報告_第2頁
單片機電子時鐘實驗報告_第3頁
單片機電子時鐘實驗報告_第4頁
單片機電子時鐘實驗報告_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、電子時鐘預(yù)備知識: 數(shù)碼管:圖3.1.4數(shù)碼管內(nèi)部原理圖內(nèi)部接線led6i 7 4 5 6 7 8 9 on cdchkae6fg b c即led5z 7-4 5-6 7 x 9 o cd ch_b ae5ftllwi 7 4 5 6 7 x 9 n cd c-h-bt-4f giwcmled3led4i.ed21 2 j 5 6 7 x 9 仆 cd c h b a f e-4 5 6 7 8 9 q c h b n:2f£_cdeb cdp:匚 2456-7-8 9-0 e-ju- c-h bttttledic語言程序:一、電子時鐘(-)設(shè)計目的通過電子時鐘綜合設(shè)計,使學(xué)生學(xué)會利

2、用8051定時器時間計時處理功能,了解按 鍵掃描及控制led數(shù)碼管顯示原理,掌握單片機和按鍵以及l(fā)ed數(shù)碼管硬件電路 設(shè)計及控制程序的設(shè)計方法。思考按鍵消除抖動、led動態(tài)顯示與靜態(tài)顯示的特 點,從而提高學(xué)生解決實際問題的能力。(-)設(shè)計任務(wù)及要求利用實驗平臺上4個led數(shù)碼管,設(shè)計帶有鬧鈴功能的數(shù)字時鐘,要求:1. 在4位數(shù)碼管上顯示當(dāng)前時間。顯示格式“13寸i寸分分"2. 由led閃動做秒顯示。3. 利用按鍵可對吋間及鬧玲進(jìn)行設(shè)置,并可顯示鬧玲吋間。當(dāng)鬧玲時間到蜂鳴 器發(fā)出聲響,按停止鍵使可使鬧玲聲停止。(三)我采用的是tb-22766板子,單片機類型是stc89c52rc(四)

3、軟件設(shè)計思想:采用語言:c語言,主要中斷:內(nèi)部to中斷為唯一的中斷,主程序大體分為兩部 分:無按鍵被按下吋的顯示,有按鍵被按下吋,輸入定口寸時間或者書輸入當(dāng)前時 間,然后的顯示軟件,最后是一個蜂鳴器的控制程序。前面是三個子程序:兩個 按鍵掃描和一個延時小程序。按鍵的掃描程序設(shè)置:檢測所有按鍵具體的c語言程序:基于jd51開發(fā)板的電子鬧鐘程序5jc jc 5c5c3c 5cjc jc jc 5c5c5 5 55c 5c 5c 5c5 5 5* * *1、基礎(chǔ)功能為計時,并顯示當(dāng)前時間。2、秒表功能,按下keyl鍵進(jìn)入秒表模式,再次按下key3開始計時,再次按 下keyl停止,按下keyl再次開始

4、計時,按key4跳岀秒表程序。3、調(diào)時功能,按下key2進(jìn)入調(diào)時模式,key3調(diào)小時,key4調(diào)分鐘,key2 確定并退岀。4、鬧鐘功能,按卜key3進(jìn)入鬧鐘設(shè)定模式,key3調(diào)小時,key4調(diào)分鐘,key2 確定并退出,當(dāng)設(shè)定時間到達(dá)是,響鈴,key3可以退出響鈴。5、觀看當(dāng)前具體時刻,按key4進(jìn)入,觀看當(dāng)前秒數(shù),約12s后自動退出。 planed by ld* * * * * * / include “reg52.h”/#include "delay.c"#define uchar unsigned char sbit ce573=p2a5; /sbit buzzer

5、=p2a4;sbit key1=p3a3;sbit key2=p3a2;sbit key3=p3a4;sbit key4=p3a5;sbit key5=p3a7;codeunsignedchardigseg=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa 1,0x860x8e;/0123456789abcdefcode unsigned char segsel=0xfe,0xfd,0xfb,0xf7;數(shù)碼管段選int sum=0;int s=30;當(dāng)前時間 秒int mi=0;當(dāng)前時間 分int h=0;

6、當(dāng)前吋間吋int a;int b;int k;int x”乙xl,x2;int swt=l;int swt2=l;int min=l; 鬧鐘分int hour=0;/鬧鐘時int m=l;設(shè)定初始參數(shù) unsigned char beat;codeunsignedsong=0x82,0x01,0x81,0x94,0x84,0xb4,0xa4,0x04,0x82,0x01,0x81,0x94,0x84,0xc4, 0xb4,0x04,0x82,0x01,0x81,0xf4z0xd4,0xb4,0xa4/0x94z0xe2/0x01/0xel/0xd4/0xb4/0xc4/0xb4,0x04/0x

7、82/0x01/0x81/0x94/0x84/0xb4,0xa4,0x04,0x82,0x01,0x81,0x94,0x84,0xc4,0xb4,0x04,0x82,0x01,0x81,0xf4,0xd4,0xb4,0xa4,0x94,0xe2,0x01,0xel,0x d4,0xb4,0xc4,0xb4,0x04,0x00;codeintnote=0x0000,0xfb03/0xfb8e,0xfc0b,0xfc43,0xfcab,0xfd08,0xfd3 乙 0xfd81,0xfd c7,0xfe05,0xfe21,0xfe55,0xfe83,0xfe99,0xfec0;unsigned c

8、har hi_note,low_note;void delay();void initmpu(void) /初始化程序,確定計數(shù)器工作方式,裝填工作數(shù),確定確定 終端模式。tmod=0xll;定時器0和1都以方式1計數(shù)tlo=oxff;th0=0xdb;tll=oxff;thl=0xdb;pcon=oxoo;ie=0x8f;開放所有中斷void delay(int m)延時程序while(-m);void delayl(int m)/延時程序 用來播放音樂 int kk,jj;for(;m>0;m-)for(kk=180;kk>0;kk-) for(jj=125;jj>0;j

9、j-);void testjed(void)/測試 led 燈 _int i;pl=0x7f;delay(40000);for(i=0;i<7;i+)p1=p1»1; delay(40000);pl=oxff;delay(40000);pl=0x00;delay(40000);pl=oxff;delay(40000);pl=0x00;delay(40000);pl=oxff;void prt(int hour,int min)/數(shù)碼管顯示子程序 int a,b,c,d; a=hour/10;b=hour%10;c=min/10;d=min%10;/p2=0xfe;p2=segs

10、el0;po=digsega;delay(loo);p2=segsell;po=digsegb;delay(loo);p2=segsel2;po=digsegc;delay(loo);p2=segsel3;po=digsegd;delay(loo);void test_digseg(void)/測試數(shù)碼管"char i,j;ce573=1;for(i=0;i<16;)for(j=0;j<4;j+)p2=segselj;po=digsegi;i+;delay(40000);p2=0xf0;/4只數(shù)碼管同時開啟po=oxff;delay(40000);po=oxoo;dela

11、y(40000);po=oxff;delay(40000);po=oxoo;delay(40000);po=oxff;void test_beep(char n) 測試蜂鳴器"char i;for(i=0;i vn ;i+)buzzer=o;delay(9000);buzzer=1;delay(9000);char check_k3(void)/按鍵去抖if(key3=0)delay(2000); if(key3=0) return 1;return 0;char check_k4(void) 按鍵去抖 "jf(key4=0)delay(2000);if(key4=0) r

12、eturn 1;return 0; char keyl_flag=0;外部中斷0服務(wù)程序外部中斷1服務(wù)程序char key2_flag=0;void ext_int0() interrupt 0 _ea = 0;delay(4000);keyl_flag=l;ea= 1;void ext_intl() interrupt 2 ea = 0;delay(4000);key2_flag=l;ea = 1;void time() interrupt 1/計時器0計數(shù)器中斷程序,用于確定當(dāng)前時間 ea=0;xl+;tr0=0;swt=l;tlo=oxff;計數(shù)一百就是一秒th0=0xdb;tro=1;

13、if(xl=100)xl=0;s+;if(pl=0x7f) /led 閃爍表示一秒pl=oxff;elsepl=0x7f;if(s=60)s=0;m=l;mi+;if(mi=60)mi=0;h+;if(h=24)h=0;ea=1;void time2() interrupt歹/計數(shù)器1中斷程序,用丁-播放音樂tr1=o;tll=low_ no te;thl=hi note;tr1=1;buzzer=buzzer;void singing()/ unsigned char beat,temp; unsigned char temp;int ii=o;while(l) prt(h,mi); tem

14、p=s on gii;if (temp=0)tr1=o; return; beat=temp&oxof; temp=(temp»4)&0x0f; if (temp=0)tr1=o;顯示當(dāng)前時間/讀岀樂譜的一個byte/如果是0就表示音樂結(jié)束/停止計時計數(shù)器1/返回取出低階的4位,這是拍子 取岀高階4位當(dāng)成音符的頻率如果拍子是0就表示休止符else hi_note=notetemp»8; 根據(jù)音符的頻率得到timerl計數(shù)值low_note=notetemp&0 xooff;tr1=1;i啟動計時計數(shù)器1idelayl(beat);tr1=o;buzz

15、er=1; ii+;/延遲拍子的時間計時器1停止計數(shù)if(key2_flag) 按2鍵退出鬧鈴 key2_flag=o;p2=oxff;tr1=o;buzzer=1; break;in itmpu(); test_beep(4); test_led(); test_digseg();po=oxbf;tro=1;計時器0開始工作while(l)/不斷刷新程序prt(h,mi);顯示當(dāng)前時間if(keyl_flag)以中斷方式響應(yīng)按鍵,秒表keyl_flag=o; 去除外部中斷1標(biāo)志位p2=oxff;test_beep(l); /驅(qū)動蜂鳴器a=o;b=o;while(l) 不斷刷新程序prt(o,

16、o);if(check_k3() p2=0xff;break; /key3再次按下,開始計時test_beep(l);while(l)if(swt&&swt2)swt=o;a+;if(a=100)a=o;b+; prt(b,a); if(keyl_flag=l)/keyl再次按下停止計數(shù) p2=0xff;keyl_flag=o;test_beep(l);swt2=0;if(check_k3()/按下 key3 再次計數(shù)p2=0xff;keyl_flag=o;test_beep(l);swt2=l; if(check_k4()按下 key4 跳出程序p2=0xff;delay(8

17、000);test_beep(l);break;if(key2_flag=l) _key2_flag=0;a=0;b=0;p2=0xff;test_beep(l);else if(key2_flag)/調(diào)整當(dāng)前時間 p2=0xff;key2_flag=0;test_beep(3);while(l)if(check_k3()調(diào)時"h+;p2=0xff; test_beep(l);if(h=24)h=0;delay(loooo);if(check_k4()調(diào)分"mi+;p2=oxff;test_beep(l);if(mi=60)mi=0;h+;if(h=24)h=0;delay

18、(loooo);訐(key2_flag)再按2鍵 退出調(diào)吋p2=oxff;key2_flag=o;test_beep(3);delay(loooo);break;else if(check_k3()/設(shè)置鬧鐘時間p2=oxff;test_beep(3);while(l) 一 prt(hour,min); 顯示當(dāng)前鬧鈴時間 if(check_k3()p2=0xff;hour+; test_beep(l); if(hour=24) hour=0; delay(loooo);else if(check_k4() p2=0xff; min+; test_beep(l); if(min=60) min=0; hour+; if(hour=24) hour=0;delay(loooo);按2鍵退出 if(key2_flag) _ key2_flag=o; p2=0xff; test_beep(5); delay(loooo); break;else if(check_k4()/觀看當(dāng)前秒單位

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論