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

📄 123.asm

📁 时钟调时和显示
💻 ASM
字号:
org 0000h
sjmp main
org 002bh
main:
;*********设置闹钟标志************
alarm_on bit 7fh
;*********暂放时分秒**************
second equ 7fh
minute equ 7eh
hour equ 7dh
;*********暂放闹钟****************
alarm_second equ 7ch
alarm_minute equ 7bh
alarm_hour equ 7ah
;********暂放显示时的入口参数****
temp_s equ 76h
temp_m equ 75h
temp_h equ 74h
;**********闹钟响铃部分变量******
alarm_speak bit 7eh
tcount equ 73h
alarm_count equ 72h
integer_count equ 71h
;********键盘部分变量************
keyboard_exit_flag bit 7dh
hour_flag bit 7ch
temp equ 79h
menu equ 78h
item equ 77h
temp1 equ 75h
;********系统初始化***************
init:
;*******初始化按键功能部分变量****
clr hour_flag
setb keyboard_exit_flag
mov item,#00h
mov menu,#00h
;****初始化闹铃部分**************
clr p1.4
clr p1.5
;*****初始化闹钟标志************
clr alarm_on
clr alarm_speak
;****初始化显示部分**************
mov dptr,#table
mov r1,#00h
mov r2,#00h
;****初始化时钟和闹钟***********
mov alarm_hour ,#08h
mov alarm_minute,#20h
mov alarm_second,#00h
mov second,#59h
mov minute,#59h
mov hour,#08h
;********初始化定时器0和定时器1*****
mov IE,#8ah
mov tmod,#11h
mov th0,#0D8h
mov tl0,#0F0h
setb tr0
mov th1,#65533/256
mov tl1,#65533 mod 256
;********程序开始部分**********
start:
lcall keyboard
;*******判断是否闹铃***********
mov a,alarm_second
cjne a,second,decide_integer
mov a,alarm_minute
cjne a, minute,decide_integer
mov a,alarm_hour
cjne a,hour,decide_integer
setb alarm_speak
setb tr1
loop:mov a,alarm_count
cjne a,#240,loop
clr alarm_speak
clr tr1
clr p1.4
mov th0,#65535/256
mov tl0,#65535 mod 256
sjmp start
;*******判断是否整点报时********
decide_integer:
mov a,second
cjne a,#00h, start
mov a,minute
cjne a,#00h,start
setb tr0
loop0:mov a,integer_count
cjne a,#4,loop0
inc second
clr tr0
mov th1,#65535/256
mov tl1,#65535 mod 256
clr p1.4
sjmp start
table: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h
       db 83h,0c6h,0a1h,86h,8eh,0ffh,0ch,89h,7fh,0bfh
;******************************************************

;*********************T0中断完成计数和显示*************************

;******************************************************
org 000bh               
ljmp intr0
org 1000h
intr0:
push acc
mov th0,#0D8h
mov tl0,#0F0h
inc r1
cjne r1,#100,display0
mov r1,#00h
mov a,second
add a,#1
da a
mov second ,a
cjne a,#60h,display0
mov second,#00h
mov a,minute
add a,#1
da a
mov minute,a
cjne a,#60h,display0
mov minute,#00h
mov a,hour
add a,#1
da a
mov hour,a
cjne a,#24h,display0
mov hour,#00h
;********每隔10MS显示一次*************
display0:
jnb alarm_on,hold
mov temp_s,alarm_second
mov temp_m,alarm_minute
mov temp_h,alarm_hour
sjmp display1
hold:
mov temp_s,second
mov temp_m,minute
mov temp_h,hour
display1:                  
mov p2,#00h
cjne r2,#00h,sub_next0
MOV A,temp_s
ANL A,#0FH
movc a,@a+dptr
mov p0,a
setb p2.5
sjmp done
sub_next0:
cjne r2,#01h,sub_next1
mov a,temp_s
ANL A,#0F0H
SWAP A
movc a,@a+dptr
mov p0,a
setb p2.4
sjmp done
sub_next1:
cjne r2,#02h,sub_next2
MOV A,temp_m
ANL A,#0FH
movc a,@a+dptr
mov p0,a
setb p2.3
sjmp done
sub_next2:
cjne r2,#03h,sub_next3
MOV A,temp_m
ANL A,#0F0H
SWAP A
movc a,@a+dptr
mov p0,a
setb p2.2
sjmp done
sub_next3:
cjne r2,#04,sub_next4
MOV A,temp_h
ANL A,#0FH
movc a,@a+dptr
mov p0,a
setb p2.1
sjmp done
sub_next4:
cjne r2,#05,done
MOV A,temp_h
ANL A,#0F0H
SWAP A
movc a,@a+dptr
mov p0,a
setb p2.0
mov r2,#0FFh
done:
INC R2
pop acc
reti
;******************************************************

;*********************T1中断完成计数和显示*************************

;******************************************************
org 001bh
ljmp intr1
org 0800h
intr1:
push acc
mov th1,#(65536-1000)/256
mov tl1,#(65536-1000)mod 256
inc tcount
mov a,tcount
cjne a,#250,T1_exit
cpl p1.4
mov tcount,#00h
jnb alarm_speak,next1
inc alarm_count
sjmp T1_exit
next1:
inc integer_count
T1_exit:
pop acc
reti
;******************************************************

;*********************按键函数*************************

;******************************************************
keyboard:
mov a,p1
anl a,#0fh
jnz advance_determine
jnb keyboard_exit_flag,keyboard
ljmp keyboard_exit
advance_determine:
lcall delay12ms
mov a, p1
mov temp,a
anl a,#0fh
jnz keyboard_determine
jnb keyboard_exit_flag,keyboard
ljmp keyboard_exit

;********判断是哪个键按下**************
keyboard_determine:
setb p1.5
clr keyboard_exit_flag
jnb acc.0,keyboard1
inc menu
mov a,menu
cjne a,#02h,down
mov menu,#00h
setb alarm_on
down:
ljmp key_up
;***********按键1选择时分秒*********************
keyboard1:
jnb acc.1,keyboard2
jnb alarm_on,time
inc item
mov a,item
cjne a,#01h,examine_minute
mov temp1,alarm_second
sjmp examine1_exit
examine_minute:
mov a,item
cjne a,#02h,examine_hour
mov temp1,alarm_minute
sjmp examine1_exit
examine_hour:
mov temp1,alarm_hour
setb hour_flag
sjmp examine1_exit
time:
mov a,item
cjne a,#01h,examine_minute0
mov temp1,second
sjmp examine1_exit
examine_minute0:
mov a,item
cjne a,#02h,examine_hour0
mov temp1,minute
sjmp examine1_exit
examine_hour0:
mov temp1,hour
setb hour_flag
sjmp examine2_exit
examine1_exit:

mov a,item
cjne a,#03h,key_up
mov item,#00h
sjmp key_up
;******************按键2时分秒增加1**********************
keyboard2:
jnb acc.2,keyboard3
jb hour_flag,hour_reset
mov a,temp1
cjne a,#59h,increase
mov temp1,#00h
sjmp examine2_exit
increase:
mov a,temp1
add a,#1
da a
mov temp1,a
sjmp examine2_exit
hour_reset:
mov a,temp1
cjne a,#23h,increase0
mov temp1,#00h
sjmp examine2_exit
increase0:
add a,#1
da a
mov temp1,a
examine2_exit:
jnb alarm_on,time0
mov a,item
cjne a,#01h,examine_minute1
mov alarm_second,temp1
sjmp key_up
examine_minute1:
mov a,item
cjne a,#02h,examine_hour1
mov alarm_minute,temp1
sjmp key_up
examine_hour1:
mov alarm_hour,temp1
setb hour_flag
sjmp key_up
time0:
mov a,item
cjne a,#01h,examine_minute2
mov second,temp1
sjmp key_up
examine_minute2:
mov a,item
cjne a ,#02h,examine_hour2
mov minute,temp1
sjmp key_up
examine_hour2:
mov hour,temp1
setb hour_flag
sjmp key_up
;********************按键3按下******************
keyboard3:
clr alarm_on
mov item,#00h
mov menu,#00h
sjmp keyboard_exit
clr hour_flag
setb keyboard_exit_flag
key_up:
loop1:
mov a,p1
xrl a,temp
jz loop1
jb keyboard_exit_flag,keyboard_exit
ljmp keyboard
keyboard_exit:
setb keyboard_exit_flag
ret
;******************************************************

;*********************延时子程序*************************

;******************************************************
delay12ms:
mov r5,#30
del:
mov r6,#200
del0:
djnz r6,del0
djnz r5,del
ret
end

⌨️ 快捷键说明

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