以ATS單片機(jī)為核心的數(shù)字電子鐘控制器_第1頁
以ATS單片機(jī)為核心的數(shù)字電子鐘控制器_第2頁
以ATS單片機(jī)為核心的數(shù)字電子鐘控制器_第3頁
以ATS單片機(jī)為核心的數(shù)字電子鐘控制器_第4頁
以ATS單片機(jī)為核心的數(shù)字電子鐘控制器_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、一、設(shè)計(jì)題目:設(shè)計(jì)一個(gè)以AT89S51單片機(jī)為核心的數(shù)字電子鐘控制器,實(shí)現(xiàn)電子鐘的時(shí)間、日期交替顯示、鬧鐘功能,并可通過按鈕開關(guān)或鍵盤切換顯示內(nèi)容、調(diào)整參數(shù)、設(shè)置鬧鐘,在單片機(jī)實(shí)驗(yàn)板上模擬調(diào)試實(shí)現(xiàn)控制器的功能。二、設(shè)計(jì)目的:通過單片機(jī)應(yīng)用產(chǎn)品的設(shè)計(jì)與調(diào)試過程,鞏固課程所學(xué)理論知識(shí),初步了解單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)與調(diào)試的方法。三、設(shè)計(jì)要求:1開機(jī)自檢,檢查相關(guān)接口及數(shù)碼管顯示器、指示燈、蜂鳴器等外設(shè)是否正常.28位數(shù)碼管顯示器平常以一定的時(shí)間間隔、合適的格式顯示時(shí)間和日期信息,時(shí)間顯示時(shí)、分、秒;日期顯示年(20002099)、月、日;設(shè)置鬧鐘功能時(shí)顯示時(shí)、分、開/關(guān)狀態(tài).3可通過按鍵設(shè)定時(shí)間、日期

2、、鬧鐘等參數(shù)、手動(dòng)切換顯示.按鍵可用獨(dú)立式按鍵或行列式鍵盤實(shí)現(xiàn).設(shè)定參數(shù)過程有合適的方式指示當(dāng)前可修改的內(nèi)容。4對(duì)開關(guān)量輸入進(jìn)行軟件消抖動(dòng)處理,參數(shù)的設(shè)定有容錯(cuò)處理,如:小時(shí)不能超過23,日期中每月最大天數(shù)、閏年等.5用Protel設(shè)計(jì)可實(shí)現(xiàn)上述功能的控制器的原理圖(最小應(yīng)用系統(tǒng)).四、總體方案設(shè)計(jì)及說明:本設(shè)計(jì)電子時(shí)鐘系統(tǒng),主控芯片采用AT89S51芯片。配合軟件延時(shí)實(shí)現(xiàn)時(shí)、分、秒的計(jì)時(shí)。本系統(tǒng)設(shè)計(jì)采用此種軟件控制方法來實(shí)現(xiàn)計(jì)時(shí),通過定時(shí)器定時(shí)中斷,使時(shí)間緩存單元數(shù)據(jù)加一,提供系統(tǒng)時(shí)間。同時(shí)可以通過獨(dú)立鍵盤對(duì)電子時(shí)鐘開始計(jì)時(shí),暫停計(jì)時(shí)和結(jié)束計(jì)時(shí)的控制。單片機(jī)內(nèi)的數(shù)據(jù)通過并行I/O接口輸入輸出

3、。并驅(qū)動(dòng)八位LED數(shù)碼管(時(shí)、分、秒分別用2位數(shù)碼管顯示),動(dòng)態(tài)顯示數(shù)據(jù)。晶振及復(fù)位電路為單片機(jī)提供工作脈沖及復(fù)位信號(hào)。 五、系統(tǒng)資源分配說明:接口電路邏輯圖:使用定時(shí)計(jì)數(shù)器0,TMOD設(shè)置為0x01;晶振頻率11.0592MHz下,定時(shí)50ms的計(jì)數(shù)初值經(jīng)過計(jì)算為4c00H(21646080=4c00H),TH0設(shè)置為0x4c,TL0設(shè)置為0x00.五、軟件流程圖及說明:1.鬧鐘顯示開 始鬧鐘是否打開后6位數(shù)碼管分別顯示“-”、小時(shí)的2位、“-”分鐘的2位前2位數(shù)碼管顯示OP前2位數(shù)碼管顯示CL是否按鍵掃描,判斷有沒有按鍵,若有按鍵則退出鬧鐘顯示退 出鬧鐘顯示子程序,8個(gè)數(shù)碼管顯示已經(jīng)設(shè)置好

4、的鬧鐘時(shí)間,進(jìn)行按鍵掃描,判斷有沒有按鍵,若有就去執(zhí)行相應(yīng)的功能,日期顯示子程序和時(shí)間顯示子程序和鬧鐘顯示子程序類似。2.鍵盤子程序按鍵掃描: 功能掃描:開 始設(shè)置PC3PC0為輸入,PC7PC4為輸出,所有行(PC7PC4)置0,讀取列值設(shè)置PC3PC0為輸出,PC7PC4為輸入,所有列(PC3PC0)置0,讀取行值keyin=keyin_j|keyin_i;形成行列組合結(jié) 束開 始設(shè)置PC3PC0為輸入,PC7PC4為輸出,所有行(PC7PC4)置0,讀取鍵盤無鍵按下,返回0 有鍵按下,返回1結(jié) 束3。中斷子程序開 始設(shè)置定時(shí)50ms的初值為4c00H中斷20次,秒單元加160秒到?秒單元

5、清零,分單元加160分鐘到?分單元清零,時(shí)單元加124小時(shí)到?時(shí)單元清零,日單元加11個(gè)月到?日單元清零,月單元加11年到?月單元清零,年單元加1將小時(shí)(time.hour)除以10,商賦給77H(動(dòng)態(tài)顯示對(duì)應(yīng)的小時(shí)十位),余數(shù)賦給78H(動(dòng)態(tài)顯示對(duì)應(yīng)的小時(shí)個(gè)位)將分鐘(time.minute)除以10,商賦給7aH(動(dòng)態(tài)顯示對(duì)應(yīng)的小時(shí)十位),余數(shù)賦給7bH(動(dòng)態(tài)顯示對(duì)應(yīng)的小時(shí)個(gè)位)將秒(time.second)除以10,商賦給7dH(動(dòng)態(tài)顯示對(duì)應(yīng)的小時(shí)十位),余數(shù)賦給7eH(動(dòng)態(tài)顯示對(duì)應(yīng)的小時(shí)個(gè)位)INT0輸入低電平,打開鬧鐘結(jié) 束六、系統(tǒng)功能與操作說明:數(shù)字時(shí)鐘能顯示實(shí)時(shí)時(shí)間(HH-MMS

6、S)、日期(20YY.MM.DD)于LED數(shù)碼管,并可以修改時(shí)間、日期.可以設(shè)置鬧鐘,時(shí)間到時(shí),蜂鳴器會(huì)響起。按切換鍵可以在時(shí)間、日期、鬧鐘時(shí)間中切換。時(shí)間、日期、鬧鐘時(shí)間可調(diào),按外部中斷鍵時(shí)間暫停,進(jìn)入時(shí)間、日期、鬧鐘時(shí)間設(shè)置,此時(shí)可以矩陣鍵盤輸入時(shí)間日期,輸入完后確認(rèn)鍵時(shí)間按照設(shè)置的值接著走。鍵盤用行列式鍵盤,按鍵定義如下圖所示。主要的按鍵有:(1)數(shù)字鍵“0”“9”,用于設(shè)置時(shí)輸入時(shí)間和日期,正常工作時(shí)無效。(2)“時(shí)間設(shè)置”、“日期設(shè)置”、“鬧鐘設(shè)置”,用于進(jìn)入相應(yīng)功能的設(shè)置狀態(tài)。(3)“鬧鐘開關(guān)”在鬧鐘設(shè)置狀態(tài)時(shí),用于設(shè)置鬧鐘開或關(guān),正常工作時(shí),用于手動(dòng)關(guān)鬧鈴的聲音。(4)“確認(rèn)&q

7、uot;用于設(shè)置參數(shù)的確認(rèn),并檢查參數(shù)是否合理,如果符合要求,則參數(shù)有效;否則本次修改無效,保持原值。正常工作情況下按該鍵無操作.(5)“顯示切換”用于正常工作時(shí)手動(dòng)切換時(shí)間、日期的顯示。七、調(diào)試記錄:1、確定課程設(shè)計(jì)課題為數(shù)字電子鐘,并查找相關(guān)資料。2、熟悉實(shí)驗(yàn)板數(shù)碼管、兩個(gè)8255、鍵盤、LED等硬件資源的使用,弄清楚其對(duì)應(yīng)的地址。3、調(diào)試出可以掃描矩陣鍵盤輸入的數(shù)的程序,并在數(shù)碼管上顯示出來當(dāng)前按下的鍵值。4、調(diào)試出可以顯示時(shí)分秒和日期的時(shí)鐘程序,并可以通過4個(gè)按鍵進(jìn)行控制(分別為進(jìn)入退出時(shí)間設(shè)置、時(shí)增1、分增1、秒增1),并可以切換時(shí)間和日期。5、調(diào)試鬧鐘的顯示和設(shè)置程序,時(shí)間到了所設(shè)

8、置的時(shí)間時(shí)蜂鳴器響起。6、時(shí)間可以走,但只能通過在程序中給對(duì)應(yīng)時(shí)間日期字節(jié)地址預(yù)先設(shè)置初始值,時(shí)鐘根據(jù)該初始時(shí)間接著走,不能通過矩陣鍵盤輸入時(shí)間日期.最后查閱資料并詢問同學(xué)終于解決了這個(gè)問題.7、對(duì)整個(gè)程序做進(jìn)一步優(yōu)化處理,使其更穩(wěn)定,修改其中的一些瑕疵,加上注釋,方便以后讀程序。八、實(shí)驗(yàn)設(shè)計(jì)總結(jié):通過努力終于設(shè)計(jì)出一個(gè)以AT89S51單片機(jī)為核心的數(shù)字電子鐘控制器,實(shí)現(xiàn)電子鐘的時(shí)間、日期交替顯示、鬧鐘功能,并可通過按鈕開關(guān)或鍵盤切換顯示內(nèi)容、調(diào)整參數(shù)、設(shè)置鬧鐘。 這次實(shí)驗(yàn)我收獲了許多,得到了許多書本上學(xué)不到的知識(shí).1、單片機(jī)的軟件設(shè)計(jì)通常要考慮以下幾個(gè)方面的問題:(1)根據(jù)軟件功能要求,將系

9、統(tǒng)軟件劃分為若干個(gè)相對(duì)獨(dú)立的部分,設(shè)計(jì)出合理的總體結(jié)構(gòu),使軟件開發(fā)清晰、簡(jiǎn)潔和流程合理;(2)培養(yǎng)良好的編程風(fēng)格,如考慮結(jié)構(gòu)化程序設(shè)計(jì)、實(shí)行模塊化、子程序化。既便于調(diào)試、鏈接,又便于移植和修改;(3)繪制程序流程圖,再根據(jù)流程圖寫程序;(4)合理分配系統(tǒng)資源;(5)為程序加入注釋,提高可讀性,便于以后修改移植復(fù)用;2、關(guān)于程序的調(diào)試問題:(1)軟件程序的調(diào)試應(yīng)先分模塊調(diào)試,統(tǒng)調(diào)是最后一環(huán)。通過各個(gè)模塊程序的調(diào)試,使程序逐漸趨于完整、正確,最后將各個(gè)模塊組合起來,統(tǒng)調(diào)程序.(2)充分利用實(shí)驗(yàn)板上的其他空余硬件資源來協(xié)助調(diào)試程序,比如,可以用CPL P1.X 來設(shè)置指示燈,用來指示有沒有調(diào)用鍵盤掃

10、描子程序、用來指示有沒有掃描到鍵值、用來指示外部中斷、定時(shí)器0和定時(shí)器1有沒有工作等等。附錄:#include <reg51.hinclude absacc.h>#define PA XBYTE0x0fefc#define PB XBYTE0x0fefddefine PC XBYTE0x0fefe#define CTL XBYTE0x0feffdefine uchar unsigned charuchar ms20;sbit sound=P32;uchar open1=1;/鬧鐘關(guān)閉code led19=0x0C0,0x0F9,0x0A4,0x0B0,0x99,0x92,0x82,

11、0x0F8,0x80,0x90,0x88,0x83,0x0c6,0x0a1,0x86,0x8e,0x0bf,0x8c,0x0c7;code Table16=0x7e,0x0ee,0x0ed,0x0eb,0x0de,0x0dd,0x0db,0x0be,0x0bd,0x0bb,0x0e7,0x0d7,0x0b7,0x77,0x7b,0x7d; struct uchar hour; uchar minute; uchar second; uchar hour1;/鬧鐘小時(shí) uchar minute1;/鬧鐘分鐘 int year; uchar month; uchar day;time=23,59,

12、55,00,00,2011,11,11;void delay() uchar i; for(i=0;i<200;i+); /200個(gè)時(shí)鐘周期/ void scan(uchar x) uchar i,tb,tc=0x80; for(i=0;i8;i+) tb=DBYTEx+i; PA=ledtb; /*送字段碼*/ PB=tc; /*送字位碼/ tc=1; /*右移一位*/ delay(); int fastfound()uchar keyin; CTL=0x81; /PC3PC0為輸入,PC7PC4為輸出PC=0x0f; /所有行(PC7PC4)置0 keyin=PC; /讀取鍵盤 if

13、(keyin=0x0f) return 0;/無鍵按下,返回0 else return 1; /有鍵按下,返回1int keyfound() uchar keyvalue,keyin_i,keyin_j,keyin; uchar i; CTL=0x81;/PC3PC0為輸入,PC7PC4為輸出 PC=0x0f; keyin_j=PC;/讀取列值 CTL=0x88;/PC3PC0為輸出,PC7PC4(所有行)為輸入 PC=0x0f0; keyin_i=PC;/讀取行值 keyin=keyin_jkeyin_i; /形成行列組合 for(i=0;i16;i+) if(Tablei=keyin) k

14、eyvalue=i; break; return keyvalue;void showclock() /顯示鬧鐘 int a; uchar key=1; while(key=1) key=fastfound();/消除按功能鍵時(shí)產(chǎn)生的影響 for(a=0;a800;a+) if(open1=1) DBYTE0x57=0; DBYTE0x58=17;/顯示"P",與前一個(gè)單元組合成"OP",表示鬧鐘已經(jīng)打開 else DBYTE0x57=0x0c; DBYTE0x58=18;/顯示"L",與前一個(gè)單元組合成"CL”,表示鬧鐘已

15、經(jīng)關(guān)閉 DBYTE0x59=0x10; DBYTE0x5a=time.hour1/10; DBYTE0x5b=time.hour1%10; DBYTE0x5c=0x10; DBYTE0x5d=time.minute1/10; DBYTE0x5e=time.minute110; scan(0x57);if(fastfound()=1) key=keyfound(); if(key=0x0a) break; void rq() /顯示日期int a; uchar key=1; while(key=1) key=fastfound();/消除按功能鍵時(shí)產(chǎn)生的影響 for(a=0;a800;a+) D

16、BYTE0x47=time.year/1000; DBYTE0x48=time。year1000/100; DBYTE0x49=time。year100/10; DBYTE0x4a=time。year%10; DBYTE0x4b=time。month/10; DBYTE0x4c=time.month10; DBYTE0x4d=time.day/10; DBYTE0x4e=time。day%10;x scan(0x47); if(fastfound()=1)/有鍵按下 key=keyfound();/獲得鍵值 if(key=0x0a) /如果又按了顯示切換鍵,則顯示鬧鐘時(shí)間 showclock(

17、); break; uchar isleap(int x) /判斷閏年if((x4=0 & x%100!=0) (x400=0)) return 1; else return 0;void datechange() while(1) if(time。month=1 & time.day<31) time。day+;break; if(time.month=1 && time.day=31) time.month+;time。day=1;break; if(isleap(time。year) /是閏年 if(time。month=2 & time。d

18、ay<29) time。day+;break; if(time.month=2 time.day=29) time.month+;time。day=1;break; else /不是閏年 if(time.month=2 & time.day28) time.day+;break; if(time.month=2 && time.day=28) time。month+;time。day=1;break; if(time.month=3 & time.day31) time.day+;break; if(time。month=3 && time

19、.day=31) time。month+;time。day=1;break; if(time.month=4 & time。day<30) time。day+;break; if(time。month=4 & time。day=30) time。month+;time.day=1;break; if(time.month=5 & time.day<31) time.day+;break; if(time。month=5 & time.day=31) time。month+;time。day=1;break; if(time.month=6 &

20、 time.day30) time。day+;break; if(time。month=6 time。day=30) time。month+;time.day=1;break; if(time.month=7 & time。day<31) time.day+;break; if(time。month=7 && time。day=31) time.month+;time。day=1;break; if(time.month=8 && time。day31) time。day+;break; if(time.month=8 && tim

21、e.day=31) time.month+;time.day=1;break; if(time。month=9 && time.day30) time。day+;break; if(time.month=9 & time。day=30) time。month+;time。day=1;break; if(time。month=10 && time.day31) time。day+;break; if(time。month=10 & time。day=31) time。month+;time。day=1;break; if(time.month=11

22、 & time.day<30) time。day+;break; if(time.month=11 time。day=30) time。month+;time.day=1;break; if(time.month=12 & time.day<31) time。day+;break; if(time.month=12 time.day=31) time。month=1;if(time。year!=2099) time.year+;break; uchar checkall(uchar x)uchar i,h,m,s,month,d; int y; if(x=0x0c)

23、/對(duì)鬧鐘設(shè)置進(jìn)行判斷 for(i=3;i<8;i+) if(i=5)continue;/如果是原來的”-”,就去判斷下一個(gè)單元的按鍵是否合法 if(DBYTE0x57+i=0x10) return 0;/如果按鍵不是數(shù)字,結(jié)束 h=DBYTE0x5a10+DBYTE0x5b; m=DBYTE0x5d*10+DBYTE0x5e; if(h24 | (h=24 (h!=0 | s!=0) return 0; if(m>=60) return 0; return 1;/按鍵合法返回1 if(x=0x0f)/對(duì)時(shí)間設(shè)置進(jìn)行判斷 for(i=0;i<8;i+) if((i+1)3=0)

24、 continue;/*如果是原來的"”,就去判斷下一個(gè)單元的按鍵是否合法*/ if(DBYTE0x57+i=0x10) return 0;/如果按鍵不是數(shù)字,結(jié)束 h=DBYTE0x5710+DBYTE0x58; m=DBYTE0x5a*10+DBYTE0x5b; s=DBYTE0x5d*10+DBYTE0x5e; if(h24 | (h=24 && (h!=0 | s!=0))) return 0; if(m>=60) return 0; if(s>=60) return 0; return 1;/按鍵合法返回1 if(x=0x0e)/對(duì)日期設(shè)置進(jìn)行判

25、斷 for(i=0;i8;i+) if(DBYTE0x57+i=0x10) return 0;/如果按鍵不是數(shù)字,結(jié)束 y=DBYTE0x57*1000+DBYTE0x58*100+DBYTE0x5910+DBYTE0x5a; month=DBYTE0x5b*10+DBYTE0x5c; d=DBYTE0x5d10+DBYTE0x5e; if(y2000 y>2099) return 0; if(month=0 | month12) return 0; if(d=0 | d>31) return 0;if(month=1 d>31) return 0; if(month=3 d

26、>31) return 0; if(month=4 d>30) return 0; if(month=5 && d31) return 0; if(month=6 && d>30) return 0; if(month=7 & d>31) return 0; if(month=8 & d31) return 0; if(month=9 d30) return 0; if(month=10 & d31) return 0; if(month=11 & d>30) return 0; if(month=1

27、2 && d31) return 0; if(isleap(y)) /是閏年 if(month=2 d29) return 0; else /不是閏年 if(month=2 & d>28) return 0; return 1; void setclock() uchar i,j,k,key,keyin; k=1;key=1; while(key=1) key=fastfound();/消除按功能鍵時(shí)產(chǎn)生的影響 DBYTE0x57=0x10; DBYTE0x58=0x10; DBYTE0x59=0x10; DBYTE0x5a=0; DBYTE0x5b=0; DBY

28、TE0x5c=0x10;DBYTE0x5d=0; DBYTE0x5e=0; for (i=0;i<2;i+) for(j=0;j<2;j+) while(k) key=fastfound(); if(key=1) keyin=keyfound();k=0;/如果有鍵按下,則退出while;否則,等待按鍵/ scan(0x57);/顯示按鍵 if(keyin<0 |keyin>9 ) keyin=0x10;/如果按鍵的值非法,置為"-” DBYTE0x5a+i3+j=keyin; while(key=1) key=fastfound();/*判斷按鍵以后,手是否

29、已放開;如果沒放開,等待/ k=1; /用于進(jìn)入下一次按鍵狀態(tài) DBYTE0x5a+i*3+j=0x10; /設(shè)置該單元顯示”-” while(1) /設(shè)置時(shí)間完成后,判斷是否按了確認(rèn)鍵 key=fastfound(); scan(0x57); if(key=1) keyin=keyfound(); if(keyin=0x0d)/判斷按鍵是否為確認(rèn)鍵,如果是,則進(jìn)行按鍵的判斷;如果不是,則等待*/ if(checkall(0x0c)=0) break;/如果按鍵非法,退出,保持原來的值 time.hour1=DBYTE0x5a*10+DBYTE0x5b; time。minute1=DBYTE0

30、x5d10+DBYTE0x5e; break; void setdate() uchar i,k,key,keyin; k=1;key=1; while(key=1) key=fastfound();/消除按功能鍵時(shí)產(chǎn)生的影響 DBYTE0x57=time.year/1000; DBYTE0x58=time。year1000/100; DBYTE0x59=time。year100/10; DBYTE0x5a=time.year%10; DBYTE0x5b=time。month/10; DBYTE0x5c=time.month10; DBYTE0x5d=time.day/10; DBYTE0x5

31、e=time.day%10; for (i=0;i8;i+) while(k) key=fastfound(); if(key=1) keyin=keyfound();k=0;/如果有鍵按下,則退出while;否則,等待按鍵 scan(0x57);/顯示按鍵 if(keyin0 |keyin9 ) keyin=0x10;/如果按鍵的值非法,置為” DBYTE0x57+i=keyin; while(key=1) key=fastfound();/*判斷按鍵以后,手是否已放開;如果沒放開,等待*/ k=1; /用于進(jìn)入下一次按鍵狀態(tài) while(1) /設(shè)置時(shí)間完成后,判斷是否按了確認(rèn)鍵 key=

32、fastfound(); scan(0x57); if(key=1) keyin=keyfound(); if(keyin=0x0d)/*判斷按鍵是否為確認(rèn)鍵,如果是,則進(jìn)行按鍵的判斷;如果不是,則等待/ if(checkall(0x0e)=0) break;/如果按鍵非法,退出,保持原來的值 time。year=DBYTE0x57*1000+DBYTE0x58100+DBYTE0x59*10+DBYTE0x5a; time.month=DBYTE0x5b*10+DBYTE0x5c; time。day=DBYTE0x5d10+DBYTE0x5e; break; void settime() u

33、char i,j,k,key,keyin; k=1;key=1; while(key=1) key=fastfound();/消除按功能鍵時(shí)產(chǎn)生的影響 DBYTE0x57=0; DBYTE0x58=0; DBYTE0x59=0x10; DBYTE0x5a=0; DBYTE0x5b=0; DBYTE0x5c=0x10; DBYTE0x5d=0; DBYTE0x5e=0; for (i=0;i3;i+) for(j=0;j2;j+) while(k) key=fastfound(); if(key=1) keyin=keyfound();k=0;/如果有鍵按下,則退出while;否則,等待按鍵/

34、scan(0x57);/顯示按鍵 if(keyin<0 |keyin>9 ) keyin=0x10;/如果按鍵的值非法,置為"" DBYTE0x57+i*3+j=keyin; while(key=1) key=fastfound();/判斷按鍵以后,手是否已放開;如果沒放開,等待/ k=1; /用于進(jìn)入下一次按鍵狀態(tài) DBYTE0x57+i3+j=0x10; /設(shè)置該單元顯示”-” while(1) /設(shè)置時(shí)間完成后,判斷是否按了確認(rèn)鍵 key=fastfound(); scan(0x57); if(key=1) keyin=keyfound(); if(key

35、in=0x0d)/判斷按鍵是否為確認(rèn)鍵,如果是,則進(jìn)行按鍵的判斷;如果不是,則等待/ if(checkall(0x0f)=0) break;/如果按鍵非法,退出,保持原來的值 time。hour=DBYTE0x5710+DBYTE0x58; time。minute=DBYTE0x5a10+DBYTE0x5b; time。second=DBYTE0x5d*10+DBYTE0x5e; break; void timechange() interrupt 1 /秒加1int i; TH0=0x4c; /晶振頻率11.0592MHz下,定時(shí)50ms的計(jì)數(shù)初值 TL0=0x00; /216-46080=4c00Hms20+; if( ms20=20) time.second+; ms20=0;if(time.second>=60)time。minute+;time。second=0; if(time.minute=60)time.hour+;time. minute =0; if(time。hour>=24)time。hour=0;datechange(); DB

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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)論