资源描述
可调电子表
一、 所用硬件
① AT89C51 ② 74LS245
③电容、电阻、晶振与单片机连接如图
④整体硬件图
调节秒数 调节分数 调节时数
⑤实验效果图:
二、可调电子表程序流程图
三、可调电子表汇编程序:
S BIT P1.3 ; 定义调节秒的按钮的接口
M BIT P1.4 ; 定义调节分的按钮的接口
H BIT P1.5 ; 定义调节时的按钮的接口
ORG 0000H
SJMP START
ORG 000BH
LJMP TIME0
ORG 0050H
START: ;设置初始值
MOV R0,#0
MOV DPTR,#TABLE
MOV 30H,#0 ;存储秒数的寄存器
MOV 31H,#0 ;存储分数的寄存器
MOV 32H,#0 ;存储时数的寄存器
MOV P2,#3FH
MOV TMOD,#01H ;设置中断工作方式
SETB EA
SETB ET0
MOV TL0,#0B0H
MOV TH0,#3CH
SETB TR0 ;开始计时
***************************************
A1:
LCALL LOOP0 ;调用显示子程序
JNB S,S1 ;判断是否有按键被按下,s=0则说明按键被按下
JNB M,S2
JNB H,S3
LJMP A1 ;重复执行
S1:
LCALL DELAY ;消除抖动
JB S,A1
INC 30H
MOV A,30H
CJNE A,#60,J0 ;判断秒数是否已等于60
MOV 30H,#0
LJMP S1
S2:
LCALL DELAY ;消除抖动
JB M,A1
INC 31H
MOV A,31H
CJNE A,#60,J1 ;判断分数是否已等于60
MOV 31H,#0
LJMP S2
S3:
LCALL DELAY ;消除抖动
JB H,A1
INC 32H
MOV A,32H
CJNE A,#24,J2 ;判断时数是否已等于24
MOV 32H,#0
LJMP S3
J0: ;等待按键抬起
JB S,A1 ;判断是否按下
LCALL LOOP0
SJMP J0
J1:
JB M,A1
LCALL LOOP0
SJMP J1
J2:
JB H,A1
LCALL LOOP0
SJMP J2
***************************************
LOOP0: ;显示时分秒中间的“-”
MOV A,#40H
SETB P3.7
SETB P3.6
SETB P3.4
SETB P3.3
SETB P3.2
SETB P3.1
SETB P3.0
MOV P2,A
CLR P3.5
MOV A,#40H
SETB P3.7
SETB P3.6
SETB P3.4
SETB P3.3
SETB P3.5
SETB P3.1
SETB P3.0
MOV P2,A
CLR P3.2
LOOP: ;秒的显示
MOV A,30H
MOV B,#10
DIV AB
MOVC A,@A+DPTR
SETB P3.7
SETB P3.5
SETB P3.4
SETB P3.3
SETB P3.2
SETB P3.1
SETB P3.0
MOV P2,A
CLR P3.6
MOV A,B
MOVC A,@A+DPTR
SETB P3.6
SETB P3.5
SETB P3.4
SETB P3.3
SETB P3.2
SETB P3.1
SETB P3.0
MOV P2,A
CLR P3.7
LOOP1: ;分的显示
MOV A,31H
MOV B,#10
DIV AB
MOVC A,@A+DPTR
SETB P3.7
SETB P3.5
SETB P3.6
SETB P3.4
SETB P3.2
SETB P3.1
SETB P3.0
MOV P2,A
CLR P3.3
MOV A,B
MOVC A,@A+DPTR
SETB P3.7
SETB P3.6
SETB P3.5
SETB P3.3
SETB P3.2
SETB P3.1
SETB P3.0
MOV P2,A
CLR P3.4
LOOP2: ;时的显示
MOV A,32H
MOV B,#10
DIV AB
MOVC A,@A+DPTR
SETB P3.7
SETB P3.6
SETB P3.5
SETB P3.4
SETB P3.3
SETB P3.2
SETB P3.1
MOV P2,A
CLR P3.0
MOV A,B
MOVC A,@A+DPTR
SETB P3.7
SETB P3.6
SETB P3.5
SETB P3.4
SETB P3.3
SETB P3.2
SETB P3.0
MOV P2,A
CLR P3.1
RET
***************************************
TIME0: ;进入中断
INC R0 ;定时器计数器加1
CJNE R0,#20,NEXT ;若其达到20,则清零,否则继续计时
MOV R0,#0
INC 30H ;显示秒,,每一秒加1,并不超过59
MOV A,30H
CJNE A,#60,NEXT
MOV 30H,#0
INC 31H ;当秒满60时,秒清零重新开始,分加1
MOV A,31H
CJNE A,#60,NEXT
MOV 31H,#0
INC 32H ; 当分满60时,分清零重新开始,时加1
MOV A,32H
CJNE A,#24,NEXT
MOV 32H,#0
NEXT:
MOV TL0,#0B0H
MOV TH0,#3CH
SETB TR0
RETI
***************************************
DELAY: ; 延时程序
MOV R6,#10
XX: MOV R7,250
DJNZ R7,$
DJNZ R6,XX
RET
TABLE:DB 3FH,06H,5BH,4FH,66H ;0~9的显示器显示值
DB 6DH,7DH,07H,7FH,6FH
RET
END
展开阅读全文