【正文】
— — shvoid dis t dt(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 ADDStat 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=Oapart_year,apart _century;int _enable; //開總中斷 timerO _initialize 0://定時器0初始化 int _initialize0; //外部中斷初始化whi1e(1) { setif (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: write_timing(MONTH_REG,month); break; case 3: day一一: if (day1)day=31: write_timing(DAY_ REG,day): break: case 4: hour一一: if (hour==255)hour=23: write_timing(HOUR_REG,hour): break: case 5: minute一一: if (minute==255)minute=59: write_timing(MINUTE_REG,minute) break: case 6: weekday一一: if (weekday1)weekday=7; write_timing(WEEKDAY_REG,weekday)。定時中斷函數(shù)主要完成時鐘 芯片的定時掃描 及鍵盤掃描。 (三) 系統(tǒng)的軟件設(shè)計 本系統(tǒng)程序 由主程序、中斷服務(wù)函數(shù)和 多個子 函數(shù)構(gòu)成。該器件 由于其具有價格低廉 電路簡單 、測量精確等優(yōu)點。 本系統(tǒng)為 了提高 電路的實用 性,增加 了一個溫度顯示功能。該譯碼器 由兩個3—8譯碼器構(gòu)成。由于本系統(tǒng) 中顯示 的 內(nèi)容較 多,共需要 16個數(shù)碼管,分別用八位顯示年 、 月、日,四位顯示時間,二位 顯示星期,二