📄 clock-mine.asm
字号:
LJMP KEY4OVER
KEY44:
JB DOWN,KEY5 ;日减1程序
LCALL DELAY250MS
JB DOWN,KEY5
MOV A,DAY0
CJNE A,#0,D4
MOV A,DAY1
CJNE A,#0,D0
MOV DAY0,#1
MOV DAY1,#3
LJMP KEY44OVER
D0:
MOV DAY0,#9
DEC DAY1
LJMP KEY44OVER
D4:
DEC DAY0
KEY44OVER:
JB DOWN,KEY5
LJMP KEY44OVER
;**************月调整程序*******************
KEY5:
MOV A,COUNT ;月加1
CJNE A,#6,KEY6
JB UP,KEY55
LCALL DELAY250MS
JB UP,KEY55
INC MON0
MOV A,MON1
CJNE A,#1,MUNTCOUNT
MOV A,MON0
CJNE A,#3,KEY5OVER
MOV MON0,#1
MOV MON1,#00H
LJMP KEY5OVER
MUNTCOUNT:
MOV A,MON0
CJNE A,#10,KEY5OVER
MOV MON0,#00H
INC MON1
KEY5OVER:
JB UP,KEY55
LJMP KEY5OVER
KEY55:
JB DOWN,KEY6;月减1
LCALL DELAY250MS
JB DOWN, KEY6
MOV A,MON0
CJNE A,#0,M2
MOV A,MON1
CJNE A,#0,M3
MOV MON0,#2
MOV MON1,#1
LJMP KEY55OVER
M3:
MOV MON0,#9
DEC MON1
LJMP KEY55OVER
M2:
DEC MON0
KEY55OVER:
JB DOWN,KEY6
LJMP KEY55OVER
;****************年调整程序*******************
KEY6:
MOV A,COUNT;年加1
CJNE A,#7,KEY7
JB UP,KEY66
LCALL DELAY250MS
JB UP,KEY66
INC YER0
MOV A,YER0
CJNE A,#10,KEY6OVER
MOV YER0,#00H
INC YER1
MOV A,YER1
CJNE A,#10,KEY66OVER
MOV YER1,#00H
KEY6OVER:
JB UP,KEY66
LJMP KEY6OVER
KEY66:
JB DOWN,KEY7;年减1
LCALL DELAY250MS
JB DOWN, KEY7
MOV A,YER0
CJNE A,#0,Y3
MOV YER0,#9
MOV A,YER1
CJNE A,#0,Y4
MOV YER1,#9
LJMP KEY66OVER
Y4:
DEC YER1
LJMP KEY66OVER
Y3:
DEC YER0
KEY66OVER:
JB DOWN,KEY7
LJMP KEY66OVER
;**************************确认键*********************
KEY7:
JB CONF,KEY77
LCALL DELAY250MS
JB CONF,KEY77
LCALL PCF8563BUF ;把拆分的时间日期数字合并为压缩式BCD,并写入PCF8563
MOV ByteCnt,#07H ;接收7字节
MOV SlvAdr,#0A2H ;PCF8563日历时钟器件地址为A2H
MOV SubAdr,#02H ;从日历时钟的02H单元开始
LCALL ReceData ;调用读EEPROM多字节读入过程,将信息读入接收缓冲区
LCALL LCDBUF ;把时间缓冲区的内容按十位与个位分开存放
SETB ENTER
KEY77:
LCALL DISPLAY
LJMP KEY
;*******************闹钟时间日期星期设置程序****************
C_KEY:
JNB ENTER,C_CONTINUE ;按下确认键就保存退出设置
CLR ENTER
LJMP CON4
C_CONTINUE:
JB SW,C_KEY1 ;调整程序
LCALL DELAY250MS
JB SW,C_KEY1
C_IN:
INC COUNT
MOV A,COUNT
CJNE A,#5,C_KEYOVER
MOV COUNT,#00H
LJMP CON4 ;一个循环后退出设置程序
C_KEYOVER:
JB SW,C_KEYOVER1
LJMP C_KEYOVER
C_KEYOVER1:
JB UP,C_KEY1
LJMP C_KEYOVER1
;*************闹钟分钟调整程序*********************
C_KEY1:
MOV A,COUNT ;分钟加1程序
CJNE A,#1,C_KEY2
JB UP,C_KEY11
LCALL DELAY250MS
JB UP,C_KEY11
INC C_MIN0
MOV A,C_MIN0
CJNE A,#10,C_KEY1OVER
MOV C_MIN0,#00H
INC C_MIN1
MOV A,C_MIN1
CJNE A,#6,C_KEY1OVER
MOV C_MIN1,#00H
LJMP C_KEY1OVER
C_KEY1OVER:
JB UP,C_KEY11
LJMP C_KEY1OVER
C_KEY11:
JB DOWN,C_KEY2 ;分钟减1程序
LCALL DELAY250MS
JB DOWN,C_KEY2
MOV A,C_MIN0
CJNE A,#0,C_AAA
MOV C_MIN0,#9
MOV A,C_MIN1
CJNE A,#0,C_AAAA
MOV C_MIN1,#5
LJMP C_KEY11OVER
C_AAAA:
DEC C_MIN1
LJMP C_KEY11OVER
C_AAA:
DEC C_MIN0
C_KEY11OVER:
JB DOWN,C_KEY2
LJMP C_KEY11OVER
;***********闹钟时调整程序******************
C_KEY2:
MOV A,COUNT ;时加1程序
CJNE A,#2,C_KEY3
JB UP,C_KEY22
LCALL DELAY250MS
JB UP,C_KEY22
INC C_HOU0
MOV A,C_HOU1
CJNE A,#2,C_HOURS
MOV A,C_HOU0
CJNE A,#4,C_KEY2OVER
MOV C_HOU0,#00H
MOV C_HOU1,#00H
LJMP C_KEY2OVER
C_HOURS:
MOV A,C_HOU0
CJNE A,#10,C_KEY2OVER
MOV C_HOU0,#00H
INC C_HOU1
C_KEY2OVER:
JB UP,C_KEY22
LJMP C_KEY2OVER
C_KEY22:
JB DOWN,C_KEY3 ;时钟减1程序
LCALL DELAY250MS
JB DOWN,C_KEY3
MOV A,C_HOU0
CJNE A,#0,C_H4
MOV A,C_HOU1
CJNE A,#0,C_H5
MOV C_HOU0,#3
MOV C_HOU1,#2
LJMP C_KEY22OVER
C_H5:
MOV C_HOU0,#9
DEC C_HOU1
LJMP C_KEY22OVER
C_H4:
DEC C_HOU0
C_KEY22OVER:
JB DOWN,C_KEY3
LJMP C_KEY22OVER
;************闹钟星期调整程序****************
C_KEY3:
MOV A,COUNT ;星期加1程序
CJNE A,#3,C_KEY4
JB UP,C_KEY33
LCALL DELAY250MS
JB UP,C_KEY33
INC C_WEK
MOV A,C_WEK
CJNE A,#8,C_KEY3OVER
MOV C_WEK,#00H
C_KEY3OVER:
JB UP,C_KEY33
LJMP C_KEY3OVER
C_KEY33:
JB DOWN,C_KEY4 ;星期减1程序
LCALL DELAY250MS
JB DOWN,C_KEY4
MOV A,C_WEK
CJNE A,#0,C_A2
MOV C_WEK,#7
LJMP C_KEY33OVER
C_A2:
DEC C_WEK
C_KEY33OVER:
JB DOWN,C_KEY4
LJMP C_KEY33OVER
;************闹钟开关调整程序****************
C_KEY4:
MOV A,COUNT
CJNE A,#4,C_KEY5
JB UP,C_KEY44
LCALL DELAY250MS
JB UP,C_KEY44
CPL ALARM
C_KEY4OVER:
JB UP,C_KEY44
LJMP C_KEY4OVER
C_KEY44:
JB DOWN,C_KEY5
LCALL DELAY250MS
JB DOWN,C_KEY5
CPL ALARM
C_KEY44OVER:
JB DOWN,C_KEY5
LJMP C_KEY44OVER
;**************************确认键*********************
C_KEY5:
JB CONF,C_KEY55
LCALL DELAY250MS
JB CONF,C_KEY55
LCALL CLOCKBUF ;把拆分的闹钟时间数字合并为压缩式BCD,并写入PCF8563
MOV ByteCnt,#04H ;接收4字节
MOV SlvAdr,#0A2H ;PCF8563日历时钟器件地址为A2H
MOV SubAdr,#09H ;从日历时钟的09H单元开始
LCALL ReceData ;调用读EEPROM多字节读入过程,将信息读入接收缓冲区
JNB ALARM,C_OUT
MOV XmtDat,#00000010B ;允许闹钟中断
MOV ByteCnt, #01H ;传送1字节
MOV SlvAdr, #0A2H ;PCF8563日历时钟器件地址为A2H
MOV SubAdr, #01H ;从日历时钟的01H单元开始
LCALL SendData ;调用写EEPROM多字节写入过程,将发送缓冲区内的信息写入
;PCF8563日历芯片内日历时间单元
MOV A,C_WEK
CJNE A,#7,C_OUT
MOV XmtDat,#10000111B ;禁止星期闹钟
MOV ByteCnt, #01H ;传送1字节
MOV SlvAdr, #0A2H ;PCF8563日历时钟器件地址为A2H
MOV SubAdr, #0CH ;从日历时钟的01H单元开始
LCALL SendData ;调用写EEPROM多字节写入过程,将发送缓冲区内的信息写入
;PCF8563日历芯片内日历时间单元
C_OUT:
LCALL C_LCDBUF ;把闹钟时间缓冲区的内容按十位与个位分开存放
SETB ENTER
C_KEY55:
LCALL C_DISPLAY
LJMP C_KEY
;非压缩式BCD转压缩式BCD
PCF8563BUF:
MOV A,SEC1
SWAP A
ORL A,SEC0
MOV XmtDat,A
MOV A,MIN1
SWAP A
ORL A,MIN0
MOV XmtDat+1,A
MOV A,HOU1
SWAP A
ORL A,HOU0
MOV XmtDat+2,A
MOV A,DAY1
SWAP A
ORL A,DAY0
MOV XmtDat+3,A
MOV XmtDat+4,WEK
MOV A,MON1
SWAP A
ORL A,MON0
MOV XmtDat+5,A
MOV A,YER1
SWAP A
ORL A,YER0
MOV XmtDat+6,A
MOV ByteCnt, #07H ;传送7字节
MOV SlvAdr, #0A2H ;PCF8563日历时钟器件地址为A2H
MOV SubAdr, #02H ;从日历时钟的02H单元开始
LCALL SendData ;调用写EEPROM多字节写入过程,将发送缓冲区内的信息写入
;PCF8563日历芯片内日历时间单元
RET
CLOCKBUF:
MOV A,C_MIN1
SWAP A
ORL A,C_MIN0
MOV XmtDat,A
MOV A,C_HOU1
SWAP A
ORL A,C_HOU0
MOV XmtDat+1,A
MOV ByteCnt, #02H ;传送2字节
MOV SlvAdr, #0A2H ;PCF8563日历时钟器件地址为A2H
MOV SubAdr, #09H ;从日历时钟的09H单元开始
LCALL SendData ;调用写EEPROM多字节写入过程,将发送缓冲区内的信息写入
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -