📄 12864f.txt
字号:
XRL A,#6
JZ TIME_PRO_D3
MOV A,MONTH
XRL A,#9
JZ TIME_PRO_D3
MOV A,MONTH
XRL A,#11
JZ TIME_PRO_D3
MOV A,DATE
XRL A,#32 ;大月日期31天
JNZ TIME_PRO_W
SJMP TIME_PRO_M ;跳转到月处理
TIME_PRO_D3: MOV A,DATE
XRL A,#31 ;小月日期30天
JNZ TIME_PRO_W
TIME_PRO_M: MOV DATE,#1
INC MONTH ;月处理
MOV A,MONTH
CJNE A,#13,TIME_PRO_W
MOV MONTH,#1
INC YEAR ;年处理
MOV A,YEAR
CJNE A,#100,TIME_PRO_W
MOV YEAR,#0
TIME_PRO_W: LCALL WEEK_PRO ;星期处理
TIME_PRO_E:
RET
;**********星期自动运算函数*********************
;星期运算常数W(5或6)
;闰年的数目L(0--99年:L=YEAR/4 整除)
;年数YEAR
;月参变数MONTH_TAB(0,3,3,6,1,4,6,2,5,0,3,5)
;日期DATE
;星期数=(W+L+YEAR+MONTH_TAB+DATE)%7 (求余)
WEEK_PRO: MOV A,MONTH ;确定星期运算常数W
XRL A,#1
JZ WEEK_PRO_1
MOV A,MONTH
XRL A,#2
JZ WEEK_PRO_1
SJMP WEEK_PRO_2
WEEK_PRO_1: LCALL LEAP_PRO
MOV C,LEAP
JNC WEEK_PRO_2
MOV R3,#5
SJMP WEEK_PRO_3
WEEK_PRO_2: MOV R3,#6
WEEK_PRO_3: MOV A,YEAR ;计算闰年的数目L
MOV B,#4
DIV AB
ADD A,R3 ;W+L
MOV R3,A
MOV A,YEAR
ADD A,R3 ;(W+L)+YEAR
MOV R3,A
MOV DPTR,#MONTH_TAB
MOV A,MONTH
MOVC A,@A+DPTR
ADD A,R3 ;(W+L+YEAR)+MONTH_TAB
MOV R3,A
MOV A,DATE
ADD A,R3 ;(W+L+YEAR+MONTH_TAB+DATE)
MOV B,#7
DIV AB ;余数即为星期数
MOV WEEK,B
RET
;**********闰年的判断函数*********************
;闰年的条件:年(YEAR)能被4整除、但不能被100整除;或者被400整除。
;如果我们只考虑(00--99),则只需考虑年(YEAR)能被4整除即可。
LEAP_PRO: MOV A,YEAR
MOV B,#4
DIV AB
MOV A,B
JZ LEAP_PRO_1 ;能被4整除
CLR LEAP ;平年,清零LEAP
LJMP LEAP_PRO_E
LEAP_PRO_1: SETB LEAP ;闰年,置位LEAP
LEAP_PRO_E:
RET
;**********更新显示缓冲区********************
;入口R1,
UPDATE_BUF: MOV DIS_BUF_U0,#20H;空格
MOV DIS_BUF_U1,#20H;空格
MOV DIS_BUF_U2,#32H ;"2"
MOV DIS_BUF_U3,#30H ;"0"
MOV A,YEAR ;更新年数据
MOV B,#10
DIV AB
ADD A,#48 ;二进制转换为ASCMA码
MOV DIS_BUF_U4,A
MOV A,B
ADD A,#48
MOV DIS_BUF_U5,A
MOV DIS_BUF_U6,#0c4H ;"-"
MOV DIS_BUF_U7,#0eaH;"-"
MOV A,MONTH ;更新月数据
MOV B,#10
DIV AB
ADD A,#48
MOV DIS_BUF_U8,A
MOV A,B
ADD A,#48
MOV DIS_BUF_U9,A
MOV DIS_BUF_U10,#0d4H ;"-"
MOV DIS_BUF_U11,#0c2H
MOV A,DATE ;更新日数据
MOV B,#10
DIV AB
ADD A,#48
MOV DIS_BUF_U12,A
MOV A,B
ADD A,#48
MOV DIS_BUF_U13,A
MOV DIS_BUF_U14,#0c8H;空格
MOV DIS_BUF_U15,#0d5H;空格
MOV DIS_BUF_L0,#0d0h
MOV DIS_BUF_L1,#0c7h
MOV DIS_BUF_L2,#0c6h
MOV DIS_BUF_L3,#0dah
mov a,week
cjne a,#1,week1
mov DIS_BUF_L4,#0d2h
MOV DIS_BUF_L5,#0bbh
sjmp UPDATE_BUF_2
week1:cjne a,#2,week2
mov DIS_BUF_L4,#0b6h
MOV DIS_BUF_L5,#0feh
sjmp UPDATE_BUF_2
week2:cjne a,#3,week3
mov DIS_BUF_L4,#0c8h
MOV DIS_BUF_L5,#0fdh
sjmp UPDATE_BUF_2
week3:cjne a,#4,week4
mov DIS_BUF_L4,#0cbh
MOV DIS_BUF_L5,#0c4h
sjmp UPDATE_BUF_2
week4:cjne a,#5,week5
mov DIS_BUF_L4,#0ceh
MOV DIS_BUF_L5,#0e5h
sjmp UPDATE_BUF_2
week5:cjne a,#6,week6
mov DIS_BUF_L4,#0c1h
MOV DIS_BUF_L5,#0f9h
sjmp UPDATE_BUF_2
week6:
mov DIS_BUF_L4,#0cch
MOV DIS_BUF_L5,#0ech
mov DIS_BUF_L6,#' ' ;空格
UPDATE_BUF_2:mov DIS_BUF_L7,#' ' ;空格
MOV A,DIS_H
MOV B,#10
DIV AB
ADD A,#48
MOV DIS_BUF_L8,A
MOV A,B
ADD A,#48
MOV DIS_BUF_L9,A
MOV DIS_BUF_L10,#3AH;":"
MOV A,DIS_M
MOV B,#10
DIV AB
ADD A,#48
MOV DIS_BUF_L11,A
MOV A,B
ADD A,#48
MOV DIS_BUF_L12,A
MOV DIS_BUF_L13,#3AH;":"
MOV A,DIS_S
MOV B,#10
DIV AB
ADD A,#48
MOV DIS_BUF_L14,A
MOV A,B
ADD A,#48
MOV DIS_BUF_L15,A
RET
;************显示处理程序*********************
DISPLAY_PRO: MOV R0,#00H
LCALL LCD_POS
MOV R0,DIS_BUF_U0
LCALL LCD_WDAT
MOV R0,DIS_BUF_U1
LCALL LCD_WDAT
MOV R0,DIS_BUF_U2
LCALL LCD_WDAT
MOV R0,DIS_BUF_U3
LCALL LCD_WDAT
MOV R0,DIS_BUF_U4
LCALL LCD_WDAT
MOV R0,DIS_BUF_U5
LCALL LCD_WDAT
MOV R0,DIS_BUF_U6
LCALL LCD_WDAT
MOV R0,DIS_BUF_U7
LCALL LCD_WDAT
MOV R0,DIS_BUF_U8
LCALL LCD_WDAT
MOV R0,DIS_BUF_U9
LCALL LCD_WDAT
MOV R0,DIS_BUF_U10
LCALL LCD_WDAT
MOV R0,DIS_BUF_U11
LCALL LCD_WDAT
MOV R0,DIS_BUF_U12
LCALL LCD_WDAT
MOV R0,DIS_BUF_U13
LCALL LCD_WDAT
MOV R0,DIS_BUF_U14
LCALL LCD_WDAT
MOV R0,DIS_BUF_U15
LCALL LCD_WDAT
MOV R0,#90H
LCALL LCD_WCMD
MOV R0,DIS_BUF_L0
LCALL LCD_WDAT
MOV R0,DIS_BUF_L1
LCALL LCD_WDAT
MOV R0,DIS_BUF_L2
LCALL LCD_WDAT
MOV R0,DIS_BUF_L3
LCALL LCD_WDAT
MOV R0,DIS_BUF_L4
LCALL LCD_WDAT
MOV R0,DIS_BUF_L5
LCALL LCD_WDAT
MOV R0,#' '
LCALL LCD_WDAT
MOV R0,#' '
LCALL LCD_WDAT
MOV R0,DIS_BUF_L8
LCALL LCD_WDAT
MOV R0,DIS_BUF_L9
LCALL LCD_WDAT
MOV R0,DIS_BUF_L10
LCALL LCD_WDAT
MOV R0,DIS_BUF_L11
LCALL LCD_WDAT
MOV R0,DIS_BUF_L12
LCALL LCD_WDAT
MOV R0,DIS_BUF_L13
LCALL LCD_WDAT
MOV R0,DIS_BUF_L14
LCALL LCD_WDAT
MOV R0,DIS_BUF_L15
LCALL LCD_WDAT
mov r0,#88h ;奥运有我,加油中国
lcall lcd_wcmd
mov dptr,#line2
mov r7,#10h
lcall entline
mov r0,#98h
lcall lcd_wcmd
mov dptr,#line1
mov r7,#10h
lcall entline
RET
;**********LCD忙标志BF测试程序**************
BF_TEST: PUSH ACC ;保护ACC数据
CLR RS ;RS=0
SETB RW ;RW=1
SETB EP ;E=高电平
NOP
NOP
NOP
NOP
MOV comdat,#0FFH ;将comdat口置1,保证后面数据正确读入(由 comdat口结构决定)
WT_BF: NOP ;
JB comdat.7,WT_BF ;DB7=0 LCD控制器空闲,DB7=1 LCD控制器忙
CLR EP
POP ACC ;释放ACC数据
RET
;**********LCD指令写入程序******************
;程序入口:R0
LCD_WCMD: LCALL BF_TEST ;检测忙标志
CLR RS
CLR RW
CLR EP
NOP
NOP
MOV comdat,R0
NOP
NOP
NOP
NOP
SETB EP
NOP
NOP
NOP
NOP
CLR EP
RET
;**************************88
entline:
CLR A
MOVC A,@A+DPTR ;查表取数据
mov r0,a
LCALL lcd_wdat ;送显示
INC DPTR
DJNZ r7,entline
RET
;**********LCD数据写入程序****************
;程序入口:R0
LCD_WDAT: LCALL BF_TEST ;检测忙标志
SETB RS
CLR RW
CLR EP
NOP
NOP
MOV comdat,R0
NOP
NOP
NOP
NOP
SETB EP
NOP
NOP
NOP
NOP
CLR EP
RET
;**********LCD数据指针位置子程序**************
;程序入口:R0
LCD_POS: MOV A,R0
ORL A,#80H
MOV R0,A
LCALL LCD_WCMD
RET
;**********延时约5ms子程序********************
;晶振f=11.0592Mhz
;延时时间=(1+(1+2*100+2)*25)*12/11.0592=5507us(约5ms)
DELAY_5ms: MOV R7,#25
DELAY1: MOV R6,#100
DELAY2: DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
;***********星期自动运算月参变数**************
MONTH_TAB: DB 0
DB 0
DB 3
DB 3
DB 6
DB 1
DB 4
DB 6
DB 2
DB 5
DB 0
DB 3
DB 5
line1:db ' 加 油 中 国 '
line2:db ' 奥 运 有 我 '
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -