多功能數(shù)字鐘的設(shè)計報告_第1頁
多功能數(shù)字鐘的設(shè)計報告_第2頁
多功能數(shù)字鐘的設(shè)計報告_第3頁
多功能數(shù)字鐘的設(shè)計報告_第4頁
多功能數(shù)字鐘的設(shè)計報告_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

多功能數(shù)字鐘的設(shè)計報告一、設(shè)計內(nèi)容內(nèi)容:用單片機控制實現(xiàn)基本數(shù)字電子鐘的設(shè)計,擴展了4X4鍵盤和4位LED數(shù)碼顯示器,可用于顯示和按鍵控制。功能:能夠顯示時和分;可通過按鍵設(shè)置鬧鐘功能;可進行整點報時;可通過按鍵設(shè)置分校時。二、總體方案設(shè)計2.1功能分析數(shù)字電子鐘系統(tǒng)可以分為主控制單元、復(fù)位電路、鍵盤電路、顯示電路等。2.2各模塊功能說明晶振電路的功能:每個單片機系統(tǒng)里都有晶振,全程是叫晶體震蕩器,在單片機系統(tǒng)里晶振的作用非常大,他結(jié)合單片機內(nèi)部的電路,產(chǎn)生單片機所必須的時鐘頻率,單片機的一切指令的執(zhí)行都是建立在這個基礎(chǔ)上的,晶振的提供的時鐘頻率越高,那單片機的運行速度也就越快。晶振用一種能把電能和機械能相互轉(zhuǎn)化的晶體在共振的狀態(tài)下工作,以提供穩(wěn)定,精確的單頻振蕩。復(fù)位電路的功能:把電路初始化到一個確定的狀態(tài),一般來說,單片機復(fù)位電路作用是把一個例如狀態(tài)機初始化到空狀態(tài),而在單片機內(nèi)部,復(fù)位的時候單片機是把一些寄存器以及存儲設(shè)備裝入廠商預(yù)設(shè)的一個值。鍵盤電路:根據(jù)4×4矩陣鍵盤,它是用四條I/O線作為行線,四條I/O線作為列線組成的鍵盤。在行線和列線的每個交叉點上設(shè)置一個按鍵。這樣鍵盤上按鍵的個數(shù)就為4×4個。這種行列式鍵盤結(jié)構(gòu)能有效地提高單片機系統(tǒng)中I/O口的利用率。實現(xiàn)按鍵控制鬧鐘,設(shè)置時間的功能。顯示電路的功能:采用4位共陰極數(shù)碼管驅(qū)動方式P2口相應(yīng)的位置0

即選擇要顯示的數(shù)碼管位,P0口相應(yīng)的位置1即可顯示相應(yīng)的數(shù)碼管段。負責顯示時鐘的時和分。三、硬件系統(tǒng)設(shè)計使用了Produce軟件進行硬件原理圖的仿真設(shè)計。部分電路如圖所示:a.主控電路:80C51單片機b.晶振電路:89C51單片機內(nèi)部的振蕩電路是一個高增益反相放大器,引線XTAL1和XTAL2分別為反相振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入和來自反相振蕩器的輸出,該反相放大器可以配置為片內(nèi)振蕩器。c.復(fù)位電路:采用上電復(fù)位,上電后,由于電容充電,使RST持續(xù)一段時間的高電平,從而實現(xiàn)上電復(fù)位操作。這不僅能使單片機復(fù)位,還能是單片機的外圍設(shè)備同時復(fù)位,當程序出現(xiàn)錯誤時,可以隨時使電路復(fù)位。d.鍵盤電路:當按鍵被按下時,相應(yīng)的引腳被拉低,經(jīng)掃描后,獲得鍵值,并執(zhí)行鍵功能程序,因此通過按下同一個鍵,將執(zhí)行不同的功能程序。e.顯示電路:主要是數(shù)碼管顯示數(shù)字電子鐘的時和分。四、軟件系統(tǒng)設(shè)計4.1程序總體流程圖主函數(shù)的流程框圖:先進行初始化設(shè)定初值,然后相關(guān)子程序的調(diào)用4.2主要模塊程序流程1.調(diào)用中斷服務(wù)子程序,循環(huán)次數(shù)++,因為定時時長為50ms,所以循環(huán)次數(shù)為20時,循環(huán)次數(shù)清0,秒++;秒為60時分加++,秒清0;分為60時,時++,分清0;時為24時,時清0,中斷返回。2.先確認彈簧消抖是否有鍵按下,之后判斷掃描按鍵,不同的按鍵觸發(fā)不同功能。五、源代碼部分代碼展示:#include<reg51.h>#definetl0xba;

//宏定義tl賦初值#defineth0x3c;

//宏定義th賦初值sbitspeaker=P3^5;

//鬧鐘輸出

蜂鳴器unsignedcharcodeled[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//數(shù)碼管顯示的數(shù)字0-9的編碼unsignedcharcount0,second,minit,hour;

//時間時分秒unsignedintsecond1,minit1,hour1;//鬧鐘時分秒//timenum1是調(diào)節(jié)時間的按鍵按下的次數(shù)//timenum2是調(diào)節(jié)鬧鐘的按鍵按下的次數(shù)//f1是否在設(shè)置鬧鐘//f2是否在設(shè)置時間unsignedchartimenum1,timenum2,f1,f2;unsignedintdsflg;unsignedchartemp;//延時子程序

代碼燒路軟件自動生成的voiddelay(void){unsignedinti;for(i=0;i<100;i++);}//50ms//數(shù)碼管顯示voiddisplay(void){P0=led[hour/10];//p0口送數(shù)據(jù)拆數(shù)顯示,時的十位P2=0xFE;

//片選

P2.0delay();

//延時P2=0xFF;

//片選關(guān)P0=led[hour%10];

//p0口送數(shù)據(jù)拆數(shù)顯示,時的個位P2=0xFD;

//P2.1delay();P2=0xFF;P0=led[minit/10];

//p0口送數(shù)據(jù)拆數(shù)顯示,分的十位P2=0xFB;

//P2.2delay();P2=0xFF;P0=led[minit%10];

//p0口送數(shù)據(jù)拆數(shù)顯示,分的個位P2=0xF7;

//P2.3delay();P2=0xFF;}//掃描按鍵voidkeyscan(){unsignedchartemp;P1=0xfe;

//給P1.0賦低電平temp=P1;temp=temp&0xf0;

//判斷P1.0那一列是否有鍵按下if(temp!=0xf0)//確定有鍵按下的時候{delay1(10);

//延時子程序進行消抖temp=P1;temp=temp&0xf0;//再次判斷p1.0那一列是否有鍵按下if(temp!=0xf0)

//確定有鍵按下{temp=P1;

//將P1的值給tempswitch(temp){case0xee:

//p1.4口timenum1++;

//標記++TR1=0;

//不啟動T1,關(guān)閉蜂鳴器f2=0;

//進入調(diào)時間的狀態(tài)if(timenum1==1||timenum2==1)

//如果timenum1==1調(diào)時{dsflg=0;

//正在調(diào)時間}if(timenum1==3)

如果timenum1==4退出{TR1=1;

//啟動T1timenum1=0;

//將按鍵次數(shù)歸零dsflg=1;

//退出調(diào)時間f2=1;

//退出調(diào)節(jié)時間}break;case0xde:

//p1.5口//調(diào)時間if(timenum1==1)

//如果timenum1==1調(diào)時{hour++;

//小時++}if(timenum1==2)

//如果timenum1==2調(diào)分{minit++;}//調(diào)鬧鐘if(timenum2==1)

//如果timenum2==1調(diào)時

鬧鐘{hour1++;

//小時++}if(timenum2==2)

//如果timenum2==2調(diào)分

鬧鐘{minit1++;}break;case0xbe:

//p1.6口speaker=1;

//蜂鳴器處于不響狀態(tài)在設(shè)置時間的時候if(timenum1==1)

//如果timenum1==1調(diào)時{hour--;

//小時--}if(timenum1==2)

//如果timenum1==2調(diào)分{minit--;

//分鐘--}//調(diào)鬧鐘if(timenum2==1)

//如果timenum2==1調(diào)時

鬧鐘{hour1--;

//小時--}if(timenum2==2)

//如果timenum2==2調(diào)分

鬧鐘{minit1--;}break;case0x7e://p1.7timenum2++;

//標記++f1=0;

//進入設(shè)置鬧鐘if(timenum2==1||timenum2==2)

//如果timenum2=1設(shè)定腦鐘的小時{dsflg=0;

//正在調(diào)時間}if(timenum2==3)

//如果timenum2=3退出{timenum2=0;

//將按鍵次數(shù)歸零dsflg=1;

//退出調(diào)時間f1=1;

//退出設(shè)置鬧鐘}break;}while(temp!=0xf0)

//判斷按鍵是否彈起{temp=P1;temp=temp&0xf0;}}}}//按鍵控制時間設(shè)置voidKeykonzhi(){if(timenum1==1)

//如果timenum1==1調(diào)時{if(hour>23)

//限位{hour=0;}P0=led[hour/10];

//顯示小時P2=0xFE;

//小時十位p2.0delay();P2=0xFF;P0=led[hour%10];//顯示小時P2=0xFD;

//小時個位

p2.1delay();P2=0xFF;}if(timenum1==2)

如果timenum1==2調(diào)分

//以下也是和調(diào)時一樣的方法{if(minit>59){minit=0;}P0=led[minit/10];P2=0xFB;

//分鐘十位

p2.2delay();P2=0xFF;P0=led[minit%10];P2=0xF7;

//分鐘個位

p2.3delay();P2=0xFF;}}//設(shè)置鬧鐘voidalmset(){timenum1=0;if(timenum2==1)

//如果timenum2==1設(shè)定鬧鐘的小時{if(hour1>23)

//限位{hour1=0;}P0=led[hour1/10];//小時顯示

十位P2=0xFE;//p2.0delay();P2=0xFF;P0=led[hour1%10];P2=0xFD;//p2.1

小時個位顯示delay();P2=0xFF;}if(timenum2==2)

//如果timenum2==2設(shè)定鬧鐘的分鐘

和上面小時一樣{if(minit1>59){minit1=0;}P0=led[minit1/10];//顯示分鐘十位P2=0xFB;//

p2.2delay();P2=0xFF;P0=led[minit1%10];//顯示分鐘個位P2=0xF7;//p2.3delay();P2=0xFF;}}//控制鬧鐘(鬧鐘到了設(shè)定時間就會響)voidalmkozi(){if((hour1==hour)&&(minit1==minit)&

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論