标题: 急求,基于此汇编语言绘制proteus仿真图 [打印本页]
作者: landsen 时间: 2017-12-10 14:56
标题: 急求,基于此汇编语言绘制proteus仿真图
CONFIG12 EQU 7FH
TEMPH EQU 21H
TEMPL EQU 20H
REG2 EQU 22H
REG3 EQU 23H
REG4 EQU 24H
DAT EQU P0.7
SCLK EQU P3.4
IO EQU P3.3
RST EQU P3.2
year DATA 66H
month DATA 65H
week DATA 64H
day DATA 63H
hour DATA 62H
minute DATA 61H
second DATA 60H
DS1302_ADDR DATA 32H
DS1302_DATA DATA 31H
bbbit p3.7
XSOUT BIT P3.6
ORG0000H
LJMP START
ORG001BH
LJMP INTT1
START: ;初值
LCALL ZJ
SETB EA
MOVTMOD,#10H ;计数器1,方式1
MOVTL1,#00H
MOVTH1,#00H
MOV32H,#8EH
MOV31H,#00H ;允许写1302
LCALL WRITE
MOV32H,#90H
MOV31H,#0A6H ;1302充电,充电电流1.1MA
LCALL WRITE
;主程序~~~~~~~~~~~~~~~~~~~~~
MAIN1:
MOV32H,#8DH ;读出年
LCALL READ
MOVyear,31H
MOV32H,#8BH ;读出星期
LCALL READ
MOVA,31H
DECA
MOVweek,A
MOV32H,#89H ;读出月
LCALL READ
MOVmonth,31H
MOV32H,#87H ;读出日
LCALL READ
MOVday,31H
MOV32H,#85H ;读出小时
LCALL READ
MOVhour,31H
MOV32H,#83H ;读出分钟
LCALL READ
MOVminute,31H
MOV32H,#81H ;读出秒
LCALL READ
MOVsecond,31H
;~~~~~~~~~~~~分离缓存~~~~~~~~
MOV R0,year ;年分离,送显示缓存
LCALL DIVIDE
MOV7BH,R1
MOV4BH,R1
MOV7CH,R2
MOV4CH,R2
MOV78H,week
MOV48H,week
MOVR0,month ;月分离,送显示缓存
LCALL DIVIDE
MOV79H,R1
MOV49H,R1
MOV7AH,R2
MOV4AH,R2
MOVR0,day ;日分离,送显示缓存
LCALL DIVIDE
MOV76H,R1
MOV46H,R1
MOV77H,R2
MOV47H,R2
MOVR0,hour ;小时分离,送显示缓存
LCALL DIVIDE
MOV74H,R1
MOV44H,R1
MOV75H,R2
MOV45H,R2
MOVR0,minute ;分钟分离,送显示缓存
LCALL DIVIDE
MOV72H,R1
MOV42H,R1
MOV73H,R2
MOV43H,R2
MOVR0,second ;秒分离,送显示缓存
LCALL DIVIDE
MOV70H,R1
MOV40H,R1
MOV71H,R2
MOV41H,R2
CLREA
LCALL TOUTOU
SETB EA
LCALL DISPLAY
LCALL GENGXIAN ;更新农历程序
JNBP0.1,SETG111
JNBF0,SSS
CLRP0.4 ;非闰月,则p0.4清零,指示灯亮
LJMP MAIN1
SETG111:
LJMP SETG
SSS:
SETB P0.4 ;闰月,则p0.4置位,指示灯不亮
LJMP MAIN1
;~~~~~~~~~~~~~~~~~~~~~~~~~ 温度
TOUTOU:
LCALL CHUSHI
LCALL RDTEMP
MOVA,TEMPL
ANLA,#11110000B
MOVTEMPL,A
MOVA,TEMPH
ANLA,#00000111B
ORLA,TEMPL
SWAP A
MOV25H,A
MOVA,25H
MOVB,#64H
DIVAB
MOVA,B
MOVB,#0AH
DIVAB
SWAP A
ORLA,B
MOV10H,A
RET
CHUSHI:
LCALL RESET
MOVA,#0CCH
LCALL WRITE111
MOVA,#4EH
LCALL WRITE111
MOVA,#CONFIG12
LCALL WRITE111
RET
RDTEMP:
LCALL RESET
MOVA,#0CCH
LCALL WRITE111
MOVA,#44H
LCALL WRITE111
LCALL DL1MS
LCALL RESET
MOVA,#0CCH
LCALL WRITE111
MOVA,#0BEH
LCALL WRITE111
LCALL ERAD111
MOVTEMPL,A
LCALL ERAD111
MOVTEMPH,A
RET
RESET:
LA:
SETB DAT
MOV52H,#200
LB:
CLRDAT
DJNZ 52H,LB
SETB DAT
MOV52H,#30
LC:
DJNZ 52H,LC
CLRC
ORLC,DAT
JCLB
MOV58H,#80
LD:
ORLC,DAT
JCLP
DJNZ 58H,LD
SJMP LA
LP:
MOV52H,#250
LF:
DJNZ 52H,LF
RET
WRITE111:
MOV53H,#8
W51HA:
SETB DAT
MOV54H,#8
RRCA
CLRDAT
W52HA:
DJNZ 54H,W52HA
MOVDAT,C
MOV54H,#30
W53HA:
DJNZ 54H,W53HA
DJNZ 53H,W51HA
SETB DAT
RET
ERAD111:
CLREA
MOV58H,#8
RD1A:
CLRDAT
MOV54H,#6
NOP
SETB DAT
RD2A:
DJNZ 54H,RD2A
MOVC,DAT
RRCA
MOV55H,#30
RD3A:
DJNZ 55H,RD3A
DJNZ 58H,RD1A
SETB DAT
RET
;公历设置程序~~~~~~
SETG :
SETB TR1
SETB ET1
MOV32H,#8EH
MOV31H,#00H ;允许写1302
LCALL WRITE
MOV32H,#80H
MOV31H,#80H ;1302停止振荡
LCALL WRITE
GWAIT: ;~
LCALL DISPLAY
JNBP0.1,GWAIT
SETG1:
LCALL DISPLAY
JNBP0.1,SETG2
JNBP0.2,GADDYEAR
JNBP0.3,JIANYEAR
AJMP SETG1
GADDYEAR:
MOVR7,66H ;年加一
LCALL ADD1
MOV66H,A
CJNE A,#51H,GADDYEAR1
MOV66H,#00H
AJMP GADDYEAR1
JIANYEAR:
MOVR7,66H ;年减一
LCALL JIAN1
MOV66H,A
CJNE A,#00H,GADDYEAR1
MOV66H,#51H
GADDYEAR1:
MOV32H,#8CH ;年值送人1302
MOV31H,66H
LCALL WRITE
MOVR0,66H
LCALL DIVIDE ;年分离送显示缓存
MOV4BH,R1
MOV7BH,R1
MOV4CH,R2
MOV7CH,R2
WAITT1: ;~~~~~~~
LCALL DISPLAY
JNBP0.2,WAITT1
JNBP0.3,WAITT1
AJMP SETG1
SETG2:
SETB 0AH ;调月时闪标志
GWAIT2:
LCALL DISPLAY
JNBP0.1,GWAIT2
SETG3:
LCALL DISPLAY
JNBP0.1,SETG4
JNBP0.2,GADDMONTH
JNBP0.3,JIANMONTH
AJMP SETG3
GADDMONTH:
MOVR7,65H ;月加一
LCALL ADD1
MOV65H,A
CJNE A,#13H,GADDMONTH1
MOV65H,#01H
AJMP GADDMONTH1
JIANMONTH:
MOVR7,65H ;月减一
LCALL JIAN1
MOV65H,A
CJNE A,#00H,GADDMONTH1
MOV65H,#12H
GADDMONTH1:
MOV32H,#88H ;月值送人1302
MOV31H,65H
LCALL WRITE
MOVR0,65H
LCALL DIVIDE ;月分离,送显示缓存
MOV79H,R1
MOV49H,R1
MOV7AH,R2
MOV4AH,R2
WAITT2:
LCALL DISPLAY
JNBP0.2,WAITT2
JNBP0.3,WAITT2
AJMP SETG3
SETG4:
SETB 0BH ;调日时闪标志
GWAIT4:
LCALL DISPLAY
JNBP0.1,GWAIT4
SETG5:
LCALL DISPLAY
JNBP0.1,SETG6
JNBP0.2,GADDDAY
JNBP0.3,JIANDAY
AJMP SETG5
GADDDAY:
MOVR7,63H ;日加一
LCALL ADD1
MOV63H,A
CJNE A,#32H,GADDDAY1
MOV 63H,#01H
JIANDAY:
MOVR7,63H ;日减一
LCALL JIAN1
MOV63H,A
CJNE A,#00H,GADDDAY1
MOV 63H,#31H
GADDDAY1:
MOV32H,#86H ;日值送人1302
MOV31H,63H
LCALL WRITE
MOVR0,63H
LCALL DIVIDE ;日分离,送显示缓存
MOV76H,R1
MOV46H,R1
MOV77H,R2
MOV47H,R2
WAITT3: ;~~~
LCALL DISPLAY
JNBP0.2,WAITT3
JNBP0.3,WAITT3
AJMP SETG5
SETG6:
SETB 0CH ;调星期时闪标志
GWAIT6:
LCALL DISPLAY
JNBP0.1,GWAIT6
SETG7:
LCALL DISPLAY
JNBP0.1,SETG8
JNBP0.2,GADDWEEK
JNBP0.3,JIANWEEK
AJMP SETG7
GADDWEEK:
MOVR7,64H ;星期加一
LCALL ADD1
MOV64H,A
CJNE A,#07H,GADDWEEK1
MOV 64H,#00H
AJMP GADDWEEK1
JIANWEEK:
MOVR7,64H ;星期减一
LCALL JIAN1
MOV64H,A
CJNE A,#00H,GADDWEEK1
MOV 64H,#06H
GADDWEEK1:
MOV32H,#8AH
MOV31H,64H ;星期值送人1302
LCALL WRITE
MOVR0,64H
LCALL DIVIDE ;星期值分离送显示缓存
MOV48H,R1
MOV78H,R1
WAITT4: ;~~~~
LCALL DISPLAY
JNBP0.2,WAITT4
JNBP0.3,WAITT4
AJMP SETG7
SETG8:
SETB 0DH ;调小时时闪标志
GWAIT8:
LCALL DISPLAY
JNBP0.1,GWAIT8
SETG9:
LCALL DISPLAY
JNBP0.1,SETG10
JNBP0.2,GADDHOUR
JNBP0.3,JIANHOUR
AJMP SETG9
GADDHOUR:
MOVR7,62H ;小时加一
LCALL ADD1
MOV62H,A
CJNE A,#24H,GADDHOUR1
MOV62H,#00H
AJMP GADDHOUR1
JIANHOUR:
MOVR7,62H ;小时减一
LCALL JIAN1
MOV62H,A
CJNE A,#00H,GADDHOUR1
MOV62H,#23H
GADDHOUR1:
MOV32H,#84H ;小时值送人1302
MOV31H,62H
LCALL WRITE
MOVR0,62H
LCALL DIVIDE ;小时值分离送显示缓存
MOV74H,R1
MOV44H,R1
MOV75H,R2
MOV45H,R2
WAITT5: ;~~~~~
LCALL DISPLAY
JNBP0.2,WAITT5
JNBP0.3,WAITT5
AJMP SETG9
SETG10:
SETB 0EH ;调分时候闪标志
GWAIT10:
LCALL DISPLAY
JNBP0.1,GWAIT10
SETG11:
LCALL DISPLAY
JNBP0.1,SETGOUT
JNBP0.2,GADDminute
JNBP0.3,JIANminute
AJMP SETG11
GADDminute:
MOVR7,61H ;分钟加一
LCALL ADD1
MOV61H,A
CJNE A,#60H,GADDminute1
MOV61H,#00H
AJMP GADDminute1
JIANminute:
MOVR7,61H ;分钟减一
LCALL JIAN1
MOV61H,A
CJNE A,#00H,GADDminute1
MOV61H,#59H
GADDminute1:
MOV32H,#82H ;分钟值送人1302
MOV31H,61H
LCALL WRITE
MOVR0,61H
LCALL DIVIDE ;分钟值分离送显示缓存
MOV72H,R1
MOV42H,R1
MOV73H,R2
MOV43H,R2
WAITT6:
LCALL DISPLAY
JNBP0.2,WAITT6
JNBP0.3,WAITT6
AJMP SETG11
SETGOUT:
LCALL DISPLAY
JNBP0.1,SETGOUT
LCALL GENGXIAN
MOV32H,#80H
MOV31H,#00H ;1302晶振开始振荡
LCALL WRITE
MOV32H,#8EH
MOV31H,#80H ;禁止写入1302
LCALL WRITE
CLR08H
CLR09H
CLR0AH
CLR0BH
CLR0CH
CLR0DH
CLR0EH
CLR0FH
CLRET1 ;关闪中断
CLRTR1
LJMP MAIN1
;;闪动调时程序~~~~~~~~~~~~~~~~~~~~~~~~~~~
INTT1:
PUSH ACC
PUSH PSW
GFLASH:
CPL0FH
JB0FH,GFLASH1
MOV7CH,4CH ;全部显示
MOV7BH,4BH
MOV7AH,4AH
MOV79H,49H
MOV78H,48H
MOV77H,47H
MOV76H,46H
MOV75H,45H
MOV74H,44H
MOV73H,43H
MOV72H,42H
MOV71H,41H
MOV70H,40H
GFLASHOUT:
POPPSW
POPACC
RETI
GFLASH1:
JB0AH,GFLASH2 ;调年闪
MOV7CH,#0FH
MOV7BH,#0FH
AJMP GFLASHOUT
GFLASH2:
JB0BH,GFLASH3 ;调月闪
MOV7AH,#0FH
MOV79H,#0FH
AJMP GFLASHOUT
GFLASH3:
JB0CH,GFLASH4 ;调日闪
MOV77H,#0FH
MOV76H,#0FH
AJMP GFLASHOUT
GFLASH4:
JB0DH,GFLASH5 ;调星期闪
MOV78H,#0FH
AJMP GFLASHOUT
GFLASH5:
JB0EH,GFLASH6 ;调小时闪
MOV75H,#0FH
MOV74H,#0FH
AJMP GFLASHOUT
GFLASH6:
MOV73H,#0FH ;调分钟闪
MOV72H,#0FH
AJMP GFLASHOUT
;加一程序~~~~~~~~~~~~~~~~~~~~~~~~~
ADD1:
MOVA,R7
ADDA,#1
DAA
RET
;减一程序~~~~~~~~~~~~~~~~~~~~~~~~~
JIAN1:
MOVA,R7
DECA
CJNE A,#4FH,KK1
MOVA,#49H
KK1:
CJNE A,#3FH,KK2
MOVA,#39H
KK2:
CJNE A,#2FH,KK3
MOVA,#29H
KK3:
CJNE A,#1FH,KK4
MOVA,#19H
KK4:
CJNE A,#0FH,KK5
MOVA,#09H
KK5:
RET
;分离程序~~~~~~~~~~~~~~~~~~~~~~~~~
DIVIDE:
MOVA,R0
ANLA,#0FH
MOVR1,A
MOVA,R0
SWAP A
ANLA,#0FH
MOVR2,A
RET
;写1302程序~~~~~~~
WRITE:
CLRSCLK
NOP
SETB RST
NOP
MOVA,32H
MOVR4,#8
WRITE1:
RRCA ;送地址给1302
NOP
NOP
CLRSCLK
NOP
NOP
NOP
MOVIO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R4,WRITE1
CLRSCLK
NOP
MOVA,31H
MOVR4,#8
WRITE2:
RRCA
NOP ;送数据给1302
CLRSCLK
NOP
NOP
MOVIO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R4,WRITE2
CLRRST
RET
;读1302程序~~~~~~~~~~~~~~~~~~~~~~~~~
READ:
CLRSCLK
NOP
NOP
SETB RST
NOP
MOVA,32H
MOVR4,#8
READ1:
RRCA ;送地址给1302
NOP
MOVIO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
NOP
CLRSCLK
NOP
NOP
DJNZ R4,READ1
MOVR4,#8
READ2:
CLRSCLK
NOP ;从1302中读出数据
NOP
NOP
MOVC,IO
NOP
NOP
NOP
NOP
NOP
RRCA
NOP
NOP
NOP
NOP
SETB SCLK
NOP
DJNZ R4,READ2
MOV31H,A
CLRRST
RET
;BCD码转换为10进制程序~~~~~
BCD_10:
MOVA,R0
ANLA,#0FH
MOVR1,A ;高位×10,加低位
MOVA,R0
SWAP A
ANLA,#0FH
MOVB,#10
MULAB
ADDA,R1
MOVR0,A
RET
;查一年数据程序~~~~~~~~~~~~~~~~
CHECKMONTH:
LCALL BCD_10
MOVA,R0
MOVB,#04
MULAB
MOVR1,A
MOVDPTR,#TAB
MOVC A,@A+DPTR
MOVR7,A ;第一字节送R7
INCR1
MOVA,R1
MOVC A,@A+DPTR
MOVR6,A ;第二字节送R6
INCR1
MOVA,R1
MOVC A,@A+DPTR
MOVR5,A ;第三字节送R6
INCR1
MOVA,R1
MOVC A,@A+DPTR
MOVR4,A ;第四字节送R4
RET
;;;;;自动更新农历;;;
GENGXIAN:MOV R2,#00H
MOV R3,#00H
MOV A,month
CJNE A,#01H,GM2
MOV R0,day ;当前月为一月
LCALL BCD_10 ;当前日转换为10进制,送R2
MOV A,R0
MOV R2,A
AJMP TIAOZHENG1
GM2:CJNE A,#02H,GM3
MOV R0,day ;当前月为二月
LCALL BCD_10 ;;当前日转换为10进制,
MOV A,R0 ;再加31,送R2
ADD A,#31
MOV R2,A
AJMP TIAOZHENG1
GM3: CJNE A,#03H,GM4
MOV R0,day ;当前月为三月
LCALL BCD_10 ;当前日转换为10进制,
MOV A,R0 ;再加59,送R2
ADD A,#59
MOV R2,A
AJMP TIAOZHENG1
GM4: CJNE A,#04H,GM5
MOV R0,day ;当前月为四月
LCALL BCD_10 ;当前日转换为10进制,
MOV A,R0 ;再加90,送R2
ADD A,#90
MOV R2,A
AJMP TIAOZHENG1
GM5: CJNE A,#05H,GM6
MOV R0,day ;当前月为五月
LCALL BCD_10 ;当前日转换为10进制,
MOV A,R0 ;再加120,送R2
ADD A,#120
MOV R2,A
AJMP TIAOZHENG1
GM6: CJNE A,#06H,GM7
MOV R0,day ;当前月为六月
LCALL BCD_10 ;当前日转换为10进制,
MOV A,R0 ;再加151,送R2
ADD A,#151
MOV R2,A
AJMP TIAOZHENG1
GM7: CJNE A,#07H,GM8
MOV R0,day ;当前月位七月
LCALL BCD_10 ;当前日转换为10进制,
MOV A,R0 ;再加181,送R2
ADD A,#181
MOV R2,A
AJMP TIAOZHENG1
GM8: CJNE A,#08H,GM9
MOV R0,day ;当前月为八月
LCALL BCD_10 ;当前日转换为10进制,
MOV A,R0 ;再加212,送R2
ADD A,#212
MOV R2,A
AJMP TIAOZHENG1
GM9: CJNE A,#09H,GM10
MOV R0,day ;当前月为九月
LCALL BCD_10 ;当前日转换为10进制,
MOV A,R0 ;再加243
CLR C
ADD A,#243
JC GGG
MOV R2,A ;A没有溢出,送R2
AJMP TIAOZHENG1
GGG: MOV R3,#0FFH ;A溢出,A加一送R2
INC A ;R3中送#0ffh
MOV R2,A
AJMP TIAOZHENG1
GM10: CJNE A,#10H,GM11
MOV R0,day ;当前月为10月
LCALL BCD_10 ;当前日转换为10进制,
MOV A,R0 ;再加18,送R2
ADD A,#18 ;R3中送#0FFH
MOV R2,A
MOV R3,#0FFH
AJMP TIAOZHENG1
GM11: CJNE A,#11H,GM12
MOV R0,day ;当前月为11月
LCALL BCD_10 ;当前日转换为10进制,
MOV A,R0 ;再加49,送R2
ADD A,#49 ;R3中送#0FFH
MOV R2,A
MOV R3,#0FFH
AJMP TIAOZHENG1
GM12: MOV R0,day ;当前月为12月
LCALL BCD_10 ;当前日转换为10进制,
MOV A,R0 ;再加79,送R2
ADD A,#79 ;R3中送#0FFH
MOV R2,A
MOV R3,#0FFH
AJMP TIAOZHENG1
TIAOZHENG1: MOV A,year
MOV B,#04
DIV AB
MOV A,B
JNZ GGG1
MOV A,65H ;当前年为闰年
CJNE A,#01H,AAAA
AJMP GGG1 ;当前月是1
AAAA: CJNE A,#02H,BBBB
AJMP GGG1 ;当前月是2
BBBB: CJNE R2,#0FFH,GGG2
MOV R3,#0FFH ;当前月不是1和2,
MOV R2,#01H ;R1和R2总和加一
AJMP GGG1
GGG2: INC R2
GGG1: MOV R0,year ;查一年数据
LCALL CHECKMONTH
MOV A,R2
CLR C
SUBB A,R7
MOV P2.7,C
CJNE A,#01H,GGG3
MOV R2,#01H
MOV A,R3
CJNE A,#00H,NEW1
MOV 57H,#01H ;R2和R3总和减R7
MOV 56H,#01H ;为0,则为春节
LJMP S_PLAY
GGG3: CJNE A,#00H,GGG6
MOV R2,A
AJMP OLD
GGG6: JNB P2.7,NEW2
MOV A,R7
CLR C
SUBB A,R2
MOV R7,A
CJNE R3,#0FFH,GGG5
MOV A,R3
CLR C
SUBB A,R7
MOV R2,A
MOV R3,#00H
AJMP NEW
GGG5: MOV A,R7
MOV R2,A
AJMP OLD
NEW1: MOV R2,#0FFH
MOV R3,#01H
AJMP NEW
NEW2: MOV R2,A
MOV A,R3
CJNE A,#0FFH,GGG4
MOV A,R2
MOV R3,A
MOV R2,#0FFH
GGG4: AJMP NEW
;OLD 农历为公历的前一年
OLD: MOV A,year
DEC A
MOV R0,A
LCALL CHECKMONTH
MOV A,R2
CLR C
SUBB A,#29
MOV P2.7,C
MOV R6,A
MOV A,R5
JB ACC.0,AAA ;12月为小月,转到AAA
MOV A,R2
CLR C
SUBB A,#30
MOV P2.7,C
MOV R6,A
AAA: MOV A,R6
CJNE A,#00H,BBB
MOV 56H,#29H ;为0,则为11月最后一天
MOV A,R5 ;小月为11月29
JB ACC.1,CCC
MOV 56H,#30H ;大月为11月30
CCC: MOV 57H,#11H
LJMP S_PLAY
BBB: JNB P2.7, DDD
MOV A,#29 ; CY位置位,位12月
CLR C
SUBB A,R2
MOV R4,A
MOV A,R5
JB ACC.0,EEE
MOV A,#30
CLR C
SUBB A,R2
MOV R4,A
EEE: MOV A,R4
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#12H
LJMP S_PLAY
DDD: MOV A,#29 ;CY为0,为11月
CLR C
SUBB A,R4
MOV R1,A
MOV A,R5
JB ACC.1, FFF
MOV A,#30
CLR C
SUBB A,R4
MOV R1,A
FFF: MOV A,R1
MOV R0,A
LCALL D_BCD
MOV 56H,A
MOV 57H,#11H
LJMP S_PLAY
;NEW此时R2中的值为FFH时
; R3有值,否则为0
NEW:
NOP
M1:
MOVA,R2 ;R2减一月天数
CLRC
SUBB A,#29
MOVR1,A
MOVA,R6
JBACC.6,SM11
MOVA,R2
CLRC
SUBB A,#30
MOVR1,A
SM11:
JCSM12
MOVA,R1 ;R2减1月天数,够减
MOVR2,A ;转二月
AJMP M2
SM12:
CJNE R3,#00H,M13 ;R2减1月天数
LJMP Y1 ;不够减,判R3为0否
M13:
MOVA,R2 ;不为0,R3加到R2中
ADDA,R3 ;再让一月减
MOVR2,A ;还不够,则转Y1
MOVR3,#00H
AJMP M1
M2:
CLRC ;R2减一月天数,够减
MOVA,R2 ;转三月
SUBB A,#29
MOVR1,A
MOVA,R6
JBACC.5,M21
MOVA,R2
CLRC
SUBB A,#30
MOVR1,A
M21:
JCM22
MOVA,R1 ;R2减2月天数,够减
MOVR2,A
AJMP MM2
M22:
CJNE R3,#00H,M23 ;R2减2月天数
LJMP Y2 ;不够减,判,R3为0否
M23:
MOVA,R2 ;不为0,R3加到R2中
ADDA,R3 ;再让二月减
MOVR2,A ;还不够,则转Y2
MOVR3,#00H
AJMP M2
MM2:
LCALL CHECKRE ;查2月,如果不为闰月
CJNE A,#02H,M3 ;转3月
RM2:
MOVA,R4
ANLA,#0FH
JNZRM21
MOVA,R2
CLRC
SUBB A,#30
MOVR1,A
AJMP RM22
RM21:
MOVA,R2
CLRC
SUBB A,#29
MOVR1,A
RM22:
JCRM23
MOVA,R1 ;R2减闰2月天数,够减
MOVR2,A ;转3月
AJMP M3
RM23:
CJNE R3,#00H,RM24 ;R2减闰2月天数
LJMP RY2 ;不够减,判,R3为0否
RM24:
MOVA,R2 ;不为0,R3加到R2中
ADDA,R3 ;再让闰2月减
MOVR3,#00H ;还不够,则转RY2
AJMP RM2
M3:
MOVA,R2 ;R2减3月天数
CLRC
SUBB A,#29
MOVR1,A
MOVA,R6
JBACC.4,M31
CLRC
MOVA,R2
SUBB A,#30
MOVR1,A
M31:
JCM32
MOVA,R1 ;R2减3月天数,够减
MOVR2,A
AJMP MM3
M32:
CJNE R3,#00H,M33 ;R2减3月天数
LJMP Y3 ;不够减,判,R3为0否
M33:
MOVA,R2 ;不为0,R3加到R2中
ADDA,R3 ;再让3月减
MOVR2,A ;还不够,则转Y3
MOVR3,#00H
AJMP M3
MM3:
LCALL CHECKRE ;查3月,如果不为闰月
CJNE A,#03H,M4 ;转4月
RM3:
MOVA,R4
ANLA,#0FH ;R2减闰3月天数
JNZRM31
MOVA,R2
CLRC
SUBB A,#30
MOVR1,A
AJMP RM32
RM31:
MOVA,R2
CLRC
SUBB A,#29
MOVR1,A
RM32:
JCRM33
MOVA,R1 ;R2减闰3月天数,够减
MOVR2,A ;转4月
AJMP M4
RM33:
CJNE R3,#00H,RM34 ;R2减闰3月天数
LJMP RY3 ;不够减,判,R3为0否
RM34:
MOVA,R2 ;不为0,R3加到R2中
ADDA,R3 ;再让闰3月减
MOVR2,A ;还不够,则转RY3
MOVR3,#00H
AJMP RM3
M4:
MOVA,R2
CLRC ;R2减4月天数
SUBB A,#29
MOVR1,A
MOVA,R6
JBACC.2,M41
CLRC
MOVA,R2
SUBB A,#30
MOVR1,A
M41:
JCM42
MOVA,R1 ;R2减4月天数,够减
MOVR2,A
AJMP MM4
M42:
CJNE R3,#00H,M43 ;R2减4月天数
LJMP Y4 ;不够减,判,R3为0否
M43:
MOVA,R2 ;不为0,R3加到R2中
ADDA,R3 ;再让4月减
MOVR2,A ;还不够,则转Y4
MOVR3,#00H
AJMP M4
MM4:
LCALL CHECKRE ;查4月,如果不为闰月
CJNE A,#04H,M5 ;转5月
RM4:
MOVA,R4
ANLA,#0FH ;R2减闰4月天数
JNZRM41
MOVA,R2
CLRC
SUBB A,#30
MOVR1,A
AJMP RM42
RM41:
MOVA,R2
CLRC
SUBB A,#29
MOVR1,A
RM42:
JCRM43
MOVA,R1 ;R2减闰4月天数,够减
MOVR2,A ;转5月
AJMP M5
RM43:
CJNE R3,#00H,RM44 ;R2减闰4月天数
LJMP RY4 ;不够减,判,R3为0否
RM44:
MOVA,R2 ;不为0,R3加到R2中
ADDA,R3 ;再让闰4月减
MOVR2,A
MOVR3,#00H ;还不够,则转Y4
AJMP RM4
M5:
MOVA,R2 ;R2减5月天数
CLRC
SUBB A,#29
MOVR1,A
MOVA,R6
JBACC.1,M51
MOVA,R2
CLRC
SUBB A,#30
MOVR1,A
M51:
JCM52
MOVA,R1 ;R2减5月天数,够减
MOVR2,A
AJMP MM5
M52:
CJNE R3,#00H,M53 ;R2减5月天数
LJMP Y5 ;不够减,判,R3为0否
M53:
MOVA,R2 ;不为0,R3加到R2中
ADDA,R3 ;再让5月减
MOVR2,A ;还不够,则转Y5
MOVR3,#00H
LJMP M5
MM5:
LCALL CHECKRE ;查5月,如果不为闰月
CJNE A,#05H,M6 ;转6月
RM5:
MOVA,R4 ;R2减闰5月天数
ANLA,#0FH
JNZRM51
MOVA,R2
CLRC
SUBB A,#30
MOVR1,A
LJMP RM52
RM51:
MOVA,R2
CLRC
SUBB A,#29
MOVR1,A
RM52:
JCRM53
MOVA,R1 ;R2减闰5月天数,够减
MOVR2,A ;转6月
LJMP M6
RM53:
CJNE R3,#00H,RM54 ;R2减闰5月天数
LJMP RY5 ;不够减,判,R3为0否
RM54:
MOVA,R2 ;不为0,R3加到R2中
ADDA,R3 ;再让5月减
MOVR2,A ;还不够,则转RY5
MOVR3,#00H
LJMP RM5
M6:
MOVA,R2 ;R2减6月天数
CLRC
SUBB A,#29
MOVR1,A
MOVA,R6
JBACC.0,M61
MOVA,R2
CLRC
SUBB A,#30
MOVR1,A
M61:
JCM62
MOVA,R1 ;R2减6月天数,够减
MOVR2,A
LJMP MM6
M62:
CJNE R3,#00H,M63 ;R2减6月天数
LJMP Y6 ;不够减,判,R3为0否
M63:
MOVA,R2 ;不为0,R3加到R2中
ADDA,R3 ;再让6月减
MOVR2,A ;还不够,则转Y6
MOVR3,#00H
LJMP M6
MM6:
LCALL CHECKRE ;查6月,如果不为闰月
CJNE A,#06H,M7 ;转7月
RM6:
MOVA,R4
ANLA,#0FH ;R2减闰6月天数
JNZRM61
MOVA,R2
CLRC
SUBB A,#30
MOVR1,A
LJMP RM62
RM61:
MOVA,R2
CLRC
SUBB A,#29
MOVR1,A
RM62:
JCRM63
MOVA,R1 ;R2减闰6月天数,够减
MOVR2,A ;转7月
LJMP M7
RM63:
CJNE R3,#00H,RM64 ;R2减闰6月天数
LJMP RY6 ;不够减,判,R3为0否
RM64:
MOVA,R2 ;不为0,R3加到R2中
ADDA,R3 ;再让闰6月减
MOVR2,A ;还不够,则转RY6
MOVR3,#00H
LJMP RM6
M7:
MOVA,R2 ;R2减7月天数
CLRC
SUBB A,#29
MOVR1,A
MOVA,R5
JBACC.6,M71
MOVA,R2
CLRC
SUBB A,#30
MOVR1,A
M71:
JCM72
MOVA,R1 ;R2减7月天数,够减
MOVR2,A
LJMP MM7
M72:
CJNE R3,#00H,M73 ;R2减7月天数
LJMP Y7 ;不够减,判,R3为0否
M73:
MOVA,R2 ;不为0,R3加到R2中
ADDA,R3 ;再让6月减
MOVR2,A ;还不够,则转Y7
MOVR3,#00H
LJMP M7
MM7:
LCALL CHECKRE ;查7月,如果不为闰月
CJNE A,#07H,M8 ;转8月
RM7:
MOVA,R4
ANLA,#0FH ;R2减闰7月天数
JNZRM71
MOVA,R2
CLRC
SUBB A,#30
MOVR1,A
LJMP RM72
RM71:
MOVA,R2
CLRC
SUBB A,#29
MOVR1,A
RM72:
JCRM73
MOVA,R1 ;R2减闰7月天数,够减
MOVR2,A ;转8月
LJMP M8
RM73:
CJNE R3,#00H,RM74 ;R2减闰7月天数
LJMP RY7 ;不够减,判,R3为0否
RM74:
MOVA,R2 ;不为0,R3加到R2中
ADDA,R3 ;再让闰7月减
MOVR2,A ;还不够,则转RY7
MOVR3,#00H
LJMP RM7
M8:
MOVA,R2 ;R2减8月天数
CLRC
SUBB A,#29
MOVR1,A
MOVA,R5
JBACC.5,M81
MOVA,R2
CLRC
SUBB A,#30
MOVR1,A
M81:
JCM82
MOVA,R1 ;R2减8月天数,够减
MOVR2,A ;转9月
LJMP M9
M82:
CJNE R3,#00H,M83 ;R2减8月天数
LJMP Y8 ;不够减,判,R3为0否
M83:
MOVA,R2 ;不为0,R3加到R2中
ADDA,R3 ;再让8月减
MOVR2,A ;还不够,则转Y8
MOVR3,#00H
LJMPM8
M9:
MOVA,R2 ;R2减9月天数
CLRC
SUBB A,#29
MOVR1,A
MOVA,R5
JBACC.4,M91
MOVA,R2
CLRC
SUBB A,#30
MOVR1,A
M91:
JCM92
MOVA,R1 ;R2减9月天数,够减
MOVR2,A
LJMP MM9
M92:
CJNE R3,#00H,M93 ;R2减9月天数
LJMP Y9 ;不够减,判,R3为0否
M93:
MOVA,R2 ;不为0,R3加到R2中
ADDA,R3 ;再让9月减
MOVR2,A ;还不够,则转Y9
MOVR3,#00H
LJMP M9
MM9:
LCALL CHECKRE ;查9月,如果不为闰月
CJNE A,#09H,M10 ;转10月
RM9:
MOVA,R4 ;R2减闰9月天数
ANLA,#0FH
JNZRM91
MOVA,R2
CLRC
SUBB A,#30
MOVR1,A
LJMP RM92
RM91:
MOVA,R2
CLRC
SUBB A,#29
MOVR1,A
RM92:
JCRM93
MOVA,R1 ;R2减闰9月天数,够减
MOVR2,A ;转10月
LJMP M10
RM93:
CJNE R3,#00H,RM94 ;R2减闰9月天数
LJMP RY9 ;不够减,判,R3为0否
RM94:
MOVA,R2 ;不为0,R3加到R2中
ADDA,R3 ;再让闰9月减
MOVR2,A ;还不够,则转RY9
MOVR3,#00H
LJMP RM9
M10:
MOVA,R2 ;R2减10月天数
CLRC
SUBB A,#29
MOVR1,A
MOVA,R5
JBACC.2,M101
MOVA,R2
CLRC
SUBB A,#30
MOVR1,A
M101:
JCM102
MOVA,R1 ;R2减10月天数,够减
MOVR2,A ;转11月
LJMP M11
M102:
CJNE R3,#00H,M103 ;R2减10月天数
LJMP Y10 ;不够减,判,R3为0否
M103:
MOVA,R2 ;不为0,R3加到R2中
ADDA,R3 ;再让10月减
MOVR2,A ;还不够,则转Y10
MOVR3,#00H
LJMP M10
M11:
MOVA,R2 ;R2减11月天数
CLRC
SUBB A,#29
MOVR1,A
MOVA,R5
JBACC.1,M111
MOVA,R2
CLRC
SUBB A,#30
MOVR1,A
M111:
JCM112
MOVA,R1 ;R2减11月天数,够减
MOVR2,A ;转12月
LJMP M12
M112:
CJNE R3,#00H,M113 ;R2减11月天数
LJMP Y11 ;不够减,判,R3为0否
M113:
MOVA,R2 ;不为0,R3加到R2中
ADDA,R3 ;再让11月减
MOVR2,A ;还不够,则转Y11
MOVR3,#00H
LJMP M11
M12:
MOVA,R2 ;R2减12月天数
CLRC
SUBB A,#29
MOVR1,A
MOVA,R5
JBACC.0,M121
CLRC
MOVA,R2
SUBB A,#30
MOVR1,A
M121:
CJNE R3,#00H,M122 ;R2减12月天数
LJMP Y12 ;不够减,判,R3为0否
M122:
MOVA,R2 ;不为0,R3加到R2中
ADDA,R3 ;再让12月减
MOVR2,A ;还不够,则转Y12
MOVR3,#00H
LJMP M12
Y1:
MOVA,R2
MOVR0,A ;R2中为日的值
LCALL D_BCD
MOV56H,A
MOV57H,#01H
CLRF0 ;非闰月
LJMP S_PLAY
Y2:
CJNE R2,#00H,Y21
MOVA,R6 ;R2中为0,则为前一个月
MOV56H,#29H ;的的最后一天
JBACC.6,Y22
MOV56H,#30H
Y22:
MOV57H,#01H
CLRF0
LJMP S_PLAY
Y21:
MOVA,R2
MOVR0,A ;R2中为日的值
LCALL D_BCD
MOV56H,A
MOV57H,#02H
CLRF0
LJMP S_PLAY
RY2:
CJNE R2,#00H,RY21
MOV56H,#29H ;R2中为0,则为前一个月
MOVA,R6 ;的的最后一天
JBACC.5,RY22
MOV56H,#30H
RY22:
MOV57H,#02H
CLRF0
LJMP S_PLAY
RY21:
MOVA,R2 ;R2中为日的值
MOVR0,A
LCALL D_BCD
MOV56H,A
MOV57H,#02H
SETB F0 ;闰月
LJMP S_PLAY
Y3:
CJNE R2,#00H,Y31
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#02H,Y32
MOV56H,#29H ;前一个月是闰月
MOVA,R4
ANLA,#0FH ;R2中为0,则为前一个月
JNZY33 ;的的最后一天
MOV56H,#30H
MOV57H,#02H
SETB F0
LJMP S_PLAY
Y33:
MOV57H,#02H
SETB F0
LJMP S_PLAY
Y32:
MOV56H,#29H ;前一个月不是闰月
MOVA,R6
JBACC.5,Y34
MOV56H,#30H
Y34:
MOV57H,#02H
CLRF0
LJMP S_PLAY
Y31:
MOVA,R2
MOVR0,A ;R2中为日的值
LCALL D_BCD
MOV56H,A
MOV57H,#03H
CLRF0
LJMP S_PLAY
RY3:
CJNE R2,#00H,RY31
MOV56H,#29H
MOVA,R6
JBACC.4,RY32 ;R2中为0,则为前一个月
MOV56H,#30H ;的的最后一天
RY32:
MOV57H,#03H
CLRF0
LJMP S_PLAY
RY31:
MOVA,R2 ;R2中为日的值
MOVR0,A
LCALL D_BCD
MOV56H,A
MOV57H,#03H
SETB F0
LJMP S_PLAY
Y4:
CJNE R2,#00H,Y41
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#03H,Y42
MOV56H,#29H ;前一个月是闰月
MOVA,R4 ;R2中为0,则为前一个月
ANLA,#0FH ;的最后一天
JNZY43
MOV56H,#30H
MOV57H,#03H
SETB F0
LJMP S_PLAY
Y43:
MOV57H,#03H
SETB F0
LJMP S_PLAY
Y42:
MOV56H,#29H ;前一个月不是闰月
MOVA,R6
JBACC.4,Y44
MOV56H,#30H
Y44:
MOV57H,#03H
CLRF0
LJMP S_PLAY
Y41:
MOVA,R2 ;R2中为日的值
MOVR0,A
LCALL D_BCD
MOV56H,A
MOV57H,#04H
CLRF0
LJMP S_PLAY
RY4:
CJNE R2,#00H,RY41
MOV56H,#29H ;R2中为0,则为前一个月
MOVA,R6 ;的的最后一天
JBACC.2,RY42
MOV 56H,#30H
RY42:
MOV57H,#04H
CLRF0
LJMP S_PLAY
RY41:
MOVA,R2 ;R2中为日的值
MOVR0,A
LCALL D_BCD
MOV56H,A
MOV57H,#04H
SETB F0
LJMP S_PLAY
Y5:
CJNE R2,#00H,Y51
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#04H,Y52
MOV56H,#29H ;前一个月是闰月
MOVA,R4 ;R2中为0,则为前一个月
ANLA,#0FH ;的最后一天
JNZY53
MOV56H,#30H
MOV57H,#04H
SETB F0
LJMP S_PLAY
Y53:
MOV57H,#04H
SETB F0
LJMP S_PLAY
Y52:
MOV56H,#29H ;前一个月不是闰月
MOVA,R6
JBACC.2,Y54
MOV56H,#30H
Y54:
MOV57H,#04H
CLRF0
LJMP S_PLAY
Y51:
MOVA,R2 ;R2中为日的值
MOVR0,A
LCALL D_BCD
MOV56H,A
MOV57H,#05H
CLRF0
LJMP S_PLAY
RY5:
CJNE R2,#00H,RY51
MOV56H,#29H ;R2中为0,则为前一个月
MOVA,R6 ;的最后一天
JBACC.1,RY52
MOV56H,#30H
RY52:
MOV57H,#05H
CLRF0
LJMP S_PLAY
RY51:
MOVA,R2 ;R2中为日的值
MOVR0,A
LCALL D_BCD
MOV56H,A
MOV57H,#05H
SETB F0
LJMP S_PLAY
Y6:
CJNE R2,#00H,Y61
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#05H,Y62
MOV56H,#29H ;前一个月是闰月
MOVA,R4 ;R2中为0,则为前一个月
ANLA,#0FH ;的最后一天
JNZY63
MOV56H,#30H
MOV57H,#05H
SETB F0
LJMP S_PLAY
Y63:
MOV57H,#05H
SETB F0
LJMP S_PLAY
Y62:
MOV56H,#29H ;前一个月不是闰月
MOVA,R6
JBACC.1,Y64
MOV56H,#30H
Y64:
MOV57H,#05H
CLRF0
LJMP S_PLAY
Y61:
MOVA,R2 ;R2中为日的值
MOVR0,A
LCALL D_BCD
MOV56H,A
MOV57H,#06H
CLRF0
LJMP S_PLAY
RY6:
CJNE R2,#00H,RY61
MOV56H,#29H ;R2中为0,则为前一个月
MOVA,R6 ;的最后一天
JBACC.0,RY62
MOV56H,#30H
RY62:
MOV57H,#06H
CLRF0
LJMP S_PLAY
RY61:
MOVA,R2 ;R2中为日的值
MOVR0,A
LCALL D_BCD
MOV56H,A
MOV57H,#06H
SETB F0
LJMP S_PLAY
Y7:
CJNE R2,#00H,Y71
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#06H,Y72
MOV56H,#29H ;前一个月是闰月
MOVA,R4 ;R2中为0,则为前一个月
ANLA,#0FH ;的最后一天
JNZY73
MOV56H,#30H
MOV57H,#06H
SETB F0
LJMP S_pLAY
Y73:
MOV57H,#06H
SETB F0
LJMP S_PLAY
Y72:
MOV56H,#29H ;前一个月不是闰月
MOVA,R6
JBACC.0,Y74
MOV56H,#30H
Y74:
MOV57H,#06H
CLRF0
LJMP S_PLAY
Y71:
MOVA,R2 ;R2中为日的值
MOVR0,A
LCALL D_BCD
MOV56H,A
MOV57H,#07H
CLRF0
LJMP S_PLAY
RY7:
CJNE R2,#00H,RY71
MOV56H,#29H ;R2中为0,则为前一个月
MOVA,R5 ;的最后一天
JBACC.6,RY72
MOV56H,#30H
RY72:
MOV57H,#07H
CLRF0
LJMP S_PLAY
RY71:
MOVA,R2 ;R2中为日的值
MOVR0,A
LCALL D_BCD
MOV56H,A
MOV57H,#07H
SETB F0
LJMP S_PLAY
Y8:
CJNE R2,#00H,Y81
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#07H,Y82
MOV56H,#29H ;前一个月是闰月
MOVA,R4 ;R2中为0,则为前一个月
ANLA,#0FH ;的最后一天
JNZY83
MOV56H,#30H
MOV57H,#07H
SETB F0
LJMP S_PLAY
Y83:
MOV57H,#07H
SETB F0
LJMP S_PLAY
Y82:
MOV56H,#29H ;前一个月不是闰月
MOVA,R5
JBACC.6,Y84
MOV56H,#30H
Y84:
MOV57H,#07H
CLRF0
LJMP S_PLAY
Y81:
MOVA,R2 ;R2中为日的值
MOVR0,A
LCALL D_BCD
MOV56H,A
MOV57H,#08H
CLRF0
LJMP S_PLAY
Y9:
CJNE R2,#00H,Y91
MOV56H,#29H ;R2中为0,则为前一个月
MOVA,R5 ;的最后一天
JBACC.5,Y92
MOV56H,#30H
Y92:
MOV57H,#08H
CLRF0
LJMP S_PLAY
Y91:
MOVA,R2 ;R2中为日的值
MOVR0,A
LCALL D_BCD
MOV56H,A
MOV57H,#09H
CLRF0
LJMP S_PLAY
RY9:
CJNE R2,#00H,RY91
MOV56H,#29H ;R2中为0,则为前一个月
MOVA,R5 ;的最后一天
JBACC.4,RY92
MOV56H,#30H
RY92:
MOV57H,#09H
CLRF0
LJMP S_PLAY
RY91:
MOVA,R2 ;R2中为日的值
MOVR0,A
LCALL D_BCD
MOV56H,A
MOV57H,#09H
SETB F0
LJMP S_PLAY
Y10:
CJNE R2,#00H,Y101
LCALL CHECKRE ;查前一个月是否为闰月
CJNE A,#09H,Y102
MOV56H,#29H ;前一个月是闰月
MOVA,R4 ;R2中为0,则为前一个月
ANLA,#0FH ;的最后一天
JNZY103
MOV56H,#30H
MOV57H,#09H
SETB F0
LJMP S_PLAY
Y103:
MOV57H,#09H
SETB F0
LJMP S_PLAY
Y102:
MOV56H,#29H ;前一个月不是闰月
MOVA,R5
JBACC.4,Y104
MOV56H,#30H
Y104:
MOV57H,#09H
CLRF0
LJMP S_PLAY
Y101:
MOVA,R2 ;R2中为日的值
MOVR0,A
LCALL D_BCD
MOV56H,A
MOV57H,#10H
CLRF0
LJMP S_PLAY
Y11:
CJNE R2,#00H,Y111
MOV56H,#29H ;R2中为0,则为前一个月
MOVA,R5 ;的最后一天
JBACC.2,Y112
MOV56H,#30H
Y112:
MOV57H,#10H
CLRF0
LJMP S_PLAY
Y111:
MOVA,R2 ;R2中为日的值
MOVR0,A
LCALL D_BCD
MOV56H,A
MOV57H,#11H
CLRF0
LJMP S_PLAY
Y12:
CJNE R2,#00H,Y121
MOV56H,#29H ;R2中为0,则为前一个月
MOVA,R5 ;的最后一天
JBACC.1,Y122
MOV56H,#30H
Y122:
MOV57H,#11H
CLRF0
LJMP S_PLAY
Y121:
MOVA,R2 ;R2中为日的值
MOVR0,A
LCALL D_BCD
MOV56H,A
MOV57H,#12H
CLRF0
LJMP S_PLAY
S_PLAY:
MOVR0,57H
LCALL DIVIDE ;月分离送显示缓存
MOV52H,R1
MOV53H,R2
MOVR0,56H
LCALL DIVIDE ;日分离送显示缓存
MOV50H,R1
MOV51H,R2
RET
;查是否闰月程序;;
CHECKRE:
MOVA,R4
SWAP A
ANLA,#0FH
RET
;10进制转换为BCD码程序;
D_BCD:
MOVA,R0
MOVB,#10
DIVAB
SWAP A
ORLA,B
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;显示程序;;;
DISPLAY:
MOVA,10H
ANLA,#00001111B
MOV59H,A
MOVA,76H ;第八列LED
ANLA,#00001111B
SWAP A
ADDA,59H
MOVP1,A
MOVA,70H
ANLA,#00001111B
ADDA,#01110000B
MOVP2,A
LCALL DL1MS
MOVP1,#0FFH
MOVA,10H
ANLA,#11110000B
SWAP A
MOV5AH,A
MOVA,77H ;第七列LED
ANLA,#00001111B
SWAP A
ADDA,5AH
MOVP1,A
MOVA,71H
ANLA,#00001111B
ADDA,#01100000B
MOVP2,A
LCALL DL1MS
MOVP1,#0FFH
MOVA,56H ;第六列LED
SWAP A
ANLA,#11110000B
ADDA,79H
SWAP A
MOVP1,A
MOVA,72H
ANLA,#00001111B
ADDA,#01010000B
MOVP2,A
LCALL DL1MS
MOVP1,#0FFH
MOVA,56H ;第五列LED
ANLA,#11110000B
ADDA,7AH
SWAP A
MOVP1,A
MOVA,73H
ANLA,#00001111B
ADDA,#01000000B
MOVP2,A
LCALL DL1MS
MOVP1,#0FFH
MOVA,57H ;第四列LED
SWAP A
ANLA,#11110000B
ADDA,7BH
SWAP A
MOVP1,A
MOVA,74H
ANLA,#00001111B
ADDA,#00110000B
MOVP2,A
LCALL DL1MS
MOVP1,#0FFH
MOVA,57H ;第三列LED
ANLA,#11110000B
ADDA,7CH
SWAP A
MOVP1,A
MOVA,75H
ANLA,#00001111B
ADDA,#00100000B
MOVP2,A
LCALL DL1MS
MOVP1,#0FFH
MOVP1,#00001111B
MOVP2,#00011111B ;第二列LED
LCALL DL1MS
MOVP1,#0FFH
MOVA,78H ;第一列LED
ANLA,#00001111B
ADDA,#00100000B
MOVP1,A
MOVP2,#00001111B
LCALL DL1MS
MOVP1,#0FFH
RET
ZJ:
MOV01H,#150
ZZZ1:
MOVP2,#00001000B
MOVP1,#88H
LCALL DL1MS
MOVP2,#00011000B
MOVP1,#88H
LCALL DL1MS
MOVP2,#00101000B
MOVP1,#88H
LCALL DL1MS
MOVP2,#00111000B
MOVP1,#88H
LCALL DL1MS
MOVP2,#01001000B
MOVP1,#88H
LCALL DL1MS
MOVP2,#01011000B
MOVP1,#88H
LCALL DL1MS
MOVP2,#01101000B
MOVP1,#88H
LCALL DL1MS
MOVP2,#01111000B
MOVP1,#88H
LCALL DL1MS
DJNZ 01H,ZZZ1
MOVP1,#0FFH
RET
DL1MS:
MOVR6,#14H
DL1:
MOVR7,#19H
DL2:
DJNZ R7,DL2
DJNZ R6,DL1
RET
;数据表~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TAB:
DB35,15H,51H,00H,23,11H,52H,41H,42,12H,65H,00H
DB31,11H,32H,00H,21,42H,52H,21H,39,52H,25H,00H
DB28,25H,05H,71H,48,66H,42H,00H,37,33H,22H,00H
DB25,15H,24H,51H,44,05H,52H,00H,33,22H,65H,00H
DB22,21H,25H,41H,40,24H,52H,00H,30,52H,42H,91H
DB49,55H,05H,00H,38,26H,44H,00H,27,53H,50H,60H
DB46,53H,24H,00H,35,25H,54H,00H,24,41H,52H,41H
DB42,45H,25H,00H,31,24H,52H,00H,21,51H,12H,21H
DB40,55H,11H,00H,28,26H,21H,61H,47,26H,61H,00H
DB36,13H,31H,00H,25,05H,31H,51H,43,12H,54H,00H
DB33,51H,25H,00H,22,42H,25H,31H,41,32H,22H,00H
DB30,55H,02H,71H,49,55H,22H,00H,38,26H,62H,00H
DB27,13H,64H,60H,45,13H,32H,00H,34,12H,55H,00H
DB23,10H,53H,51H,42,22H,45H,00H,31,52H,22H,00H
DB21,52H,44H,21H,40,55H,44H,00H,29,26H,50H,71H
DB47,26H,64H,00H,36,25H,32H,00H,25,23H,32H,50H
DB44,44H,55H,00H,32,24H,45H,00H,22,55H,11H,30H
END
作者: zl2168 时间: 2017-12-10 17:52
本帖最后由 zl2168 于 2017-12-10 20:34 编辑
电子钟双解c和汇编程序。《80C51单片机实用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9, 用于学习51单片机原理,程序(双解c和汇编)语句条条有注解,便于阅读理解,便于自学,可从零基础c语言开始学习。
模拟电子钟(由80C51定时器产生秒时基)
作者: zl2168 时间: 2017-12-10 21:45
你的汇编程序也太长了,显然没编好。
作者: zl2168 时间: 2017-12-10 21:48
实例93 具有校正功能的时钟1302(LED数码管显示)
先Proteus仿真一下,确认有效。
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
作者: zl2168 时间: 2017-12-10 21:50
实例91 具有校正功能的时钟1302(LCD1602显示)
先Proteus仿真,确认有效。
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,书中电路和程序设计有详细说明,程序语句条条有注解。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |