歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

基于51單片機(jī)鬧鐘設(shè)計

  • 資源ID:99731877       資源大小:102.50KB        全文頁數(shù):28頁
  • 資源格式: DOC        下載積分:10積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要10積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號,方便查詢和重復(fù)下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。

基于51單片機(jī)鬧鐘設(shè)計

-電子課程設(shè)計實習(xí)報告 元件購置及焊接 元件購置:地點(diǎn):廣埠屯,華中電子市場二樓時間:2021年4月7日過程:大早到華中電子市場后,當(dāng)時還沒開門,等到九點(diǎn)才開門,據(jù)人介紹上了二樓,賣各種電子元件的店面很多,但都不大。選了一家比擬小的店面,把教師給的清單給店主看后,店主很熱情,但是說有兩樣元件沒有,但承諾叫我們等等,到倉庫去找一下。我們委婉拒絕了,想先看看,第一次來畢竟的貨比三家嘛。又挨個找了幾家店,比照價格和元件齊全程度后,我們選了一家比擬大元件齊全而且價格合理的店面。由于主要的元件,包括板子和各種芯片教師都發(fā)了,我們主要買一些小型元件。主要是電阻電容,由于元件小,不是單個賣的,都是十個十個的賣。至于電阻電容的區(qū)分,以前參加電子協(xié)會也接觸過,關(guān)鍵是一些不熟悉的元件,如串口下載線之類的,我們雖然在課堂聽教師講過區(qū)分公母,但對于是否買對了,還是有疑問,得到店主承諾買錯了,可以包換后,才放心結(jié)賬。對著清單上一一看好后,除了電阻點(diǎn)容多買了幾個外,其他的東西都還齊全。最后叫店主結(jié)賬,并依照教師要求開發(fā)票。原清單:局部元件由于分批購置或者網(wǎng)上購置,未能列入清單焊接心得:焊接時間:2021年4月9日星期六上午地點(diǎn):信息樓405焊接元件電路圖:過程及心得: 有了大二焊接收音機(jī)的一些焊接功底后,對于焊接還是有些經(jīng)歷的,先將小的元件焊接好,比方說電容電感,防止大的高的元件焊好后留下的可操作空間太少,給小的元件焊接帶來不便。而不耐高溫的元件,如三極管等,可以留在最后焊接,以免引腳觸到烙鐵損壞元件。當(dāng)然有些元件的引腳雖然是對稱分布,但是是是有區(qū)別的,如電解電容,二極管,三極管等。特別應(yīng)該注意的是排阻,普通電阻部沒有負(fù)極,但是排阻比擬特別,兩端是不同的。由于排阻焊反了,導(dǎo)致與P0口相連的矩陣鍵盤無論如何都沒常使用,后來發(fā)現(xiàn)后,拔了好久才拔下來,手還在此過程中,還跟烙鐵來了個親密接觸,手指被燙的留下了一道白印記。拔下來時候,板子已經(jīng)傷痕累累了,幸好買了新的排阻焊上去之后,鍵盤能夠正常工作了,真可謂教訓(xùn)沉痛。 焊接過程中,由于烙鐵使用的還是比擬少,開場時手拿著總覺得很別扭,點(diǎn)錫絲的時候甚至有點(diǎn)抖,不過焊完一兩個元件后就適應(yīng)了很多,后來越來越上手,速度也快了很多。 我們特地幾個人約好一起焊接,并比照,有疑問先討論,再動手焊接。但是還是有些問題沒得到解決,由于沒接觸過1602,對于排針和排插的位置還是焊反了,但是問題不大,后來的實習(xí)過程中證明液晶一直工作正常,不過以后還是得按常規(guī)出牌,以免遇到大麻煩。其間也遇到了復(fù)位開關(guān)的擺放問題,我一直覺得是只要能插進(jìn)去就正確的,但有人覺得有正反問題,后來證明我的想法是正確。 焊完后,分模塊對整個硬件電路進(jìn)展調(diào)試檢測,看有沒有漏焊,虛焊的地方。之后,插上芯片試電,一切正常后,用安裝好的編譯和STC串口下載軟件給單片機(jī)下載程序,紅色的二極管一閃一閃的,等二極管不閃后,第一個數(shù)碼管被點(diǎn)亮了,當(dāng)時很興奮。至此焊接告一段落。在此過程中,我總結(jié)出1、 焊接前需熟悉電路,了解各元件,因為真正的焊接過程實際上是很短的,而準(zhǔn)備工作沒做好,只會給后面的焊接帶來意想不到的麻煩,甚至導(dǎo)致板子被毀。2、 焊接過程中,要注意力集中,逐漸積累經(jīng)歷,怎樣操作適應(yīng),怎樣防止虛焊和短路,以提高效率??偟膩碚f是一個熟練掌握焊槍和熟悉錫絲特性的過程。3、 焊接后先不要急于上電,也不要想板子一定焊好了,或者不正常之后惶恐是不是焊廢了。畢竟這也是一個小的系統(tǒng),我們第一次接觸,第一次上電就能一切運(yùn)行成功不現(xiàn)實,出現(xiàn)情況不要急,可能只是一些小問題,如沒插上芯片或跳線帽之類的。4、 總之作為學(xué)電子電氣的,我們畢竟還會接觸硬件的焊接和調(diào)試,這只是一個開端,相信有了這次的經(jīng)歷后,以后的會對這一過程了解的更深入。基于數(shù)碼管及矩陣鍵盤實現(xiàn)的移位等假設(shè)干功能一、材料及硬件分析數(shù)碼管的接法:由于數(shù)碼管的借口很多,如果一個個接在單片機(jī)IO口上,將會很占用硬件資源,同時編程時候要兼顧段選和位選,會給編程帶來很大不便。使用74LS138和CD4511譯碼器后,兩個問題迎刃而解,如下為數(shù)碼管的接法原理圖:由圖可知,138控制位選占用3個IO口,CD4511控制段選占用4個IO口,加上控制小數(shù)點(diǎn)的引腳總共占用8個IO口。給P1口賦值的時候,高3位控制的是位選,即第幾個數(shù)碼管亮,低4位控制的為段選,直接顯示0-9,無需代碼。而第4位則控制的是小數(shù)點(diǎn)的亮暗。動態(tài)顯示的時候,只需要在*一位IO口后面的小數(shù)點(diǎn)點(diǎn)亮即可。矩陣鍵盤線反法:矩陣鍵盤部是4*4的8根線組成的16鍵的鍵盤,每個限于線穿插點(diǎn),表示為一個鍵??偣残枰?個IO口,當(dāng)兩個線沒有穿插的時候,接通的兩條線都變味低電平。首先可將高八位置為高電平第八位置為低電平,記下變?yōu)榈碗娖降囊粭l線路。然后將上下電平交換,再記下一條線路,即可確定按下的鍵的位置。具體程序如下:void press() unsigned char keybuf1,keybuf2; P0=0*f0;keybuf1=P0; if(P0!=0*f0) if(P0!=0*f0) /按鍵 P0=0*0f;keybuf2=P0;KeyV=keybuf1+keybuf2;經(jīng)過屢次試驗后得出的各鍵的代碼為:0*ee 0*de 0*be 0*7e0*ed 0*dd 0*bd 0*7d0*eb 0*db 0*bb 0*7b0*e7 0*d7 0*b7 0*77,當(dāng)然將鍵盤反接之后鍵就值完全變了。軟件消抖:當(dāng)有鍵按下的時候,瞬間單片機(jī)的電平會不穩(wěn)定,即出現(xiàn)電平抖動,為了消除抖動,可采用軟件法:unsigned char up() unsigned char P0Buf; P0=0*f0; /松鍵 P0Buf=P0; return(P0Buf-0*f0);在有鍵按下之后執(zhí)行while(up();即停在該處,只給Keyv賦值一次。二、程序功能1、密碼鎖:其他所有功能都在此程序運(yùn)行成功的根底才能執(zhí)行。上電之后,輸入密碼,并按c鍵驗證正確之后會顯示全8,否則顯示全0。驗證成功后按下A可以自行下面程序2、自動拉幕式移屏:1鍵左移,2鍵右移,其他鍵停頓,全屏顯示為12345678。3、定時器時鐘:BCD分別可調(diào)時分秒,A鍵實現(xiàn)下一功能4、秒表:1、2、3分別可以實現(xiàn)暫停,繼續(xù),清零功能,可準(zhǔn)確到百分之一秒5、手動式移位并刪除:輸入數(shù)字的將第一個數(shù)字刪除,并將所有數(shù)字前移一位。C鍵可實現(xiàn)刪除,將最后一位數(shù)字刪除,并在第一位補(bǔ)零。6、加法器:輸入兩個數(shù)字可實現(xiàn)相加,并可清屏和連加,但不能實現(xiàn)小數(shù)相加。二、源程序*include"reg52.h"unsigned char Pin8=8,5,8,5,8,5,8,5;unsigned char Lock8=11,11,11,11,11,11,11,11;unsigned char L18=0,0,0,0,0,0,0,0;unsigned char L8=0,0,0,0,0,0,0,0;unsigned char Led18=0,0,0,0,0,0,0,0;unsigned char Led16=11,11,11,11,11,11,11,11,0,1,2,3,4,5,6,7;unsigned char KeyV=0;unsigned char Total=0;unsigned char disp=0*00,0*01,0*02,0*03,0*04,0*05,0*06,0*07,0*08,0*09;unsigned char second1=0;unsigned char second2=0;unsigned char minute1=0;unsigned char minute2=0;unsigned char hour1=0;unsigned char day=0;unsigned char month=0;unsigned char Con=60;unsigned char code Key=0*d7,0*ee,0*de,0*be,0*ed,0*dd,0*bd,0*eb,0*db,0*bb,0*7e;unsigned char T=0;unsigned char V=0;void delay(int n) while(n-);void dly() unsigned int q; q=2000; while(q-);/*change() if(Con=60)Con=1; if(Con=1)Con=60; */unsigned char up() unsigned char P0Buf; P0=0*f0; /松鍵 P0Buf=P0; return(P0Buf-0*f0);void press() unsigned char keybuf1,keybuf2; P0=0*f0;keybuf1=P0; if(P0!=0*f0) if(P0!=0*f0) /按鍵 P0=0*0f;keybuf2=P0;KeyV=keybuf1+keybuf2; while(up(); display() unsigned char i,P1Buf; for(i=0;i<=7;i+) P1Buf=i*2; P1Buf=P1Buf<<4; P1Buf=P1Buf+Ledi; /顯示 P1=P1Buf; /delay(); void lscan() unsigned char i; for(i=0;i<=10;i+) if(KeyV=Keyi) KeyV=i; /換數(shù)值 break; for(i=7;i>0;i-) Locki=Locki-1; Lock0=KeyV;ldisplay() unsigned char i,P1Buf; for(i=0;i<=7;i+) P1Buf=i*2; P1Buf=P1Buf<<4; P1Buf=P1Buf+Locki; /顯示 P1=P1Buf; /delay(); display1() unsigned char i,P1Buf; for(i=0;i<=7;i+) P1Buf=i*2; P1Buf=P1Buf<<4; P1Buf=P1Buf+Li; /顯示 P1=P1Buf; /delay(); void scan1() unsigned char keybuf1,keybuf2; P0=0*f0;keybuf1=P0; if(P0!=0*f0) P0=0*0f; keybuf2=P0; KeyV=keybuf1+keybuf2; if(KeyV=0*ee) minute1+;if(minute1=10)minute1=0; /調(diào)時間 if(KeyV=0*de) minute2+;if(minute2=6)minute2=0; if(KeyV=0*be) hour1+;if(hour1=13)hour1=1; delay(15000); void Timer0() interrupt 1 TH0=(65536-16666)/256; TL0=(65536-16666)%256; T+; if(T=Con) T=0; second1+; if(second1>=10) second1=0; second2+; if(second2>=6) /中斷0 minute1+; second2=0; if(minute1>=10) minute1=0; minute2+; if(minute2>=6) hour1+; minute2=0;if(hour1>=13)hour1=1; rotatel() unsigned char t,i; t=Led15; for(i=15;i>0;i-) Ledi=Ledi-1; / 左移 Led0=t; rotater() unsigned char t,i; t=Led0; for(i=1;i<=15;i+) /右移 Ledi-1=Ledi; Led15=t; back() unsigned char i; for(i=1;i<=7;i+) /右移 Li-1=Li; L7=0;void Timer1() interrupt 3TH1=(65536-40000)/256; TL1=(65536-40000)%256; T+; if(T=200) switch(KeyV) case 0*ee: rotatel(); break; case 0*de: rotater(); break; default: break; void scan() unsigned char i; for(i=0;i<=10;i+) if(KeyV=Keyi) KeyV=i; /換數(shù)值 break; for(i=7;i>0;i-) Li=Li-1; L0=KeyV;void adscan() unsigned char i; for(i=0;i<=10;i+) if(KeyV=Keyi) KeyV=i; /換數(shù)值 break; for(i=7;i>0;i-) Led1i=Led1i-1; Led10=KeyV;void clr() if(KeyV=0*be) second1=0; second2=0; /清零 3 minute1=0; minute2=0; hour1=0;EA=0; Con=1; add0() unsigned char i; for(i=0;i<=7;i+) L1i=Led1i; for(i=0;i<=7;i+) Led1i=0;eql() unsigned char t,i,b; t=0; b=0; for(i=0;i<=7;i+) /* Led1i=(Led1i+L1i+t)%10; if(Led1i>9) t=1;*/ t=Led1i+L1i+b; if(t<=9) Led1i=t;b=0; if(t>9) Led1i=t-10;b=1; adcl() unsigned char i; if(KeyV=0*77) for(i=0;i<=7;i+) Led1i=0; L1i=0; void sec2() if(KeyV=0*de) EA=0; /暫停 2void sec1() if(KeyV=0*ed) /切換 4 EA=1;Con=60;void sec() if(KeyV=0*ee) /開場 1 EA=1;addisp() unsigned char i,P1Buf; for(i=0;i<=7;i+) P1Buf=i*2; P1Buf=P1Buf<<4; P1Buf=P1Buf+Led1i; P1=P1Buf; add() while(1) KeyV=0; press(); adcl(); if(KeyV=0*7e) screen(); if(KeyV=0*e7) add0(); if(KeyV=0*b7) eql(); if(KeyV!=0*b7&&KeyV!=0*e7&&KeyV!=0&&KeyV!=0*77&&KeyV!=0*7e) adscan(); addisp(); rotate() KeyV=0; while(1) KeyV=11; press(); if(KeyV=0*7e) add(); if(KeyV=0*77) back(); if(KeyV!=0*7e&&KeyV!=11&&KeyV!=0*77) scan(); display1(); /移位 second() KeyV=0; second1=0; second2=0; minute1=0; minute2=0; hour1=0; TMOD=0*01; TH0=(65536-16666)/256; TL0=(65536-16666)%256; TR0=1; ET0=1; /秒表 EA=1; Con=1; while(1)P1=0*50+dispminute1;P1=0*60+dispminute2;P1=0*00+dispsecond1; P1=0*20+dispsecond2; P1=0*90+disp(hour1%10);P1=0*a0+disp(hour1/10); press(); sec(); sec1(); sec2(); clr(); if(KeyV=0*7e) rotate();clock() KeyV=0; TMOD=0*01; TH0=(65536-16666)/256; TL0=(65536-16666)%256; TR0=1; TR1=0; ET0=1; /時鐘 EA=1; Con=63; while(1)P1=0*50+dispminute1;P1=0*60+dispminute2;P1=0*00+dispsecond1; P1=0*20+dispsecond2; P1=0*90+disp(hour1%10);P1=0*a0+disp(hour1/10); scan1(); press(); if(KeyV=0*7e) second();screen() KeyV=0; TMOD=0*01; TH1=(65536-40000)/256; TL1=(65536-40000)%256; TR1=1; TR0=0; ET1=1; /時鐘 EA=1; /dly(); while(1) press(); display(); if(KeyV=0*7e) clock(); Klock() unsigned char i,t; V=0; while(1) KeyV=11; V=0; press(); ldisplay(); if(KeyV!=11&&KeyV!=0*7b&&KeyV!=0*7e) lscan(); if(KeyV=0*7b) for(i=0;i<=7;i+) if(Pini=Locki) V+; if(V!=8)for(i=0;i<=7;i+) Locki=0; if(V=8)for(i=0;i<=7;i+) Locki=8;t=V;/等于8證明八個數(shù)都相等開鎖 if(t=8&&KeyV=0*7e)break; void main() dly(); while(1) Klock(); screen(); 暑期實習(xí)課題一:基于51單片機(jī)的鬧鐘設(shè)計一、 材料材料:STC89C52單片機(jī)開發(fā)板一塊,1602液晶一片,12c887時鐘芯片,ps2鍵盤,下載線,個人計算機(jī)編譯軟件:wave及keil下載程序軟件:STC專用下載串口軟件二、 芯片及硬件資料一、芯片DS12c8871、DS12C887 能夠自動產(chǎn)生世紀(jì)、 年、月、日、時、分、秒 等時間信息,其 部又增加了世紀(jì)存放器,從而利用硬件電路 解決子 "千年問題;DS12C887 中自帶有鋰電 池,外部掉電時,其部時間 信息還能夠保 持 10 年之久;對于一天的時間記錄,有 12 小時制和 24 小時制兩種模式。在 12 小時 制模式中,用 AM 和 PM 區(qū)分上午和下午;2. 、引腳功能:DS12C887 的引腳排列如圖 1 所示,各管腳的功能說明如下: GND、VCC:直流電源,其中 VCC 接+5V 輸入,GND 接地,當(dāng) VCC 輸入為+5V 時,用 戶可以 DS12C887 RAM 中的數(shù)據(jù),并可對其進(jìn)展讀、寫操作;當(dāng) VCC 的輸入小于 +4.25V 時,制止用戶對部 RAM 進(jìn)展讀、寫操作,此時用戶不能正確獲取芯片的時間信 息;當(dāng) VCC 的輸入小于+3V 時,DS12C887 會自動將電源發(fā)換到部自帶的鋰電池上,以保證 部的電路能夠正常工作。 圖13. 圖 2是用 8031 單片機(jī)和 DS12C887 構(gòu)成的時間獲取電路圖即對應(yīng)的管腳為如下: - |DS12887-51 |DS12887-51 |DS12887-51 | -| |AD0-P0.0 |AD4-P0.4 |AS-ALE | |AD1-P0.1 |AD5-P0.5 |DS-P3.7| |AD2-P0.2 |AD6-P1.6 |RW-P3.6| |AD3-P0.3 |AD7-P0.7 |IRQ-P3.5| - 圖 24. 下列圖為DS12C887地址分布圖,則結(jié)合上圖及其管腳知其基地址為: 0*0fe0 圖35. 、相應(yīng)的程序采用 C51 語言編寫,由于Mot接地則以 Intel 工作模式。 即可以將各個引腳宏定義如下,并放入頭文件中:*define DS12887_Sec *BYTE0*0fe00 /秒*define DS12887_Min *BYTE0*0fe02 /分*define DS12887_Hour *BYTE0*0fe04 /時*define DS12887_Week *BYTE0*0fe06 /星期*define DS12887_Day *BYTE0*0fe07 /日*define DS12887_Mon *BYTE0*0fe08 /月*define DS12887_Year *BYTE0*0fe09 /年*define DS12887_A *BYTE0*0fe0a /存放器A*define DS12887_B *BYTE0*0fe0b /存放器B*define DS12887_C *BYTE0*0fe0c /存放器C*define DS12887_D *BYTE0*0fe0d /存放器D*define DS12887_AlarmSec *BYTE0*0fe01 /秒鬧鐘*define DS12887_AlarmMin *BYTE0*0fe03 /分鐘鬧鐘*define DS12887_AlarmHour *BYTE0*0fe05 /小時鬧三、 思路分析1、 時間及日期顯示:要有鬧鐘功能,及先應(yīng)該有時鐘顯示,可先將*一時間初值賦值給各個AD管腳,然后又以掃描方式將時間調(diào)出來,并用Lcd顯示,并在第二次下載程序之前,將原有時間屏蔽,即可實現(xiàn)。2、 時間及日期修改:如果時間不準(zhǔn),可以通過軟件重設(shè)時間,但是現(xiàn)實時鐘不允許軟件改時間,為了與現(xiàn)實鬧鐘功能一致,必須實現(xiàn)用硬件修改時間,及必先有輸入設(shè)備。用ps2鍵盤,結(jié)合頭文件可編程實現(xiàn)該功能。3、 鬧鐘設(shè)置:用一個數(shù)組記錄三個數(shù)據(jù),分別定義為鬧鐘時分秒,并通過掃描與當(dāng)前時間比照,如果一一對應(yīng),則開場鬧鐘。鬧鐘過程可將開發(fā)板上的Led點(diǎn)亮,然后按*件實現(xiàn)關(guān)閉??闪硇性黾幼约旱南敕üδ?,如懶豬功能延時,自行延時等。4、 鬧鐘屏蔽:如果設(shè)置了鬧鐘,在主界面上可以通過*個符號顯示,如果沒有則通過另一個符號顯示。如果顯示沒有鬧鐘,則可屏蔽鬧鐘,即使設(shè)置了也不能到點(diǎn)鬧。該功能可通過按下*鍵改變*變量實現(xiàn)。四、 功能及實現(xiàn)1、 時間日期星期顯示:從頭文件中調(diào)用函數(shù)SetTime(unsigned char hour,unsigned char min,unsigned char sec)和SetDate(unsigned char year,unsigned char mon,unsigned char day)將時間日期分別賦值給對應(yīng)變量。并將各個值分別賦值給數(shù)組: Date_Time6=DS12887_Sec; /秒 Date_Time5=DS12887_Min; /分 Date_Time4=DS12887_Hour; /時 Date_Time3=DS12887_Week ; /星期 Date_Time2=DS12887_Day; /日 Date_Time1=DS12887_Mon; /月 Date_Time0=DS12887_Year;在主函數(shù)中用while1循環(huán)掃描記錄各值。將時分秒及月日用如下方式別離成十位和個位:Date_Timei/10)+48);(Date_Timei%10)+48)注意要顯示字符,必須加上48,因為Lcd只能顯示字符為char型。定義displaytime函數(shù),用 DispOneChar(*,y,(Date_Timei/10)+48);語句將別離后的時分秒及日月顯示在液晶適當(dāng)?shù)奈恢?。由于星期只能用字符串顯示,只能另外編寫函數(shù),因為Date_Time3為記錄星期的數(shù)組元素,其值從1到7,分別對應(yīng)星期日到星期一??删帉懶瞧诤瘮?shù)如下:void week() if(Date_Time3=6) Display(5,0,"Fri");.整個時間顯示構(gòu)造如下:mianSetTime( );SetDate();While(1)Date_Timei=DS12887_.;week();displaytime;2、時間星期日期的調(diào)整:日期及星期的調(diào)整可在主界面上進(jìn)展,調(diào)用Ps2頭文件,在while循環(huán)中用if判斷如果有鍵按下則星期加減同時日期同步加減, if(KeyChar='w')DS12887_Day+=1;DS12887_Week+=1;if(DS12887_Week>7) DS12887_Week=1;KeyChar=0; /設(shè)置新日期if(KeyChar='j')DS12887_Day-=1;DS12887_Week-=1;if(DS12887_Week<1) DS12887_Week=7;KeyChar=0;注意星期只能從1到7變化。月份的調(diào)整要簡單些 if(KeyChar='m')DS12887_Mon+=1;KeyChar=0; /設(shè)置新月份 if(KeyChar='_')DS12887_Mon-=1;KeyChar=0;時分秒的調(diào)整由于變量太多,可設(shè)置跳入另一界面實現(xiàn),如果有s鍵按下,則進(jìn)入另一界面設(shè)置時間, 在Newtime()中調(diào)整時間,以b跳回主函數(shù),函數(shù)從新設(shè)置的時間開場執(zhí)行。3、 鬧鐘的實現(xiàn)如果沒有設(shè)置鬧鐘,在主界面上將顯示"$*。在主函數(shù)循環(huán)中,如果按下回車鍵,進(jìn)入鬧鐘設(shè)置界面,用一個全局變量數(shù)組Almtime記錄所設(shè)置的鬧鐘時分秒,回車鍵后返回主界面,在原來顯示"$*的地方顯示"$及腦中翻開。并開啟Led和 autdly()函數(shù)開場始掃描比照Almtime和當(dāng)前時間。如果到了設(shè)置時間,則開場鬧鐘, D2=0;即亮燈,并顯示"Lazy pig Get up。并進(jìn)入自動延時狀態(tài),如果有t鍵按下,關(guān)閉鬧鐘,否則自動延時10秒后開場滅燈返回主界面,一分鐘后繼續(xù)開場鬧鐘。懶豬功能:對于賴床的人,轉(zhuǎn)么設(shè)置的一個功能,如果到點(diǎn)了,可以按下'y'鍵延時三分鐘。具體實現(xiàn)如下: while(Date_Time5%10=Almtime7-48&&D2=0) D2=0;Display(0,0," Lazy pig ");Display(4,1,"Get up!"); Date_Time6=DS12887_Sec; if(KeyChar='t')D2=1;Flag=1;KeyChar=0;WrtLcdCmd(Clear);break;/關(guān)閉鬧鐘 if(KeyChar='y') Almtime7+=3;if(Almtime7>'9')Almtime7=Almtime7-10;Almtime8=Almtime8+1;D2=1;KeyChar=0;WrtLcdCmd(Clear);break; /懶豬功能 if(Date_Time6/10=(Almtime9-47)D2=1;WrtLcdCmd(Clear);break; 以上為第一次開場鬧鐘,一分鐘后通過語句 while(Date_Time5%10=(Almtime7-47),再次進(jìn)入鬧鐘實現(xiàn)如上一樣功能。4、鬧鐘的屏蔽樣如果想屏蔽鬧鐘功能,按下'p'鍵,將鬧鐘屏蔽,屏蔽后,不掃描Led及其autdly函數(shù),同時顯示"$*。在主函數(shù)循環(huán)中可定義如下語句:if(KeyChar='p')flg=1;KeyChar=0;其中,如果flg為1則不掃描Led及autdly;五、整體構(gòu)造整個程序簡化后如下:時分秒調(diào)整;時間顯示;鬧鐘設(shè)置;亮燈;mianLcd初始化;開ps2中斷;While1時間數(shù)組=DS12887_;時間顯示;日期及星期調(diào)整;時分秒調(diào)整;鬧鐘設(shè)置;亮燈;開關(guān)鬧鐘屏蔽; 六、 源程序*include<reg52.h> /包含單片機(jī)存放器的頭文件*include<stdlib.h> /包含隨機(jī)函數(shù)rand()的定義文件*include "absacc.h"*include<intrins.h> /包含_nop_()函數(shù)定義的頭文件*include<12887.h>*include<1602.h>*include<ps2.h>sbit D2=P31;unsigned char Almtime15=' ',' ',' ','_','_',':','_','_',':','_','_'unsigned char Date_Time7;unsigned char flg=1;/鬧鐘屏蔽標(biāo)志unsigned char Flag=1;/延時掃描標(biāo)志void delay() unsigned char i,j=200; for(i=0;i<200;i+) while(j) j-;void dely() unsigned char i; for(i=0;i<200;i+) delay();void DisplayTime() /別離并顯示時間 /取余運(yùn)算,求得各位數(shù)字 DispOneChar(12,0,(Date_Time2/10)+48); DispOneChar(13,0,(Date_Time2%10)+48); /日期 DispOneChar(9,0,(Date_Time1/10)+48)

注意事項

本文(基于51單片機(jī)鬧鐘設(shè)計)為本站會員(無***)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!