?? lcd.asm
字號:
;;;;;;;;;LCD萬年歷時鐘源程序;;;;;;;;;
;;;;;;;;;名 稱:LCD_Z1.asm ;;;;;;;;;;
;;;;;按鍵定義
;K1 BIT P3.2
K2 BIT P3.3
K3 BIT P3.4
K4 BIT P3.5
;;;;;LCD接口定義
RS BIT P2.4
RW BIT P2.6
E BIT P2.5
DAT EQU P0
HD BIT P2.2
JD BIT P2.3
;;;;;變量定義
TLL EQU 25H
M50 EQU 26H
XZ EQU 27H
HOUR EQU 28H
SEC EQU 29H
SECO EQU 2AH
X EQU 2BH
Y EQU 2CH
MIN EQU 2DH
Z EQU 2EH
WEEK EQU 2FH ;周
DAY EQU 30H ;?
MOU EQU 31H ;月
YEAY EQU 32H ;年
SO EQU 33H
DSS EQU 34H
MS EQU 35H
HHH EQU 36H
MMH EQU 37H
HHJ EQU 38H
MMJ EQU 39H
M30 EQU 3AH
;;;;;;;;;;主程序;;;;;;;;;;;
;;;;名 稱: main;;;;;;;;
ORG 0000H
JMP MAIN
ORG 0003H
RETI
ORG 000BH
JMP WT0
ORG 0013H
RETI
ORG 001BH
JMP WT1
ORG 0023H
RETI
ORG 0040H
MAIN: CLR HD
MOV R1,#8
LL1: CALL D_10MS
DJNZ R1,LL1
SETB HD
MOV SP,#70H
MOV SO,#54H
MOV DSS,#0
MOV 20H,#0
MOV 21H,#0
MOV 22H,#0
MOV TMOD,#11H
MOV TL0,#0B0H
MOV TH0,#3CH
MOV TL1,#0B0H
MOV TH1,#3CH
CLR TR0
CLR ET1
SETB ET0
SETB TR0
MOV MMH,#1
MOV HHH,#2
MOV HHJ,#3
MOV MMJ,#4
MOV M50,#20
MOV M30,#4
MOV XZ,#50
MOV TLL,#0AAH
MOV MS,#0
MOV SEC,#23 ;秒
MOV MIN,#58 ;分
MOV HOUR,#23 ;時
MOV WEEK,#31H ;周
MOV DAY,#1 ;日
MOV MOU,#10 ;月
MOV YEAY,#6 ;年
SETB EA
CALL CSH_LCM ;LCD啟動
CALL LCDXS_1
CALL LCDXS_2
LOOP: JNB 21H.1,LOOP2
CLR 21H.1
CALL DYA
LOOP2:CALL KEY
CALL TBJ
JMP LOOP
;;;;;;;;;;按鍵處理程序;;;;;;
;;;;;;模塊名稱: KEY.asm;;;;
KEY: JB K2,S01
CLR HD
CALL D_10MS
SETB HD
JB K2,S01
JNB K2,$
CLR TR0
CLR ET0
SETB TR1
SETB ET1
MOV 20H,#0
MOV SEC,#0
INC MS
MOV A,MS
CJNE A,#8,S00
MOV MS,#0
MOV 20H,#0
CLR TR1
CLR ET1
SETB TR0
SETB ET0
S00: RET
S01: MOV A,MS
JZ S00
CJNE A,#1,S02
SETB 20H.0
;;;;;;;年加一;;;;;;;
S01_N:JB K3,S01_D
CLR HD
CALL D_10MS
SETB HD
JB K3,S01_D
JNB K3,$
INC YEAY
MOV A,YEAY
CJNE A,#100,S01_N
MOV YEAY,#0
JMP S01_N
;;;;;;;年減一;;;;;;;
S01_D:JB K4,S01_RET
CLR HD
CALL D_10MS
SETB HD
JB K4,S01_RET
JNB K4,$
DEC YEAY
MOV A,YEAY
CJNE A,#255,S01_D
MOV YEAY,#99
S01_RET: RET
;;;;;;;月加一;;;;;;
S02: CJNE A,#2,S03
SETB 20H.1
S02_N:JB K3,S02_D
CLR HD
CALL D_10MS
SETB HD
JB K3,S02_D
JNB K3,$
INC MOU
MOV A,MOU
CJNE A,#13,S02_N
MOV MOU,#1
JMP S02_N
;;;;;;;月減一;;;;;
S02_D:JB K4,S02_RET
CLR HD
CALL D_10MS
SETB HD
JB K4,S02_RET
JNB K4,$
DEC MOU
MOV A,MOU
CJNE A,#0,S02_D
MOV MOU,#12
S02_RET: RET
;;;;;;;日加一;;;;;;
S03: CJNE A,#3,S04
SETB 20H.2
S03_N:JB K3,S03_D
CLR HD
CALL D_10MS
SETB HD
JB K3,S03_D
JNB K3,$
INC DAY
MOV A,DAY
CJNE A,#32,S03_N
MOV DAY,#1
JMP S03_N
;;;;;;日減一;;;;;;
S03_D:JB K4,S03_RET
CLR HD
CALL D_10MS
SETB HD
JB K4,S03_RET
JNB K4,$
DEC DAY
MOV A,DAY
CJNE A,#0,S03_D
MOV DAY,#31
S03_RET: RET
;;;;;;星期加一;;;;;;;
S04: CJNE A,#4,S05
SETB 20H.3
S04_N:JB K3,S04_D
CLR HD
CALL D_10MS
SETB HD
JB K3,S04_D
JNB K3,$
INC WEEK
MOV A,WEEK
CJNE A,#38H,S04_N
MOV WEEK,#31H
JMP S04_N
;;;;;;;星期減一;;;;;;
S04_D:JB K4,S04_RET
CLR HD
CALL D_10MS
SETB HD
JB K4,S04_RET
JNB K4,$
DEC WEEK
MOV A,WEEK
CJNE A,#30H,S04_D
MOV WEEK,#37H
S04_RET: RET
;;;;;;;微調加一;;;;;;;
S05: CJNE A,#5,S06
SETB 20H.4
S05_N:JB K3,S05_D
CLR HD
CALL D_10MS
SETB HD
JB K3,S05_D
JNB K3,$
INC XZ
MOV A,XZ
CJNE A,#100,S05_N
MOV XZ,#1
JMP S05_N
;;;;;;;微調減一;;;;;;
S05_D:JB K4,S05_RET
CLR HD
CALL D_10MS
SETB HD
JB K4,S05_RET
JNB K4,$
DEC XZ
MOV A,XZ
CJNE A,#255,S05_D
MOV XZ,#99
S05_RET: CALL TZL
RET
;;;;;;;時加一;;;;;;
S06: CJNE A,#6,S07
SETB 20H.5
S06_N:JB K3,S06_D
CLR HD
CALL D_10MS
SETB HD
JB K3,S06_D
JNB K3,$
INC HOUR
MOV A,HOUR
CJNE A,#24,S06_N
MOV HOUR,#0
JMP S06_N
;;;;;;;時減一;;;;;;
S06_D:JB K4,S06_RET
CLR HD
CALL D_10MS
SETB HD
JB K4,S06_RET
JNB K4,$
DEC HOUR
MOV A,HOUR
CJNE A,#255,S06_D
MOV HOUR,#23
S06_RET: RET
;;;;;;;分加一;;;;;;
S07: CJNE A,#7,S08
SETB 20H.6
S07_N:JB K3,S07_D
CLR HD
CALL D_10MS
SETB HD
JB K3,S07_D
JNB K3,$
INC MIN
MOV A,MIN
CJNE A,#60,S07_N
MOV MIN,#0
JMP S07_N
;;;;;;;;分減一;;;;;;
S07_D:JB K4,S07_RET
CLR HD
CALL D_10MS
SETB HD
JB K4,S07_RET
JNB K4,$
DEC MIN
MOV A,MIN
CJNE A,#255,S07_D
MOV MIN,#59
S07_RET:RET
S08: RET
;;;;;;;;;時間處理程序;;;;;;;;
;;;;模塊名稱: LCDXS_1.asm;;;
;;;;功 能: 時間處理;;;;;;
;LCD第二項顯示時分秒
LCDXS_1: MOV X,#0 ;"s00"
MOV A,SO
MOV B,X
CALL LCDP1
INC X
MOV A,XZ
CALL SHOW_DIG1
CALL LCDP1
MOV A,HOUR ;時
MOV X,#4
CALL SHOW_DIG1
CALL LCDP1
INC X
MOV A,#':'
MOV B,X
CALL LCDP1
MOV A,MIN ;分
INC X
CALL SHOW_DIG1
CALL LCDP1
INC X
MOV A,#':'
MOV B,X
CALL LCDP1
MOV A,SEC ;秒
INC X
CALL SHOW_DIG1
LCDP1:MOV Y,A
MOV A,B
ADD A,#0C0H
CALL WR_LCM
MOV A,Y
CALL WR_DATA
RET
SHOW_DIG1: MOV B,#10
DIV AB
ADD A,#30H
MOV Z, B
MOV B,X
CALL LCDP1
MOV B,Z
MOV A,B
ADD A,#30H
INC X
MOV B,X
RET
;LCD第一項顯示 “年月日星期”
LCDXS_2: MOV X,#2
MOV A,#'2'
MOV B,X
CALL LCDP2
INC X
MOV A,#'0'
MOV B,X
CALL LCDP2
MOV A,YEAY ;年
MOV X,#4
CALL SHOW_DIG2
CALL LCDP2
INC X
MOV A,#'-'
MOV B,X
CALL LCDP2
MOV A,MOU ;月
INC X
CALL SHOW_DIG2
CALL LCDP2
INC X
MOV A,#'-'
MOV B,X
CALL LCDP2
MOV A,DAY ;日
INC X
CALL SHOW_DIG2
CALL LCDP2
INC X
MOV A,#' '
MOV B,X
CALL LCDP2
INC X
MOV A,#' '
MOV B,X
CALL LCDP2
INC X
MOV A,#' '
MOV B,X
CALL LCDP2
MOV A,WEEK
MOV B,X
CALL LCDP2
LCDP2:MOV Y,A
MOV A,B
ADD A,#80H
CALL WR_LCM
MOV A,Y
CALL WR_DATA
RET
SHOW_DIG2: MOV B,#10
DIV AB
ADD A,#30H
MOV Z, B
MOV B,X
CALL LCDP2
MOV B,Z
MOV A,B
ADD A,#30H
INC X
MOV B,X
RET
;時間校正輸入處理
TZL: CLR C
MOV A,#0AAH
SUBB A,#50
ADD A,XZ
MOV TLL,A
RET ;時間比較
TBJ: MOV A,SEC
MOV B,SECO
CJNE A,B,TBJ_1
JMP TBJ_2
TBJ_1:CALL LCDXS_1
CALL LCDXS_2
MOV SECO,SEC
TBJ_2:RET
;;;;;;;;年月日處理程序;;;;;
;;;模塊名稱: day.asm;;;;;;
;;;功 能: 年月日處理;;
DYA: MOV DPTR,#MOU_12
MOV A,MOU ;月
XRL A,#12
JNZ MM_4
MOV A,DAY
INC A
CJNE A,#32,MM_4
JMP MM_3
MM_4: MOV DPTR,#MOU_12
MOV A,MOU
XRL A,#2
JNZ MM_1
MOV A,MOU
CALL MOU_J
JMP MM_2
MM_1:MOVC A,@A+DPTR
MM_2:MOV B,A
INC B
INC DAY
MOV A,DAY
CJNE A,B,T1_END
MM_3: MOV DAY,#01H
INC MOU
MOV A,MOU
CJNE A,#13,T1_END
MOV MOU,#1
INC YEAY
MOV A,YEAY
CJNE A,#100,T1_END
MOV YEAY,#0
INC YEAY
MOV A,YEAY
CJNE A,#100 ,T1_END
MOV YEAY,#0
T1_END:
MOU_J:MOV DPTR,#YEAR_D
MOV A,YEAY
MOVC A,@A+DPTR
MOV B,A
RET
MOU_12:
db 00h
db 31d
db 28d
db 31d
db 30d
db 31d
db 30d
db 31d
db 31d
db 30d
db 31d
db 30d
db 31d
YEAR_D:
db 29d
db 28d
db 28d
db 28d
db 29d
db 28d
db 28d
db 28d
db 29d
db 28d
db 28d
db 28d
db 29d
db 28d
db 28d
db 28d
db 29d
db 28d
db 28d
db 28d
;;;;;;;;LCD1602顯示程序;;;;;;;;
;模塊名稱: LCD16.asm (csh_lcm;
;芯片型號: HD;;;;;;;;;;;;;;;;
;;;;;;;;;啟動;;;;;;;;
CSH_LCM: MOV A,#00111000B ;(16*2,5*7點陣,8位數據接口)
CALL WR_LCM ;寫入指令
MOV A,#08H
CALL WR_LCM ;寫入指令
MOV A,#0000110B ;(開顯示,顯示光標不閃耀)
CALL WR_LCM ;寫入指令
MOV A,#00001100B ;(N=1當讀或寫一個字符后地址指針加一,光標加一。S=0寫一字符,屏示動
CALL WR_LCM ;寫入指令
RET
;;;;;;;;;寫入指令;;;;;;;;;
WR_LCM: CALL RD_BF ;判LCD忙
CLR E ;注意:E設低電平主要是為后產生一高電平脈沖
CLR RS ;參閱使用說明中:1.2節 RS=L
CLR RW ;RS=L
SETB E ;E=高脈沖
MOV DAT,A ;d0-d7指令碼
CLR E ;允許端恢復低電平
RET
;;;;;;;;;判LCD忙;;;;;;;;;;;;
;說明:MCU處理一個指令,僅需若干個uS,而LCD得化40uS
RD_BF: PUSH ACC ;ACC入棧
BF_LOOP: SETB RW ;RW-H
CLR RS ;RS-L
SETB E ;E=H
MOV A,DAT ;讀數據
CLR E ;允許端恢復低電平
JB ACC.7,BF_LOOP ;參閱使用說明中:2-狀態字說明:對控制器讀寫之前,必須進行讀寫檢測,確保ACC.7=0;;;
POP ACC ;ACC出棧
CALL D_2500 ;轉延時
RET
;*****寫入數據
WR_DATA: CALL RD_BF ;判LCD忙
CLR E ;拉低電平
SETB RS ;參閱使用說明中:1-4 RS=H
CLR RW ;RW=L
SETB E ;E=高電平
MOV DAT,A ;寫入數據
CLR E
RET
;;;;;;;;;延時2.5MS;;;;;;
D_2500: MOV R6,#5
LD1: MOV R7,#250
DJNZ R7,$
DJNZ R6,LD1
RET
D_10MS: MOV R5,#4
LD2: CALL D_2500
DJNZ R5,LD2
RET
;;;;;;;;;T0中斷程序;;;;;;;;
;;;;模塊名稱: wt0.asm;;;;;
;;;;功 能: 計時;;;;;;;;
WT0: PUSH ACC
PUSH PSW
CLR ET0
CLR TR0
DJNZ M50,SRET
MOV TL0,TLL
MOV TH0,#3CH
MOV M50,#20
INC SEC
MOV A,SEC
CJNE A,#60,SRET
MOV SEC,#0
SJ1M: INC MIN
MOV A,MIN
CJNE A,#60,SRET
MOV MIN,#0
INC HOUR
MOV A,HOUR
CJNE A,#24,SRET
MOV HOUR,#0
INC WEEK
SETB 21H.1
MOV A,WEEK
CJNE A,#38H,SRET
MOV WEEK,#31H
SRET: MOV TL0,#0AAH
MOV TH0,#3CH
POP PSW
POP ACC
SETB ET0
SETB TR0
RETI
;;;;;;;;;;T1中斷程序;;;;;;;;
;;;;;模塊名稱: wt1.asm ;;;;
;;;;;功 能: 計時;;;;;;;;
WT1: PUSH ACC
PUSH PSW
CLR ET1
CLR TR1
DJNZ M30,SRETAA
MOV TL0,#0B0H
MOV TH0,#3CH
MOV M30,#4
CPL 21H.0
JB 20H.0,WT1_1
JB 20H.1,WT1_2
JB 20H.2,WT1_3
JB 20H.3,WT1_4
JB 20H.4,WT1_5
JB 20H.5,WT1_6A
JB 20H.6,WT1_7A
SRETAA:JMP SRETA
WT1_6A:JMP WT1_6
WT1_7A:JMP WT1_7
WT1_1:JB 21H.0,WT1_CPL
MOV X,#4
MOV A,#' '
MOV B,X
CALL LCDP2
INC X
MOV A,#' '
MOV B,X
CALL LCDP2
JMP SRETA
WT1_CPL:CALL LCDXS_2
JMP SRETA
WT1_2:JB 21H.0,WT2_CPL
MOV X,#7
MOV A,#' '
MOV B,X
CALL LCDP2
INC X
MOV A,#' '
MOV B,X
CALL LCDP2
JMP SRETA
WT2_CPL:CALL LCDXS_2
JMP SRETA
WT1_3:JB 21H.0,WT3_CPL
MOV X,#10
MOV A,#' '
MOV B,X
CALL LCDP2
INC X
MOV A,#' '
MOV B,X
CALL LCDP2
JMP SRETA
WT3_CPL:CALL LCDXS_2
JMP SRETA
WT1_4:JB 21H.0,WT4_CPL
MOV X,#14
MOV A,#' '
MOV B,X
CALL LCDP2
JMP SRETA
WT4_CPL:CALL LCDXS_2
JMP SRETA
WT1_5:JB 21H.0,WT5_CPL
MOV X,#1
MOV A,#' '
MOV B,X
CALL LCDP1
INC X
MOV A,#' '
MOV B,X
CALL LCDP1
JMP SRETA
WT5_CPL:CALL LCDXS_1
JMP SRETA
WT1_6:JB 21H.0,WT6_CPL
MOV X,#4
MOV A,#' '
MOV B,X
CALL LCDP1
INC X
MOV A,#' '
MOV B,X
CALL LCDP1
JMP SRETA
WT6_CPL:CALL LCDXS_1
JMP SRETA
WT1_7:JB 21H.0,WT7_CPL
MOV X,#7
MOV A,#' '
MOV B,X
CALL LCDP1
INC X
MOV A,#' '
MOV B,X
CALL LCDP1
JMP SRETA
WT7_CPL:CALL LCDXS_1
JMP SRETA
SRETA:POP PSW
POP ACC
SETB ET1
SETB TR1
RETI
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -