📄 lcd_bk.asm
字号:
SCLK BIT P2.0
RST BIT P2.2
IO_DATA BIT P2.1
rs bit p2.4
rw bit p2.5
e bit p2.6
KEY_0 BIT P1.4
KEY_1 BIT P1.5
KEY_3 BIT P1.6
KEY_4 BIT P1.7
RING BIT P2.3
;ring_off bit p2.3 ;关闹铃
FUNCTION bit 00h
KP BIT 01H
KEY_LOCK BIT 02H
HAVE_KEY BIT 03H
KEY_LOCK1 BIT 04H
NAOZHONG_CONTROL BIT 05H
CLK_ONCE BIT 06H
CLK_EVER BIT 07H
clk_on bit 08h
CLK_ON_1 BIT 09H
NAOZHONG_CONTROL_1 BIT 0AH
ring_on bit 0bh
WAIT_TIME BIT 0CH
BIG EQU 50H
SMALL EQU 51H
COMM EQU 52H
DAT EQU 53H
IN_BYTE EQU 54H
BitCnt EQU 55H
RTIME EQU 56H
KEY_CLK_COUNT EQU 57H
KEY_TIME_COUNT EQU 58H
RBLACK EQU 59H
KVALUE EQU 5AH
STATE EQU 5BH
DISP_FLAG EQU 5CH
SEC EQU 22H ;20H,21H留给位寻址
MIN EQU 23H
HOUR EQU 24H
DAY EQU 25H
MON EQU 26H
WEEK EQU 27H
YEAR EQU 28H
CLK_MON EQU 29H
CLK_DAY EQU 2AH
CLK_HOUR EQU 2BH
CLK_MIN EQU 2CH
CLK_CONTROL EQU 2DH
clk_mon_1 EQU 10H ;闹钟的修改备份
clk_DAY_1 EQU 11H
clk_HOUR_1 EQU 12H
clk_MIN_1 EQU 13H
SEC1 EQU 48H
MIN1 EQU 44H
HOUR1 EQU 40H
DAY1 EQU 3AH
MON1 EQU 36H
WEEK1 EQU 4EH
YEAR1 EQU 32H
ORG 0000H
LJMP START
ORG 000BH
;
ORG 0040H
START:MOV SP,#60H ;以下是内存初始化
MOV P1,#0FFH
MOV YEAR,#08H ;1302的时钟寄存器的缓存
MOV MON,#08H
MOV DAY,#31H
MOV HOUR,#19H
MOV MIN,#0
MOV SEC ,#0
MOV WEEK,#5
MOV CLK_CONTROL,#31H ;闹钟的时间缓存
MOV CLK_MON,#08H
MOV CLK_DAY,#31H
MOV CLK_HOUR,#19H
MOV CLK_MIN,#01H
MOV STATE,#0 ;按键的状态 决定画面效果
MOV DISP_FLAG,#0 ;显示哪张画面 把数据送入显存
MOV KEY_CLK_COUNT,#0 ;调整闹钟时间的按键标志
MOV KEY_TIME_COUNT,#0 ;调整时间的按键标志
CLR ring_on ;有无闹钟标志
clr clk_on ;开/关在屏幕上的显示标志
CLR NAOZHONG_CONTROL ;闹钟次数在屏幕上显示的标志
CLR KEY_LOCK ;0号键的标志
CLR HAVE_KEY ;有无键的标志
CLR CLK_EVER ;闹钟一次定时标志
clr CLK_ONCE ;闹钟永久定时标志
CLR KEY_LOCK1 ;按键等待标志
setb ring ;为低振铃
MAIN:
lcall delay40MS
lcall WRITE1302
lcall Osc_Enable
lcall lcdini
main_0:
LCALL READ1302
JNB ring_on,main_1
JNB CLK_ever,main_2
LCALL COMPARE
sjmp main_1
main_2: jnb clk_once,main_1
lcall compare
main_1: LCALL KEY_CHECK
LCALL EXCHANGE
LCALL LCDDISP
JNB KEY_LOCK1,main_0 ;有键等待
LCALL KEY_STATE
JB WAIT_TIME,main_1
SJMP main_0
COMPARE:MOV A,CLK_MIN
CJNE A,MIN,COMPARE_EXIT
MOV A,CLK_HOUR
CJNE A,HOUR,COMPARE_EXIT
MOV A,CLK_DAY
CJNE A,DAY,COMPARE_EXIT
MOV A,CLK_MON
CJNE A,MON,COMPARE_EXIT
LCALL EQU_TIME
COMPARE_EXIT: RET
EQU_TIME:Mov state, #3
Mov disp_flag ,#3
Lcall exchange
Lcall lcddisp
mov r6,#15 ;15 是2分钟
ringing0:Mov r7 ,#100
ringing:clr ring
Lcall delay40ms
setb ring
lcall delay40ms
Jnb key_3 ,equ_time_exit ;ke yong key_3
Djnz r7 , ringing
djnz r6, ringing0
equ_time_exit:Jnb clk_ever,equ_time_1
Setb ring_on
equ_time_1:
clr ring_on
clr clk_once ;可不加
setb ring
Mov state ,#0
Mov disp_flag,#0
Ret
KEY_STATE:
MOV R5,#100
YOU_KEY2:MOV R7,#200
YOU_KEY1:MOV R6,#125
YOU_KEY0:JNB KEY_0,YOU_KEY
JNB KEY_1,YOU_KEY
;JNB KEY_2,YOU_KEY
JNB KEY_3,YOU_KEY
JNB KEY_4,YOU_KEY
DJNZ R6,YOU_KEY0
DJNZ R7,YOU_KEY1
DJNZ R5,YOU_KEY2
LCALL READ1302
LCALL WRITE1302
mov clk_mon,clk_mon_1 ;恢复在状态2的闹钟以前的设置
mov clk_day,clk_day_1
mov clk_hour,clk_hour_1
mov clk_MIN,clk_MIN_1
mov c,naozhong_control_1
mov naozhong_control,c
mov c,clk_on_1
mov clk_on,c
CLR KEY_LOCK
CLR KEY_LOCK1
MOV STATE,#0
MOV DISP_FLAG,#0
MOV KEY_CLK_COUNT,#0
MOV KEY_TIME_COUNT,#0
CLR FUNCTION
CLR WAIT_TIME
ret
YOU_KEY:SETB WAIT_TIME
ret
LCDDISP:
MOV COMM,#0CH
LCALL SEND_COMM
MOV R3,#15
MOV COMM,#80H
LCALL SEND_COMM
MOV R0,#30H
LINE_1:MOV DAT,@R0
LCALL SEND_DAT
INC R0
DJNZ R3,LINE_1
MOV R3,#15
MOV COMM,#90H
LCALL SEND_COMM
MOV R0,#40H
LINE_2:MOV DAT,@R0
LCALL SEND_DAT
INC R0
DJNZ R3,LINE_2
MOV A,STATE
CJNE A,#1,STATE_TWO
jb FUNCTION,LINE_TWO
MOV COMM,#80H
LCALL SEND_COMM
MOV COMM,#0dH
LCALL SEND_COMM
SJMP LCDDISP_EXIT
LINE_TWO:
MOV COMM,#90H
LCALL SEND_COMM
MOV COMM,#0dH
LCALL SEND_COMM
SJMP LCDDISP_EXIT
STATE_TWO:
CJNE A,#2,LCDDISP_EXIT
MOV COMM,RBLACK
LCALL SEND_COMM
MOV COMM,#0DH
LCALL SEND_COMM
LCDDISP_EXIT:
RET
EXCHANGE: MOV A,DISP_FLAG
CJNE A,#0,EXCHANGE1
LJMP FLAG_0
EXCHANGE1:CJNE A,#1,EXCHANGE2
LJMP FLAG_1
EXCHANGE2:CJNE A,#2,EXCHANGE3
LJMP FLAG_2
EXCHANGE3:cjne a,#3,EXCHANGE4
ljmp FLAG_3
EXCHANGE4:ret
FLAG_0: MOV 30H,#'2'
MOV 31H,#'0'
MOV 34H,#0C4H
MOV 35H,#0EAH
MOV 38H,#0D4H
MOV 39H,#0C2H
MOV 3CH,#0C8H
MOV 3DH,#0D5H
jb ring_on,FLAG_0_1
MOV 3EH,#20H
sjmp FLAG_0_2
FLAG_0_1:mov 3eh,#0eh
FLAG_0_2:MOV 42H,#20h;#0CAH
MOV 43H,#3ah;#0B1H
MOV 46H,#20h;#0B7H
MOV 47H,#3ah;#0D6H
MOV 4AH,#0D0H
MOV 4BH,#0C7H
MOV 4CH,#0C6H
MOV 4DH,#0DAH
LCALL LOADT
RET
FLAG_1:MOV R0,#30H
MOV R1,#15
MOV DPTR,#FUNC_TAB
FLAG_11:CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R1,FLAG_11
MOV R0,#40H
MOV R1,#15
MOV DPTR,#FUNC_TAB1
FLAG_12:CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R1,FLAG_12
RET
FUNC_TAB:DB 31h,20h,0CAH,0B1H,0BCH,0E4H,0B9H,0A6H,0C4H,0DCH,0C9H,0E8H,0B6H,0A8H,20H,
FUNC_TAB1:DB 32h,20h,0C4H,0D6H,0D6H,0D3H,0B9H,0A6H,0C4H,0DCH,0C9H,0E8H,0B6H,0A8H,20H
FLAG_2: LCALL CLK_LOADT_3
MOV 42H,#0D4H
MOV 43H,#0C2H
MOV 46H,#0C8H
MOV 47H,#0D5H
MOV 4AH,#0CAH
MOV 4BH,#0B1H
MOV 4EH,#20H
MOV 30H,#0C4H
MOV 31H,#0D6H;NAO
MOV 32H,#0D6H
MOV 33H,#0D3H;ZHONG
jnb clk_on,FLAG_2_1
mov 34h,#0bfh
mov 35h,#0aah ;kai
sjmp FLAG_2_2
FLAG_2_1:mov 34h,#0b9h
mov 35h,#0d8h ;guan
FLAG_2_2:MOV 36H,#20H
MOV 37H,#20H
MOV 38H,#0B4H
MOV 39H,#0CEH;CI
MOV 3AH,#0CAH
MOV 3BH,#0FdH;SHU
MOV 3CH,#20H
MOV 3EH,#20H
JB NAOZHONG_CONTROL,FLAG_2_3
MOV 3DH,#31H
RET
FLAG_2_3:MOV 3DH,#4EH
RET
;----------------------------------------------
FLAG_3: LCALL CLK_LOADT_3
MOV 30H,#0C4H ;您定的时间已到20h
;xx月xx日xx时xx20h
MOV 31H,#0faH ;nin
MOV 32H,#0b6H
MOV 33H,#0a8H ;ding
MOV 34H,#0b5H
MOV 35H,#0c4H;de
MOV 36H,#0CAH
MOV 37H,#0B1H ;shi
MOV 38H,#0BCH
MOV 39H,#0e4H ;jian 0CAH,0B1H,0BCH,0BCH
MOV 3AH,#0d2H
MOV 3BH,#0D1H ;YI
MOV 3CH,#0B5H
MOV 3DH,#0BDH ;DAO
MOV 3EH,#20H
MOV 42H,#0D4H
MOV 43H,#0C2H
MOV 46H,#0C8H
MOV 47H,#0D5H
MOV 4AH,#0CAH
MOV 4BH,#0B1H
MOV 4EH,#20H
RET
CLK_LOADT_3: MOV R0,#CLK_MON
MOV R1,#40H
LCALL DIVIAD_CLK
MOV R0,#CLK_DAY
MOV R1,#44H
LCALL DIVIAD_CLK
MOV R0,#CLK_HOUR
MOV R1,#48H
LCALL DIVIAD_CLK
MOV R0,#CLK_MIN
MOV R1,#4CH
LCALL DIVIAD_CLK
RET
DIVIAD_CLK: mov a,@R0
swap a
anl a,#0fh
ORL a,#30h
MOV @R1,A
INC R1
mov a,@R0
anl a,#0fh
ORL a,#30h
MOV @R1,A
ret
;--------------------------------------------
LOADT: MOV R0,#SEC
MOV R1,#SEC1
LCALL DIVIAD
MOV R0,#MIN
MOV R1,#MIN1
LCALL DIVIAD
MOV R0,#HOUR
MOV R1,#HOUR1
LCALL DIVIAD
MOV R0,#DAY
MOV R1,#DAY1
LCALL DIVIAD
MOV R0,#MON
MOV R1,#MON1
LCALL DIVIAD
MOV R0,#YEAR
MOV R1,#YEAR1
LCALL DIVIAD
MOV A,WEEK
ADD A,#30H
MOV WEEK1,A
RET
DIVIAD: mov a,@R0
swap a
anl a,#0fh
ORL a,#30h
MOV @R1,A
INC R1
mov a,@R0
anl a,#0fh
ORL a,#30h
MOV @R1,A
ret
LCDINI:
LCALL DELAY40MS
LCALL DELAY1
MOV A,#30H
LCALL SEND_INI
LCALL DELAY40MS
MOV A,#30H
LCALL SEND_INI
MOV COMM,#01H
LCALL SEND_COMM
LCALL DELAY1
MOV COMM,#02H
LCALL SEND_COMM
MOV COMM,#0CH
LCALL SEND_COMM
MOV COMM,#06H
LCALL SEND_COMM
RET
SEND_INI:clr rs
clr rw
mov p0,a
setb e
nop
clr e
ret
send_COMM:
PUSH ACC
CLR RS
SETB RW
send_COMM_1:
MOV P0,#0FFH
SETB E
MOV A,P0
CLR E
JB ACC.7,send_COMM_1
CLR RW
MOV P0,COMM
SETB E
CLR E
POP ACC
RET
SEND_DAT:
PUSH ACC
CLR RS
SETB RW
SEND_DAT_1:
MOV P0,#0FFH
SETB E
MOV A,P0
CLR E
JB ACC.7,SEND_DAT_1
SETB RS
CLR RW
MOV P0,DAT
SETB E
CLR E
POP ACC
RET
;----------------------------------------------
KEY_CHECK:LCALL KEY1_CHECK ;查有无按键 返回非HAVE_KEY表示无
JB HAVE_KEY, KEY_CHECK_1
SJMP KEY_CHECK_EXIT
KEY_CHECK_1:JB KP,KEY_CHECK_EXIT1
LCALL KEY_VALUE ;取键值
LCALL KEY_BRANCH ;键处理
KEY_CHECK_EXIT:RET
KEY_CHECK_EXIT1:
LCALL DELAY40MS
LCALL DELAY40MS
LCALL DELAY40MS
LCALL DELAY40MS
;LCALL DELAY40MS
CLR KP
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -