【正文】
量電路,當(dāng)有鍵按下時,識別出按鍵的值并調(diào)整相應(yīng)的時間或日歷的值再寫入時鐘芯片內(nèi)部。該單片機(jī)除了擁有 MCS 一 51 系列單片機(jī)的所有 ; 優(yōu)點(diǎn)外,內(nèi)部還具有 8KB 的在系統(tǒng)可編程FLASH 存儲器, ! 低功耗的空閑和掉電模式,極大的降低 了電路的功耗。由于本系統(tǒng) 中顯示 的 內(nèi)容較 多,共需要 16 個數(shù)碼管,分別用八位顯示年 、 月、日,四位顯示時間,二位 顯示星期,二位顯示溫 度 。 本系統(tǒng)為 了提高 電路的實(shí)用 性,增加 了一個溫度顯示功能。 (三) 系統(tǒng)的軟件設(shè)計(jì) 本系統(tǒng)程序 由主程序、中斷服務(wù)函數(shù)和 多 個子 函數(shù)構(gòu)成。 相關(guān)程序流程圖如下: (四)主要源程序代碼如下: itic1ude reg52. h itic1ude intrins. h defitie int enab1e EA=1 defitie Urlsigned char uchar defitie UrlSigned int Uint / ********函數(shù)聲明 ********/ VOid read rtc(void): VOid bus initialize(VOid): — void di splay(VOid):/ *顯示函數(shù) */ void di S ca1endar(uchar bit — — sh void dis t d t(uchar bit shiel — — — VOid int initialize(VOid): VOid timerO initialize(VOid): / **********************************/ Static int data year=O: Static uchar data month=O: Static uchar data day=O: Static uchar data weekday=O: Static uchar data hour=O: Static uchar data miflUte=O: Static uchar data counter=O: Static uchar data a regiSter=O — Static uchar data b regiSter=O — defitie add data P1 sbit cS= P3 7: sbit as= P3 6: sbit r 71 P3 5; Sbit ds= P3 4: sbit add 138= P2 4: Sbit a 138= P2 7: sbit b 138= P2 6: Sbit c 138= P2 5: sbit set= P2 3: sbit up= P2 2: sbit down= P2 1: sbit 1edour= P2 0: sbit DO= P3 0: defitie diSP1ay data PO defitie A REGISTER OxOa defitie B REGISTER OxOb def i tie CENTURY REG 0x32 def i tie YEAR REG Ox09 defitie MONTH REG Ox08 defitie DAY REG OxO7 defitie WEEKDAY REG Ox06 defi tie HOUR REG Ox04 defitie MINUTE REG Ox02 def i tie SECOND REG OxO0 Static uchar data REGISTER ADD Stat ic uchar Set c1ock=O: Static bit bdata va1ue set=1: Static bit bdata f Set=O: Static bit bdata f Set corl=O: star iC uchar up clock=O: Static bit bdata va1ue up=1: static bit bdata f _ up=O: static bit bdata f _up— con=O; static uchar down _clock=O; static bit bdata . value_down=1: static bit bdata f _down=O: static bit bdata f _down_con=O; uchar code tab _dis[11]={OxcO, Oxf9, Oxa4, OxbO, 0x99, 0x92, 0x82, Oxf8, Ox80, Ox90, Oxff):/ *消隱信號 */ void main(void)//主函數(shù) { uchar data verdict _set=O apart_year, apart _century; int _enable; //開總中斷 timerO _initialize 0://定時器 0 初始化 int _initialize0; //外部中斷初始化 whi1e(1) { set if (f _con==1)// set 鍵處理 { f _set _con=O: REG I STER _ ADD++: i f (REGISTER_ADD6) REG I STER _ ADD=O: ) if (f_up_con==1)// up 鍵處理 { f _up _con=O; write _timing(B _REGISTER, Ox8f): switch (REGISTER ADD) { case 0: break: case 1: year++: i f (year9999)year=O: apart_year=(year% l0): write_timing(YEAR_ REG apart_year): write_timing(CENTURY_REG, apart_century): break: case 2: month++: i f (month12)month=l; write_timing(MONTH_REG, month); break; case 3: day++: if (day31)day=l: write_timing(DAY_REG, day): break: case 4: hour++: i f (hour23) hour=O: write_timing(HOUR_REG, hour): break: case 5: minute++: if (minute59)minute=O: write_timing(MINUTE_REG, minute) break: case 6: weekday++; if (weekday7)weekday=1: write_timing(WEEKDAY_REG, weekday) break: ) Write_timing(B_REGISTER, OxOf); switch (REGISTER ADD) { case 0: break: case 1: year 一一: i f (yearO) year=9999: apart_century=(year10): apart_year=(year% lO); write_timing(YEAR_REG ,apart_year) writ _timing(CENTURY_REG, apart_century) break: case 2: month 一一: if (month1)month=l2: