?? 12864f.txt
字號(hào):
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 ;跳轉(zhuǎn)到月處理
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
;**********星期自動(dòng)運(yùn)算函數(shù)*********************
;星期運(yùn)算常數(shù)W(5或6)
;閏年的數(shù)目L(0--99年:L=YEAR/4 整除)
;年數(shù)YEAR
;月參變數(shù)MONTH_TAB(0,3,3,6,1,4,6,2,5,0,3,5)
;日期DATE
;星期數(shù)=(W+L+YEAR+MONTH_TAB+DATE)%7 (求余)
WEEK_PRO: MOV A,MONTH ;確定星期運(yùn)算常數(shù)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 ;計(jì)算閏年的數(shù)目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 ;余數(shù)即為星期數(shù)
MOV WEEK,B
RET
;**********閏年的判斷函數(shù)*********************
;閏年的條件:年(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
;**********更新顯示緩沖區(qū)********************
;入口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 ;更新年數(shù)據(jù)
MOV B,#10
DIV AB
ADD A,#48 ;二進(jìn)制轉(zhuǎn)換為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 ;更新月數(shù)據(jù)
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 ;更新日數(shù)據(jù)
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 ;奧運(yùn)有我,加油中國(guó)
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忙標(biāo)志BF測(cè)試程序**************
BF_TEST: PUSH ACC ;保護(hù)ACC數(shù)據(jù)
CLR RS ;RS=0
SETB RW ;RW=1
SETB EP ;E=高電平
NOP
NOP
NOP
NOP
MOV comdat,#0FFH ;將comdat口置1,保證后面數(shù)據(jù)正確讀入(由 comdat口結(jié)構(gòu)決定)
WT_BF: NOP ;
JB comdat.7,WT_BF ;DB7=0 LCD控制器空閑,DB7=1 LCD控制器忙
CLR EP
POP ACC ;釋放ACC數(shù)據(jù)
RET
;**********LCD指令寫入程序******************
;程序入口:R0
LCD_WCMD: LCALL BF_TEST ;檢測(cè)忙標(biāo)志
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 ;查表取數(shù)據(jù)
mov r0,a
LCALL lcd_wdat ;送顯示
INC DPTR
DJNZ r7,entline
RET
;**********LCD數(shù)據(jù)寫入程序****************
;程序入口:R0
LCD_WDAT: LCALL BF_TEST ;檢測(cè)忙標(biāo)志
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數(shù)據(jù)指針位置子程序**************
;程序入口:R0
LCD_POS: MOV A,R0
ORL A,#80H
MOV R0,A
LCALL LCD_WCMD
RET
;**********延時(shí)約5ms子程序********************
;晶振f=11.0592Mhz
;延時(shí)時(shí)間=(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
;***********星期自動(dòng)運(yùn)算月參變數(shù)**************
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 ' 加 油 中 國(guó) '
line2:db ' 奧 運(yùn) 有 我 '
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -