文档介绍:课程设计单片机电子钟万年历(Curriculum design, SCM, electronic clock, 10000 calendar)
the second _ bcd equ.
second _ bcd equ 9
_ bcd equ 10 hour.
at day _ bcd equ
month _ bcd equ.
year _ bcd equ 25h
闹钟时 bell _ h equ 26h.
闹钟分 bell _ m equ 27h.
i t0溢出计数器 t equ 28h.
display _ buffer equ 30h; 时间, 日期, 闹钟显示缓存, 从30h到35h
_ index scan 数码管扫描用到的标志 equ 36 hours.
display _ mask 37 控制闪烁时用到 equ.
flash _ mask equ 用来控制闪烁, 相应位置高则闪烁 00m.
时间与日期切换以及闪烁位加一操作, 以及纪录秒表值 k0 equ.
k0 _ 39h beef equ
设置闪烁位 k1 equ.
do not _ beef equ 3ah
闹钟开关及闪烁位减一操作, 秒表开始与结束 k2 equ.
k2 _ 3bh, beef equ
display _ value equ.
display _ select equ p1
闹钟开关指示灯 bell _ flag equ.
_ 闹钟蜂鸣器 bell ring equ.
setting _ 记录现在设置的是哪个值 index equ 41h.
秒表毫秒位 g1 equ 42h.
秒表秒位 g2 equ 43h.
秒表分位 g3 equ 44 (h);
display _ buffer1 equ. 秒表显示缓存, 从45h到50h.
stopwatch _ 秒表标志, 为1则为秒表模式 flag equ 51h.
52h 以下5个标志位调整闹钟发声长短, 使闹钟发声从短到长循环变化 bellflag1 equ.
bellflag2 equ 53h
bellflag3 equ 54h
55h bellflag4 equ
56h bellflag5 equ
.
ljmp start
.
ljmp tf0 _ int
.
ljmp tf1 _ int
.
day _ of _ month.
db 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 每个月的天数
display _ codes:
db 40 hours, 2 hours, 24 hours, 79h, 7, 12, 02h, 78, ., 10:00. 分别表示"0", "1", "2", "3", "4"
and "5", "6", "7", "8", "9"
start: mov r0, # 清空ram 0ffh.
idata loop: mov @ r0, _ # 0
djnz r0, idata _ loop
mov sp, 设置堆栈# 60h.
mov p0, # 初始化 0ffh.
mov p1, # 0ffh
it # 0ffh p2
it # 0ffh p3.
it tmod, # 11; 设置t0, t1工作方式
with it, # t0定时20ms 0b1h.
it conducted, # 0dfh 开t0, t1中断.
setb et0
with setb
关掉tr0;启动T0
开所有中断SETB EA;
MOV scan_index,# 6
MOV display_mask,# 0ffh
MOV year_bcd,# 09
MOV month_bcd,# 11
MOV day_bcd,# 7
MOV stopwatch_flag,# 0
MOV bellflag1,# 15H;设置闹钟发声长短
MOV bellflag2,# 8fh
MOV bellflag5,# 8fh
主营:LCALL _display;主程序
LCALL is_k1_pressed;判断K1是否按下,按下则设置下一位
JB ,L2
MOV A,setting_index;正常显示或设置年,月,日,时,分,秒,闹钟时,闹钟分
MOV DPTR,# mode_table
间接转移指令
L1:循环stopwatch1;转到秒表
L2:循环setting_next
mode_normal:MOV flash_mask,# 0;