日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
DS1302+AT89S51構(gòu)成的萬年歷(源程序)
DS1302+AT89S51構(gòu)成的萬年歷(源程序)
 更新時(shí)間:2009-10-21 16:01:37  點(diǎn)擊數(shù):0
【字體: 字體顏色

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;

  • 上一篇: 用51匯編模擬SPI總線
  • 下一篇: 沒有了
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1