版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 實(shí)時(shí)日歷時(shí)鐘顯示系統(tǒng)的制作</p><p><b> 一、背景及意義</b></p><p> 在當(dāng)前繁忙的生活,學(xué)習(xí),工作中,時(shí)間與每個(gè)人都有密切的關(guān)系,每個(gè)人都受到時(shí)間的影響,隨著生活水平的提高,傳統(tǒng)時(shí)鐘已不能滿足人們的需求,因此實(shí)時(shí)日歷時(shí)鐘面市了,應(yīng)用于日常日歷時(shí)間顯示方面,并得到廣泛推廣。</p><p>
2、本設(shè)計(jì)的實(shí)時(shí)日歷時(shí)鐘顯示系統(tǒng),共可以顯示計(jì)時(shí)萬(wàn)年,最小時(shí)間單位是1s;其基本功能如下:</p><p> (一)在51單片機(jī)系統(tǒng)中設(shè)置、獲取、記錄實(shí)時(shí)的日歷時(shí)鐘信息并通過(guò)LCD顯示。</p><p> (二)能夠進(jìn)行長(zhǎng)時(shí)間的記錄,并且存儲(chǔ)的時(shí)間信息在掉電情況下能長(zhǎng)期保存。</p><p> (三)初始的時(shí)間信息用戶可用鍵盤輸入來(lái)設(shè)置。</p>
3、<p><b> 二、系統(tǒng)分析</b></p><p> 設(shè)計(jì)出具鍵盤輸入?yún)?shù)設(shè)置的時(shí)間、處理、顯示,并且可在線鍵盤參數(shù)設(shè)置、定時(shí)檢測(cè)、顯示的實(shí)時(shí)日歷顯示系統(tǒng)。整個(gè)系統(tǒng)的設(shè)計(jì)包括電路設(shè)計(jì)和軟件設(shè)計(jì),電路的設(shè)計(jì)只須知道所需的硬件即可,因?yàn)檎麄€(gè)電路被集中到一個(gè)模板上,只須設(shè)計(jì)出程序輸入單片機(jī)中,安在模板上即可工作。軟件則須根據(jù)所要的硬件寫出日歷工作的程序即可 。</p&g
4、t;<p> (一)根據(jù)設(shè)計(jì)要求確定系統(tǒng)方案,給出系統(tǒng)方框圖</p><p><b> 三、系統(tǒng)硬件設(shè)計(jì)</b></p><p> 根據(jù)實(shí)時(shí)日歷時(shí)間顯示系統(tǒng)顯示的要求,本系統(tǒng)的設(shè)計(jì)主要包括以下幾個(gè)部分,矩陣鍵盤模塊,lcd1602液晶顯示器,數(shù)據(jù)儲(chǔ)存模塊,處理模塊以及蜂鳴器模塊組成,下面我將逐一介紹。</p><p> 矩
5、陣鍵盤模塊:用于調(diào)節(jié)時(shí)間和日期</p><p> S9:時(shí)間功能鍵與P3.0相連</p><p> S13:增加鍵與P3.1相連</p><p> S17:減少鍵與P3.2相連</p><p> S9:日期功能鍵與P3.3相連</p><p> RD:置低電平,按鍵有效</p><p>
6、; LCD1602液晶顯示模塊:顯示時(shí)間和日期</p><p> LCD1602液晶顯示器是本系統(tǒng)的一個(gè)主要部分,由它實(shí)時(shí)顯示時(shí)間日歷, </p><p> RS:讀控制與P3.5相連</p><p> WR:寫控制與P3.6相連</p><p> D0-D7:數(shù)據(jù)端口</p><p> AT24C02:數(shù)
7、據(jù)存儲(chǔ)芯片,用于斷電存儲(chǔ)數(shù)據(jù)。</p><p> SCL:控制總線與P2.1相連</p><p> SDA:數(shù)據(jù)總線與P2.0相連</p><p> 主控電路STC89C52模塊:作為主控芯片,并用其內(nèi)部定時(shí)器計(jì)時(shí)。</p><p> P0,P1,P2,P3四個(gè)IO口,用于接收和傳送地址與數(shù)據(jù);其中P3口有第二功能;</p>
8、;<p><b> RES:硬件復(fù)位鍵</b></p><p> 蜂鳴器模塊:發(fā)出滴的響聲,表示有按鍵按下。</p><p> FM:蜂鳴器控制接口,與P2.3相接,低電平有效。</p><p><b> 四、系統(tǒng)軟件設(shè)計(jì)</b></p><p> 軟件部分則需要DS1302
9、的運(yùn)行程序,鍵盤掃描的相關(guān)程序,液晶寫入相關(guān)程序,還有主程序,最后把各個(gè)程序組合在一起。</p><p><b> (一)總體設(shè)計(jì)思想</b></p><p> ?。ǘ?各子程序的功能及設(shè)計(jì)要點(diǎn)</p><p> 本系統(tǒng)的程序設(shè)計(jì)主要包括初始化函數(shù)模塊,鍵盤掃描子程序,延時(shí)子程序以及液晶顯示子程序幾部分組成。初始化子程序主要是初始,鍵盤掃
10、描子程序主要負(fù)責(zé)對(duì)按鍵的處理響應(yīng),延時(shí)子程序是不可少的,可以給硬件足夠時(shí)間響應(yīng),液晶顯示子程序是時(shí)間顯示時(shí)候所用到的,反復(fù)調(diào)用。</p><p> 這部分內(nèi)容放在附錄中詳細(xì)解說(shuō),詳見(jiàn)附錄一,</p><p><b> 五、結(jié)束語(yǔ)</b></p><p> 經(jīng)過(guò)幾周的不斷調(diào)試更改再調(diào)試,最終得到了完整的成功的一個(gè)實(shí)時(shí)日歷時(shí)鐘顯示系統(tǒng)的系統(tǒng)。
11、在次過(guò)程中遇到了各種各樣的問(wèn)題,也采取了不同的處理方法。</p><p> 這一點(diǎn)我體會(huì)是十分深刻。例如:前面提到的鍵盤輸入導(dǎo)致每次循環(huán)都得進(jìn)行一次參數(shù)設(shè)置的問(wèn)題,經(jīng)過(guò)每一個(gè)子程序的單獨(dú)運(yùn)行,發(fā)現(xiàn)都可以正常運(yùn)行,但融合到一起就出現(xiàn)問(wèn)題了。單步運(yùn)行,也沒(méi)發(fā)現(xiàn)問(wèn)題,一個(gè)一個(gè)子程序的屏蔽,找到了鍵盤輸入的問(wèn)題。于是解決辦法就如前說(shuō)產(chǎn)生出來(lái)了。</p><p> 此外,本次實(shí)時(shí)日歷時(shí)鐘顯示系統(tǒng)
12、設(shè)計(jì)具有閏年調(diào)節(jié),日期錯(cuò)誤調(diào)整等校正功能;按鍵自校正功能,防止誤按鍵等措施,能保證時(shí)間日期的正確運(yùn)行調(diào)節(jié);共能顯示萬(wàn)年的日歷,時(shí)間能正確地走秒運(yùn)行,但仍有其不足之處,其中走秒時(shí)間與真實(shí)走秒時(shí)間有一定的誤差.</p><p><b> 【參考文獻(xiàn)】</b></p><p> [1] 李廣弟等.《單片機(jī)基礎(chǔ)》[M].北京:航空航天大學(xué)出版社,2001</p>
13、;<p> [2]李朝青編.《單片機(jī)原理及接口技術(shù)》(簡(jiǎn)明修訂版).北京航空航天大學(xué)出版社,1998</p><p> [3]馮克.《MCS-51單片機(jī)實(shí)用子程序及其應(yīng)用實(shí)例》.黑龍江科學(xué)技術(shù)出版社,1990</p><p> [4]楊欣榮等.《智能儀器原理、設(shè)計(jì)與發(fā)展》.中南大學(xué)出版社,2003</p><p> [5]孫傳友等.《感測(cè)技術(shù)基
14、礎(chǔ)》. 電子工業(yè)出版社,2001</p><p> [6]王福瑞等.《單片微機(jī)測(cè)控系統(tǒng)設(shè)計(jì)大全》.北京航空航天大學(xué)出版社,1999</p><p><b> 附錄1</b></p><p><b> 源程序:</b></p><p> /***************************
15、********</p><p><b> 功能介紹:</b></p><p> 有時(shí)間功能鍵,增加鍵,減少鍵,日期功能鍵;</p><p> 可根據(jù)不同鍵調(diào)節(jié)百年,年,月,日,時(shí),分,秒;</p><p> 具有閏年調(diào)節(jié),日期錯(cuò)誤調(diào)整等校正功能;</p><p> 具有按鍵自校正功能,
16、防止誤按鍵;</p><p> ***********************************/</p><p> #include<reg52.h>//包含52單片機(jī)頭文件</p><p> #define uchar unsigned char </p><p> #define uint unsigned i
17、nt</p><p> bit write=0; //寫24C02的標(biāo)志;</p><p> sbit sda=P2^0; </p><p> sbit scl=P2^1;</p><p> void delay0()</p><p><
18、;b> { ;; }</b></p><p> void start() //開始信號(hào)</p><p><b> {</b></p><p><b> sda=1;</b></p><p><b> delay0();</b></p>
19、<p><b> scl=1;</b></p><p><b> delay0();</b></p><p><b> sda=0;</b></p><p><b> delay0();</b></p><p><b>
20、}</b></p><p> void stop() //停止</p><p><b> {</b></p><p><b> sda=0;</b></p><p><b> delay0();</b></p><p><b
21、> scl=1;</b></p><p><b> delay0();</b></p><p><b> sda=1;</b></p><p><b> delay0();</b></p><p><b> }</b></
22、p><p> void respons() //應(yīng)答</p><p><b> {</b></p><p><b> uchar i;</b></p><p><b> scl=1;</b></p><p><b> delay0();
23、</b></p><p> while((sda==1)&&(i<250))i++;</p><p><b> scl=0;</b></p><p><b> delay0();</b></p><p><b> }</b></p
24、><p> void init_24c02()//IIC初始化函數(shù)</p><p><b> {</b></p><p><b> sda=1;</b></p><p><b> delay0();</b></p><p><b> sc
25、l=1;</b></p><p><b> delay0();</b></p><p><b> }</b></p><p> void write_byte(uchar date)//寫一個(gè)字節(jié)函數(shù)</p><p><b> {</b></p>
26、<p> uchar i,temp;</p><p> temp=date;</p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p> temp=temp<<1;</p><p><b> sc
27、l=0;</b></p><p><b> delay0();</b></p><p><b> sda=CY;</b></p><p><b> delay0();</b></p><p><b> scl=1;</b></p&
28、gt;<p><b> delay0();</b></p><p><b> }</b></p><p><b> scl=0;</b></p><p><b> delay0();</b></p><p><b> sd
29、a=1;</b></p><p><b> delay0();</b></p><p><b> }</b></p><p> uchar read_byte()//讀一個(gè)字節(jié)函數(shù)</p><p><b> {</b></p><p>
30、; uchar i,k;</p><p><b> scl=0;</b></p><p><b> delay0();</b></p><p><b> sda=1;</b></p><p><b> delay0();</b></p>
31、;<p> for(i=0;i<8;i++)</p><p><b> {</b></p><p><b> scl=1;</b></p><p> delay0();</p><p> k=(k<<1)|sda;</p><p>
32、<b> scl=0;</b></p><p> delay0();</p><p><b> }</b></p><p><b> return k;</b></p><p><b> }</b></p><p>
33、void write_add(uchar address,uchar date)//指定地址寫一個(gè)字節(jié)</p><p><b> {</b></p><p><b> start();</b></p><p> write_byte(0xa0);</p><p> respons();<
34、;/p><p> write_byte(address);</p><p> respons();</p><p> write_byte(date);</p><p> respons();</p><p><b> stop();</b></p><p><
35、b> }</b></p><p> char read_add(uchar address)//指定地址讀一個(gè)字節(jié)</p><p><b> {</b></p><p> uchar date;</p><p><b> start();</b></p>&
36、lt;p> write_byte(0xa0);</p><p> respons();</p><p> write_byte(address);</p><p> respons();</p><p><b> start();</b></p><p> write_byte(
37、0xa1);</p><p> respons();</p><p> date=read_byte();</p><p><b> stop();</b></p><p> return date;</p><p><b> }</b></p>&l
38、t;p> sbit dula=P2^6; //定義鎖存器鎖存端</p><p> sbit wela=P2^7;</p><p> sbit rs=P3^5; //定義1602液晶RS端</p><p> sbit lcden=P3^4;//定義1602液晶LCDEN端</p><p> sbit rw=P3^6;</
39、p><p> sbit s1=P3^0; //定義按鍵--功能鍵</p><p> sbit s2=P3^1;//定義按鍵--增加鍵</p><p> sbit s3=P3^2;//定義按鍵--減小鍵</p><p> sbit s4=P3^3; //定義按鍵--riqi功能鍵</p><p> sb
40、it rd=P3^7;</p><p> sbit beep=P2^3; //定義蜂鳴器端</p><p> uchar count,s1num;</p><p> char miao,shi,fen;</p><p> uchar n,moon,d,t,s4num,m;</p><p> uchar cod
41、e table[]=" 2013-12-03 ";//定義初始上電時(shí)液晶默認(rèn)顯示狀態(tài)</p><p> void delay(uint z) //延時(shí)函數(shù)</p><p><b> {</b></p><p><b> uint x,y;</b></p><p> f
42、or(x=z;x>0;x--)</p><p> for(y=110;y>0;y--);</p><p><b> }</b></p><p> void di()//蜂鳴器發(fā)聲函數(shù)</p><p><b> {</b></p><p><b>
43、 beep=0;</b></p><p> delay(100);</p><p><b> beep=1;</b></p><p><b> }</b></p><p> void write_com(uchar com)//液晶寫命令函數(shù)</p><p&
44、gt;<b> {</b></p><p><b> rs=0;</b></p><p><b> rw=0;</b></p><p><b> lcden=0;</b></p><p><b> P0=com;</b>&l
45、t;/p><p><b> delay(5);</b></p><p><b> lcden=1;</b></p><p><b> delay(5);</b></p><p><b> lcden=0;</b></p><p&g
46、t;<b> }</b></p><p> void write_date(uchar date)//液晶寫數(shù)據(jù)函數(shù)</p><p><b> {</b></p><p><b> rs=1;</b></p><p><b> rw=0;</b>
47、</p><p><b> lcden=0;</b></p><p><b> P0=date;</b></p><p><b> delay(5);</b></p><p><b> lcden=1;</b></p><p&g
48、t;<b> delay(5);</b></p><p><b> lcden=0;</b></p><p><b> }</b></p><p> void write_sfm(uchar add,uchar date)//寫時(shí)分秒函數(shù)</p><p><b&
49、gt; {</b></p><p> uchar shi,ge;</p><p> shi=date/10;//分解一個(gè)2位數(shù)的十位和個(gè)位</p><p> ge=date%10;</p><p> write_com(0x80+0x40+add);//設(shè)置顯示位置</p><p> write
50、_date(0x30+shi);//送去液晶顯示十位</p><p> write_date(0x30+ge); //送去液晶顯示個(gè)位</p><p><b> }</b></p><p> void write_nyr(uchar add,uchar date)//寫年月日函數(shù)</p><p><b>
51、 {</b></p><p> uchar shi,ge;</p><p> shi=date/10;//分解一個(gè)2位數(shù)的十位和個(gè)位</p><p> ge=date%10;</p><p> write_com(0x80+add);//設(shè)置顯示位置</p><p> write_date(0x
52、30+shi);//送去液晶顯示十位</p><p> write_date(0x30+ge); //送去液晶顯示個(gè)位</p><p><b> }</b></p><p> void init()//初始化函數(shù)</p><p><b> {</b></p><p>
53、 uchar num;</p><p> rd=0; //軟件將矩陣按鍵第4列一端置低用以分解出獨(dú)立按鍵</p><p> dula=0;//關(guān)閉兩鎖存器鎖存端,防止操作液晶時(shí)數(shù)碼管會(huì)出亂碼</p><p><b> wela=0;</b></p><p><b> lcden=0;</b&g
54、t;</p><p> fen=0; //初始化種變量值</p><p><b> miao=0;</b></p><p><b> shi=0;</b></p><p><b> m=0;</b></p><p><b> moon
55、=0;</b></p><p><b> d=0;</b></p><p><b> n=0;</b></p><p><b> s4num=0;</b></p><p><b> count=0;</b></p><
56、;p><b> s1num=0;</b></p><p> init_24c02();</p><p> write_com(0x38);//初始化1602液晶</p><p> write_com(0x0c);</p><p> write_com(0x06);</p><p>
57、 write_com(0x01);</p><p> write_com(0x80);//設(shè)置顯示初始坐標(biāo)</p><p> for(num=0;num<13;num++)//顯示年月日</p><p><b> {</b></p><p> write_date(table[num]);</p&g
58、t;<p><b> delay(5);</b></p><p><b> }</b></p><p> write_com(0x80+0x40+6);//寫出時(shí)間顯示部分的兩個(gè)冒號(hào)</p><p> write_date(':');</p><p><b
59、> delay(5);</b></p><p> write_com(0x80+0x40+9);</p><p> write_date(':');</p><p><b> delay(5);</b></p><p> miao=read_add(1);//首次上電從AT24
60、C02中讀取出存儲(chǔ)的數(shù)據(jù)</p><p> fen=read_add(2);</p><p> shi=read_add(3);</p><p> d=read_add(4);//首次上電從AT24C02中讀取出存儲(chǔ)的數(shù)據(jù)</p><p> moon=read_add(5);</p><p> n=read_
61、add(6);</p><p> m=read_add(7);</p><p> write_nyr(10,d);//分別送去液晶顯示</p><p> write_nyr(7,moon);</p><p> write_nyr(4,n);</p><p> write_nyr(2,m);</p>
62、<p> write_sfm(10,miao);//分別送去液晶顯示</p><p> write_sfm(7,fen);</p><p> write_sfm(4,shi);</p><p> TMOD=0x01;//設(shè)置定時(shí)器0工作模式1</p><p> TH0=(65536-50000)/256;//定時(shí)器裝初
63、值</p><p> TL0=(65536-50000)%256;</p><p> EA=1;//開總中斷</p><p> ET0=1;//開定時(shí)器0中斷</p><p> TR0=1;//啟動(dòng)定時(shí)器0</p><p><b> }</b></p><p&g
64、t; void keyscan()//按鍵掃描函數(shù)</p><p><b> {</b></p><p> if(s1==0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> i
65、f(s1==0)//確認(rèn)功能鍵被按下</p><p><b> {</b></p><p> s1num++;//功能鍵按下次數(shù)記錄</p><p> while(!s1);//釋放確認(rèn)</p><p> di();//每當(dāng)有按鍵釋放蜂鳴器發(fā)出滴聲</p><p> s4num=0;
66、//終止日期調(diào)節(jié)</p><p> write_com(0x0c);//光標(biāo)不再閃爍</p><p> if(s1num==1)//第一次被按下時(shí)</p><p><b> {</b></p><p> TR0=0; //關(guān)閉定時(shí)器</p><p> write_com(0x80+0x
67、40+10);//光標(biāo)定位到秒位置</p><p> write_com(0x0f); //光標(biāo)開始閃爍</p><p><b> }</b></p><p> if(s1num==2)//第二次按下光標(biāo)閃爍定位到分鐘位置</p><p><b> {</b></p><
68、p> write_com(0x80+0x40+7);write_com(0x0f);</p><p><b> }</b></p><p> if(s1num==3)//第三次按下光標(biāo)閃爍定位到小時(shí)位置</p><p><b> {</b></p><p> write_com(0x
69、80+0x40+4);write_com(0x0f);</p><p><b> }</b></p><p> if(s1num==4)//第四次按下</p><p><b> {</b></p><p> s1num=0;//記錄按鍵數(shù)清零</p><p> wr
70、ite_com(0x0c);//取消光標(biāo)閃爍</p><p> TR0=1;//啟動(dòng)定時(shí)器使時(shí)鐘開始走</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> i
71、f(s1num!=0)//只有功能鍵被按下后,增加和減小鍵才有效</p><p><b> {</b></p><p><b> if(s2==0)</b></p><p><b> {</b></p><p><b> delay(5);</b>
72、</p><p> if(s2==0)//增加鍵確認(rèn)被按下</p><p><b> {</b></p><p> while(!s2);//按鍵釋放</p><p> di();//每當(dāng)有按鍵釋放蜂鳴器發(fā)出滴聲</p><p> if(s1num==1)//若功能鍵第一次按下</
73、p><p><b> {</b></p><p> miao++; //則調(diào)整秒加1</p><p> if(miao==60)//若滿60后將清零</p><p><b> miao=0;</b></p><p> write_sfm(10,miao);//每調(diào)節(jié)一次
74、送液晶顯示一下</p><p> write_com(0x80+0x40+10);//顯示位置重新回到調(diào)節(jié)處</p><p> write_add(1,miao);//數(shù)據(jù)改變立即存入24C02</p><p><b> }</b></p><p> if(s1num==2)//若功能鍵第二次按下</p&
75、gt;<p><b> {</b></p><p> fen++;//則調(diào)整分鐘加1</p><p> if(fen==60)//若滿60后將清零</p><p><b> fen=0;</b></p><p> write_sfm(7,fen);//每調(diào)節(jié)一次送液晶顯示一下
76、</p><p> write_com(0x80+0x40+7);//顯示位置重新回到調(diào)節(jié)處</p><p> write_add(2,fen);//數(shù)據(jù)改變立即存入24C02</p><p><b> }</b></p><p> if(s1num==3)//若功能鍵第三次按下</p><p
77、><b> {</b></p><p> shi++;//則調(diào)整小時(shí)加1</p><p> if(shi==24)//若滿24后將清零</p><p><b> shi=0;</b></p><p> write_sfm(4,shi);//每調(diào)節(jié)一次送液晶顯示一下</p>
78、<p> write_com(0x80+0x40+4);//顯示位置重新回到調(diào)節(jié)處</p><p> write_add(3,shi);//數(shù)據(jù)改變立即存入24C02</p><p><b> }</b></p><p><b> }</b></p><p><b>
79、 }</b></p><p><b> if(s3==0)</b></p><p><b> {</b></p><p><b> delay(5);</b></p><p> if(s3==0)//確認(rèn)減小鍵被按下</p><p>
80、;<b> {</b></p><p> while(!s3);//按鍵釋放</p><p> di();//每當(dāng)有按鍵釋放蜂鳴器發(fā)出滴聲</p><p> if(s1num==1)//若功能鍵第一次按下</p><p><b> {</b></p><p> m
81、iao--;//則調(diào)整秒減1</p><p> if(miao==-1)//若減到負(fù)數(shù)則將其重新設(shè)置為59</p><p><b> miao=59;</b></p><p> write_sfm(10,miao);//每調(diào)節(jié)一次送液晶顯示一下</p><p> write_com(0x80+0x40+10);/
82、/顯示位置重新回到調(diào)節(jié)處</p><p> write_add(1,miao);//數(shù)據(jù)改變立即存入24C02</p><p><b> }</b></p><p> if(s1num==2)//若功能鍵第二次按下</p><p><b> {</b></p><p>
83、; fen--;//則調(diào)整分鐘減1</p><p> if(fen==-1)//若減到負(fù)數(shù)則將其重新設(shè)置為59</p><p><b> fen=59;</b></p><p> write_sfm(7,fen);//每調(diào)節(jié)一次送液晶顯示一下</p><p> write_com(0x80+0x40+7);//
84、顯示位置重新回到調(diào)節(jié)處</p><p> write_add(2,fen);//數(shù)據(jù)改變立即存入24C02</p><p><b> }</b></p><p> if(s1num==3)//若功能鍵第二次按下</p><p><b> {</b></p><p>
85、 shi--;//則調(diào)整小時(shí)減1</p><p> if(shi==-1)//若減到負(fù)數(shù)則將其重新設(shè)置為23</p><p><b> shi=23;</b></p><p> write_sfm(4,shi);//每調(diào)節(jié)一次送液晶顯示一下</p><p> write_com(0x80+0x40+4);//顯示
86、位置重新回到調(diào)節(jié)處</p><p> write_add(3,shi);//數(shù)據(jù)改變立即存入24C02</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b&
87、gt; }</b></p><p><b> }</b></p><p> /************************</p><p><b> 時(shí)間調(diào)整</b></p><p> ************************/</p><p&g
88、t;<b> //閏年判斷</b></p><p> uchar nian(uchar n)</p><p><b> {</b></p><p><b> uchar y;</b></p><p> if(n%400==0)</p><p>
89、<b> {</b></p><p><b> y=1;</b></p><p><b> }</b></p><p> else if(n%100==0)</p><p><b> {</b></p><p><b
90、> y=0;</b></p><p><b> }</b></p><p> else if(n%4==0)</p><p><b> {</b></p><p><b> y=1;</b></p><p><b>
91、 }</b></p><p><b> else y=0;</b></p><p><b> return y;</b></p><p><b> }</b></p><p><b> //月天數(shù)判斷</b></p>&
92、lt;p> uchar m_tian(uchar moon)</p><p><b> {</b></p><p> uchar y,tian,nm;</p><p> nm=n+m*100;</p><p> y=nian(nm);</p><p> if(moon==2)&l
93、t;/p><p><b> {</b></p><p><b> if(y==0)</b></p><p><b> tian=28;</b></p><p> else tian=29;</p><p><b> }</b>
94、</p><p> else if(moon==4||moon==6||moon==9||moon==11)</p><p><b> {</b></p><p><b> tian=30;</b></p><p><b> }</b></p><p
95、> else tian=31;</p><p> return tian;</p><p><b> }</b></p><p><b> //鍵盤掃描1</b></p><p> void keyscan1()</p><p><b> {<
96、;/b></p><p> if(s4==0)//日期功能鍵實(shí)現(xiàn)</p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> if(s4==0)</b></p><p><b&
97、gt; {</b></p><p> s4num++;//s4按下的次數(shù)</p><p> while(!s4);</p><p><b> di();</b></p><p> s1num=0;//終止時(shí)間調(diào)節(jié)</p><p> write_com(0x0c);//光標(biāo)不
98、再閃爍</p><p> switch(s4num)</p><p><b> {</b></p><p><b> case 1:</b></p><p><b> {</b></p><p><b> TR0=0;</b&g
99、t;</p><p> write_com(0x80+10);</p><p> write_com(0x0f);//光標(biāo)顯示并閃爍</p><p><b> break;</b></p><p><b> }</b></p><p> case 2:write_c
100、om(0x80+7);write_com(0x0f);break;</p><p> case 3:write_com(0x80+4);write_com(0x0f);break;</p><p> case 4:write_com(0x80+2);write_com(0x0f);break;</p><p><b> case 5:</b&g
101、t;</p><p><b> {</b></p><p><b> s4num=0;</b></p><p> write_com(0x0c);//光標(biāo)不再閃爍</p><p><b> TR0=1;</b></p><p><b>
102、 break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b>
103、 //日期調(diào)整</b></p><p> if(s4num!=0)</p><p><b> {</b></p><p><b> if(s2==0)</b></p><p><b> {</b></p><p><b>
104、 delay(5);</b></p><p> if(s2==0)//時(shí)間增加調(diào)整</p><p><b> {</b></p><p> while(!s2);</p><p><b> di();</b></p><p> if(s4num==1)
105、</p><p><b> {</b></p><p><b> d++;</b></p><p> t=m_tian(moon);</p><p><b> if(d>t)</b></p><p><b> d=1;</
106、b></p><p> write_nyr(10,d);</p><p> write_com(0x80+10);</p><p> write_add(4,d);</p><p><b> }</b></p><p> if(s4num==2)</p><p&
107、gt;<b> {</b></p><p><b> moon++;</b></p><p> if(moon==13)</p><p><b> moon=1;</b></p><p> write_nyr(7,moon);</p><p>
108、 write_com(0x80+7);</p><p> write_add(5,moon);</p><p><b> }</b></p><p> if(s4num==3)</p><p><b> {</b></p><p><b> n++;&l
109、t;/b></p><p> if(n==100)</p><p><b> n=0;</b></p><p> write_nyr(4,n);</p><p> write_com(0x80+4);</p><p> write_add(6,n);</p><
110、p><b> }</b></p><p> if(s4num==4)</p><p><b> {</b></p><p><b> m++;</b></p><p> if(m==100)</p><p><b> m=0;
111、</b></p><p> write_nyr(2,m);</p><p> write_com(0x80+2);</p><p> write_add(7,m);</p><p><b> }</b></p><p><b> }</b></p
112、><p><b> }</b></p><p> if(s3==0)//時(shí)間減少調(diào)整</p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> if(s3==0)</b&g
113、t;</p><p><b> {</b></p><p> while(!s3);</p><p><b> di();</b></p><p> if(s4num==1)</p><p><b> {</b></p><
114、p> t=m_tian(moon);</p><p><b> if(d==1)</b></p><p><b> d=t+1;</b></p><p><b> d--;</b></p><p> write_nyr(10,d);</p><
115、;p> write_com(0x80+10);</p><p> write_add(4,d);</p><p><b> }</b></p><p> if(s4num==2)</p><p><b> {</b></p><p> if(moon==1)
116、</p><p><b> moon=13;</b></p><p><b> moon--;</b></p><p> write_nyr(7,moon);</p><p> write_com(0x80+7);</p><p> write_add(5,moon
117、);</p><p><b> }</b></p><p> if(s4num==3)</p><p><b> {</b></p><p><b> if(n==0)</b></p><p><b> n=100;</b>
118、;</p><p><b> n--;</b></p><p> write_nyr(4,n);</p><p> write_com(0x80+4);</p><p> write_add(6,n);</p><p><b> }</b></p>&
119、lt;p> if(s4num==4)</p><p><b> {</b></p><p><b> if(m==0)</b></p><p><b> m=100;</b></p><p><b> m--;</b></p>
120、<p> write_nyr(2,m);</p><p> write_com(0x80+2);</p><p> write_add(7,m);</p><p><b> }</b></p><p><b> }</b></p><p><b&
121、gt; }</b></p><p><b> }</b></p><p><b> }</b></p><p> void main()//主函數(shù)</p><p><b> {</b></p><p> init();//首先初始
122、化各數(shù)據(jù)</p><p> while(1)//進(jìn)入主程序大循環(huán)</p><p><b> {</b></p><p> keyscan();//不停的檢測(cè)按鍵是否被按下</p><p> keyscan1();</p><p><b> }</b></p&g
123、t;<p><b> }</b></p><p> void timer0() interrupt 1//定時(shí)器0中斷服務(wù)程序</p><p><b> {</b></p><p> TH0=(65536-50000)/256;//再次裝定時(shí)器初值</p><p> TL0=
124、(65536-50000)%256;</p><p> count++;//中斷次數(shù)累加</p><p> if(count==18) //20次50毫秒為1秒</p><p><b> {</b></p><p><b> count=0;</b></p><p&g
125、t;<b> miao++;</b></p><p> if(miao==60)//秒加到60則進(jìn)位分鐘</p><p><b> {</b></p><p> miao=0;//同時(shí)秒數(shù)清零</p><p><b> fen++;</b></p>&l
126、t;p> if(fen==60)//分鐘加到60則進(jìn)位小時(shí)</p><p><b> {</b></p><p> fen=0;//同時(shí)分鐘數(shù)清零</p><p><b> shi++;</b></p><p> if(shi==24)//小時(shí)加到24則小時(shí)清零</p>
127、<p><b> {</b></p><p><b> shi=0;</b></p><p><b> d++;</b></p><p> t=m_tian(moon);</p><p><b> if(d>t)</b><
128、/p><p><b> {</b></p><p><b> d=1;</b></p><p><b> moon++;</b></p><p> if(moon==13)</p><p><b> {</b></p&g
129、t;<p><b> moon=1;</b></p><p><b> n++;</b></p><p> if(n==100)</p><p><b> {</b></p><p><b> n=0;</b></p>
130、<p><b> m++;</b></p><p> if(m==100)</p><p><b> m=0;</b></p><p> write_nyr(2,m);//bainian若變化則重新寫入</p><p> write_add(7,m);//數(shù)據(jù)改變立即存入24C
131、02</p><p><b> }</b></p><p> write_nyr(4,n);//nian若變化則重新寫入</p><p> write_add(6,n);//數(shù)據(jù)改變立即存入24C02</p><p><b> }</b></p><p> writ
132、e_nyr(7,moon);//yue若變化則重新寫入</p><p> write_add(5,moon);//數(shù)據(jù)改變立即存入24C02</p><p><b> }</b></p><p> write_nyr(10,d);//tian若變化則重新寫入</p><p> write_add(4,d);//數(shù)
133、據(jù)改變立即存入24C02</p><p><b> }</b></p><p> write_sfm(4,shi);//小時(shí)若變化則重新寫入</p><p> write_add(3,shi);//數(shù)據(jù)改變立即存入24C02</p><p><b> }</b></p><
134、;p> write_sfm(7,fen);//分鐘若變化則重新寫入</p><p> write_add(2,fen);//數(shù)據(jù)改變立即存入24C02</p><p><b> }</b></p><p> write_sfm(10,miao);//秒若變化則重新寫入</p><p> write_ad
135、d(1,miao);//數(shù)據(jù)改變立即存入24C02</p><p><b> }</b></p><p><b> }</b></p><p> 智能儀器設(shè)計(jì)實(shí)習(xí)心得</p><p> 此次設(shè)計(jì)主要能夠完成實(shí)時(shí)日歷時(shí)鐘顯示,實(shí)現(xiàn)在單片機(jī)系統(tǒng)中設(shè)置、獲取、記錄實(shí)時(shí)的日歷時(shí)鐘信息并通過(guò)LED顯
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 用lcd顯示實(shí)時(shí)日歷時(shí)鐘單片機(jī)課程設(shè)計(jì)
- 用lcd顯示實(shí)時(shí)日歷時(shí)鐘單片機(jī)課程設(shè)計(jì)
- ds1302時(shí)鐘數(shù)碼管課程設(shè)計(jì)--用數(shù)碼管顯示實(shí)時(shí)日歷時(shí)鐘的設(shè)計(jì)
- 開題報(bào)告帶實(shí)時(shí)日歷時(shí)鐘的溫度檢測(cè)系統(tǒng)的設(shè)計(jì)
- 基于ds1302實(shí)時(shí)日歷時(shí)鐘顯示系統(tǒng)畢業(yè)設(shè)計(jì)說(shuō)明書
- 日歷時(shí)鐘顯示系統(tǒng)畢業(yè)設(shè)計(jì)
- 實(shí)時(shí)日歷和時(shí)鐘的顯示開題報(bào)告
- 單片機(jī)畢業(yè)設(shè)計(jì)---實(shí)時(shí)日歷和時(shí)鐘顯示設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--電子日歷時(shí)鐘顯示器設(shè)計(jì)
- 實(shí)時(shí)日歷和時(shí)鐘顯示單片機(jī)畢業(yè)設(shè)計(jì)
- 電子信息工程畢業(yè)設(shè)計(jì)帶實(shí)時(shí)日歷時(shí)鐘的溫度檢測(cè)系統(tǒng)的設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)開題報(bào)告--單片機(jī)實(shí)時(shí)日歷和時(shí)鐘的顯示
- 單片機(jī)畢業(yè)設(shè)計(jì)開題報(bào)告---實(shí)時(shí)日歷和時(shí)鐘的顯示
- 外文翻譯---基于基于單片機(jī)進(jìn)行實(shí)時(shí)日歷和時(shí)鐘顯示設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)-基于51系列的單片機(jī)進(jìn)行的實(shí)時(shí)日歷和時(shí)鐘顯示設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于51系列的單片機(jī)進(jìn)行的實(shí)時(shí)日歷和時(shí)鐘顯示設(shè)計(jì)
- 課程設(shè)計(jì)--實(shí)時(shí)時(shí)鐘顯示例程設(shè)計(jì)
- 單片機(jī)畢業(yè)設(shè)計(jì)---基于51系列的單片機(jī)進(jìn)行的實(shí)時(shí)日歷和時(shí)鐘顯示設(shè)計(jì)
- 電子日歷的制作-課程設(shè)計(jì)
- 電子日歷的制作-課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論