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

📄 clock.asm

📁 电子钟源码可以自己设定时间然后时钟倒计时
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;2001.5.24
			;***************
			;clk_program  2000-10-12
			;***************
;********************************************************
			t_h_100ms       equ   01eh  ;100 ms for 6MHz 1e
			t_l_100ms       equ   038h  ;100 ms for 6MHz 38

			timer_no        equ   229d   ;3c90+30d=3cb0h
			mod             equ   50d
			fl_250ms  bit  00h
			fl_500ms  bit  fl_250ms+1
			set_clk_f bit fl_500ms+1
			set_al4_f bit set_clk_f+1
			am_f      bit set_al4_f+1
			fl_3s     bit am_f+1
			al1_f     bit fl_3s+1
			set_over  bit al1_f+1
			ha_f      bit set_over+1
			ha_over   bit ha_f+1
			set_f     bit ha_over+1
			d2_f      bit set_f+1
;**************************************************
			key_data   equ 08h
			timers     equ key_data+1
			t_30ms     equ timers+1
			t_20ms     equ t_30ms+1
			t_1s       equ t_20ms+1
			k1_data    equ t_1s+1
			k2_data    equ k1_data+1
			stat_work  equ k2_data+1
			stat_led   equ stat_work+1
			t_1ms      equ stat_led+1
			t_20m      equ t_1ms+1
			beep       equ t_20m
			al1        equ beep+1
			al2        equ beep+2
			al3        equ beep+3
			al4        equ beep+4
			al5        equ beep+5
			al6        equ beep+6
			al7        equ beep+7
			al8        equ beep+8
			ret_timer  equ al8+1
			d1         equ ret_timer+1
	;**************************************************
			sec    equ  23h
			min    equ  sec+1h
			hour   equ  min+1h
			day    equ  hour+1h
			mon    equ  day+1h
			year   equ  mon+1h
			w_adj  equ  year+1h
			week   equ  w_adj+1h
	;***************************************
			al1_h   equ  week+1h
			al1_m   equ  al1_h+1h
			al2_h   equ  al1_m+1h
			al2_m   equ  al2_h+1h
			al3_h   equ  al2_m+1h
			al3_m   equ  al3_h+1h
			al4_h   equ  al3_m+1h
			al4_m   equ  al4_h+1h
			al5_h   equ  al4_m+1h
			al5_m   equ  al5_h+1h
			al6_h   equ  al5_m+1h
			al6_m   equ  al6_h+1h
			al7_h   equ  al6_m+1h
			al7_m   equ  al7_h+1h
			al8_h   equ  al7_m+1h
			al8_m   equ  al8_h+1h
			d2      equ  al8_m+1
	;**************************************
	    		led1        equ d2+1h
			led2        equ led1+1
		        led3        equ led2+1
			led4        equ led3+1
		        led5        equ led4+1
			sp_data     equ led5+1
		;**************************************
		        led_1     bit p3.5
		        led_2     bit p3.4
		        led_3     bit p3.3
		        led_4     bit p3.2
		        led_5     bit p3.1

		       beep_f         BIT P3.7
		       key_f          bit p3.0

			w_adj_dat       equ   50d
	;*********************************************************
			blk_led equ   20d
			dot_led equ   21d
			f_led	equ   22d
			n_led   equ   23d
			u_led   equ   24d
			t_led   equ   25d
			b_led   equ   26d
			d_led   equ   27d


			oRG  0000H;            ;
			     sJMP start
			ORG  0003H;            ;
			    reti;
			ORG  000BH             ;
			     ;ajmp t0
			     reti           ;
			ORG  0013H
			     reti              ;
			ORG  001BH             ;
			     aJMP T1        ;
			ORG  0023H             ;
			    RETI; AJMP RS_485             ;

;**************************************
start:
		call clr_ram
                MOV SP,#sp_data       ;
		call timer_int
	stq:
                call week_auto
		call led_jmp
		call key_bord
		mov a,key_data
		;jz stq
		call int_t0
		setb key_f
		mov key_data,#0
		;call timer_20ms
STAR_BI:
	  call   clock
	  call   week_auto
	  call   al_out
          CALL   KEY_bord1
	  call   set_clk_al
	  call   key_jmp
	  call   reback
	  call   led_jmp
	  call   del
sjmp star_bi

del:
	inc d1
	mov a,d1
	jnz del_end
	setb d2_f
	inc d2
	mov a,d2
	cjne a,#mod,del_end
	mov d2,#0
	mov d1,#0
del_end:
		jbc d2_f,f3_1
		ret
	f3_1:
		mov a,d2
		mov b,#12d
		jnb fl_3s,za1
		mov b,#5d
	za1:
		div ab
		mov a,b
		jnz se1
		cpl fl_3s
	se1:
	ret
;*******************************************
reback:
		mov a,stat_work
		jz reback_end
		jb al1_f ,ka1
		mov ret_timer,d2
		setb al1_f
		sjmp reback_end
	ka1:
		mov a,ret_timer
		add a,#10d
		mov b,#mod
		div ab
		mov a,d2
		cjne a,b,reback_end
		clr al1_f
		mov stat_work,#00d
reback_end:
		ret
key_jmp:
		mov a,key_data
		jz key_jmp_end
	kio1:
		mov ret_timer,d2
		cjne a,#01d,kk1
		mov a,stat_work
		inc a			;k1_key
		cjne a,#9d,kka1         ;stat_work=al way
		clr a
	kka1:
		mov stat_work ,a
		sjmp key_jmp_end
	kk1:
		mov a,stat_work   ;k2_key stat_led led clock mode
		jnz kk2
		mov a,stat_led
		inc a
		cjne a,#04d,kka2
		clr a
	kka2:
		mov stat_led,a
		sjmp key_jmp_end
	kk2:
		acall all1
		cpl a
		mov @r0,a
key_jmp_end:
		ret

	all1:
		mov r0,#al1
		mov a,stat_work
		dec a
		add a,r0
		mov r0,a
		mov a,@r0
		ret

led_jmp:
		mov a,stat_work
		jnz led_al1
		;call led_black
		mov a,stat_led
		call led_t_d
		mov led1,week
		sjmp led_jmp_end
	led_al1:
		acall all1
		mov led1,#f_led
		jnz le_t2
		mov led1,#n_led
	le_t2:
		jb fl_250ms ,le_t4
		mov led1,#blk_led
	le_t4:
		acall al_led
led_jmp_end:
		jmp led
;*************************************
time_24:
		mov a,hour
		acall bcd_8
		mov led2,a
		jnz tim4
		mov led2,#blk_led
	tim4:
		mov led3,b
		jb fl_500ms,tim1
		mov a,b
		add a,#10d
		mov led3,a
	tim1:
		call led_min
time_12_end:
		ret
;***********************************
	led_min:
		mov a,min
		call bcd_8
		jb fl_500ms ,tim2
		add a,#10d
	tim2:
		mov led4,a
		mov led5,b
		ret
;*************************************
date_led:
		;call led_black
		mov a,mon
		acall bcd_8
		mov led2,a
		jnz da1
		mov led2,#blk_led
	da1:
		mov led3,b
		mov a,day
		acall bcd_8
		mov led4,a
		jnz da2
		mov led4,#blk_led
	da2:
		mov led5,b
date_led_end:
		ret

 ;*************
 ; D_8=>BCD
 ;*************
     BCD_8:
		MOV B,#10D
		DIV AB
		RET
;****************************************
LED:
		mov p1,#0
		mov dptr,#led_asc
		mov r0,#led1 ;2001.9.29
	;***************************led1
		mov a,@r0
		movc a,@a+dptr
		mov p1,a
		clr   led_1
		acall timer_1ms
		acall timer_1ms
		;acall timer_1ms
		;acall timer_1ms
		;acall timer_1ms

		setb led_1
	;*************************led2
	led_led2:
		mov a,led2
		movc a,@a+dptr
		mov p1,a
		clr  led_2
		acall timer_1ms
		setb led_2
	;*************************led3
	led_led3:
		mov a,led3
		movc a,@a+dptr
		mov p1,a
		clr   led_3
		acall timer_1ms
		setb led_3
	;*************************led4
	led_led4:
		mov a,led4
		movc a,@a+dptr
		mov p1,a
		clr   led_4
		acall timer_1ms
		setb led_4
	;*************************led5
	led_led5:
		mov a,led5
		movc a,@a+dptr
		mov p1,a
		clr   led_5
		acall timer_1ms
		setb led_5
	;*************************
led_end:
		mov p1,#0
		;mov p1,#0ffh
		;mov a,p3
		;orl a,#01111000b
		;mov p3,a
		ret
;************************************
;		   bafhcdeg
led_asc:
		db 11101110B;0
		db 10001000B;1
		db 11000111B;2
		db 11001101B;3
		db 10101001B;4
		db 01101101B;5
		db 01101111B;6
		db 11001000B;7
		db 11101111B;8
		db 11101101B;9
		db 11111110B;0.   =>10d
		db 10011000B;1.
		db 11010111B;2.
		db 11011101B;3.
		db 10111001B;4.
		db 01111101B;5.
		db 01111111B;6.
		db 11011000B;7.
		db 11111111B;8.
		db 11111101B;9.
		DB   00000000B;BLACK=>20d
		DB   00010000B;dot=>21d
		DB   00100110b;l=>22d
		dB   10101011B;h=>23d
		DB   10101110B;u=>24d
		DB   00100111B;t=>25d
		dB   00101111B;b=>26d
		dB   10001111B;d=>27d

;                    bafhcdeg

;**********************************
;delay
;********************************
timer_1ms:
		mov t_1ms,#050d
	r2_1:
		djnz t_1ms , r2_1
		ret
timer_20ms:
		setb p3.1
		setb p3.2
		mov t_20m,#030d
	r2_2:
		call clock
		call led
		djnz t_20m , r2_2
		call week_auto
		call al_out
ret
;************************************
week_auto:
	mov a,YEAR
	DEC A
	MOV R7,A
	MOV B,#04D
	DIV AB
	;MOV A,B
	ADD A,R7
	MOV R7,A
	MOV DPTR,#MON_ASC
	MOV A,MON
	dec a
	MOVC A,@A+DPTR
	MOV R6,A
	ADD A,R7
	MOV B,DAY
	ADD A,B
	MOV B,#07D
	DIV AB
	MOV R7,B
	MOV A,MON
	CJNE A,#02D,WEEK_1
	SJMP WEEK_2
WEEK_1:
	JC WEEK_2
	MOV A,R6
	mov b,#02d
	mul ab
	MOV B,YEAR
	CJNE A,B,WEEK_2
	INC R7
WEEK_2:
	MOV WEEK,R7
	mov a,week
	jnz week_end
	mov week,#07h
week_end:
	RET
MON_ASC:
	DB 0d, 3d, 3d, 6d, 1d, 4d, 6d, 2d, 5d, 0d, 3d, 5d
;*************************************************************
	clr_ram:
	       MOV R7,#78h       ;
		MOV R0,#0bH       ;
		CLR A             ;
CR:             INC R0            ;
		MOV @R0,A         ;
                djnz r7,cr        ;CLR RAM
		ret
;************** INT_CTRL
int_t0:
		 setb et1
		 MOV TMOD,#00010001b     ;
		mov w_adj,#w_adj_dat
		setb ea
		jmp adj_w
;**********************************************
al_led:
		mov r0,#al1_h
		mov a,stat_work
		dec a
		rl a
		add a,r0
		mov r0,a
		mov a,@r0
		acall bcd_8
		mov led2,a
		jnz al_1
		mov led2,#blk_led
	al_1:
		mov a,b
		add a,#10d
		mov led3,a
		inc r0
		mov a,@r0
		acall bcd_8
		add a,#10d
		mov led4,a
		mov led5,b
al_led_end:
		ret

;****************************
; key_pragm
;****************************
key_bord:
		call re_k
		mov a,key_data
		jz key_bord_end
		call sf_key
key_bord_end:
		ret
;************************************
re_k:
		mov key_data,#00h
		mov p1,#00h
		clr p3.1
		clr p3.2
		jnb key_f ,you_key
re_k_end:
		setb p3.1
		setb p3.2
		setb key_f
		ret
you_key:
		call timer_20ms
		clr p3.1
		clr p3.2
		jb key_f ,re_k_end
you_key1:
	clr p3.1
	setb p3.2
	jb key_f,key_kb
	mov key_data,#02h
	sjmp re_k_end
key_kb:
	clr p3.2
	setb p3.1
	jb key_f,re_k_end
	mov key_data,#01h
	sjmp re_k_end
;*******************************
	sf_a:
		setb key_f
		setb p3.1
		setb p3.2
		call clock
		call week_auto
		call al_out
		call led
		mov p1,#00h
		clr p3.1
		clr p3.2
		ret

sf_key:
		call sf_a
		jnb key_f,sf_key
		jmp sf_beep
sf_beep:
	clr beep_f

	call timer_20ms
	call timer_20ms
	call timer_20ms
	setb beep_f
	ret
;********************************
key_bord1:
		call re_k
		mov a,key_data
		jz key_bord1_end
		acall psf_key0
key_bord1_end:
		ret
psf_key0:
	mov t_30ms,#06h
sf_key2:
	mov t_20ms,#0f0h
sf_key1:
	call sf_a
	jnb key_f,sf_out
	sjmp sf_12
sf_out:
	djnz t_20ms,sf_key1
	djnz t_30ms,sf_key2

⌨️ 快捷键说明

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