第四章 实验及实践课题(20) 数字钟﹝★﹞
实验任务
(1. 开机时,显示 12:00:00 的时间开始计时;
(2. P0.0/AD0 控制“秒”的调整,每按一次加 1 秒;
(3. P0.1/AD1 控制“分”的调整,每按一次加 1 分;
(4. P0.2/AD2 控制“时”的调整,每按一次加 1 个小时;
2
.
电路原理图
P0_0~P0_3 要加上拉电阻。
图 4.20.1
3
.
系统板上硬件连线
(1. 把“单片机系统”区域中的 P1.0-P1.7 端口用 8 芯排线连接到“动态数码显示”区域中的 A-H
端口上;
(2. 把“单片机系统:区域中的 P3.0-P3.7 端口用 8 芯排线连接到“动态数码显示”区域中的 S1-
S8 端口上;
(3. 把“单片机系统”区域中的 P0.0/AD0、P0.1/AD1、P0.2/AD2 端口分别用导线连接到“独立式
键盘”区域中的 SP3、SP2、SP1 端口上;
4
.
相关基本知识
(1. 动态数码显示的方法
(2. 独立式按键识别过程
(3. “时”,“分”,“秒”数据送出显示处理方法
5
.
程序框图
6
.
汇编源程序
SECOND EQU 30H
MINITE EQU 31H
HOUR EQU 32H
HOURK BIT P0.2
MINITEK BIT P0.1
SECONDK BIT P0.0
DISPBUF EQU 40H
DISPBIT EQU 48H
T2SCNTA EQU 49H
T2SCNTB EQU 4AH
TEMP EQU 4BH
ORG 00H
LJMP START
ORG 0BH
LJMP INT_T0
START: MOV SECOND,#00H
MOV MINITE,#00H
MOV HOUR,#12
MOV DISPBIT,#00H
MOV T2SCNTA,#00H
MOV T2SCNTB,#00H
MOV TEMP,#0FEH
LCALL DISP ;2KB 范围内长调用
MOV TMOD,#01H
MOV TH0,#(65536-2000) / 256 ;2ms
MOV TL0,#(65536-2000) MOD 256
SETB TR0
SETB ET0
SETB EA
WT: JB SECONDK,NK1 ;SECONDK 是 1 转 NK1,即按键 SP1 按下时转.
LCALL DELY10MS
JB SECONDK,NK1
INC SECOND
MOV A,SECOND
CJNE A,#60,NS60
MOV SECOND,#00H
NS60: LCALL DISP
JNB SECONDK,$
NK1: JB MINITEK,NK2
LCALL DELY10MS
JB MINITEK,NK2
INC MINITE
MOV A,MINITE
CJNE A,#60,NM60
MOV MINITE,#00H
NM60: LCALL DISP
JNB MINITEK,$
NK2: JB HOURK,NK3
LCALL DELY10MS
JB HOURK,NK3
INC HOUR
MOV A,HOUR
CJNE A,#24,NH24
MOV HOUR,#00H
NH24: LCALL DISP
JNB HOURK,$
NK3: LJMP WT
DELY10MS:
MOV R6,#10
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
DISP: ;将得出的时间存入 40H (DISPBUF)之后的地址
MOV A,#DISPBUF
ADD A,#8
DEC A
MOV R1,A
MOV A,HOUR
MOV B,#10
DIV AB
MOV @R1,A ;累加器送内部 RAM 单元
@R1 与 R1 区分?:@R1——R1 为地址,@R1 指向其内容。