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

📄 clock.asm

📁 digital clock arm sample code using for beginer
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	acall disp_val
	lcall hexdec
	sjmp key
chk2:	jb time_key,key

	lcall dechex
	mov min,a
	jnb time_key,$

	mov a,#1
	acall command
	mov a,#80h
	acall command
	mov a,#CLOCK
	acall data_in
	disp_str < set hours:>
	mov a,#0c5h
	acall command
	mov a,52h
	anl a,#1fh
	acall disp_val
	lcall hexdec
key1:	push acc
	mov a,#0c5h
	acall command
	pop acc
	jb increment,chk3
	inc a
	cjne a,#13,ok3
	mov a,#1
ok3:	jnb increment,$
	lcall dechex
	acall disp_val
	lcall hexdec
	sjmp key1
chk3:	jb decrement,chk4
	dec a
	cjne a,#0,ok4
	mov a,#12
ok4:	jnb decrement,$
	lcall dechex
	acall disp_val
	lcall hexdec
	sjmp key1
chk4:	jb time_key,key1

	lcall dechex
	mov hour,a
	jnb time_key,$

	mov a,#1
	acall command
	mov a,#80h
	acall command
	mov a,#CLOCK
	acall data_in
	disp_str < set am/pm:>
	mov a,52h
	anl a,#20h
	cjne a,#00h,pm1
	mov a,#0c5h
	acall command
	disp_str <am>
	setb ampm_flag
	sjmp key2
pm1:	mov a,#0c5h
	acall command
	disp_str <pm>
	clr ampm_flag
	
key2:	mov a,#0c5h
	acall command
	jb increment,chk5
	jb ampm_flag,ok5
	setb ampm_flag
	disp_str <am>
	hold
	jnb increment,$
	sjmp key2
ok5:	clr ampm_flag
	disp_str <pm>
	hold
	jnb increment,$
	sjmp key2
chk5:	jb decrement,chk6
	jb ampm_flag,ok6
	setb ampm_flag
	disp_str <am>
	hold
	jnb decrement,$
	sjmp key2
ok6:	clr ampm_flag
	disp_str <pm>
	hold
	jnb decrement,$
	sjmp key2
chk6:	jb time_key,key2
	
	jnb ampm_flag,noam
	mov a,hour
	add a,#40h
	sjmp nopm
noam:	mov a,hour
	add a,#60h
nopm:	mov hour,a
	jnb time_key,$

	mov a,#1
	acall command
	mov a,#80h
	acall command
	mov a,#CLOCK
	acall data_in
	disp_str < set days:>
	mov a,#0c5h
	lcall command
	mov a,53h
	push acc
	lcall day
	pop acc
key3:	push acc
	mov a,#0c5h
	lcall command
	pop acc
	jb increment,chk7
	inc a
	cjne a,#8,ok7
	mov a,#1
ok7:	jnb increment,$
	push acc
	lcall day
	pop acc
	sjmp key3
chk7:	jb decrement,chk8
	dec a
	cjne a,#0,ok8
	mov a,#7
ok8:	jnb decrement,$
	push acc
	lcall day
	pop acc
	sjmp key3
chk8:	jb time_key,key3

	mov days,a
	jnb time_key,$

	mov a,#1
	lcall command
	mov a,#80h
	lcall command
	mov a,#CLOCK
	lcall data_in
	disp_str < set date:>
	mov a,#0c5h
	lcall command
	mov a,54h
	lcall disp_val
	lcall hexdec
key4:	push acc
	mov a,#0c5h
	lcall command
	pop acc
	jb increment,chk9
	inc a
	cjne a,#32,ok9
	mov a,#1
ok9:	jnb increment,$
	lcall dechex
	lcall disp_val
	lcall hexdec
	sjmp key4
chk9:	jb decrement,chk10
	dec a
	cjne a,#0,ok10
	mov a,#31
ok10:	jnb decrement,$
	lcall dechex
	lcall disp_val
	lcall hexdec
	sjmp key4
chk10:	jb time_key,key4
	
	lcall dechex
	mov date,a
	jnb time_key,$

	mov a,#1
	lcall command
	mov a,#80h
	lcall command
	mov a,#CLOCK
	lcall data_in
	disp_str < set month:>
	mov a,#0c5h
	lcall command
	mov a,55h
	lcall disp_val
	lcall hexdec
key5:	push acc
	mov a,#0c5h
	lcall command
	pop acc
	jb increment,chk11
	inc a
	cjne a,#13,ok11
	mov a,#1
ok11:	jnb increment,$
	lcall dechex
	lcall disp_val
	lcall hexdec
	sjmp key5
chk11:	jb decrement,chk12
	dec a
	cjne a,#0,ok12
	mov a,#12
ok12:	jnb decrement,$
	lcall dechex
	lcall disp_val
	lcall hexdec
	sjmp key5
chk12:	jb time_key,key5
	
	lcall dechex
	mov month,a
	jnb time_key,$

	mov a,#1
	lcall command
	mov a,#80h
	lcall command
	mov a,#CLOCK
	lcall data_in
	disp_str < set year:>
	mov a,#0c5h
	lcall command
	mov a,56h
	lcall disp_val
	lcall hexdec
key6:	push acc
	mov a,#0c5h
	lcall command
	pop acc
	jb increment,chk13
	inc a
	cjne a,#100,ok13
	mov a,#0
ok13:	jnb increment,$
	lcall dechex
	lcall disp_val
	lcall hexdec
	sjmp key6
chk13:	jb decrement,chk14
	dec a
	cjne a,#0ffh,ok14
	mov a,#99
ok14:	jnb decrement,$
	lcall dechex
	lcall disp_val
	lcall hexdec
	sjmp key6
chk14:	jb time_key,key6

	jnb time_key,$
	lcall dechex
	mov year,a
	mov alarm,#00
	mov sig,#'~'
	clr time_flag
	clr time_flag
	ret

alarm_set:					;Setting Alarm Subroutine
	jnb alarm_key,$
	mov a,#1
	lcall command
	mov a,#80h
	lcall command
	mov a,#BELL
	lcall data_in
	disp_str < set minutes:>
	mov a,#0c5h
	lcall command
	mov a,#30h
	lcall disp_val
	lcall hexdec
akey:	push acc
	mov a,#0c5h
	lcall command
	pop acc
	jb increment,achk1
	inc a
	cjne a,#60,aok1
	mov a,#0
aok1:	jnb increment,$
	lcall dechex
	lcall disp_val
	lcall hexdec
	sjmp akey
achk1:	jb decrement,achk2
	dec a
	cjne a,#0ffh,aok2
	mov a,#59
aok2:	jnb decrement,$
	lcall dechex
	lcall disp_val
	lcall hexdec
	sjmp akey
achk2:	jb alarm_key,akey

	lcall dechex
	mov alarm_min,a
	jnb alarm_key,$

	mov a,#1
	lcall command
	mov a,#80h
	lcall command
	mov a,#BELL
	lcall data_in
	disp_str < set hours:>
	mov a,#0c5h
	lcall command
	mov a,#44h
	anl a,#1fh
	lcall disp_val
	lcall hexdec
akey1:	push acc
	mov a,#0c5h
	lcall command
	pop acc
	jb increment,achk3
	inc a
	cjne a,#13,aok3
	mov a,#1
aok3:	jnb increment,$
	lcall dechex
	lcall disp_val
	lcall hexdec
	sjmp akey1
achk3:	jb decrement,achk4
	dec a
	cjne a,#0,aok4
	mov a,#12
aok4:	jnb decrement,$
	lcall dechex
	lcall disp_val
	lcall hexdec
	sjmp akey1
achk4:	jb alarm_key,akey1

	lcall dechex
	mov alarm_hrs,a
	jnb alarm_key,$

	mov a,#1
	lcall command
	mov a,#80h
	lcall command
	mov a,#BELL
	lcall data_in
	disp_str < set am/pm:>
	mov a,#0c5h
	lcall command
	mov a,alarm_hrs
	anl a,#20h
	cjne a,#20h,its_pm
	disp_str <am>
	setb ampm_flag
	sjmp akey2
its_pm:	disp_str <pm>
	clr ampm_flag
akey2:	mov a,#0c5h
	lcall command
	jb increment,achk5
	jb ampm_flag,aok5
	setb ampm_flag
	disp_str <am>
	hold
	jnb increment,$
	sjmp akey2
aok5:	clr ampm_flag
	disp_str <pm>
	hold
	jnb increment,$
	sjmp akey2
achk5:	jb decrement,achk6
	jb ampm_flag,aok6
	setb ampm_flag
	disp_str <am>
	hold
	jnb decrement,$
	sjmp akey2
aok6:	clr ampm_flag
	disp_str <pm>
	hold
	jnb decrement,$
	sjmp akey2
achk6:	jb alarm_key,akey2
	jnb alarm_key,$
	mov a,alarm_hrs
	jb ampm_flag,anoam
	add a,#60h
	sjmp anopm
anoam:	mov a,alarm_hrs
	add a,#40h
anopm:	mov alarm_hrs,a
	mov ahour,alarm_hrs
	mov amin,alarm_min
	mov r6,#02h
	mov r0,#39h
	mov r1,#09h
	lcall rtc_ini
	mov a,#1h
	lcall command
	mov a,#81h
	lcall command
	mov a,#OK
	lcall data_in
	disp_str < Alarm On!>
	mov a,#0c4h
	lcall command
	mov a,alarm_hrs
	anl a,#1fh
	lcall disp_val
	mov a,#':'
	lcall data_in
	mov a,alarm_min
	lcall disp_val
	mov a,alarm_hrs
	anl a,#20h
	cjne a,#00h,ppm
	disp_str < am>
	sjmp ppass2
ppm:	disp_str < pm>
ppass2:	mov r7,#35
	setb tr0
looop:	jnb tf0,$
	clr tf0
	djnz r7,looop
	clr tr0
	mov a,#1h
	lcall command
	lcall disp_const
	mov a,#SPEAKER_ON
	lcall data_in
	setb alarm_off
	setb alarm_on
	clr alarm_flag
	clr alarm_flag
	ret

alarm_alarm:					;Alarm Ring subroutine
	clr alarm_port
	mov r3,#0ffh
a_loop:	mov r4,#0ffh
	djnz r4,$
	djnz r3,a_loop
	setb alarm_port
	mov r3,#0ffh
a_loop1:mov r4,#0ffh
	djnz r4,$
	djnz r3,a_loop1
	clr alarm_port
	mov r3,#0ffh
a_loop2:mov r4,#0ffh
	djnz r4,$
	djnz r3,a_loop2
	setb alarm_port
	mov r3,#0ffh
a_loop3:mov r4,#0ffh
	djnz r4,$
	djnz r3,a_loop3
	clr alarm_port
	mov r3,#0ffh
a_loop4:mov r4,#0ffh
	djnz r4,$
	djnz r3,a_loop4
	setb alarm_port
	mov r3,#0ffh
a_loop5:mov r4,#0ffh
	djnz r4,$
	djnz r3,a_loop5
	clr alarm_port
	mov r3,#0ffh
a_loop6:mov r4,#0ffh
	djnz r4,$
	djnz r3,a_loop6
	setb alarm_port
	ret

dechex:	mov b,#0ah				;Decimal to Hexadecimal conversion
	div ab
	mov 60h,b
	mov b,#10h
	mul ab
	add a,60h
	ret

hexdec:	mov b,#10h				;Hexadecimal to deciaml conversion
	div ab
	mov 60h,b
	mov b,#0ah
	mul ab
	add a,60h
	ret

ascii:						;ASCII lookup table
db	30h,31h,32h,33h,34h,35h,36h,37h,38h,39h

	end 

⌨️ 快捷键说明

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