單片機(jī)智能電子鐘報(bào)告文件_第1頁(yè)
單片機(jī)智能電子鐘報(bào)告文件_第2頁(yè)
單片機(jī)智能電子鐘報(bào)告文件_第3頁(yè)
單片機(jī)智能電子鐘報(bào)告文件_第4頁(yè)
單片機(jī)智能電子鐘報(bào)告文件_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

PAGE2-1.系統(tǒng)設(shè)計(jì)要求1。1基本功能(1)在LCD1602液晶顯示器上顯示年份、月、日、時(shí)、分、秒、星期.(2)閏年平年自動(dòng)判斷,時(shí)間日期年份自動(dòng)變更。(3)用按鍵任意更改顯示的時(shí)間:1)S1按鍵功能是停止時(shí)鐘,進(jìn)行設(shè)置顯示的時(shí)間,光標(biāo)移動(dòng)。2)在s1按下的時(shí)候,s2進(jìn)行時(shí)間的增加。按一次就增加1。3)在s2按下的時(shí)候,s3進(jìn)行時(shí)間的減少。按一次就減少1.4)s4是完成設(shè)置的按鍵,時(shí)鐘開始.同時(shí)也是鬧鐘響應(yīng)的時(shí)候停止鬧鐘的聲音。(4)擴(kuò)展功能:1)在顯示時(shí)間的基礎(chǔ)上,加入了鬧鐘的功能.可以隨意調(diào)鬧鐘響應(yīng)的時(shí)間。2)到了鬧鐘判斷響應(yīng)的時(shí)候,蜂鳴器啟動(dòng),發(fā)出頻率為一秒一次的聲音。1。2設(shè)計(jì)目的掌握單片機(jī)系統(tǒng)的開發(fā)應(yīng)用,鞏固和加深已學(xué)過的知識(shí),提高動(dòng)手能力及解決實(shí)際問題的能力,同時(shí)培養(yǎng)團(tuán)隊(duì)合作精神。將自己學(xué)到的知識(shí)更好地運(yùn)用于實(shí)際當(dāng)中。設(shè)計(jì)流程本次設(shè)計(jì)時(shí)鐘電路,使用了AT89C52單片機(jī)芯片控制電路,單片機(jī)控制電路簡(jiǎn)單且省去了很多復(fù)雜的線路,使得電路簡(jiǎn)明易懂,使用鍵盤鍵上的按鍵來調(diào)整時(shí)鐘的年、月、日、時(shí)、分、秒,用一揚(yáng)聲器來進(jìn)行定時(shí)鬧鐘的提醒,同時(shí)使用C語言程序來控制整個(gè)時(shí)鐘顯示,使得編程變得更容易.2.1課程設(shè)計(jì)的開發(fā)流程1)方案規(guī)劃。2)用proteus設(shè)計(jì)硬件電路。3)用匯編語言設(shè)計(jì)程序。4)用keilC51軟件設(shè)計(jì)調(diào)試。5)利用proteus軟件進(jìn)行軟件和硬件的聯(lián)調(diào)。6)根據(jù)電路圖焊接硬件電路。7)下載程序代碼,在電路板上調(diào)試、檢驗(yàn)設(shè)計(jì)。8)完成設(shè)計(jì),撰寫課程設(shè)計(jì)報(bào)告。2.2系統(tǒng)的功能及設(shè)計(jì)思路此設(shè)計(jì)原理框圖如圖2—3所示,此電路包括以下四個(gè)部分:?jiǎn)纹瑱C(jī),鍵盤,鬧鈴電路及LCD1602液晶顯示屏。經(jīng)過編譯程序仿真后,89C51的4K空間不夠用,就選用更大空間的89C52單片機(jī)了。本設(shè)計(jì)用的元器件如列表2-3所示圖2-3元器件列表:AT89c521片LCD1602液晶1片PNP三極管1個(gè)10up電解電容1個(gè)30p電容2個(gè)10K電阻1個(gè)1K電阻3個(gè)按鍵5個(gè)12MHz晶振1個(gè)無源蜂鳴器1個(gè)表2-32.3工作原理設(shè)計(jì)的電路主要由四模塊構(gòu)成:?jiǎn)纹瑱C(jī)控制電路,顯示電路、鬧鈴電路以及按鍵控制電路。本設(shè)計(jì)采用C語言程序設(shè)計(jì),使單片機(jī)控制LCD顯示時(shí)間,當(dāng)秒計(jì)數(shù)計(jì)滿60時(shí)就向分進(jìn)位,分計(jì)數(shù)器計(jì)滿60后向時(shí)計(jì)數(shù)器進(jìn)位,小時(shí)計(jì)數(shù)器按“23翻0”規(guī)律計(jì)數(shù)。時(shí)、分、秒的計(jì)數(shù)結(jié)果經(jīng)過數(shù)據(jù)處理可直接送顯示器顯示。如果小時(shí)到達(dá)24小時(shí)候,就是“23翻0”,日、星期都要加一個(gè)單位。其余的閏年平年自動(dòng)判斷。鬧鐘的部分就是當(dāng)鬧鐘的時(shí)、分與時(shí)鐘的時(shí)、分相等的情況下,發(fā)出信號(hào)驅(qū)動(dòng)蜂鳴器,當(dāng)按下S4的時(shí)候,可以令蜂鳴器停止工作.電路功能使用說明:各個(gè)控制鍵的功能:S1可進(jìn)行光標(biāo)選擇,同時(shí)令時(shí)鐘停止走動(dòng)。S2可對(duì)時(shí)間進(jìn)行校準(zhǔn)調(diào)節(jié),按鍵一次增加一個(gè)單位。S3可對(duì)時(shí)間進(jìn)行校準(zhǔn)調(diào)節(jié),按鍵一次減少一個(gè)單位。S4進(jìn)行設(shè)置完成的時(shí)候推出,也可以在鬧鐘響應(yīng)時(shí)停止蜂鳴器工作。AT89C52單片機(jī),通過編寫程序?qū)CD顯示進(jìn)行控制。LCD1602液晶顯示器顯示編譯的數(shù)據(jù)。定時(shí)鬧鐘判斷,達(dá)到符合情況時(shí)候驅(qū)動(dòng)蜂鳴器工作。2。4軟件研制方面1)采用模塊化程序結(jié)構(gòu)設(shè)計(jì)軟件,首先將整個(gè)軟件分成若干功能模塊;2)根據(jù)設(shè)計(jì)的原理,編寫源程序;3)調(diào)試各模塊程序;4)與硬件一起聯(lián)調(diào),最后完成全部調(diào)試工作。2。5硬件研制方面1)將整個(gè)硬件系統(tǒng)劃分為若干功能單元電路,會(huì)出整個(gè)系統(tǒng)邏輯電路,注明注明各交單元電路間接口信號(hào);2)完成各單元電路設(shè)計(jì),包括選擇合適的各類元器件和電路板設(shè)計(jì)(元件布局和走線)。3。仿真實(shí)現(xiàn)(電路連接圖)3。1選取的元器件及作用(1)單片機(jī)STC89C52STC89C52是比較常用的52系列單片機(jī).它的工作電壓是+5v。外圍電路加上12M的晶振,使其正常工作。P0口控制LCD1602??臻g有8k。(2)LCD1602液晶1602顯示容量為16乘2個(gè)字符。工作電壓為+5v。編號(hào)符號(hào)引腳說明編號(hào)符號(hào)引腳說明1VSS電源地9D2DateI/O2VDD電源正極10D3DateI/O3VL液晶顯示偏壓信號(hào)11D4DateI/O4RS數(shù)據(jù)/命令選擇端12D5DateI/O5R/W讀寫選擇端13D6DateI/O6E使能端14D7DateI/O7D0DateI/O15BLA背光源正極8D1DateI/O16BLK背光源負(fù)極4.軟件編程按照電路圖的設(shè)計(jì)焊接好硬件電路。就開始軟件編程。程序主要分為兩個(gè)部分,即液晶顯示部分和控制按鍵的部分。由于本設(shè)計(jì)采用的是用按鍵分別控制??梢栽谥骱瘮?shù)中調(diào)用一個(gè)鍵盤掃描的函數(shù),當(dāng)相應(yīng)的不同按鍵按下后控制液晶顯示和單片機(jī)P0的輸出,從而控制液晶的顯示。源程序見附錄.本電子時(shí)鐘共使用了四個(gè)按鍵.第一個(gè)按鍵用于選擇所要調(diào)節(jié)的內(nèi)容(如年、月、日、時(shí)、分、秒),按下不同次數(shù)光標(biāo)分別在要調(diào)節(jié)的對(duì)應(yīng)位置閃爍;第二個(gè)按鍵用于所調(diào)節(jié)的量的增加,按下一次增加一個(gè)單位;第三個(gè)按鍵用于所調(diào)節(jié)量的減少,按一下增加一個(gè)單位。第四個(gè)按鍵是設(shè)置完成退出,并且可以控制鬧鐘的聲音,即是當(dāng)鬧鐘響應(yīng)的時(shí)候按下,蜂鳴器立刻停止工作。該電子時(shí)鐘實(shí)現(xiàn)的功能是液晶正常顯示時(shí)分秒,年月日和星期.不僅可以用按鍵調(diào)節(jié)時(shí)分秒,還可以調(diào)節(jié)年月日,并且要保證星期和年月日相對(duì)應(yīng)。在這里需要指出的是由于條件限制(除非有時(shí)鐘芯片實(shí)現(xiàn)萬年歷),不可能保證星期與年月日正確對(duì)應(yīng)),故采程序中用天數(shù)對(duì)7取余數(shù),余1時(shí)為星期一(MON),余2時(shí)為星期二(TUE),依此類推,余0時(shí)為星期天(SUN),當(dāng)天數(shù)到每月最后一天時(shí)繼續(xù)上加不回歸到1,這樣可以保證星期是正確的。具體見程序中注釋.編程思路是,在確定了時(shí)鐘要實(shí)現(xiàn)的功能后按照上述各按鍵所實(shí)現(xiàn)的效果編寫程序。本程序包含液晶寫指令函數(shù)(write_com())、寫數(shù)據(jù)函數(shù)(write_data())、初始化函數(shù)(init())、寫入時(shí)分秒函數(shù)(write_sfm())、寫入月和日函數(shù)(write_nyr())【別指出,由于年包含四位數(shù)字其寫法與月和日不同,故單獨(dú)設(shè)置一個(gè)寫入年函數(shù)】、寫入星期函數(shù)(write_xq())和鍵盤掃描函數(shù),這些程序圍繞主函數(shù)互相嵌套調(diào)用.5、調(diào)試部分本次實(shí)驗(yàn)的調(diào)試部分花了大量的時(shí)間。當(dāng)程序?qū)懞镁幾g通過后,下載到單片機(jī)中,調(diào)試硬件看有無顯示和輸出。調(diào)試主要分為2個(gè)部分。分別是液晶顯示部分,按鍵控制部分。首先是液晶部分,一開始就是無法顯示,查看電路后,后來檢測(cè)才知道是排線的接觸不良造成的.經(jīng)過幾次程序的修改,和對(duì)液晶部分電路的檢測(cè)終于將液晶部分調(diào)出有顯示。然后檢查按鍵部分.首先檢查按鍵的焊接確定無誤后,進(jìn)行按鍵控制,結(jié)果顯示良好.6.課程設(shè)計(jì)結(jié)果分析此時(shí)鐘設(shè)計(jì)是利用protues仿真軟件進(jìn)行仿真,以及單片機(jī)開發(fā)箱驗(yàn)證,基本上實(shí)現(xiàn)了課程設(shè)計(jì)要求實(shí)現(xiàn)的功能.硬件部分設(shè)置了的4個(gè)按鍵.當(dāng)按鍵S1按下時(shí),進(jìn)入光標(biāo)顯示狀態(tài),計(jì)數(shù)器停止工作,時(shí)鐘也停止,進(jìn)入設(shè)置時(shí)間的狀態(tài).在S1按下的情況,按鍵S2按下時(shí),對(duì)應(yīng)光標(biāo)的數(shù)據(jù)隨著S2按鍵的按下的次數(shù)而變化,具體是按鍵一次就是增加一個(gè)單位。在S1按下的情況,按鍵S3按下時(shí),對(duì)應(yīng)光標(biāo)的數(shù)據(jù)隨著S3按鍵的按下的次數(shù)而變化,具體是按鍵一次就是少一個(gè)單位。在增加和減少設(shè)置的選項(xiàng)中也加入了閏年平年的判斷,更利于設(shè)置。S4按下的時(shí)候,推出設(shè)置狀態(tài),計(jì)數(shù)器工作,開始計(jì)時(shí)。同時(shí),在鬧鐘響應(yīng)的時(shí)候按下S4按鍵就是令蜂鳴器停止工作。調(diào)試階段,出現(xiàn)一些問題。比如,實(shí)際小時(shí)顯示到29才歸零,分鐘顯示到60才進(jìn)一……經(jīng)過軟件調(diào)試,以上問題均一一排除,結(jié)果達(dá)到預(yù)期目標(biāo)。但時(shí)間有限,部分?jǐn)U展功能不能及時(shí)實(shí)現(xiàn),比如音樂鬧鈴,開啟鬧鐘及關(guān)閉鬧鐘功能等等7。個(gè)人心得以及總結(jié)之前做設(shè)計(jì)的不是這個(gè)設(shè)計(jì),那個(gè)設(shè)計(jì)失敗,我感到很受打擊,因?yàn)樽约旱睦碚撝R(shí)用不了實(shí)際當(dāng)中,學(xué)不會(huì)用。所以自己決定是簡(jiǎn)單的開始做起來,就是選擇了電子時(shí)鐘。從最開始的計(jì)數(shù)開始,利用單片機(jī)內(nèi)部的計(jì)數(shù)功能,更能準(zhǔn)確計(jì)數(shù)時(shí)間。但是我還是不會(huì)自己很順利的編程,所以自己去圖書館借了課程設(shè)計(jì)的資料回來自己研究。不懂的地方就問同學(xué),一步一步慢慢來,結(jié)合書本的資料我成功了編好程序。我之前選擇的是數(shù)碼管顯示的,但是在焊接的電路板的時(shí)候我遇到了極大的困難,因?yàn)槲矣玫降氖?位的數(shù)碼管,而市場(chǎng)只有4位一下的,我買回來2位和4位的擴(kuò)展成6位,按照網(wǎng)上和書本的資料我焊接好,用單片機(jī)開發(fā)箱來驗(yàn)證,悲哀的是居然每一個(gè)數(shù)碼管變化都是一樣的,后來詢問了劉老師,結(jié)果還是一樣不能顯示,最終選擇了用LCD1602液晶顯示器來顯示時(shí)間數(shù)據(jù)了.那個(gè)數(shù)碼管的以后再研究了。可是,那個(gè)液晶顯示器的編程就完全變了,不同于數(shù)碼管的引腳一樣,然后查了很多的資料,經(jīng)過無數(shù)次在單片機(jī)開發(fā)顯示原理,才掌握了他工作的原理,然后一步一步來自己修改書本的程序,達(dá)到自己顯示的結(jié)果。修改的過程還是很困難的,多的同學(xué)的指導(dǎo),讓我少走了很多的彎路。到了最后一步了,焊接電路板,這個(gè)倒是不難,因?yàn)槭侵暗膸讉€(gè)課程設(shè)計(jì)都是焊接電路板的,經(jīng)過幾次的焊接經(jīng)驗(yàn),自己對(duì)焊接有一定的掌握了,所以焊機(jī)的很順利.最后還是顯示不了,經(jīng)過大家的研究,終于指導(dǎo)那是排線的接觸不良導(dǎo)致的。這次的設(shè)計(jì)真的是感悟很多,所有的事情都不是很容易就完成的,必須經(jīng)過一定的磨練才可以.就是比如焊接的工藝吧,有經(jīng)驗(yàn)了就焊接的快和好。擁有了知識(shí),也不一定用于實(shí)際當(dāng)中,自己如果不去實(shí)踐的話,可能真的一輩都不會(huì)了解,別把所有的事情都看的那么簡(jiǎn)單,從小事做起事=是最踏實(shí)的。這次是C語言編程的,盡管自己對(duì)C語言有很深的接觸,但真正讓自己順利的編寫的程序的話,那可不是小事一樁,有一定的累積才是霸道!在焊接電路板的時(shí)候,應(yīng)該很好的了解元器件的功能和特性,不然的話自己就很折騰,顯示不出來的時(shí)候就是很麻煩的,搞不好就要重新焊接一次了。這次設(shè)計(jì)最大的收獲當(dāng)然就是了解到了單片機(jī)的應(yīng)用,如何應(yīng)用,可以應(yīng)用到哪些方面。8.參考文獻(xiàn)1)單片機(jī)原理及其接口技術(shù)(第三版)北京航空航天大學(xué)出版社2)單片機(jī)應(yīng)用系統(tǒng)開發(fā)實(shí)例導(dǎo)航人民郵電出版社3)單片機(jī)課程設(shè)計(jì)輔導(dǎo)書4)模擬電子技術(shù)基礎(chǔ)童詩(shī)白著5)數(shù)字電子技術(shù)基礎(chǔ)閻石著6)以及網(wǎng)上的一些相關(guān)的資料附錄1源程序#include<reg52.h〉#defineucharunsignedchar#defineuintunsignedintsbitRS=P2^6;sbitRW=P2^5;sbitE=P2^7;sbits1=P1^0;sbits2=P1^1;sbits3=P1^2;sbits4=P1^3;sbitspeaker=P2^0;ucharcodetable[]="2099—12—31MON";ucharcodetable1[]="23:58:5023:59";ucharnum,count,shi=23,fen=58,miao=50;ucharyue=12,ri=31;uintnian=2099;uchars1num,xq;charNshi=23,Nfen=59,clock;/////////////////延時(shí)函數(shù)/////////////////////////////////voiddelay(ucharz){ uintx,y; for(x=z;x〉0;x——) for(y=110;y〉0;y-—);}////////////////LCD寫入指令與數(shù)據(jù)/////////////////////////voidwrite_com(ucharcom){ RS=0; RW=0; P0=com; delay(5); E=0; delay(5); E=1; }voidwrite_data(uchardate){ RS=1; RW=0; P0=date; delay(5); E=0; delay(5); E=1;}///////////////////數(shù)據(jù)初始化/////////////////////////////////////voidinit()//初始化{ delay(15); write_com(0x38);//displaymode不監(jiān)察忙信號(hào) write_com(0x08);//displaymode write_com(0x01);//displaymode顯示清屏 write_com(0x06);//顯示光標(biāo)移動(dòng)位置 write_com(0x0c);//顯示開及光標(biāo)設(shè)置 write_com(0x01);//顯示清屏 write_com(0x80); write_com(0x02); for(num=0;num<15;num++) { write_data(table[num]); delay(20); } write_com(0x80+0x41); for(num=0;num〈15;num++) { write_data(table1[num]); delay(20); } TMOD=0x01;//t016位計(jì)數(shù)器 EA=1; ET0=1; TR0=1; TH0=(65536-50000)/256;//賦值初值12MHz晶振 TL0=(65536—50000)%256;}///////////////寫入時(shí)、分、秒、日、月等數(shù)據(jù)////////////////////////////voidwrite_sfm(ucharadd,uchardate)//寫入時(shí)分秒{ ucharshi,ge; shi=date/10; ge=date%10; write_com(0x80+0x40+add);//地址指向第二行,在第二行寫 write_data(0x30+shi);// write_data(0x30+ge);}voidwrite_nyr(ucharadd,uchardate)//只寫入月和日(月和日均只有十位和個(gè)位,寫法相同){ ucharshi,ge; shi=date/10; ge=date%10; write_com(0x80+add); write_data(0x30+shi); write_data(0x30+ge);}voidwrite_nian(ucharadd,uintyear)//寫入年{ uintqian,bai,shi,ge; qian=year/1000;//2413/1000=2(得到千位) bai=(year%1000)/100;//(2413%1000)=413413/100=4(得到百位) shi=((year%1000)%100)/10;//413%100=1313/10=1(得到十位) ge=(((year%1000)%100))%10;//13%10=3(得到個(gè)位) write_com(0x80+add);//地址指向第一行 write_data(0x30+qian);//寫數(shù)據(jù) write_data(0x30+bai); write_data(0x30+shi); write_data(0x30+ge);}//////////////////////寫入星期數(shù)據(jù)////////////////////////////voidwrite_xq1(ucharadd)//星期一{ write_com(0x80+add);//第一行 write_data(0x40+0x0d);//查詢液晶的字符手冊(cè)可知MON(星期一) write_data(0x40+0x0f);//這三個(gè)英文字符對(duì)應(yīng)的二進(jìn)制碼 write_data(0x40+0x0e);//}voidwrite_xq2(ucharadd)//星期二{ write_com(0x80+add); write_data(0x54); write_data(0x55); write_data(0x45);}voidwrite_xq3(ucharadd)//星期三{ write_com(0x80+add); write_data(0x50+4); write_data(0x40+8); write_data(0x50+5);}voidwrite_xq4(ucharadd)//星期四{ write_com(0x80+add); write_data(0x57); write_data(0x45); write_data(0x4e);}voidwrite_xq5(ucharadd)//星期五{ write_com(0x80+add); write_data(0x46); write_data(0x52); write_data(0x49);}voidwrite_xq6(ucharadd)//星期六{ write_com(0x80+add); write_data(0x53); write_data(0x41); write_data(0x54);}voidwrite_xq7(ucharadd)//星期日{(diào) write_com(0x80+add); write_data(0x53); write_data(0x55); write_data(0x4e);}voidwrite_naozhong(ucharadd,uchardate){ ucharshi,ge; shi=date/10; ge=date%10; write_com(0x80+0x40+add);//地址指向第二行,在第二行寫 write_data(0x30+shi);// write_data(0x30+ge);}//////////////////按鍵設(shè)置////////////////////////////////////////按鍵1設(shè)置,光標(biāo)設(shè)置//////voidkeyscan()//按鍵控制函數(shù){ if(s1==0)//按鍵1 { delay(5);//按下消抖 if(s1==0) { s1num++;//s1num1是按鍵1的標(biāo)志變量,表示按鍵1按下的次數(shù) while(!s1);//按鍵彈起時(shí)消抖 if(s1num==1) { TR0=0;//時(shí)間停止走 write_com(0x80+0x40+8);//按鍵1按下時(shí),光標(biāo)顯示位置第二行12位 write_com(0x0f);//光標(biāo)在秒個(gè)位閃爍,調(diào)秒 } if(s1num==2) { write_com(0x80+0x40+5);//按鍵1按下第二次,光標(biāo)在分個(gè)位閃爍,調(diào)分 } if(s1num==3) { write_com(0x80+0x40+2);//按鍵1按下第三次,光標(biāo)在時(shí)位閃爍,調(diào)時(shí) } if(s1num==4) { write_com(0x80+4);//按鍵1按下第四次,光標(biāo)在年位閃爍,調(diào)年 } if(s1num==5) { write_com(0x80+7);//按鍵1按下第五次,光標(biāo)在月個(gè)位閃爍,調(diào)月 } if(s1num==6) { write_com(0x80+10);//按鍵1按下第六次,光標(biāo)在日個(gè)位閃爍,調(diào)日 } if(s1num==7) { write_com(0x80+12);//按鍵1按下第七次,光標(biāo)在星期個(gè)位閃爍,調(diào)星期 }if(s1num==8){ write_com(0x80+0x40+12); } if(s1num==9){ write_com(0x80+0x40+15); } if(s1num==10) { s1num=0;//重新回到開始的位置 write_com(0x0c);//光標(biāo)按下第七次,光標(biāo)回到秒個(gè)位, TR0=1;////////////////時(shí)間開始走。 } } } //////////////////////按鍵2設(shè)置,增加///////////////// if(s1num!=0)//按鍵按下執(zhí)行以下操作,按鍵2的設(shè)置 { if(s2==0)//按鍵2的作用為按下時(shí)使想要調(diào)整的時(shí)分秒,年月日等數(shù)值增加 { delay(5); if(s2==0) { while(!s2); if(s1num==1) { miao++; if(miao==60) miao=0; write_sfm(7,miao);//刷新屏幕,將新的秒的值顯示出來,其中秒的位置為0X80+0X40+8,從此位置開始寫新的秒值 write_com(0x80+0x40+8); } if(s1num==2) { fen++; if(fen==60) fen=0; write_sfm(4,fen);//刷新屏幕,將新的分的值顯示出來,其中分的位置為0X80+0X40+5,從此位置開始寫新的分值 write_com(0x80+0x40+5); } if(s1num==3) { shi++; if(shi==24) { shi=0; write_sfm(1,shi); write_com(0x80+0x40+2);//刷新屏幕,將新的時(shí)的值顯示出來,其中時(shí)的位置為0X80+0X40+2,從此位置開始寫新的時(shí)值? } } if(s1num==4) { nian++; write_nian(1,nian);//刷新屏幕,將新的年的值顯示出來,其中年的位置為0X80+4,從此位置開始寫新的年值 write_com(0x80+4); } if(s1num==5) { yue++; if(yue==13) yue=1; write_nyr(6,yue);//刷新屏幕,將新的月的值顯示出來,其中月的位置為0X80+7,從此位置開始寫新的月值 write_com(0x80+7); } if(s1num==6) { ri++; if(yue==2&&(nian%4==0)&&ri==29)ri=1;//閏年2月天數(shù)計(jì)算if(yue==2&&(nian%4!=0)&&ri==30)ri=1;//平年2月if((yue==4||yue==6||yue==9||yue==11)&&ri==31)ri=1;//4,6,9,11月計(jì)算elseif(ri==32)ri=1;//1,3,5,7,8,10,12月天數(shù)計(jì)算 write_nyr(9,ri);//刷新屏幕,將新的日的值顯示出來,其中日的位置為0X80+10,從此位置開始寫新的日值 write_com(0x80+10); } if(s1num==7) { xq++; if(xq%7==0) write_xq1(12); if(xq%7==1) write_xq2(12); if(xq%7==2) write_xq4(12); if(xq%7==3) write_xq3(12); if(xq%7==4) write_xq5(12); if(xq%7==5) write_xq6(12); if(xq%7==6) write_xq7(12); write_com(0x80+12); } if(s1num==8) { Nshi++; if(Nshi==24) Nshi=0; write_naozhong(11,Nshi); write_com(0x80+0x40+11); } if(s1num==9) { Nfen++; if(Nfen==60) Nfen=0; write_naozhong(14,Nfen); write_com(0x80+0x40+14); } } } } ////////////////////按鍵3的設(shè)置,減少////////////////////if(s1num!=0)//按鍵按下執(zhí)行以下操作,按鍵3的設(shè)置 { if(s3==0)//按鍵3的作用是按下時(shí)使想要調(diào)整的時(shí)分秒,年月日等數(shù)值減少 { delay(5); if(s3==0) { while(!s3); if(s1num==1) { miao-—; if(miao==—1) { miao=59; } write_sfm(7,miao); write_com(0x80+0x40+8); } if(s1num==2) { fen-—; if(fen==-1) fen=59; write_sfm(4,fen); write_com(0x80+0x40+5); } if(s1num==3) { shi-—; if(shi==-1) shi=23; write_sfm(1,shi); write_com(0x80+0x40+2); } if(s1num==4) { nian——; write_nian(1,nian); write_com(0x80+4); } if(s1num==5) { yue—-; if(yue==0) yue=12; write_nyr(6,yue); write_com(0x80+7); } if(s1num==6) { ri—-; if(yue==2&&(nian%4==0)&&ri==0)ri=28;if(yue==2&&(nian%4!=0)&&ri==0)ri=29;if((yue==4||yue==6||yue==9||yue==11)&&ri==0)ri=30;elseif(ri==0)ri=31; write_nyr(9,ri); write_com(0x80+10); }if(s1num==8) { Nshi——; if(Nshi<0) Nshi=23; write_naozhong(11,Nshi); write_com(0x80+0x40+11); } if(s1num==9) { Nfen——; if(Nfen<0) { Nfen=59; write_naozhong(14,Nfen); write_com(0x80+0x40+14); } } } } }//////////////////按鍵4的設(shè)置,退出////////////////// if(s4==0){ delay(5); if(s4==0) { while(!s4); if(s1num<=9&&s1num!=0) { s1num=0; TR0=1; write_com(0x0c); } if(Nshi==shi&&Nfen==fen)/////停止鬧鐘 { clock=0; speaker=1; } } }}voidalarm(){if(Nfen!=fen)clock=1;if(clock==1){ if(Nshi==shi&&Nfen==fen){ if(count==0)//設(shè)置蜂鳴器響的拼率為一秒一次,0為響 speaker=0; if(count==10) speaker=1; }}}////////////////////主函數(shù)/////////////////////////voidmain(){ init(); while(1) { alarm(); keyscan(); if(count==20)//定時(shí)器計(jì)滿值進(jìn)入中斷20次,時(shí)長(zhǎng)20*50000=1秒 { count=0; miao++; if(miao==60) { miao=0; fen+

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論