📄 调时2.asm
字号:
;the definition of the port
SCLK BIT P1.0 ;DS1302的SCLK串行时钟与51的P1.0连接
IO BIT P1.1 ;IO数据输入输出与P1.1连接
RST BIT P1.2 ;RST复位与P1.2连接
RS BIT P2.0 ;the link of lcd&&mcu
RW BIT P2.1
E BIT P2.2
; the definition of RAM in 51
BITCNT EQU 30H ;数据位计数单元
BYTECNT EQU 31H ;数据字节计数单元
COMMAND EQU 32H ;命令字节单元
RECDATA EQU 40H ;接受数据缓冲区
SENDATA EQU 50H ;发送数据缓冲区
DATE1 EQU 90H ;显示缓冲区,存储要显示的十位数
DATE2 EQU 91H ;显示缓冲区,存储要显示的个位数
DATE EQU 92H ;存放写入LCD的数据
DATE_N EQU 93H ;存放写入LCD的数据的个数
DATE3 EQU 94H ;暂时存放LCD的命令字节
;the main program of the design about time and stopwach
ORG 0000H
AJMP LCDMAIN
ORG 000BH
AJMP IT0P ;转中断服务程序
ORG 0030H
LCDMAIN: ACALL LCDINT ;initialization of the lcd016l
LOOP: ACALL Read_Sec ;调用读出秒程序
MOV DATE3,#8AH ;the 11th word of the first line in the lcd
ACALL Display_Time ;use of the program for displaying time
ACALL Display_Spot ;display":"
ACALL Read_Min ;调用读出分程序
MOV DATE3,#87H ;the 8th word of the first line in the lcd
ACALL Display_Time ;jump to the program for displaying time
ACALL Read_Hour ;调用读出小时程序
MOV DATE3,#84H ;the 5th word of the first line in the lcd
ACALL Display_Time
JNB P3.0,YU ;当按下KEY1(P3.0=0)
JNB P3.2,WEI ;当按下KEY3
AJMP LOOP
YU: ACALL Adjust_Time ;调时程序
AJMP LOOP
WEI: ACALL Stopwatch ;秒表
AJMP LOOP
IT0P: MOV TL0,#0F0H ;中断服务程序
MOV TH0,#0D8H
SETB P3.1
JNB P3.1,STOP ;push the button key2
CJNE R0,#99,NO_99
MOV R0,#0
CJNE R2,#59,NO_59
MOV R2,#0
INC R4
AJMP SHOW
NO_59: INC R2
AJMP SHOW
NO_99: INC R0
AJMP SHOW
STOP: NOP
KEY_2: ACALL DELAY
SETB P3.1
JNB P3.1,KEY_2
CLR TR0
SHOW: NOP
MOV A,R0
MOV DATE3,#8AH
ACALL Display_SW
ACALL Display_Spot_SW
MOV DATE3,#87H
MOV A,R2
ACALL Display_SW
MOV A,R4
MOV DATE3,#84H
ACALL Display_SW
RETI
Display_SW: MOV B,#10
DIV AB
MOV DATE1,A
MOV DATE2,B
ORL DATE2,#30H
ORL DATE1,#30H
MOV R3,DATE3
ACALL WRLCD_SW
MOV DATE,DATE1
ACALL WRDATE_SW
INC R3
ACALL WRLCD_SW
MOV DATE,DATE2
ACALL WRDATE_SW
RET
Display_Spot_SW: MOV R3,#89H
ACALL WRLCD_SW
MOV DATE,#3AH
ACALL WRDATE_SW
MOV R3,#86H
ACALL WRLCD_SW
MOV DATE,#3AH
ACALL WRDATE_SW
RET
WRLCD_SW: ACALL BUSY_SW
PUSH ACC
MOV A,R3
CLR RS
CLR RW
MOV P0,A
CLR E
ACALL DELAY_SW
SETB E
POP ACC
RET
WRDATE_SW: ACALL BUSY_SW
SETB RS
CLR RW
MOV P0,DATE
CLR E
ACALL DELAY_SW
SETB E
RET
BUSY_SW: CLR RS
SETB RW
MOV A,P0
CLR E
ACALL DELAY_SW
SETB E
JB ACC.7,BUSY_SW ;F=1忙碌
RET
DELAY_SW: MOV R6,#2
D2: MOV R5,#25
DJNZ R5,$
DJNZ R6,D2
RET
;利用定时器T0的方式1,首先对其及中断系统进行初始化
Stopwatch: NOP
KEY3: ACALL DELAY
SETB P3.2
JNB P3.2,KEY3
MOV DATE1,#30H
MOV DATE2,#30H
MOV DATE3,#8AH
ACALL Display_Time1
ACALL Display_Spot
MOV DATE3,#87H
ACALL Display_Time1
MOV DATE3,#84H
ACALL Display_Time1 ;显示00:00:00
MOV R0,#0
MOV R2,#0
MOV R4,#0
MOV TMOD,#01H ;设置定时器0的方式1
MOV TL0,0F0H
MOV TH0,0D8H ;T0置初值,0.01s计数一次
SETB TR0 ;允许T0计数
SETB EA ;CPU开放中断
SETB ET0 ;允许T0中断
HERE: SETB P3.2 ;等待
JB P3.2,HERE ;按下KEY3则跳出
CLR TR0 ;stop counting
KEY33: ACALL DELAY
SETB P3.2
JNB P3.2,KEY33
NOP
RET
;调整时间程序
Adjust_Time: ACALL Clock_Unable
KEY1_Fi: ACALL DELAY ;延时,防止抖动
SETB P3.0
JNB P3.0, KEY1_Fi ;键是否释放
WAIT1: MOV DATE1,#30H
MOV DATE2,#30H
MOV DATE3,#8AH
ACALL Display_Time1
ACALL DELAY
JB P3.0,WAIT1 ;P3.0=0则执行以下程序
KEY1_S: ACALL DELAY
SETB P3.0
JNB P3.0,KEY1_S ;键是否释放
ACALL Adjust_Min
ACALL Send_Enable
ACALL Deal_M
ACALL Send_Min
ACALL Adjust_Hour
ACALL Deal_H
ACALL Send_Hour
ACALL Clock_Enable
RET
Adjust_Min:
WAIT2: MOV DATE1,#30H
MOV DATE2,#30H
MOV DATE3,#87H
ACALL Display_Time1
ACALL DELAY
JB P3.1,WAIT2 ;P3.1=0则执行以下程序
KEY2: ACALL DELAY
SETB P3.1
JNB P3.1,KEY2 ;键是否释放
LOOP1: MOV A,DATE2
CJNE A,#39H,NO9
MOV DATE2,#30H
MOV A,DATE1
CJNE A,#35H,NO5
MOV DATE1,#30H
DEC DATE1
NO5: INC DATE1
DEC DATE2
NO9: INC DATE2
ACALL DELAY
WAIT3:
MOV DATE3,#87H
ACALL Display_Time1
ACALL DELAY
JNB P3.0,JUMP
ACALL DELAY
JB P3.1,WAIT3
KEY22: ACALL DELAY
SETB P3.1
JNB P3.1,KEY22
AJMP LOOP1
JUMP: NOP
KEY1_T: ACALL DELAY
SETB P3.0
JNB P3.0,KEY1_T
RET
Adjust_Hour:
WAIT4: MOV DATE1,#30H
MOV DATE2,#30H
MOV DATE3,#84H
ACALL Display_Time1
ACALL DELAY
JB P3.1,WAIT4 ;P3.1=0则执行以下程序
KEY222: ACALL DELAY
SETB P3.1
JNB P3.1,KEY222 ;键是否释放
LOOP2: MOV A,DATE1
CJNE A,#32H,NO2
MOV A,DATE2
CJNE A,#33H,NO3
MOV DATE1,#30H
MOV DATE2,#30H
DEC DATE2
NO3: INC DATE2
AJMP Equal_2
NO2: MOV A,DATE2
CJNE A,#39H,NO99
MOV DATE2,#30H
INC DATE1
DEC DATE2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -