⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 数字钟.asm

📁 数字钟表的程序
💻 ASM
字号:
;-----------------------------------
;CLL.ASM 8051 7-SEGMENT DISPLAY CLOCK
;8051 ASM USE:KEIL
;COPYRIGHT CMY 2007
;--------------------
;K1:ADJ  TIME K2:HOUR K3:MIN K4:OK
;--------------------
;定时器0计时中断程序每隔5ms中断一次
;MOV TL0,#(8192-5000).MOD.32;加载低字节;
;MOV TH0,#(8192-5000)/32;加载高字节;
LW EQU 24
HG EQU 99

CO EQU 200               ;5ms中断计数时间常数,表示1s计数200次
BUF EQU 30H
HOUR EQU 34H
MIN EQU 35H
SEC EQU 36H
DEDA EQU 37H             ;5ms计数值
SECO EQU 38H             ;存放旧的秒数

;按键输入引脚定义
K1 EQU P1.0
K2 EQU P1.1
K3 EQU P1.2
K4 EQU P1.3

;-------------------------------
;主程序
ORG 0H
JMP BEGIN
ORG 0BH
JMP T0_INT

ORG 0100H
BEGIN:

CALL INIT                  ;变量初始化
CALL INIT_TIMER            ;初始化定时器接口,使用T0模式0计时
CALL LOAD_DATA

LOOP:
CALL TIME_PRO               ;更新时分秒数据
CALL SCANS                  ; 显示器扫描数次

;TEST KEY,K1:ADJ TIME K2:HOUR K3:MIN K4:OK
   JB K1,L1
   JNB K1,$
;K1 KEYED
   CALL SET_TIME              ;设定时间
   JMP LOOP

;-----------------------------------------
L1:JB K2,L2
   JNB K2,$
;K2 KEYED
   JMP LOOP

L2:JB K3,L3
   JNB K3,$
;K3 KEYED
   JMP LOOP

L3:JB K4,L4
   JNB K4,$
;K4 KEYED
   JMP LOOP

L4:
   JMP LOOP
;---------------------------------------
;初始化控制变量
;----------------------------------------
INIT:
MOV DEDA,#0
MOV SECO,#0
MOV SEC,#0
MOV MIN,#0
MOV HOUR,#0
RET
;------------------------------------------
;初始化定时器接口,使用T0模式0计时
;-----------------------------------------
INIT_TIMER:
MOV TMOD,#00000000B
MOV IE,#10000010B
MOV TL0,#LW
MOV TH0,#HG
SETB TR0
RET
;------------------------------------------
;USE TIMER MODE 0
;COVNT=5ms/1us=5000
;T0计时中断程序每隔5ms中断一次
;------------------------------------------
T0_INT:
PUSH ACC
MOV TL0,#LW
MOV TH0,#HG
INC DEDA

;小数点闪烁
MOV A,DEDA
   CJNE A,#100,PD2
PD2:JC LD
   SETB P2.6
   AJMP  PD1
LD:CLR P2.6

;1 SEC TIME OUT CHECK
PD1: CJNE A,#CO,TT
MOV DEDA,#0
INC SEC
MOV A,SEC
CJNE A,#60,TT
;1 MIN TIME OUT
INC MIN
MOV A,#0
MOV A,MIN
CJNE A,#60,TT
;1 HOUR TIME OUT
INC HOUR
MOV MIN,#0
MOV A,HOUR
CJNE A,#24,TT
MOV SEC,#0
MOV MIN,#0
MOV HOUR,#0
TT:
POP ACC
RETI

;------------------------------
;设置现在的时间,包括小时和分钟
;K2:HH K3:MM K4:OK
;------------------------------
SET_TIME:
CLR TR0
MOV SEC,#0
;SCAN 3 KEY T0 ADJ
A0:
CALL SCAN1
JB K2,A1
;K1 KEYED
JNB K2,$
INC HOUR
MOV A,HOUR
CJNE A,#24,A11
MOV HOUR,#0
A11:
CALL CONV
CALL SCANS
JMP A0

A1:JB K3,A2
;K2 KEYED ADJ MM
JNB K3,$
INC MIN
MOV A,MIN
CJNE A,#60,A21
MOV MIN,#0
A21:
CALL CONV
CALL SCANS
JMP A0

A2:JB K4,A0
JNB K4,$
;K3 KEYED OK
SETB TR0
RET

;---------------------------------------------
 ;显示器扫描数次
 SCANS:
MOV R4,#55
SS:CALL SCAN1
DJNZ R4,SS
RET

;---------------------------------------------
;显示器扫描一遍
;SCAN 4 TIMES
SCAN1:
MOV R0,#BUF
MOV R2,#4
MOV R3,#0FEH
S1:
;SEND OUT 1 T SEGMENT DATA IN @R0
MOV A,@R0
MOV DPTR,#0EFFFH
MOVX @DPTR,A
;SEND SCAN CODE
MOV A,R3
MOV P2,A
;CHANGE SCAN CODE
RL A
MOV R3,A
INC R0
;CLR P2.6
MOV R5,#5
CALL DELAY1
DJNZ R2,S1
RET

;----------------------------------------
;更新时分秒数据
;UPDATE SEC,MIN,HR
TIME_PRO:
MOV A,SEC
MOV B,SECO
CJNE A,B,TI1
JMP TI2
TI1:CALL CONV
    MOV SECO,SEC
TI2:RET

;-----------------------------------------
;将时分秒数据转换成显示器数据并写入显示内存
;T SEG HH:MM:SS
;CONVERT DATA AND SHOW
;BUF0 BUF1 BUF2 BUF3
CONV:
;SHOW HOUR
MOV A,HOUR
MOV B,#10
DIV AB

MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV BUF,A

MOV A,B
MOVC A,@A+DPTR
MOV BUF+1,A

;SHOW MIN
MOV A,MIN
MOV B,#10
DIV AB

MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV BUF+2,A

MOV A,B
MOVC A,@A+DPTR
MOV BUF+3,A
RET

;----------------------------------------------
;T-SEGMENT COMMON CATHODE;
TABLE:
    DB 0C0H,0F9H,0A4H,0B0H,99H
    DB 92H,82H,0F8H,80H,90H,88H
    DB 83H,0C6H,0A1H,86H,84H,0FFH
;------------------------------------------------
LOAD_DATA:
MOV BUF,#0C0H
MOV BUF+1,#0C0H
MOV BUF+2,#0C0H
MOV BUF+3,#0C0H

RET
;------------------------------------------------
;DELAY X ms R5*10ms
DELAY:
     MOV R6,#50
D1:MOV R7,#100
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,DELAY
RET
;--------------------------------------------------
;DELAY A WHILE R5*0.2MS
DELAY1:
       MOV R6,#1
D2:MOV R7,#100
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,DELAY1
RET
;---------------------------------------------------

END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -