|
Z0 EQU 255
L1 EQU 0 L2 EQU 1 L3 EQU 2 L4 EQU 3 L5 EQU 4 L6 EQU 5 L7 EQU 6
M1 EQU 7 M2 EQU 8 M3 EQU 9 M4 EQU 10 M5 EQU 11 M6 EQU 12 M7 EQU 13
H1 EQU 14 H2 EQU 15 H3 EQU 16 H4 EQU 17 H5 EQU 18 H6 EQU 19 H7 EQU 20 start_year EQU 00;從2000年開始
sclk bit p1.0; io bit p1.1; rst bit p1.2; ;(2EH和2FH用作位尋址區(qū)) ;2EH中的內(nèi)容是須要保護(hù)的.
t1_on_off bit 70h; t2_on_off bit 71h; t3_on_off bit 72h; t_stop bit 73h; stop_di_da bit 74h;
r_or_w bit 78h;r_or_w=1時(shí)表示讀數(shù)據(jù).r_or_w=0時(shí)表示寫數(shù)據(jù)到DS1302. week_bit bit 79h;week_bit=0表示星期還沒有被讀或被寫,
week_bit=1表示星期已經(jīng)
被讀或被寫. t_chang bit 7ah; p2_bit bit 7bh;C的中間變量.
sec1_sec2 data 10h;溫度1秒鐘轉(zhuǎn)換一次 sec3_sec4 data 11h; key_1_times data 12h;按第一個(gè)鍵的次數(shù)。 DELAY data 13H;節(jié)拍的延時(shí) VOICE data 14H;音符 SongFlag data 15h; sptr data 16h; i data 17h; J data 18h; SONGH data 19H; SONGL data 1aH; TIMEH data 1bH; TIMEL data 1cH; SIZE data 1dH; time_1 data 1eh; temp_byte5 data 1fh; nong_year_sg data 20h;農(nóng)歷的年的十位和個(gè)位 nong_month_sg data 21h;農(nóng)歷月的十位和個(gè)位 nong_date_sg data 22h;農(nóng)歷日的十位和個(gè)位 temp_sg data 23h;溫度的十位和個(gè)位 year_sg data 24h;年的十位和個(gè)位 month_sg data 25h;月的十位和個(gè)位 date_sg data 26h;日的十位和個(gè)位 hour_sg data 27h;小時(shí)的十位和個(gè)位 min_sg data 28h;分鐘的十位和個(gè)位 sec_sg data 29h;秒鐘的十位和個(gè)位 temp_byte1 data 2ah; temp_byte2 data 2bh; temp_byte3 data 2ch; temp_byte4 data 2dh;
year_q data 30h;年的千位 year_b data 31h;年的百位 year_s data 32h;年的十位 year_g data 33h;年的個(gè)位 month_s data 34h;月的十位 month_g data 35h;月的個(gè)位 date_s data 36h;日的十位 date_g data 37h;日的個(gè)位
hour_s data 38h;小時(shí)的十位 hour_g data 39h;小時(shí)的個(gè)位 min_s data 3ah;分鐘的十位 min_g data 3bh;分鐘的個(gè)位 sec_s data 3ch;秒鐘的十位 sec_g data 3dh;秒鐘的個(gè)位 week data 3eh;星期 jieqi_1 data 3fh;節(jié)氣的前八個(gè)
nong_month_s data 40h;農(nóng)歷月的十位 nong_month_g data 41h;農(nóng)歷月的個(gè)位 nong_date_s data 42h;農(nóng)歷日的十位 nong_date_g data 43h;農(nóng)歷日的個(gè)位 temp_s data 44h;溫度的十位 temp_g data 45h;溫度的個(gè)位 jieqi_2 data 46h;節(jié)氣的中間八個(gè) jieqi_3 data 47h;節(jié)氣的最后八個(gè)
t1_hour_sg data 48h; t1_min_sg data 49h; t2_hour_sg data 4Ah; t2_min_sg data 4Bh; t3_hour_sg data 4Ch; t3_min_sg data 4Dh;
liang_du data 4Eh; 不同的初始值對(duì)應(yīng)不同的亮度. min1_min2 data 4fh; time_2 data 50h;
;60h--7fh是堆棧區(qū)
org 0000h; nop; sjmp main;轉(zhuǎn)到主程序 ORG 0003H; reti; ORG 000BH; lJMP TIMER0 ORG 0013H reti; ORG 001BH; lJMP TIMER1 ORG 0023H; reti; ORG 002BH; reti;
org 0030h; main: nop; mov sp,#60h; mov scon,#00h; mov liang_du,#114; lcall read_sec; mov sec1_sec2,sec_sg; mov r2,#9;一開始顯示9,然后是8,7,6,5,4,3,2,1; mov r7,#9;有9次 init_data: nop; mov r0,#year_q; mov r1,#24; data_9_1: mov a,r2; mov @r0,a; inc r0; djnz r1,data_9_1; mov r3,#22h; delay3: setb rs0; mov jieqi_1,#0ffh; mov jieqi_2,#0ffh; mov jieqi_3,#0ffh; lcall display; clr rs0; djnz r3,delay3; dec r2; djnz r7,init_data; lcall read_sec; mov a,sec1_sec2; cjne a,sec_sg,main_no_init; main_init: lcall init;初始化DS1302 mov r0,#02h; mov r1,#7eh; clr a; clr_data: mov @r0,a;把從02H到7FH的內(nèi)容清零 inc r0; djnz r1,clr_data; mov r0,#00h; mov r1,#00h; mov year_q,#2; mov year_b,#0; mov year_sg,#4; 2004年 mov month_sg,#1; 1月 mov date_sg,#1; 1日 mov sptr,#0 lcall write_7_data; mov key_1_times,#00h; mov time_2,#00h; mov liang_du,#114; mov r0,#liang_du;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11001110b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) clr r_or_w;r_or_w=0表示寫數(shù)據(jù)到DS1302 clr week_bit;表示week還沒有被寫 lcall rw_rtc; 寫數(shù)據(jù)到DS1302 sjmp loop
main_no_init: nop; mov key_1_times,#00h; mov time_2,#00h;
setb r_or_w;r_or_w=1表示從DS1302中讀數(shù)據(jù) mov r0,#liang_du;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11001111b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) lcall rw_rtc;從DS1302中讀數(shù)據(jù)
setb r_or_w;r_or_w=1表示從DS1302中讀數(shù)據(jù) mov r0,#2eh;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要讀 mov b,#11000001b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) lcall rw_rtc;從DS1302中讀數(shù)據(jù)
setb r_or_w;r_or_w=1表示從DS1302中讀數(shù)據(jù) mov r0,#t3_min_sg;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#6;有6位數(shù)需要讀 mov b,#11000011b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) lcall rw_rtc;從DS1302中讀數(shù)據(jù)
loop: nop; ----------------------------------------------- clr p1.6; lcall key_1; 第1個(gè)鍵的處理 lcall key_2; 第2個(gè)鍵的處理 lcall key_3; 第3個(gè)鍵的處理 mov a,key_1_times; cjne a,#0,no_temp_uter; mov a,sec1_sec2; cjne a,sec_sg,sec1_sec2_yes;與秒相等時(shí)不檢測(cè)溫度. sjmp no_temp_uter; sec1_sec2_yes: mov sec1_sec2,sec_sg; jb stop_di_da,no_di_da; lcall di_da; no_di_da: nop; lcall temp_uter; 溫度檢測(cè) 主程序 no_temp_uter: lcall main_2; mov a,key_1_times; cjne a,#0,loop; jnb t_stop,ding_shi_2; mov a,min1_min2; cjne a,min_sg,ding_shi_1; ajmp loop; ding_shi_1: clr t_stop; clr t_chang; ding_shi_2: lcall dingshi; ajmp loop;-----------------------------------------
main_2: nop; lcall read_7_data; mov year_q,#02h; mov year_b,#00h; lcall get_week; 從當(dāng)前公歷日期,推算星期, lcall gong_nong; 根據(jù)公歷換算農(nóng)歷. lcall jieqi_zhuanhuan; mov a,sec3_sec4; cjne a,sec_sg,sec_3_4_yes; sjmp sec_3_4_no; sec_3_4_yes: mov sec3_sec4,sec_sg; cpl p0.0; cpl p0.1; cpl p0.2; cpl p0.3; lcall adjust_time; sec_3_4_no: nop; lcall dBCD_sBCD; lcall shan_dong; 當(dāng)要調(diào)整某個(gè)數(shù)時(shí)那個(gè)數(shù)就要(閃動(dòng)) acall display; ret; ;********************************************************* ; 顯示子程序 ;入口信息: sec_sg,min_sg,hour_sg,date_sg,month_sg,year_sg, ; temp_sg,nong_date_sg,nong_month_sg ; sec_g,sec_s,min_g,min_s,hour_g,hour_s,date_g,date_s,
month_g,month_s,year_g,year_s, ; temp_g,temp_s,nong_date_g,nong_date_s,nong_month_g,nong_month_s
;出口信息: sec_g,sec_s,min_g,min_s,hour_g,hour_s,date_g,date_s,
month_g,month_s,
year_g,year_s, ; temp_g,temp_s,nong_date_g,nong_date_s,nong_month_g,nong_month_s
;影響資源:r0,r1,r2,r6,r7,a,psw,p2,dptr,sbuf,(位)ti,p2_bit. ;*************************************************************** display: nop; acall is_0_no_dis; mov p2,#0ffh; mov r1,#0ffh; clr p2_bit; mov r0,#nong_month_s; mov r6,#8; dis_1: mov r7,#3; give_sbuf: mov a,r0; cjne a,#jieqi_1,jieqi_2_2; mov a,jieqi_1; sjmp jieqi_yes;
jieqi_2_2: cjne a,#jieqi_2,jieqi_3_3; mov a,jieqi_2; sjmp jieqi_yes;
jieqi_3_3: cjne a,#jieqi_3,jieqi_no; mov a,jieqi_3; sjmp jieqi_yes;
jieqi_no: mov a,@r0;取要顯示的數(shù) mov dptr,#tab_dis; movc a,@a+dptr;從字庫(kù)中取出字型 jieqi_yes: mov sbuf,a; jnb ti,$ clr ti mov a,r0; clr c; subb a,#8; mov r0,a; djnz r7,give_sbuf;等三個(gè)數(shù)都送完
mov a,r0; add a,#25; mov r0,a; mov c,p2_bit; mov a,r1; rlc a; mov r1,a; mov p2,a; mov p2_bit,c;
acall delay_1; mov p2,#0ffh; djnz r6,dis_1; ret ;************************** 字庫(kù) **************************** ;字庫(kù)( 0 1 2 3 4 5 6 7 8 9 tab_dis: db 003h,09fh,025h,00dh,099h,049h,041h,01fh,001h,009h ; 暗 ━ ▔ ▕▔ F Π ) db 0ffh,0fdh,07fh,073h,071H,013h, ;************************************************************ ; 延時(shí)子程序 ;入口信息: liang_du ;出口信息: 無 ;影響資源: R7. ;占用資源: liang_du ;************************************************************ delay_1: nop; mov r2,#2; delay1: mov r7,liang_du; liang_du的值越大,數(shù)碼管越亮. delay2: djnz r7,delay2; djnz r2,delay1; ret; ;*********************************************************** ; 十位為0時(shí)不顯示子程序 (星期為0時(shí)用8表示) ;入口信息:month_s,date_s,nong_month_s,nong_date_s,temp_s,week. ;出口信息:month_s,date_s,nong_month_s,nong_date_s,temp_s,week. ;影響資源:a,psw, ;占用資源:month_s,date_s,nong_month_s,nong_date_s,temp_s,week. ;*********************************************************** is_0_no_dis: mov a,month_s; cjne a,#00h,no_dis_1; mov month_s,#0ah; no_dis_1: mov a,date_s; cjne a,#00h,no_dis_2; mov date_s,#0ah; no_dis_2: mov a,nong_month_s; cjne a,#00h,no_dis_3; mov nong_month_s,#0ah; no_dis_3: mov a,nong_date_s; cjne a,#00h,no_dis_4; mov nong_date_s,#0ah; no_dis_4: mov a,temp_s; cjne a,#00h,week_0_8; mov temp_s,#0ah; week_0_8: mov a,nong_month_s; cjne a,#08h,week_0_9; mov nong_month_s,#0ah; week_0_9: mov a,week; cjne a,#00h,no_dis_end; mov week,#08h; no_dis_end: ret; ;********************************************************* ; 沒有鍵按下,二.三十秒之后,回到原來的狀態(tài) 子程序 ;********************************************************* adjust_time: nop; inc time_1; mov a,time_1; cjne a,#10,end_adjust_time; mov key_1_times,#00h; end_adjust_time: ret; ;********************************************************** ; 閃動(dòng)子程序 (調(diào)整時(shí)間的大小時(shí),調(diào)整那個(gè)那個(gè)就要一閃一閃的,
認(rèn)我知道要調(diào)整的是那個(gè)。) ;入口信息: ;出口信息: ;影響資源:a,psw,sp, ;占用資源: ;******************************************************** shan_dong: nop; mov a,key_1_times;
key_dis_0: cjne a,#0,key_dis_1; acall display; 正常顯示 ajmp end_shan_dong;
key_dis_1: cjne a,#1,key_dis_2; lcall t1_hour_min; mov temp_g,#1; 第一個(gè)狀態(tài)(定時(shí)T1的開和關(guān)) jb t1_on_off,t1_is_on_1; mov year_b,#00h; mov year_s,#0eh; mov year_g,#0eh; 顯示OFF lcall off_no_dis; sjmp t1_is_off_1; t1_is_on_1: mov year_s,#00h; mov year_g,#0fh; 顯示On; lcall on_no_dis;
t1_is_off_1: ajmp end_shan_dong;
key_dis_2: cjne a,#2,key_dis_3; jb t1_on_off,t1_is_on_2; inc key_1_times; inc key_1_times; mov a,key_1_times; sjmp key_dis_4; t1_is_on_2: lcall t1_hour_min; lcall hour_no_dis; mov year_s,#00h; mov year_g,#0fh; 顯示On; mov temp_g,#2; 第二個(gè)狀態(tài) (定時(shí)T1時(shí)的調(diào)整) ajmp end_shan_dong;
key_dis_3: cjne a,#3,key_dis_4; lcall t1_hour_min; lcall min_no_dis; mov year_s,#00h; mov year_g,#0fh; 顯示On mov temp_g,#3; 第三個(gè)狀態(tài) (定時(shí)T1分的調(diào)整) ajmp end_shan_dong;
key_dis_4: cjne a,#4,key_dis_5; lcall t2_hour_min mov temp_g,#4; 第四個(gè)狀態(tài)(定時(shí)T2的開和關(guān)) mov month_s,#0ch; mov month_g,#0dh; mov date_g,#02h; 顯示T2 jb t2_on_off,t2_is_on_1; mov year_b,#00h; mov year_s,#0eH; mov year_g,#0eh; 顯示OFF lcall off_no_dis; sjmp t2_is_off_1; t2_is_on_1: mov year_s,#00h; mov year_g,#0fh; 顯示On; lcall on_no_dis; t2_is_off_1: ajmp end_shan_dong;
key_dis_5: cjne a,#5,key_dis_6; jb t2_on_off,t2_is_on_2; inc key_1_times; inc key_1_times; mov a,key_1_times; sjmp key_dis_7 t2_is_on_2: lcall t2_hour_min; lcall hour_no_dis; mov year_s,#00h; mov year_g,#0fh; 顯示On; mov temp_g,#5; 第五個(gè)狀態(tài) (定時(shí)T2時(shí)的調(diào)整) ajmp end_shan_dong;
key_dis_6: cjne a,#6,key_dis_7; lcall t2_hour_min; lcall min_no_dis; mov year_s,#00h; mov year_g,#0fh; 顯示On mov temp_g,#6; 第六個(gè)狀態(tài) (定時(shí)T2分的調(diào)整) ajmp end_shan_dong;
key_dis_7: cjne a,#7,key_dis_8; lcall t3_hour_min mov temp_g,#7; 第七個(gè)狀態(tài)(定時(shí)T3的開和關(guān)) mov month_s,#0ch; mov month_g,#0dh; mov date_g,#03h; 顯示T3 jb t3_on_off,t3_is_on_1; mov year_b,#00h; mov year_s,#0eH; mov year_g,#0eh; 顯示OFF lcall off_no_dis; sjmp t3_is_off_1; t3_is_on_1: mov year_s,#00h; mov year_g,#0fh; 顯示On; lcall on_no_dis; t3_is_off_1: ajmp end_shan_dong;
key_dis_8: cjne a,#8,key_dis_9; jb t3_on_off,t3_is_on_2; inc key_1_times; inc key_1_times; mov a,key_1_times; sjmp key_dis_10; t3_is_on_2: lcall t3_hour_min; lcall hour_no_dis; mov year_s,#00h; mov year_g,#0fh; 顯示On; mov temp_g,#8; 第八個(gè)狀態(tài) (定時(shí)T3時(shí)的調(diào)整) ajmp end_shan_dong;
key_dis_9: cjne a,#9,key_dis_10; lcall t3_hour_min; lcall min_no_dis; mov year_s,#00h; mov year_g,#0fh; 顯示On mov temp_g,#9; 第九個(gè)狀態(tài) (定時(shí)T3分的調(diào)整) ajmp end_shan_dong;
key_dis_10: cjne a,#10,key_dis_11; mov year_q,#2; mov year_b,#0; lcall year_no_dis; mov temp_s,#1; mov temp_g,#0; 第十個(gè)狀態(tài) ajmp end_shan_dong;
key_dis_11: cjne a,#11,key_dis_12; lcall month_no_dis; mov temp_s,#1; mov temp_g,#1; 第11個(gè)狀態(tài) ajmp end_shan_dong;
key_dis_12: cjne a,#12,key_dis_13; lcall date_no_dis mov temp_s,#1; mov temp_g,#2; 第12個(gè)狀態(tài) ajmp end_shan_dong;
key_dis_13: cjne a,#13,key_dis_14; lcall hour_no_dis; mov temp_s,#1; mov temp_g,#3; 第13個(gè)狀態(tài) ajmp end_shan_dong;
key_dis_14: cjne a,#14,end_shan_dong; lcall min_no_dis; mov temp_s,#1; mov temp_g,#4; 第14個(gè)狀態(tài) ajmp end_shan_dong; end_shan_dong: ret;
;********************************************************** ; 全息滅子程序 ;入口信息: ;出口信息: ;影響資源:r0,r1,r2,r5,r6,r7,a,psw,p2,dptr,sbuf,(位)ti,p2_bit. ;********************************************************** all_no_dis: mov r1,#24; mov r0,#year_q; all_no_dis_1: mov @r0,#0ah; inc r0; djnz r1,all_no_dis_1; mov jieqi_1,#11111111b mov jieqi_2,#11111111b mov jieqi_3,#11111111b ret; ;********************************************************** ; 閃動(dòng)延時(shí)子程序 ;入口信息: ;出口信息: ;影響資源:r0,r1,r2,r5,r6,r7,a,psw,p2,dptr,sbuf,(位)ti,p2_bit. ;********************************************************** shandong_yansi: nop; mov r5,#20; shandong_yansi_1: acall display; djnz r5,shandong_yansi_1; 實(shí)現(xiàn)延時(shí)的功能 ret; ;********************************************************* ; 雙BCD碼轉(zhuǎn)換成單BCD碼子程序 ;入口信息: sec_sg,min_sg,hour_sg,date_sg,month_sg,year_sg, ; temp_sg,nong_date_sg,nong_month_sg ;出口信息:sec_g,sec_s,min_g,min_s,hour_g,hour_s,date_g,
date_s,month_g,month_s,year_g,year_s, ; temp_g,temp_s,nong_date_g,nong_date_s,nong_month_g,nong_month_s ;影響資源:r0,r1,r2,r7,a,psw. ;占用資源 :sec_g,sec_s,min_g,min_s,hour_g,hour_s,date_g,
date_s,month_g,month_s,year_g,year_s, ; temp_g,temp_s,nong_date_g,nong_date_s,nong_month_g,nong_month_s ;**************************************************************** dBCD_sBCD: mov r0,#sec_g mov r1,#sec_sg mov r7,#9; BCD1: nop; cjne r7,#3,BCD2; mov r0,#temp_g; mov r1,#temp_sg; BCD2: mov a,@r1 mov r2,a anl a,#0fh; mov @r0,a;
dec r0 mov a,r2 anl a,#0f0h swap a mov @r0,a
dec r0 dec r1 djnz r7,BCD1; ret ;***************************************************************** ; 從DS1302讀數(shù)據(jù)或者寫數(shù)據(jù)到DS1302子程序 ;入口信息:r0中的內(nèi)容是CPU_RAM中的塊數(shù)據(jù)的首地址 (從高地址開始) ; R7中的內(nèi)容是塊數(shù)據(jù)中有多少個(gè)數(shù) ; B中的內(nèi)容是DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ; r_or_w是從DS1302讀數(shù)據(jù)還是寫數(shù)據(jù)到DS1302的位標(biāo)志( r_or_w=0,寫數(shù)據(jù).
r_or_w=1,讀數(shù)據(jù)) ;出口信息: ;影響資源: ;占用資源: ;****************************************************************
rw_rtc: nop;
rtc_1: clr sclk nop setb rst mov r6,#8 mov a,b rtc_2: clr sclk rrc a mov io,c nop setb sclk djnz r6,rtc_2;等八位都送完
mov r6,#8 jnb r_or_w,rtc_3;如果r_or_w=0就跳轉(zhuǎn),也就是寫數(shù)據(jù) r_rtc: clr sclk nop mov c,io;讀數(shù)據(jù) rrc a setb sclk djnz r6,r_rtc;等八位都讀完
cjne r0,#year_sg,a1; jb week_bit,a1; mov week,a; setb week_bit; inc r0; ajmp rtc_6; a1: mov @r0,a; sjmp rtc_6
rtc_3: nop; cjne r0,#year_sg,b1; jb week_bit,b1; mov a,week; setb week_bit; inc r0; ajmp w_rtc; b1: mov a,@r0;取要寫的數(shù) w_rtc: clr sclk rrc a; mov io,c;寫數(shù)據(jù) nop setb sclk djnz r6,w_rtc;等八位都寫完
rtc_6: dec r0;next data/address. (r0=#secsg,secsg=37h,
minsg=36h........yearsg=31h) mov a,b add a,#00000010b;address+1. mov b,a; clr rst nop clr sclk djnz r7,rtc_1;等七個(gè)數(shù)都讀完 nop ret ;************************************************************** ; 初始化DS1302子程序 ;入口信息: ;出口信息: ;影響資源: ;占用資源: ;************************************************************** init: clr sclk clr rst mov sec_sg,#10001110B;open write protection mov min_sg,#00000000B; mov r0,#sec_sg; lcall wr_ds1302; mov sec_sg,#10010000B;trickle charger,select R1=2k; mov min_sg,#10100101B;select R1=2K,one diode. mov r0,#sec_sg; lcall wr_ds1302; ret ;************************************************************* ; 把八位的地址和數(shù)據(jù)一位一位的傳送 到DS1302 ;入口信息: ;出口信息: ;影響資源: ;占用資源: ;************************************************************ wr_ds1302: clr sclk;set sclk=0; nop setb rst ;select DS1302/set RST=1. nop nop mov r7,#2 wrd1302: mov r6,#8 mov a,@r0 clr c wr1302: clr sclk rrc a mov io,c nop setb sclk djnz r6,wr1302;等八位都送完 dec r0 djnz r7,wrd1302;等地址和數(shù)據(jù)都送完 clr rst nop clr sclk ret ;************************************************************ ; 第一個(gè)鍵的子程序 ;入口信息: ;出口信息: ;影響資源: ;占用資源: ;*********************************************************** key_1: jb p1.3,end_key_1;P1.3=1表示key_1沒有鍵按下 acall shandong_yansi; jnb p1.3,end_key_1;等待鍵松開 lcall di_da; inc key_1_times;key_1_times里的內(nèi)容表示key_1按了幾次. mov time_1,#00h; mov a,key_1_times; cjne a,#15,end_key_1; mov key_1_times,#00h; mov year_q,#2; mov year_b,#0; end_key_1: ret; ;*********************************************************** ; 第二個(gè)鍵的子程序 ;入口信息: ;出口信息: ;影響資源: ;占用資源: ;********************************************************** key_2: jb p3.2,end_key_2_2; P3.2=1表示key_2沒有鍵按下 acall shandong_yansi; jb p3.2,end_key_2_2; lcall di_da; mov time_1,#00h; mov a,key_1_times; times_2_0: cjne a,#0,times_2_1; mov a,liang_du; cjne a,#1,liang_du_no_1; clr c; addc a,#3; mov liang_du,a; sjmp liang_du_no_142; liang_du_no_1: nop; cjne a,#4,liang_du_no_41; clr c; addc a,#10; mov liang_du,a; sjmp liang_du_no_142; liang_du_no_41: nop; cjne a,#14,liang_du_no_141; clr c; addc a,#100; mov liang_du,a; sjmp liang_du_no_142; liang_du_no_141: nop; cjne a,#114,liang_du_no_142; mov liang_du,#1h; liang_du_no_142: lcall read_sec; lcall dBCD_sBCD; lcall display; jnb p3.2,liang_du_no_142; mov r0,#liang_du;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11001110b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ljmp times_1;
end_key_2_2: ljmp end_key_2;
times_2_1: cjne a,#1,times_2_2; cpl t1_on_off; mov r0,#2eh;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11000000b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開? ljmp times_1;
times_2_2: cjne a,#2,times_2_3; inc t1_hour_sg; mov a,t1_hour_sg; clr ac; da a; mov t1_hour_sg,a cjne a,#24h,t1_no_24; mov t1_hour_sg,#00h; t1_no_24: mov r0,#t1_hour_sg;CPU_RAM中的塊數(shù)據(jù)的首地址
(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11001100b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ljmp times_1;
times_2_3: cjne a,#3,times_2_4; inc t1_min_sg; mov a,t1_min_sg; clr ac; da a; mov t1_min_sg,a cjne a,#60h,t1_no_60; mov t1_min_sg,#00h; t1_no_60: mov r0,#t1_min_sg;CPU_RAM中的塊數(shù)據(jù)的首地址
(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11001010b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ljmp times_1;
times_2_4: cjne a,#4,times_2_5; cpl t2_on_off; mov r0,#2eh;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11000000b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開? ljmp times_1;
times_2_5: cjne a,#5,times_2_6; inc t2_hour_sg; mov a,t2_hour_sg; clr ac; da a; mov t2_hour_sg,a cjne a,#24h,t2_no_24; mov t2_hour_sg,#00h; t2_no_24: mov r0,#t2_hour_sg;CPU_RAM中的塊數(shù)據(jù)的首地址
(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11001000b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ljmp times_1;
times_2_6: cjne a,#6,times_2_7; inc t2_min_sg; mov a,t2_min_sg; clr ac; da a; mov t2_min_sg,a cjne a,#60h,t2_no_60; mov t2_min_sg,#00h; t2_no_60: mov r0,#t2_min_sg;CPU_RAM中的塊數(shù)據(jù)的首地址
(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11000110b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ljmp times_1;
times_2_7: cjne a,#7,times_2_8; cpl t3_on_off; mov r0,#2eh;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11000000b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ljmp times_1;
times_2_8: cjne a,#8,times_2_9; inc t3_hour_sg; mov a,t3_hour_sg; clr ac; da a; mov t3_hour_sg,a cjne a,#24h,t3_no_24; mov t3_hour_sg,#00h; t3_no_24: mov r0,#t3_hour_sg;CPU_RAM中的塊數(shù)據(jù)的首地址
(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11000100b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ljmp times_1;
times_2_9: cjne a,#9,times_2_10; inc t3_min_sg; mov a,t3_min_sg; clr ac; da a; mov t3_min_sg,a cjne a,#60h,t3_no_60; mov t3_min_sg,#00h; t3_no_60: mov r0,#t3_min_sg;CPU_RAM中的塊數(shù)據(jù)的首地址
(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11000010b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ljmp times_1;
times_2_10: cjne a,#10,times_2_11; inc year_sg; mov a,year_sg; clr ac; da A; mov year_sg,a; cjne a,#50h,year_no_50; mov year_sg,#00h; year_no_50: lcall write_7_data; ajmp end_key_2;
times_2_11: cjne a,#11,times_2_12; inc month_sg; mov a,month_sg; clr ac; da a; mov month_sg,a cjne a,#13h,month_no_13; mov month_sg,#01h; month_no_13: mov r0,#month_sg;CPU_RAM中的塊數(shù)據(jù)的首地址
(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#10001000b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ajmp times_1;
times_2_12: cjne a,#12,times_2_13; inc date_sg; mov a,date_sg; clr ac; da a; mov date_sg,a cjne a,#32h,date_no_32; mov date_sg,#01h; date_no_32: mov r0,#date_sg;CPU_RAM中的塊數(shù)據(jù)的首地址
(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#10000110b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ajmp times_1;
times_2_13: cjne a,#13,times_2_14; inc hour_sg; mov a,hour_sg; clr ac; da a; mov hour_sg,a cjne a,#24h,hour_no_24; mov hour_sg,#00h; hour_no_24: mov r0,#hour_sg;CPU_RAM中的塊數(shù)據(jù)的首地址
(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#10000100b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ljmp times_1;
times_2_14: cjne a,#14,end_key_2 inc min_sg; mov a,min_sg; clr ac; da a; mov min_sg,a mov sec_sg,#00h; cjne a,#60h,min_no_60; mov min_sg,#00h; min_no_60: lcall write_min; ajmp times_1;
times_1: clr r_or_w;r_or_w=0表示寫數(shù)據(jù)到DS1302 clr week_bit;表示week還沒有被寫 lcall rw_rtc; 寫數(shù)據(jù)到DS1302
end_key_2: ret; ;****************************************************** ; 第三個(gè)鍵的子程序 ;入口信息: ;出口信息: ;影響資源: ;占用資源: ;***************************************************** key_3: jb p3.3,end_key_3_3; P3.3=1表示key_3沒有鍵按下 acall shandong_yansi; jb p3.3,end_key_3_3; lcall di_da; mov time_1,#00h;
mov a,key_1_times;
times_3_0: cjne a,#0,times_3_1; cpl stop_di_da; key_3_4: lcall read_sec; lcall dBCD_sBCD; lcall display; jnb p3.3,key_3_4; mov r0,#2eh;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11000000b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ljmp times_2;
times_3_1: cjne a,#1,times_3_2; cpl t1_on_off; mov r0,#2eh;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11000000b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ljmp times_2;
times_3_2: cjne a,#2,times_3_3; mov r3,t1_hour_sg; acall number_f_9; cjne a,#0f9h,t1_no_23; mov r3,#23h;0點(diǎn)的后面是23點(diǎn) t1_no_23: mov t1_hour_sg,r3; mov r0,#t1_hour_sg;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11001100b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ljmp times_2;
times_3_3: cjne a,#3,times_3_4; mov r3,t1_min_sg; acall number_f_9; cjne a,#0f9h,t1_no_59; mov r3,#59h; 0分鐘的后面是59分鐘 t1_no_59: mov t1_min_sg,r3; mov r0,#t1_min_sg;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11001010b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ljmp times_2;
end_key_3_3: ljmp end_key_3;
times_3_4: cjne a,#4,times_3_5; cpl t2_on_off; mov r0,#2eh;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11000000b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ljmp times_2;
times_3_5: cjne a,#5,times_3_6; mov r3,t2_hour_sg; acall number_f_9; cjne a,#0f9h,t2_no_23; mov r3,#23h;0點(diǎn)的后面是23點(diǎn) t2_no_23: mov t2_hour_sg,r3; mov r0,#t2_hour_sg;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11001000b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ljmp times_2;
times_3_6: cjne a,#6,times_3_7; mov r3,t2_min_sg; acall number_f_9; cjne a,#0f9h,t2_no_59; mov r3,#59h; 0分鐘的后面是59分鐘 t2_no_59: mov t2_min_sg,r3; mov r0,#t2_min_sg;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11000110b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ljmp times_2;
times_3_7: cjne a,#7,times_3_8; cpl t3_on_off; mov r0,#2eh;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11000000b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ljmp times_2;
times_3_8: cjne a,#8,times_3_9; mov r3,t3_hour_sg; acall number_f_9; cjne a,#0f9h,t3_no_23; mov r3,#23h;0點(diǎn)的后面是23點(diǎn) t3_no_23: mov t3_hour_sg,r3; mov r0,#t3_hour_sg;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11000100b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ljmp times_2;
times_3_9: cjne a,#9,times_3_10; mov r3,t3_min_sg; acall number_f_9; cjne a,#0f9h,t3_no_59; mov r3,#59h; 0分鐘的后面是59分鐘 t3_no_59: mov t3_min_sg,r3; mov r0,#t3_min_sg;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#11000010b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ljmp times_2;
times_3_10: cjne a,#10,times_3_11; mov r3,year_sg; acall number_f_9; cjne a,#0f9h,year_no_99; mov r3,#49h; 00年的后面是49年 year_no_99: mov year_sg,r3; lcall write_7_data; sjmp end_key_3;
times_3_11: cjne a,#11,times_3_12; mov r3,month_sg; acall number_f_9; mov a,r3; cjne a,#00h,mon_no_12; mov r3,#12h;0月是12月 mon_no_12: mov month_sg,r3; mov r0,#month_sg;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#10001000b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) sjmp times_2;
times_3_12: cjne a,#12,times_3_13; mov r3,date_sg; acall number_f_9; mov a,r3; cjne a,#00h,date_no_31; mov r3,#31h;0號(hào)是31號(hào) date_no_31: mov date_sg,r3; mov r0,#date_sg;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#10000110b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) sjmp times_2;
times_3_13: cjne a,#13,times_3_14; mov r3,hour_sg; acall number_f_9; cjne a,#0f9h,hour_no_23; mov r3,#23h;0點(diǎn)的后面是23點(diǎn) hour_no_23: mov hour_sg,r3; mov r0,#hour_sg;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要寫 mov b,#10000100b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) sjmp times_2;
times_3_14: cjne a,#14,end_key_3; mov r3,min_sg; acall number_f_9; cjne a,#0f9h,min_no_59; mov r3,#59h; 0分鐘的后面是59分鐘 min_no_59: mov min_sg,r3; mov sec_sg,#00h; lcall write_min; sjmp times_2;
times_2: clr r_or_w;r_or_w=0表示寫數(shù)據(jù)到DS1302 clr week_bit;表示week還沒有被寫 lcall rw_rtc; 寫數(shù)據(jù)到DS1302 end_key_3: nop; ret; ;********************************************************* ; 減一以后個(gè)位是F的數(shù)應(yīng)該變成9的子程序 ;入口信息: ;出口信息: ;影響資源: ;占用資源: ;********************************************************* number_f_9: dec r3; mov a,r3; cjne a,#00h,loop1_1; sjmp loop1; loop1_1: clr ac; clr c;
subb a,#0fh; anl a,#00001111b; jnz loop1;
mov a,r3; clr c; clr ac; subb a,#6; mov r3,a; loop1: ret; ;****************************************************** ; * * * 溫度檢測(cè)子程序 * * * ;入口信息: ;出口信息: ;影響資源: ;占用資源: ;入口條件:程序調(diào)用temp_uter ;出口信息:溫度值存于STEMP單元中 ;影響資源:A PSW R1 DPTR C P1.4 P1.5 ;***************************************************** temp_uter: MOV DPTR,#tab_temp; MOV R1,#00H clr ea; clr et1; BOOK3: mov tmod,#11h; MOV TH1,#0FFH MOV TL1,#0F0H ;#0F0 SETB TR1 SETB P1.4 BOOK2: JB P1.5,BOOK1 JNB TF1,BOOK2 CLR TF1 INC R1 ;加初始值 sJMP BOOK3 BOOK1: MOV A,R1 ADD A,#0dH; CLR TR1 CLR P1.4 PUSH ACC; SUBB A,#32H ;超過50度按50度處理 POP ACC; JC NEST; MOV temp_sg,#32H; SJMP NEST2; NEST: MOVC A,@A+DPTR; MOV temp_sg,A; NEST2: RET; ;-9 -8 -7 -6 -5 -4 -3 -2 -1 tab_temp: DB 0B9H,0B8H,0B7H,0B6H,0B5H,0B4H,0B3H,0B2H,0B1H DB 00H,01H,02H,03H,04H,05h,06h,07H,08H,09H,10H DB 11H,12H,13H,14H,15H,16H,17H,18H,19H,20H,21H DB 22H,23H,24H,25H,26H,27H,28H,29H,30H,31H,32H DB 33H,34H,35H,36H,37H,38H,39H,40H,41H,41H,43H DB 44H,45H,46H,47H,48H,49H,50H ;********************************************************* ;以下子程序用于從當(dāng)前公歷日期,推算星期, 子程序 ;入口信息: ;出口信息: ;影響資源: ;占用資源: ;入口:year_sg,month_sg ,date_sg ,定義公歷年月日,BCD 碼,其中月的 ;BIT7 表示世紀(jì),0 表示20 世紀(jì),1 表示19 世紀(jì),與PCF8563 一致 ;出口week, 0-6 表示星期日-星期六,與PCF8563 一致,程序不改變?nèi)肟跀?shù)據(jù) ;使用資源:ACC,B,psw,temp_byte1,temp_byte2,temp_byte3 ;*********************************************************** get_week: MOV A,year_sg MOV B,#16 DIV AB MOV temp_byte1,B MOV B,#10 MUL AB ADD A,temp_byte1 MOV temp_byte1,A ;temp_byte1=年
MOV A,month_sg JNB ACC.4,getw04 ADD A,#10 CLR ACC.4 getw04: MOV temp_byte2,A ;temp_byte2=月
MOV A,date_sg MOV B,#16 DIV AB MOV temp_byte3,B MOV B,#10 MUL AB ADD A,temp_byte3 MOV temp_byte3,A ;temp_byte3=日
MOV A,temp_byte1; ANL A,#03h
JNZ getw10 ;非閏年轉(zhuǎn)移 MOV A,temp_byte2 CJNE A,#3,getw06
getw06: JNC getw10 ;月大于2 轉(zhuǎn)移 DEC temp_byte3 ;月份小于等于2,又是閏年,日減1 getw10: MOV A,temp_byte2; LCALL get_CorreCt ;取月校正表數(shù)據(jù) ADD A,temp_byte1 MOV B,#7 DIV AB ;B放年加校正日數(shù)之和后除7 的余數(shù)不先做這一步 ;有可能數(shù)據(jù)溢出 MOV A,temp_byte1 ANL A,#0fCh RR A RR A ;以上年除4 即閏年數(shù) ADD A,B ADD A,temp_byte3 dec a; MOV B,#7 DIV AB mov a,b; MOV week,B;
RET get_COrreCt: MOVC A,@A+PC RET DB 0,3,3,6,1,4,6,2,5,0,3,5 ;*********************************************************** ;以下為公歷轉(zhuǎn)農(nóng)歷子程序 ;入口信息: ;出口信息: ;影響資源: ;占用資源: ;*********************************************************** gong_nong: MOV A,year_sg ;將年月日轉(zhuǎn)化為HEX 格式 MOV B,#16 DIV AB MOV nong_year_sg,B MOV B,#10 MUL AB ADD A,nong_year_sg MOV nong_year_sg,A
MOV A,month_sg JNB ACC.4,CON_02 CLR ACC.4 ;ACC.4 為1 表示大于10 月 ADD A,#10 CON_02: MOV nong_month_sg,A
MOV A,date_sg MOV B,#16 DIV AB MOV nong_date_sg,B MOV B,#10 MUL AB ADD A,nong_date_sg MOV nong_date_sg,A
MOV dptr,#month_data ;以下定位本年數(shù)據(jù)在表格中的位置 MOV A,nong_year_sg CLR C SUBB A,#start_year; MOV B,#3;表格每年3 字節(jié) MUL AB ADD A,dpl MOV dpl,A MOV A,B ADDC A,dph MOV dph,A MOV A,#2 MOVC A,@A+dptr ;讀本年表格最后一字節(jié)(春節(jié)日期) CLR ACC.7 ;ACC.7 是閏年第13 個(gè)月大小,在此不用 MOV B,#32 DIV AB MOV temp_byte1,A ;春節(jié)月份 MOV temp_byte2,B ;春節(jié)日
; 以下計(jì)算當(dāng)前日期距元旦天數(shù) MOV temp_byte3,#0 ;設(shè)距元旦天數(shù)高位為0 MOV A,nong_month_sg CJNE A,#10,CON_08 CON_08: JC CON_09 ;9月以前日子數(shù)小于256 天,高字節(jié)為0
(9 月份過去的整月為8 個(gè)月) MOV temp_byte3,#1 CON_09: MOV A,nong_year_sg ANL A,#03h ;ACC 為除4 的余數(shù) JNZ CON_10 ;轉(zhuǎn)常年處理 ; 年除4 余數(shù)為0 是閏年 MOV A,nong_month_sg LCALL get_ruN_dAys_lOw ;取得閏年過去月的天數(shù)的低字節(jié) SJMP CON_12 CON_10: MOV A,nong_month_sg LCALL get_dAys_lOw ;取得常年過去月的天數(shù)的低字節(jié) CON_12: MOV B,nong_date_sg DEC B ;因?yàn)槿掌趶? 日起,而不是0 日起 ADD A,B ;過去的整月天數(shù)加當(dāng)月天數(shù) MOV temp_byte4,A JNC CON_14 INC temp_byte3 ;temp_byte3,temp_byte4 分別為公歷年過去的
天數(shù)的高低字節(jié) ; 以下求春節(jié)距元旦天數(shù),因肯定小于256 天所以只用一字節(jié)表示 CON_14: MOV A,temp_byte1 LCALL get_dAys_lOw ;春節(jié)不會(huì)在3 月份,不用考慮閏年 DEC A ;因?yàn)槿掌趶? 日起 ADD A,temp_byte2 MOV temp_byte5,A ;temp_byte5,為春節(jié)距元旦天數(shù) MOV A,nong_month_sg CJNE A,temp_byte1,CON_20 ;轉(zhuǎn)換月與春節(jié)月比較 MOV A,nong_date_sg CJNE A,temp_byte2,CON_20 ;轉(zhuǎn)換日與春節(jié)日比較 CON_20: JC CON_22 LJMP CON_60 ;當(dāng)前日大于等于春節(jié)日期,公歷年與農(nóng)歷年同年份 CON_22: MOV A,nong_year_sg ;不到春節(jié),農(nóng)歷年比公歷年低一年 DEC A MOV nong_year_sg,A MOV A,dpl CLR C SUBB A,#3 MOV dpl,A JNC CON_26 DEC dph ;表格指針指向上一年 CON_26: MOV A,temp_byte5 CLR C SUBB A,temp_byte4 MOV temp_byte3,A ;temp_byte3 中為當(dāng)前日離春節(jié)的天數(shù) MOV nong_month_sg,#12 ;農(nóng)歷月為12 月 CLR f0 ;1901-2099 年沒有閏12 月,清閏月標(biāo)志 CLR A MOVC A,@A+dptr ANL A,#0f0h SWAP A; MOV temp_byte4,A ;temp_byte4 中為閏月 JZ CON_30 ;沒有閏月轉(zhuǎn)移 MOV A,#2 ;有閏月,取第13 個(gè)月天數(shù) MOVC A,@A+dptr MOV C,ACC.7 MOV A,#1 MOVC A,@A+dptr RLC A ;ACC 中為最后6 個(gè)月的大小值 SJMP CON_34 CON_30: MOV A,#1 MOVC A,@A+dptr ;ACC 中為最后6 個(gè)月的大小值 CON_34: MOV temp_byte5,A CON_40: MOV A,temp_byte5 RRC A MOV temp_byte5,A JC CON_42 MOV B,#29 ;小月29 天 SJMP CON_44 CON_42: MOV B,#30 ;大月30 天 CON_44: MOV A,temp_byte3 CLR C SUBB A,B JZ CON_46 ;正好夠減,就是農(nóng)歷日1 日 JNC CON_50 ;不夠減一月天數(shù),結(jié)束農(nóng)歷月調(diào)整 CPL A ;求補(bǔ)取絕對(duì)值 INC A CON_46: INC A ;加1 即為農(nóng)歷日 MOV B,#10 ;轉(zhuǎn)換并保存農(nóng)歷日,月,年 DIV AB SWAP A ORL A,B MOV nong_date_sg,A MOV A,nong_month_sg MOV B,#10 DIV AB SWAP A ORL A,B MOV C,f0 MOV ACC.7,C MOV nong_month_sg,A MOV A,nong_year_sg MOV B,#10 DIV AB SWAP A ORL A,B MOV nong_year_sg,A RET ;結(jié)束轉(zhuǎn)換 CON_50: MOV temp_byte3,A ;temp_byte3 存減去一月后的天數(shù) JB f0,CON_52 ;是閏月,前推一月,月份不減 DEC nong_month_sg; CON_52: MOV A,nong_month_sg CJNE A,temp_byte4,CON_54 CPL f0 ;當(dāng)前月與閏月相同,更改閏月標(biāo)志 CON_54: SJMP CON_40 CON_60: MOV A,temp_byte4 ;春節(jié)日小于當(dāng)前日,農(nóng)歷年同公歷年 CLR C SUBB A,temp_byte5 MOV temp_byte4,A JNC CON_62 DEC temp_byte3 ;temp_byte3 temp_byte4 中為公歷日離春節(jié)的天數(shù) CON_62: MOV nong_month_sg,#1 ;農(nóng)歷月為1 月 CLR A MOVC A,@A+dptr MOV temp_byte5,A ANL A,#0f0h SWAP A; XCH A,temp_byte5 ;temp_byte5 中為閏月,ACC 為當(dāng)年農(nóng)歷表第一字節(jié) CLR f0 ;第一個(gè)月肯定不是閏月 ANL A,#0fh MOV temp_byte1,A MOV A,#1 MOVC A,@A+dptr MOV temp_byte2,A ANL A,#0f0h ORL A,temp_byte1 SWAP A MOV temp_byte1,A MOV A,#2 MOVC A,@A+dptr MOV C,ACC.7 MOV A,temp_byte2 ANL A,#0fh SWAP A MOV ACC.3,C; MOV temp_byte2,A ;以上temp_byte1,temp_byte2 各BIT 存農(nóng)歷年大小 CON_70: MOV A,temp_byte2 RLC A MOV temp_byte2,A MOV A,temp_byte1 RLC A MOV temp_byte1,A JC CON_72 MOV B,#29 ;小月29 天處理 SJMP CON_74 CON_72: MOV B,#30 ;大月30 天 CON_74: MOV A,temp_byte4 CLR C SUBB A,B JNC CON_78 ;低字節(jié)夠減跳轉(zhuǎn) MOV B,A ;低字節(jié)不夠減, B 暫存減后結(jié)果, MOV A,temp_byte3 JZ CON_76 ;高字節(jié)為0,不夠減 DEC temp_byte3 MOV temp_byte4,B SJMP CON_80 CON_76: MOV A,temp_byte4 ;不夠減結(jié)束月調(diào)整 LJMP CON_46 ;轉(zhuǎn)日期加1 后,處理并保存轉(zhuǎn)換后農(nóng)歷年月日 CON_78: MOV temp_byte4,A ;temp_byte3 temp_byte4
天數(shù)為減去一月后天數(shù) CON_80: MOV A,nong_month_sg CJNE A,temp_byte5,CON_82 CPL f0 ;當(dāng)前月與閏月相同,更改閏月標(biāo)志 JNB f0,CON_82 ;更改標(biāo)志后是非閏月,月份加1 SJMP CON_70 CON_82: INC nong_month_sg; SJMP CON_70 get_dAys_lOw: MOVC A,@A+PC ;取得常年過去月的天數(shù)的低字節(jié) RET DB 0,31,59,90,120,151,181,212,243,17,48,78 get_ruN_dAys_lOw: MOVC A,@A+PC ;取得閏年過去月的天數(shù)的低字節(jié) RET DB 0,31,60,91,121,152,182,213,244,18,49,79 month_data: ;公歷年對(duì)應(yīng)的農(nóng)歷數(shù)據(jù),每年三字節(jié), ;格式第一字節(jié)BIT7-4 位表示閏月月份,值為0 為無閏月,
BIT3-0 對(duì)應(yīng)農(nóng)歷第1-4 月的大小 ;第二字節(jié)BIT7-0 對(duì)應(yīng)農(nóng)歷第5-12 月大小,
第三字節(jié)BIT7 表示農(nóng)歷第13 個(gè)月大小 ;月份對(duì)應(yīng)的位為1 表示本農(nóng)歷月大(30 天),為0 表示小(29 天). ;第三字節(jié)BIT6-5 表示春節(jié)的公歷月份,BIT4-0 表示春節(jié)的公歷日 DB 00Ch,096h,045h; 2000 DB 04dh,04Ah,0B8h; 2001 DB 00dh,04Ah,04Ch; 2002 DB 00dh,0A5h,041h; 2003 DB 025h,0AAh,0B6h; 2004 DB 005h,06Ah,049h; 2005 DB 07Ah,0Adh,0Bdh; 2006 DB 002h,05dh,052h; 2007 DB 009h,02dh,047h; 2008 DB 05Ch,095h,0BAh; 2009 DB 00Ah,095h,04eh; 2010 DB 00Bh,04Ah,043h; 2011 DB 04Bh,055h,037h; 2012 DB 00Ah,0d5h,04Ah; 2013 DB 095h,05Ah,0Bfh; 2014 DB 004h,0BAh,053h; 2015 DB 00Ah,05Bh,048h; 2016 DB 065h,02Bh,0BCh; 2017 DB 005h,02Bh,050h; 2018 DB 00Ah,093h,045h; 2019 DB 047h,04Ah,0B9h; 2020 DB 006h,0AAh,04Ch; 2021 DB 00Ah,0d5h,041h; 2022 DB 024h,0dAh,0B6h; 2023 DB 004h,0B6h,04Ah; 2024 DB 069h,057h,03dh; 2025 DB 00Ah,04eh,051h; 2026 DB 00dh,026h,046h; 2027 DB 05eh,093h,03Ah; 2028 DB 00dh,053h,04dh; 2029 DB 005h,0AAh,043h; 2030 DB 036h,0B5h,037h; 2031 DB 009h,06dh,04Bh; 2032 DB 0B4h,0Aeh,0Bfh; 2033 DB 004h,0Adh,053h; 2034 DB 00Ah,04dh,048h; 2035 DB 06dh,025h,0BCh; 2036 DB 00dh,025h,04fh; 2037 DB 00dh,052h,044h; 2038 DB 05dh,0AAh,038h; 2039 DB 00Bh,05Ah,04Ch; 2040 DB 005h,06dh,041h; 2041 DB 024h,0Adh,0B6h; 2042 DB 004h,09Bh,04Ah; 2043 DB 07Ah,04Bh,0Beh; 2044 DB 00Ah,04Bh,051h; 2045 DB 00Ah,0A5h,046h; 2046 DB 05Bh,052h,0BAh; 2047 DB 006h,0d2h,04eh; 2048 DB 00Ah,0dAh,042h; 2049 ;********************************************************* ; 根據(jù)公歷換算出節(jié)氣 子程序 ;********************************************************* jieqi_zhuanhuan: nop; mov r7,year_sg; mov a,year_sg; cjne a,#03h,teshu_year_04;
mov a,month_sg; cjne a,#10h,teshu_month_11; mov a,date_sg; cjne a,#09h,no_teshu_date; mov jieqi_1,#11111111b mov jieqi_2,#11111111b mov jieqi_3,#01111111b;今天是2003年10月9號(hào),今天是特殊年的"寒露" ljmp end_jieqi;
teshu_month_11: cjne a,#11h,no_teshu_date; mov a,date_sg; cjne a,#23h,no_teshu_date; mov jieqi_1,#11111111b mov jieqi_2,#11111111b mov jieqi_3,#11101111b;今天是2003年11月23號(hào),今天是特殊年的"小雪" ljmp end_jieqi;
teshu_year_04: cjne a,#04h,teshu_year_07; mov a,month_sg; cjne a,#01h,no_teshu_date; mov a,date_sg; cjne a,#21h,no_teshu_date; mov jieqi_1,#11111111b mov jieqi_2,#11111111b mov jieqi_3,#11111110b; 今天是2004年1月21號(hào),今天是特殊年的"大寒" ljmp end_jieqi;
teshu_year_07: cjne a,#07h,no_teshu_date; mov a,month_sg; cjne a,#10h,no_teshu_date; mov a,date_sg; cjne a,#09h,no_teshu_date; mov jieqi_1,#11111111b mov jieqi_2,#11111111b mov jieqi_3,#01111111b; 今天是2007年10月9號(hào),今天是特殊年的"寒露" ljmp end_jieqi;
no_teshu_date: mov A,year_sg ;將年月日轉(zhuǎn)化為HEX 格式 mov B,#16 div AB mov year_sg,B mov B,#10 mul AB add A,year_sg mov year_sg,A
mov a,month_sg; cjne a,#02h,month_3;是2月嗎?
mov a,date_sg; cjne a,#03h,date_02_04;是2月3號(hào)嗎? lcall jieqi_weizhi; mov a,#0; movc a,@a+dptr; rlc a; jc no_jieqi_1; mov jieqi_1,#01111111b; 今天是立春 ljmp end_jieqi; date_02_04: cjne a,#04h,date_02_18;是2月4號(hào)嗎? lcall jieqi_weizhi; mov a,#0; movc a,@a+dptr; rlc a; jnc no_jieqi_1; mov jieqi_1,#01111111b; 今天是立春 ljmp end_jieqi;
date_02_18: cjne a,#18h,date_02_19;是2月18號(hào)嗎? lcall jieqi_weizhi; mov a,#0; movc a,@a+dptr; rlc a; rlc a; jc no_jieqi_1; mov jieqi_1,#10111111b; 今天是雨水 ljmp end_jieqi; date_02_19: cjne a,#19h,no_jieqi_1;是2月19號(hào)嗎? lcall jieqi_weizhi; mov a,#0; movc a,@a+dptr; rlc a; rlc a; jnc no_jieqi_1; mov jieqi_1,#10111111b; 今天是雨水 ljmp end_jieqi;
no_jieqi_1: ljmp no_jieqi_2;
month_3: cjne a,#03h,month_04;是3月嗎?
mov a,date_sg; cjne a,#05h,date_03_06;是3月5號(hào)嗎? lcall jieqi_weizhi; mov a,#0; movc a,@a+dptr; rlc a; rlc a; rlc a; jc no_jieqi_2; mov jieqi_1,#11011111b; 今天是驚蟄 ljmp end_jieqi; date_03_06: cjne a,#06h,date_03_20;是3月6號(hào)嗎? lcall jieqi_weizhi; mov a,#0; movc a,@a+dptr; rlc a; rlc a; rlc a; jnc no_jieqi_2; mov jieqi_1,#11011111b; 今天是驚蟄 ljmp end_jieqi;
date_03_20: cjne a,#20h,date_03_21;是3月20號(hào)嗎? lcall jieqi_weizhi; mov a,#0; movc a,@a+dptr; rlc a; rlc a; rlc a; rlc a; jc no_jieqi_2; mov jieqi_1,#11101111b; 今天是春分 ljmp end_jieqi; date_03_21: cjne a,#21h,no_jieqi_2;是3月21號(hào)嗎? lcall jieqi_weizhi; mov a,#0; movc a,@a+dptr; rlc a; rlc a; rlc a; rlc a; jnc no_jieqi_2; mov jieqi_1,#11101111b; 今天是春分 ljmp end_jieqi;
no_jieqi_2: ljmp no_jieqi_3;
month_04: cjne a,#04h,month_05;是4月嗎?
mov a,date_sg; cjne a,#04h,date_04_05;是4月4號(hào)嗎? lcall jieqi_weizhi; mov a,#0; movc a,@a+dptr; rrc a; rrc a; rrc a; rrc a; jc no_jieqi_3; mov jieqi_1,#11110111b; 今天是清明 ljmp end_jieqi; date_04_05: cjne a,#05h,date_04_19;是4月5號(hào)嗎? lcall jieqi_weizhi; mov a,#0; movc a,@a+dptr; rrc a; rrc a; rrc a; rrc a; jnc no_jieqi_3; mov jieqi_1,#11110111b; 今天是清明 ljmp end_jieqi;
date_04_19: cjne a,#19h,date_04_20;是4月19號(hào)嗎? lcall jieqi_weizhi; mov a,#0; movc a,@a+dptr; rrc a; rrc a; rrc a; jc no_jieqi_3; mov jieqi_1,#11111011b; 今天是谷雨 ljmp end_jieqi; date_04_20: cjne a,#20h,no_jieqi_3;是4月20號(hào)嗎? lcall jieqi_weizhi; mov a,#0; movc a,@a+dptr; rrc a; rrc a; rrc a; jnc no_jieqi_3; mov jieqi_1,#11111011b; 今天是谷雨 ljmp end_jieqi;
no_jieqi_3: ljmp no_jieqi_4;
month_05: cjne a,#05h,month_06;是5月嗎?
mov a,date_sg; cjne a,#05h,date_05_06;是5月5號(hào)嗎? lcall jieqi_weizhi; mov a,#0; movc a,@a+dptr; rrc a; rrc a; jc no_jieqi_4; mov jieqi_1,#11111101b; 今天是立夏 ljmp end_jieqi; date_05_06: cjne a,#06h,date_05_20;是5月6號(hào)嗎? lcall jieqi_weizhi; mov a,#0; movc a,@a+dptr; rrc a; rrc a; jnc no_jieqi_4; mov jieqi_1,#11111101b; 今天是立夏 ljmp end_jieqi;
date_05_20: cjne a,#20h,date_05_21;是5月21號(hào)嗎? lcall jieqi_weizhi; mov a,#0; movc a,@a+dptr; rrc a; jc no_jieqi_4; mov jieqi_1,#11111110b; 今天是小滿 ljmp end_jieqi; date_05_21: cjne a,#21h,no_jieqi_4;是5月21號(hào)嗎? lcall jieqi_weizhi; mov a,#0; movc a,@a+dptr; rrc a; jnc no_jieqi_4; mov jieqi_1,#11111110b; 今天是小滿 ljmp end_jieqi;
no_jieqi_4: ljmp no_jieqi_5;
month_06: cjne a,#06h,month_07;是6月嗎?
mov a,date_sg; cjne a,#05h,date_06_06;是6月5號(hào)嗎? lcall jieqi_weizhi; mov a,#1; movc a,@a+dptr; rlc a; jc no_jieqi_5; mov jieqi_2,#01111111b; 今天是芒種 ljmp end_jieqi; date_06_06: cjne a,#06h,date_06_21;是6月6號(hào)嗎? lcall jieqi_weizhi; mov a,#1; movc a,@a+dptr; rlc a; jnc no_jieqi_5; mov jieqi_2,#01111111b; 今天是芒種 ljmp end_jieqi;
date_06_21: cjne a,#21h,date_06_22;是6月21號(hào)嗎? lcall jieqi_weizhi; mov a,#1; movc a,@a+dptr; rlc a; rlc a; jc no_jieqi_5; mov jieqi_2,#10111111b; 今天是夏至 ljmp end_jieqi; date_06_22: cjne a,#22h,no_jieqi_5;是6月22號(hào)嗎? lcall jieqi_weizhi; mov a,#1; movc a,@a+dptr; rlc a; rlc a; jnc no_jieqi_5; mov jieqi_2,#10111111b; 今天是夏至 ljmp end_jieqi;
no_jieqi_5: ajmp no_jieqi_6;
month_07: cjne a,#07h,month_08;是7月嗎?
mov a,date_sg; cjne a,#06h,date_07_07;是7月6號(hào)嗎? lcall jieqi_weizhi; mov a,#1; movc a,@a+dptr; rlc a; rlc a; rlc a; jc no_jieqi_6; mov jieqi_2,#11011111b; 今天是小暑 ljmp end_jieqi; date_07_07: cjne a,#07h,date_07_22;是7月7號(hào)嗎? lcall jieqi_weizhi; mov a,#1; movc a,@a+dptr; rlc a; rlc a; rlc a; jnc no_jieqi_6; mov jieqi_2,#11011111b; 今天是小暑 ljmp end_jieqi;
date_07_22: cjne a,#22h,date_07_23;是7月22號(hào)嗎? lcall jieqi_weizhi; mov a,#1; movc a,@a+dptr; rlc a; rlc a; rlc a; rlc a; jc no_jieqi_6; mov jieqi_2,#11101111b; 今天是大暑 ljmp end_jieqi; date_07_23: cjne a,#23h,no_jieqi_6;是7月23號(hào)嗎? lcall jieqi_weizhi; mov a,#1; movc a,@a+dptr; rlc a; rlc a; rlc a; rlc a; jnc no_jieqi_6; mov jieqi_2,#11101111b; 今天是大暑 ljmp end_jieqi;
no_jieqi_6: ajmp no_jieqi_7;
month_08: cjne a,#08h,month_09;是8月嗎?
mov a,date_sg; cjne a,#07h,date_08_08;是8月7號(hào)嗎? lcall jieqi_weizhi; mov a,#1; movc a,@a+dptr; rrc a; rrc a; rrc a; rrc a; jc no_jieqi_7; mov jieqi_2,#11110111b; 今天是立秋 ljmp end_jieqi; date_08_08: cjne a,#08h,date_08_22;是8月8號(hào)嗎? lcall jieqi_weizhi; mov a,#1; movc a,@a+dptr; rrc a; rrc a; rrc a; rrc a; jnc no_jieqi_7; mov jieqi_2,#11110111b; 今天是立秋 ljmp end_jieqi;
date_08_22: cjne a,#22h,date_08_23;是8月22號(hào)嗎? lcall jieqi_weizhi; mov a,#1; movc a,@a+dptr; rrc a; rrc a; rrc a; jc no_jieqi_7; mov jieqi_2,#11111011b; 今天是處暑 ljmp end_jieqi; date_08_23: cjne a,#23h,no_jieqi_7;是8月23號(hào)嗎? lcall jieqi_weizhi; mov a,#1; movc a,@a+dptr; rrc a; rrc a; rrc a; jnc no_jieqi_7; mov jieqi_2,#11111011b; 今天是處暑 ljmp end_jieqi;
no_jieqi_7: ajmp no_jieqi_8;
month_09: cjne a,#09h,month_10;是9月嗎?
mov a,date_sg; cjne a,#07h,date_09_08;是9月7號(hào)嗎? lcall jieqi_weizhi; mov a,#1; movc a,@a+dptr; rrc a; rrc a; jc no_jieqi_8; mov jieqi_2,#11111101b; 今天是白露 ljmp end_jieqi; date_09_08: cjne a,#08h,date_09_22;是9月8號(hào)嗎? lcall jieqi_weizhi; mov a,#1; movc a,@a+dptr; rrc a; rrc a; jnc no_jieqi_8; mov jieqi_2,#11111101b; 今天是白露 ljmp end_jieqi;
date_09_22: cjne a,#22h,date_09_23;是9月22號(hào)嗎? lcall jieqi_weizhi; mov a,#1; movc a,@a+dptr; rrc a; jc no_jieqi_8; mov jieqi_2,#11111110b; 今天是秋分 ljmp end_jieqi; date_09_23: cjne a,#23h,no_jieqi_8;是9月23號(hào)嗎? lcall jieqi_weizhi; mov a,#1; movc a,@a+dptr; rrc a; jnc no_jieqi_8; mov jieqi_2,#11111110b; 今天是秋分 ljmp end_jieqi;
no_jieqi_8: ljmp no_jieqi_9;
month_10: cjne a,#10h,month_11;是10月嗎? mov a,date_sg; cjne a,#08h,date_10_07;是10月8號(hào)嗎? lcall jieqi_weizhi; mov a,#2; movc a,@a+dptr; rlc a; jc no_jieqi_9; mov jieqi_3,#01111111b; 今天是寒露 ljmp end_jieqi; date_10_07: cjne a,#07h,date_10_23;是10月7號(hào)嗎? lcall jieqi_weizhi; mov a,#2; movc a,@a+dptr; rlc a; jnc no_jieqi_9; mov jieqi_3,#01111111b; 今天是寒露 ljmp end_jieqi;
date_10_23: cjne a,#23h,date_10_24;是10月23號(hào)嗎? lcall jieqi_weizhi; mov a,#2; movc a,@a+dptr; rlc a; rlc a; jc no_jieqi_9; mov jieqi_3,#10111111b; 今天是霜降 ljmp end_jieqi; date_10_24: cjne a,#24h,no_jieqi_9;是10月24號(hào)嗎? lcall jieqi_weizhi; mov a,#2; movc a,@a+dptr; rlc a; rlc a; jnc no_jieqi_9; mov jieqi_3,#10111111b; 今天是霜降 ljmp end_jieqi;
no_jieqi_9: ajmp no_jieqi_10;
month_11: cjne a,#11h,month_12;是11月嗎?
mov a,date_sg; cjne a,#07h,date_11_08;是11月7號(hào)嗎? lcall jieqi_weizhi; mov a,#2; movc a,@a+dptr; rlc a; rlc a; rlc a; jc no_jieqi_10; mov jieqi_3,#11011111b; 今天是立冬 ljmp end_jieqi; date_11_08: cjne a,#08h,date_11_22;是11月8號(hào)嗎? lcall jieqi_weizhi; mov a,#2; movc a,@a+dptr; rlc a; rlc a; rlc a; jnc no_jieqi_10; mov jieqi_3,#11011111b; 今天是立冬 ljmp end_jieqi;
date_11_22: cjne a,#22h,date_11_21;是11月22號(hào)嗎? lcall jieqi_weizhi; mov a,#2; movc a,@a+dptr; rlc a; rlc a; rlc a; rlc a; jc no_jieqi_10; mov jieqi_3,#11101111b; 今天是小雪 ljmp end_jieqi; date_11_21: cjne a,#21h,no_jieqi_10;是11月21號(hào)嗎? lcall jieqi_weizhi; mov a,#2; movc a,@a+dptr; rlc a; rlc a; rlc a; rlc a; jnc no_jieqi_10; mov jieqi_3,#11101111b; 今天是小雪 ljmp end_jieqi;
no_jieqi_10: ajmp no_jieqi_11;
month_12: cjne a,#12h,month_01;是12月嗎?
mov a,date_sg; cjne a,#06h,date_12_07;是12月6號(hào)嗎? lcall jieqi_weizhi; mov a,#2; movc a,@a+dptr; rrc a; rrc a; rrc a; rrc a; jc no_jieqi_11; mov jieqi_3,#11110111b; 今天是大雪 ljmp end_jieqi; date_12_07: cjne a,#07h,date_12_21;是12月7號(hào)嗎? lcall jieqi_weizhi; mov a,#2; movc a,@a+dptr; rrc a; rrc a; rrc a; rrc a; jnc no_jieqi_11; mov jieqi_3,#11110111b; 今天是大雪 ljmp end_jieqi;
date_12_21: cjne a,#21h,date_12_22;是12月21號(hào)嗎? lcall jieqi_weizhi; mov a,#2; movc a,@a+dptr; rrc a; rrc a; rrc a; jc no_jieqi_11; mov jieqi_3,#11111011b; 今天是冬至 ljmp end_jieqi; date_12_22: cjne a,#22h,no_jieqi_11;是12月22號(hào)嗎? lcall jieqi_weizhi; mov a,#2; movc a,@a+dptr; rrc a; rrc a; rrc a; jnc no_jieqi_11; mov jieqi_3,#11111011b; 今天是冬至 ljmp end_jieqi;
no_jieqi_11: ajmp no_jieqi_12;
month_01: mov a,date_sg; cjne a,#05h,date_1_06;是1月5號(hào)嗎? lcall jieqi_weizhi; mov a,#2; movc a,@a+dptr; rrc a; rrc a; jc no_jieqi_12; mov jieqi_3,#11111101b; 今天是小寒 ljmp end_jieqi; date_1_06: cjne a,#06h,date_1_20;是1月6號(hào)嗎? lcall jieqi_weizhi; mov a,#2; movc a,@a+dptr; rrc a; rrc a; jnc no_jieqi_12; mov jieqi_3,#11111101b; 今天是小寒 ljmp end_jieqi;
date_1_20: cjne a,#20h,date_1_21;是1月20號(hào)嗎? lcall jieqi_weizhi; mov a,#2; movc a,@a+dptr; rrc a; jc no_jieqi_12; mov jieqi_3,#11111110b; 今天是大寒 ljmp end_jieqi; date_1_21: c, jne a,#21h,no_jieqi_12;是1月21號(hào)嗎? lcall jieqi_weizhi; mov a,#2; movc a,@a+dptr; rrc a; jnc no_jieqi_12; mov jieqi_3,#11111110b; 今天是大寒 ljmp end_jieqi;
no_jieqi_12: mov year_sg,r7; mov jieqi_1,#11111111b; mov jieqi_2,#11111111b; mov jieqi_3,#11111111b; end_jieqi: mov year_sg,r7; ret;
;************************************************** ; 定位本年數(shù)據(jù)在表格中的位置 子程序 ;************************************************** jieqi_weizhi: mov dptr,#jieqi_tab; mov a,year_sg; clr c; subb a,#start_year;
mov b,#3; mul ab; add a,dpl; mov dpl,a; mov a,b; addc a,dph; mov dph,a; ret;
jieqi_tab: DB 0c5h,025h,00bh; 2000 DB 08dh,035h,00ch; 2001 DB 0ffh,0bfh,00ch; 2002 DB 0ffh,0ffh,0feh; 2003 DB 0c5h,025h,00bh; 2004 DB 08dh,035h,00ch; 2005 DB 0ffh,0bfh,00ch; 2006 DB 0ffh,0ffh,0eeh; 2007 DB 0c5h,025h,00ah; 2008 DB 005h,035h,00ch; 2009 DB 0ddh,0bfh,00ch; 2010 DB 0ffh,0ffh,06ch; 2011 DB 0c5h,024h,002h; 2012 DB 005h,035h,008h; 2013 DB 0ddh,0b7h,00ch; 2014 DB 0ffh,0ffh,00ch; 2015 DB 0c0h,024h,002h; 2016 DB 005h,035h,008h; 2017 DB 08dh,0b7h,00ch; 2018 DB 0ffh,0ffh,06ch; 2019 DB 0c0h,024h,002h; 2020 DB 005h,025h,008h; 2021 DB 08dh,0b7h,00ch; 2022 DB 0ffh,0ffh,00ch; 2023 DB 0c0h,004h,002h; 2024 DB 005h,025h,008h; 2025 DB 08dh,0b5h,00ch; 2026 DB 0ffh,0bfh,00ch; 2027 DB 0c0h,000h,002h; 2028 DB 005h,025h,008h; 2029 DB 08dh,0b5h,00ch; 2030 DB 0ffh,0bfh,00ch; 2031 DB 0c0h,000h,002h; 2032 DB 005h,025h,008h; 2033 DB 08dh,035h,00ch; 2034 DB 0ffh,0bfh,00ch; 2035 DB 0c0h,000h,002h; 2036 DB 005h,025h,009h; 2037 DB 08dh,035h,00ch; 2038 DB 0fdh,0bfh,00ch; 2039 DB 0c0h,000h,090h; 2040 DB 005h,024h,009h; 2041 DB 005h,035h,00ch; 2042 DB 0ddh,0bfh,000h; 2043 DB 0c0h,000h,090h; 2044 DB 005h,024h,001h; 2045 DB 005h,035h,008h; 2046 DB 0ddh,0b7h,00ch; 2047 DB 0c0h,000h,090h; 2048 DB 000h,024h,001h; 2049 ;***************************************************** ; 定時(shí)到就打鈴子程序 ;***************************************************** dingshi: jb t_stop,t_mei_dao; jnb t1_on_off,t1_mei_dao; mov a,t1_hour_sg; cjne a,hour_sg,t1_mei_dao; mov a,t1_min_sg; cjne a,min_sg,t1_mei_dao; setb t_chang; lcall song; t1_mei_dao: jnb t2_on_off,t2_mei_dao mov a,t2_hour_sg; cjne a,hour_sg,t2_mei_dao; mov a,t2_min_sg; cjne a,min_sg,t2_mei_dao; setb t_chang; lcall song; t2_mei_dao: jnb t3_on_off,t_mei_dao mov a,t3_hour_sg; cjne a,hour_sg,t_mei_dao; mov a,t3_min_sg; cjne a,min_sg,t_mei_dao; setb t_chang; lcall song; t_mei_dao: ret; ;****************************************************** ; ;****************************************************** song: MOV TMOD,#11H ; 都工作在方式1 SETB EA SETB ET0 SETB ET1 MOV DPTR,#SONG_1 mov SONGH,dph mov SONGL,dpl MOV DPTR,#CTIME_1 mov TIMEH,dph mov TIMEL,dpl mov a,TIMEL clr c subb a,SONGL mov SIZE,a ACALL Play ret; ;**************************************************** ; ;**************************************************** Play: MOV sptr,#0 CLR TR0 Play_01: MOV DPH,SONGH MOV DPL,SONGL MOV A,sptr MOVC A,@A+DPTR
MOV VOICE ,A
MOV DPH,TIMEH MOV DPL,TIMEL MOV A,sptr MOVC A,@A+DPTR MOV DELAY,A MOV A,#10h CLR C SUBB A,DELAY ANL A,#0FH INC A MOV DELAY ,A
INC sptr
MOV A,sptr CJNE A,SIZE,PLAY_CONTINUE end_play: RET
PLAY_CONTINUE: nop; MOV SongFlag,#0 MOV TH0,#0EFH MOV TL0,#0E0H SETB TR0
PLAY_wwwS: nop; lcall main_2; lcall stop_song_key; mov A,SongFlag CJNE A,#1,PLAY_wwwS; jnb t_stop,t_run; sjmp end_play; t_run: lJMP Play_01
;********************************************************** ; T0中斷子程序 ;********************************************************** TIMER0: PUSH A push psw; CLR TR0 MOV TH0,#0C2H MOV TL0,#0F7H
DJNZ DELAY,timer0_01 MOV SongFlag,#1 CLR TR0
timer0_01: MOV A,VOICE CJNE A,#0,timer0_02 ; 是否是休止符 CLR TR1 ; 是 則 clear TR1 lJMP timer0_03 timer0_02: SETB TR1 ; 不是則 set TR1 timer0_03: SETB TR0 pop psw POP A RETI
;******************************************************** ; T1中斷子程序 ;******************************************************** TIMER1: PUSH A push psw; push dpl push dph CLR TR1 MOV DPTR,#Ttable MOV A,VOICE RL A ANL A,#0FEH MOV J, A
MOVC A,@A+DPTR MOV TH1,A MOV A,J INC A MOVC A,@A+DPTR MOV TL1,A cpl p1.6 SETB TR1 pop dph pop dpl pop psw; POP A RETI Ttable: DB 0F8H,08BH ,0F9H,05BH ,0FAH,014H ,0FAH,06BH , DB 0FBH,004H ,0FBH,08FH ,0FCH,00BH ,0FCH,045H , DB 0FCH,0ADH ,0FDH,00AH ,0FDH,033H ,0FDH,082H , DB 0FDH,0C7H ,0FEH,003H ,0FEH,021H ,0FEH,056H , DB 0FEH,084H ,0FEH,099H ,0FEH,0C0H ,0FEH,0E3H , DB 0FFH,001H ,0FFH,010H , ;《你的樣子》 SONG_1: DB H7,H6,H6,H6,H6,H7,H6,H5,H5,H3,Z0,H5,H3,H2,
H2,H2,H2,H3,H2,H1,H3,M7,M7,M7,M7,M7,M5
DB 6,M6,M6,M6,M5,M6,M7,M6,M6,M6,H1,H7,H6,H3,H3,H6,H6,
H5,H3,H3,H2,H1,H2,H3,H3,H3
DB H6,H5,H3,H2,H3,H3,H1,H2,H3,H3,H2,H1,H2,M7,M7,M7,
H1,H7,H6,H3,H3,H6,H6,H5
DB H3,H3,H2,H1,H2,H3,H3,H3,H6,H5,H3,H2,H3,H3,H1,H2
DB H3,H3,H2,H1,H2,M7,M7,H3,H3,H3,H3,H3,H3,H3,H3,H3 CTIME_1:DB 8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,4 ,4 ,8 ,8 ,
4 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,4 ,8 ,8 ,8 ,8 ,8 DB 8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,2 ,2 ,2 ,8 ,8 ,2 ,8 ,8
,8 ,8 ,4 ,8 ,8 ,8 ,4 ,8 ,2 ,2 DB 1 ,8 ,8 ,8 ,3 ,4 ,8 ,8 ,4 ,8 ,8 ,8 ,4 ,8 ,2 ,2
,1 ,8 ,8 ,2 ,8 ,8 ,8 ,8 DB 4 ,8 ,8 ,8 ,4 ,8 ,2 ,2 ,1 ,8 ,8 ,8 ,4 ,4 ,8 ,8 DB 4 ,8 ,8 ,8 ,4 ,8 ,1 ,8 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ;************************************************* ; 從DS1302中讀秒 ;************************************************* read_sec: setb r_or_w;r_or_w=1表示從DS1302中讀數(shù)據(jù) clr week_bit;表示week還沒有被寫 mov r0,#sec_sg;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#1;有1位數(shù)需要讀 mov b,#10000001b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) lcall rw_rtc;從DS1302中讀數(shù)據(jù) ret; ;************************************************* ; 寫分鐘到DS1302 ;************************************************ write_min: mov r0,#sec_sg;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#2;有2位數(shù)需要寫 mov b,#10000000b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) ret; ;********************************************** ; 從DS1302中讀7個(gè)數(shù),分別為year,month,date,hour,min,sec,week. ;********************************************** read_7_data: nop; setb r_or_w;r_or_w=1表示從DS1302中讀數(shù)據(jù) clr week_bit;表示week還沒有被寫 mov r0,#sec_sg;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#7;有七位數(shù)需要讀 mov b,#10000001b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) lcall rw_rtc;從DS1302中讀數(shù)據(jù) ret; ;******************************************************** ; 寫7個(gè)數(shù)到DS1302中去,分別為year,month,date,hour,min,sec,week. ;******************************************************** write_7_data: clr r_or_w;r_or_w=0表示寫數(shù)據(jù)到DS1302 clr week_bit;表示week還沒有被寫 mov r0,#sec_sg;CPU_RAM中的塊數(shù)據(jù)的首地址(從高地址開始) mov r7,#7;有七位數(shù)需要寫 mov b,#10000000b;DS1302中的塊數(shù)據(jù)的首地址(從低地址開始) lcall rw_rtc; 寫數(shù)據(jù)到DS1302 ret; ;****************************************************** ; 按鍵就停止放音樂子程序 ;***************************************************** stop_song_key: jb p1.3,end_stop_song_key; lcall shandong_yansi; jnb p1.3,end_stop_song_key;
mov year_q,#2; mov year_b,#0;
jnb t_chang,end_stop_song_key; setb t_stop; mov min1_min2,min_sg; end_stop_song_key: nop; ret; ;***************************************************** ; 按一次鍵就響一下 ;**************************************************** di_da: mov r6,#4; abc_1: cpl p1.6; mov r7,#25; abc_2: djnz r7,abc_2; djnz r6,abc_1; ret; ;***************************************************** ; off閃動(dòng) 子程序 ;***************************************************** off_no_dis: jb p3.2,off_no_dis_1; sjmp end_off_no_dis; off_no_dis_1: jb p3.3,off_no_dis_2; sjmp end_off_no_dis; off_no_dis_2: inc time_2; mov a,time_2; cjne a,#10h,loop_1_1; loop_1_1: jc end_off_no_dis; cjne a,#20h,loop_1_2; mov time_2,#00h; loop_1_2: jnc end_off_no_dis; mov year_b,#0ah; mov year_s,#0ah; mov year_g,#0ah; end_off_no_dis: ret; ;**************************************************** ; on閃動(dòng) 子程序 ;**************************************************** on_no_dis: jb p3.2,on_no_dis_1; sjmp end_on_no_dis; on_no_dis_1: jb p3.3,on_no_dis_2; sjmp end_on_no_dis; on_no_dis_2: inc time_2; mov a,time_2; cjne a,#10h,loop_1_3; loop_1_3: jc end_on_no_dis; cjne a,#20h,loop_1_4; mov time_2,#00h; loop_1_4: jnc end_on_no_dis; mov year_s,#0ah; mov year_g,#0ah; end_on_no_dis: ret; ;***************************************************** ; 顯示T1,T1的時(shí),T1的分 子程序 ;***************************************************** t1_hour_min: mov hour_sg,t1_hour_sg mov min_sg,t1_min_sg; lcall dBCD_sBCD; mov r2,hour_s; mov r3,hour_g; mov r4,min_s; mov r5,min_g; lcall all_no_dis; mov hour_s,r2; mov hour_g,r3; 顯示定時(shí)T1的時(shí) mov min_s,r4; mov min_g,r5; 顯示定時(shí)T1的分 mov month_s,#0ch; mov month_g,#0dh; mov date_g,#01h; 顯示T1 end_t1_hour_min: ret; ;***************************************************** ; 顯示T2,T2的時(shí),T2的分 子程序 ;****************************************************** t2_hour_min: mov hour_sg,t2_hour_sg mov min_sg,t2_min_sg; lcall dBCD_sBCD; mov r2,hour_s; mov r3,hour_g; mov r4,min_s; mov r5,min_g; lcall all_no_dis; mov hour_s,r2; mov hour_g,r3; 顯示定時(shí)t2的時(shí) mov min_s,r4; mov min_g,r5; 顯示定時(shí)t2的分 mov month_s,#0ch; mov month_g,#0dh; mov date_g,#02h; 顯示t2 end_t2_hour_min: ret; ;*************************************************** ; 顯示t3,t3的時(shí),t3的分 子程序 ;************************************************** t3_hour_min: mov hour_sg,t3_hour_sg mov min_sg,t3_min_sg; lcall dBCD_sBCD; mov r2,hour_s; mov r3,hour_g; mov r4,min_s; mov r5,min_g; lcall all_no_dis; mov hour_s,r2; mov hour_g,r3; 顯示定時(shí)t3的時(shí) mov min_s,r4; mov min_g,r5; 顯示定時(shí)t3的分 mov month_s,#0ch; mov month_g,#0dh; mov date_g,#03h; 顯示t3 end_t3_hour_min: ret; ;************************************************ ; 年不顯示 子程序 ;*********************************************** year_no_dis: jb p3.2,year_no_dis_1; sjmp end_year_no_dis; year_no_dis_1: jb p3.3,year_no_dis_2; sjmp end_year_no_dis; year_no_dis_2: inc time_2; mov a,time_2; cjne a,#10h,year_no_dis_3; year_no_dis_3: jc end_year_no_dis; cjne a,#20h,year_no_dis_4; mov time_2,#00h; year_no_dis_4: jnc end_year_no_dis; mov year_q,#0ah; mov year_b,#0ah; mov year_s,#0ah; mov year_g,#0ah; end_year_no_dis: ret; ;************************************************ ; 月不顯示 子程序 ;************************************************ month_no_dis: jb p3.2,month_no_dis_1; sjmp end_month_no_dis; month_no_dis_1: jb p3.3,month_no_dis_2; sjmp end_month_no_dis; month_no_dis_2: inc time_2; mov a,time_2; cjne a,#10h,month_no_dis_3; month_no_dis_3: jc end_month_no_dis; cjne a,#20h,month_no_dis_4; mov time_2,#00h; month_no_dis_4: jnc end_month_no_dis; mov month_s,#0ah; mov month_g,#0ah; end_month_no_dis: ret; ;************************************************* ; 日不顯示 子程序 ;************************************************ date_no_dis: jb p3.2,date_no_dis_1; sjmp end_date_no_dis; date_no_dis_1: jb p3.3,date_no_dis_2; sjmp end_date_no_dis; date_no_dis_2: inc time_2; mov a,time_2; cjne a,#10h,date_no_dis_3; date_no_dis_3: jc end_date_no_dis; cjne a,#20h,date_no_dis_4; mov time_2,#00h; date_no_dis_4: jnc end_date_no_dis; mov date_s,#0ah; mov date_g,#0ah; end_date_no_dis: ret; ;*********************************************** ; 時(shí)不顯示 子程序 ;*********************************************** hour_no_dis: jb p3.2,hour_no_dis_1; sjmp end_hour_no_dis; hour_no_dis_1: jb p3.3,hour_no_dis_2; sjmp end_hour_no_dis; hour_no_dis_2: inc time_2; mov a,time_2; cjne a,#10h,loop_1_5; loop_1_5: jc end_hour_no_dis; cjne a,#20h,loop_1_6; mov time_2,#00h; loop_1_6: jnc end_hour_no_dis; mov hour_s,#0ah; mov hour_g,#0ah; end_hour_no_dis: ret; ;*********************************************** ; 分不顯示 子程序 ;************************************************ min_no_dis: jb p3.2,min_no_dis_1; sjmp end_min_no_dis; min_no_dis_1: jb p3.3,min_no_dis_2; sjmp end_min_no_dis; min_no_dis_2: inc time_2; mov a,time_2; cjne a,#10h,min_no_dis_3; min_no_dis_3: jc end_min_no_dis; cjne a,#20h,min_no_dis_4; mov time_2,#00h; min_no_dis_4: jnc end_min_no_dis; mov min_s,#0ah; mov min_g,#0ah; end_min_no_dis: ret; |