📄 alarm.asm
字号:
;------------------------LCD define--------------------
RS EQU P3.5
RW EQU P3.4
E EQU P3.6
XPOS EQU 21H ;行方向
YPOS EQU 22H ;列方向
;-----------------DS1302 define-----------------------------
IODATA EQU P2.2
SCLK EQU P2.1
RST EQU P2.3
BITCNT data 30H ;每个字节的位数缓冲
BYTECNT data 31h ;写入或读出字节树
COMMAND data 32h ;DS1302控制命令字缓冲
RCVDATA data 70h ;接受1302数据首地址
SENDDATA data 50h ;发送数据首地址
;---------------------------Switch define-------------------
SW1 EQU P2.4
SW2 EQU P2.7
SW3 EQU P2.6
SW4 EQU P2.5
TIMES data 33H ;按SW2的次数
CONT EQU 34H ;分别为秒数,分数,月年等的上限值
ADDAT EQU 35H ;DS1302读书数据暂存缓冲区
COMDBUF EQU 36H ;DS1302读控制命令缓冲区
TIMES4 EQU 39H ;SW4 按下的次数
ALARM_H EQU 3AH ;响铃时存储区
ALARM_M EQU 3BH ;响铃分存储区
;-----------------------------IIC EEPROM define---------------
SDA EQU P0.5 ;串行数据线
SCL EQU P0.6 ;串行时钟线
SLA EQU 37H ;寻址字节存放单元
NUMBYT EQU 38H ;数据的长度
MTD EQU 40H ;发数据缓冲首地址
MRD EQU 48H ;接受数据缓冲首地址
SLAW EQU 0A0H ;EEPROM寻址字节写
SLAR EQU 0A1H ;EEPROM寻址字节读
RING EQU P0.4
;----------------------------START-----------------------------
ORG 00H
LJMP START
ORG 0BH
LJMP INTT0
ORG 30H
START:CLR E
MOV TIMES,#0
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R4,#10
SETB 20H.0
CLR 20H.1
SETB TR0
SETB EA
LCALL LCDRESET
LCALL IICREAD
MAIN:
LCALL DISPLAY
JNB SW1,SW1_RESET
JNB SW2,SW2_CONTRL
JNB SW4,SW4_ALARM1
MOV A,3AH
CJNE A,72H,NO_RING
MOV A,3BH
CJNE A,71H,NO_RING
CLR RING
LJMP MAIN
NO_RING:SETB RING
LJMP MAIN
;----------------------------按键程序,SW1为复位键-------------------------------------------
SW1_RESET:
LCALL DELAY5MS
LCALL DELAY5MS
JB SW1,MAIN
JNB SW1,$
CPL P3.3
LCALL DS1302RESET
LJMP MAIN
;---------------------------------------------------------------
SW4_ALARM1:
LJMP SW4_ALARM
;----------------------------按键程序,SW2为功能键,按下则依次闪烁-------------------------------
SW2_CONTRL:
LCALL DELAY5MS
LCALL DELAY5MS
JB SW2,MAIN
JNB SW2,$
SETB ET0
INC TIMES
MOV A,TIMES
CJNE A,#1,NT1
;-------------------------------------------------
LP1: JB SW3,NP1
LCALL DELAY5MS
JB SW3,NP1
JNB SW3,$
LCALL YEAR_UP
;-------------------------------------------------
NP1: LCALL YEAR_bicker
JB SW2,LP1
LCALL DELAY5MS
JB SW2,LP1
JNB SW2,$
INC TIMES
LCALL XX1
MOV A,TIMES
NT1: CJNE A,#2,NT2
;-------------------------------------------------
LP2: JB SW3,NP2
LCALL DELAY5MS
JB SW3,NP2
JNB SW3,$
LCALL MONTH_UP
;-------------------------------------------------
NP2: LCALL MONTH_bicker
JB SW2,LP2
LCALL DELAY5MS
JB SW2,LP2
JNB SW2,$
INC TIMES
LCALL XX2 ; LCALL XX1,XX2,XX3,XX4,XX5 分别代表闪烁后赋回原值-----------------
MOV A,TIMES
NT2: CJNE A,#3,NT3
;-------------------------------------------------;
LP3: JB SW3,NP3 ;
LCALL DELAY5MS
JB SW3,NP3 ;
JNB SW3,$ ;
LCALL DATE_UP ;
;-------------------------------------------------
NP3: LCALL DATE_bicker
JB SW2,LP3
LCALL DELAY5MS
JB SW2,LP3
JNB SW2,$
INC TIMES
LCALL XX3
MOV A,TIMES
NT3: CJNE A,#4,NT4
;-------------------------------------------------
LP4: JB SW3,NP4
LCALL DELAY5MS
JB SW3,NP4
JNB SW3,$
LCALL HOUR_UP
;-------------------------------------------------
NP4: LCALL HOUR_bicker
JB SW2,LP4
INC TIMES
JNB SW2,$
LCALL XX4
MOV A,TIMES
NT4: CJNE A,#5,NT5
;-------------------------------------------------
LP5: JB SW3,NP5
LCALL DELAY5MS
JB SW3,NP5
JNB SW3,$
LCALL MIN_UP
;-------------------------------------------------
NP5: LCALL MIN_bicker
JB SW2,LP5
INC TIMES
JNB SW2,$
LCALL XX5
NT5: MOV TIMES,#0
CLR ET0
J_MAIN: LJMP MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;--------------------------------SW4_ALARM-------------------------------------------------------------------
;---------------------------------------7A,7BH 7C,7DH分别存储3AH,3BH的十位和个位-----------------------------
SW4_ALARM:
LCALL DELAY5MS
LCALL DELAY5MS
JB SW4,J_MAIN
JNB SW4,$
LCALL SET_DISPLAY
LCALL DISPLAY2
CPL 20H.1
SET_LP:JNB 20H.1,SET_RETURN
JB SW4,SET_NEXT
LCALL DELAY5MS
JB SW4,SET_NEXT
JNB SW4,$
CPL 20H.1
LJMP SET_LP
SET_NEXT:
JB SW2,SET_LP
LCALL DELAY5MS
JB SW2,SET_LP
JNB SW2,$
SETB ET0
INC TIMES
MOV A,TIMES
CJNE A,#1,SET_NT1
;-------------------------------------------------
SET_LP1:JB SW3,SET_NP1
LCALL DELAY5MS
JB SW3,SET_NP1
JNB SW3,$
LCALL SET_HOUR_UP
;-------------------------------------------------
SET_NP1:LCALL SET_HOUR_bicker
JB SW2,SET_LP1
INC TIMES
LCALL DELAY5MS
JB SW2,SET_LP1
JNB SW2,$
LCALL SET_XX1
MOV A,TIMES
SET_NT1:CJNE A,#2,SET_LP
;-------------------------------------------------
SET_LP2: JB SW3,SET_NP2
LCALL DELAY5MS
JB SW3,SET_NP2
JNB SW3,$
LCALL SET_MIN_UP
;-------------------------------------------------
SET_NP2: LCALL SET_MIN_bicker
JB SW2,SET_LP2
LCALL DELAY5MS
JB SW2,SET_LP2
JNB SW2,$
LCALL SET_XX2 ; LCALL XX1,XX2,XX3,XX4,XX5 分别代表闪烁后赋回原值-----------------
MOV TIMES,#0
CLR ET0
LJMP SET_LP
;--------------------------------------------------SET_RETUREN----------------------------------------
SET_RETURN:
MOV MTD,#00H
MOV MTD+1,3AH
MOV MTD+2,3BH
LCALL IICWRITE
LJMP MAIN
SET_EXCHANGE:
MOV A,ALARM_H
MOV B,#10H
DIV AB
MOV 7AH,A
MOV 7BH,B
MOV A,ALARM_M
MOV B,#10H
DIV AB
MOV 7CH,A
MOV 7DH,B
RET
SET_ADD_ACSII:
MOV A,7AH
ADD A,#48
MOV 7AH,A
MOV A,7BH
ADD A,#48
MOV 7BH,A
MOV A,7CH
ADD A,#48
MOV 7CH,A
MOV A,7DH
ADD A,#48
MOV 7DH,A
RET
SET_DISBUF:
MOV XPOS,#5
MOV YPOS,#1
MOV A,7AH
LCALL LCDWRITE
MOV XPOS,#6
MOV YPOS,#1
MOV A,7BH
LCALL LCDWRITE
MOV XPOS,#8
MOV YPOS,#1
MOV A,7CH
LCALL LCDWRITE
MOV XPOS,#9
MOV YPOS,#1
MOV A,7DH
LCALL LCDWRITE
RET
SET_DISPLAY:
MOV R0,#0
MOV YPOS,#0
MOV XPOS,#0
SET_LPL: MOV A,R0
MOV DPTR,#TAB
MOVC A,@A+DPTR
LCALL LCDFILL
INC R0
CJNE R0,#32,SET_LPL
MOV R0,#0
LCALL DELAY5MS
RET
SET_MIN_UP:
MOV ADDAT,3BH
MOV CONT,#60H
MOV COMDBUF,#82H
LCALL SW3_UP
MOV 3BH,ADDAT
LCALL DISPLAY2
RET
SET_HOUR_UP:
MOV ADDAT,3AH
MOV CONT ,#24H
LCALL SW3_UP
MOV 3AH,ADDAT
LCALL DISPLAY2
RET
SET_HOUR_bicker:
JNB 20H.0,SET_XX1
MOV XPOS,#5
MOV YPOS,#1
MOV A,#' '
LCALL LCDWRITE
MOV XPOS,#6
MOV YPOS,#1
MOV A,#' '
LCALL LCDWRITE
LJMP RET4
SET_XX1:
MOV XPOS,#5
MOV YPOS,#1
MOV A,7AH
LCALL LCDWRITE
MOV XPOS,#6
MOV YPOS,#1
MOV A,7BH
LCALL LCDWRITE
RET20: RET
SET_MIN_bicker:
JNB 20H.0,SET_XX2
MOV XPOS,#8
MOV YPOS,#1
MOV A,#' '
LCALL LCDWRITE
MOV XPOS,#9
MOV YPOS,#1
MOV A,#' '
LCALL LCDWRITE
LJMP RET21
SET_XX2:
MOV XPOS,#8
MOV YPOS,#1
MOV A,7CH
LCALL LCDWRITE
MOV XPOS,#9
MOV YPOS,#1
MOV A,7DH
LCALL LCDWRITE
RET21: RET
DISPLAY2:
LCALL SET_EXCHANGE
LCALL SET_ADD_ACSII
LCALL SET_DISBUF
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;--------------------- YEAR_BICKER-----------------------------------------
YEAR_bicker:
JNB 20H.0,XX1
MOV XPOS,#4
MOV YPOS,#0
MOV A,#' '
LCALL LCDWRITE
MOV XPOS,#5
MOV YPOS,#0
MOV A,#' '
LCALL LCDWRITE
LJMP RET1
XX1: MOV XPOS,#4
MOV YPOS,#0
MOV A,6CH
LCALL LCDWRITE
MOV XPOS,#5
MOV YPOS,#0
MOV A,6BH
LCALL LCDWRITE
RET1: RET
;----------------------------MONTH_BICKER-------------------------------------------
MONTH_bicker:
JNB 20H.0,XX2
MOV XPOS,#8
MOV YPOS,#0
MOV A,#' '
LCALL LCDWRITE
MOV XPOS,#9
MOV YPOS,#0
MOV A,#' '
LCALL LCDWRITE
LJMP RET2
XX2:
MOV XPOS,#8
MOV YPOS,#0
MOV A,69H
LCALL LCDWRITE
MOV XPOS,#9
MOV YPOS,#0
MOV A,68H
LCALL LCDWRITE
RET2: RET
;-----------------------------DATE_BICKER--------------------------------------------------
DATE_bicker:
JNB 20H.0,XX3
MOV XPOS,#12
MOV YPOS,#0
MOV A,#' '
LCALL LCDWRITE
MOV XPOS,#13
MOV YPOS,#0
MOV A,#' '
LCALL LCDWRITE
LJMP RET3
XX3:
MOV XPOS,#12
MOV YPOS,#0
MOV A,67H
LCALL LCDWRITE
MOV XPOS,#13
MOV YPOS,#0
MOV A,66H
LCALL LCDWRITE
RET3: RET
;---------------------------HOUR_BICKER-----------------------------------------------------
HOUR_bicker:
JNB 20H.0,XX4
MOV XPOS,#4
MOV YPOS,#1
MOV A,#' '
LCALL LCDWRITE
MOV XPOS,#5
MOV YPOS,#1
MOV A,#' '
LCALL LCDWRITE
LJMP RET4
XX4:
MOV XPOS,#4
MOV YPOS,#1
MOV A,65H
LCALL LCDWRITE
MOV XPOS,#5
MOV YPOS,#1
MOV A,64H
LCALL LCDWRITE
RET4: RET
;-----------------------------MIN_BICKER-------------------------------------------------
MIN_bicker:
JNB 20H.0,XX5
MOV XPOS,#7
MOV YPOS,#1
MOV A,#' '
LCALL LCDWRITE
MOV XPOS,#8
MOV YPOS,#1
MOV A,#' '
LCALL LCDWRITE
LJMP RET5
XX5:
MOV XPOS,#7
MOV YPOS,#1
MOV A,63H
LCALL LCDWRITE
MOV XPOS,#8
MOV YPOS,#1
MOV A,62H
LCALL LCDWRITE
RET5:RET
;--------------------------------SW3_UP---------------------------------------------------
;-------------70H,71H,72H,73H,74H,75H,76H分别存储接收的秒,分,时,日,月,星期,年-------------
;-------------50H,51H,52H,53H,54H,55H,56H分别存储要发送的秒,分,时,日,月,星期,年
MIN_UP:
MOV ADDAT,71H
MOV CONT,#60H
MOV COMDBUF,#82H
LCALL SW3_PROC
MOV 71H,ADDAT
LCALL DISPLAY1
RET
HOUR_UP:
MOV ADDAT,72H
MOV CONT ,#24H
MOV COMDBUF,#84H
LCALL SW3_PROC
MOV 72H,ADDAT
LCALL DISPLAY1
RET
DATE_UP:
MOV ADDAT,73H
MOV CONT ,#32H
MOV COMDBUF,#86H
LCALL SW3_PROC1
MOV 73H,ADDAT
LCALL DISPLAY1
RET
MONTH_UP:
MOV ADDAT,74H
MOV CONT ,#13H
MOV COMDBUF,#88H
LCALL SW3_PROC1
MOV 74H,ADDAT
LCALL DISPLAY1
RET
YEAR_UP:
MOV ADDAT,76H
MOV CONT ,#99H
MOV COMDBUF,#8CH
LCALL SW3_PROC
MOV 76H,ADDAT
LCALL DISPLAY1
RET
SW3_PROC:
LCALL SW3_UP
LCALL Write_enable
LCALL Write_singlebyte
LCALL Write_disable
RET
SW3_PROC1:
LCALL SW3_UP1
LCALL Write_enable
LCALL Write_singlebyte
LCALL Write_disable
RET
SW3_UP:
MOV A,ADDAT
INC A
DA A
CJNE A,CONT,RET6
MOV A,#0
RET6: MOV ADDAT,A
RET
SW3_UP1:
MOV A,ADDAT
INC A
DA A
CJNE A,CONT,RET7
MOV A,#1
RET7: MOV ADDAT,A
RET
Write_singlebyte:
MOV COMMAND,COMDBUF
MOV BYTECNT,#1
MOV R0,#ADDAT
LCALL SEND_BYTE
RET
Read_singlebyte:
MOV COMMAND,COMDBUF
MOV BYTECNT,#1
MOV R0,#ADDAT
LCALL RECIVE_BYTE
RET
;----------------------- DS1302 DISPLAY PROGRAME--------------------------------------
DISPLAY:
LCALL Read_multiplebyte
DISPLAY1:LCALL EXCHANGE
LCALL ADD_ASCII
LCALL DISBUF
RET
;---------------------------------DS1302 RESET-----------------------------------------
DS1302RESET:
LCALL Write_enable
LCALL Write_multiplebyte
LCALL OSC_enable
LCALL Electry_enabLe
LCALL Write_disable
RET
Electry_enabLe:
MOV COMMAND,#90H
MOV BYTECNT,#1
MOV R0,#SENDDATA
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -