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

📄 哈哈终于完成了带闹钟的电子钟程序.txt

📁 平时使用单片机的时候所得到的一些心得和一些实用小程序
💻 TXT
字号:
org 0000h
ajmp start
org 000bh
ajmp time0
org 0040h
start:		mov tmod,#00000001b
		mov th0,#0f1h
		mov tl0,#0a4h
		setb ea
		setb et0
		setb tr0
		/*以上是为定时器工作做的设定工作*/
a_m equ 20h
b_m equ 21h
a_h equ 23h
b_h equ 24h
temp equ 25h
temp2 equ 26h
s_bit equ 27h
temp01 equ 28h//定时分钟
temp21 equ 29h//定时小时
     mov s_bit,#0ffh
     mov temp,#0
     mov temp2,#0
	  mov temp01,#0
	  mov temp21,#0
     mov r4,#0//关定时开关
mov 32h,#0
mov 33h,#0
mov 30h,#0
mov 31h,#0
mov r0,#0
mov r1,#0
mov p3,#0ffh
stlop:acall disply

mov a,r0

cjne a,#60,dsp  //60秒到了加一分钟   

inc temp
mov r0,#0
dsp:mov a,temp
		
		cjne a,#60,next//60分钟重计数
		inc temp2

		mov temp,#0
      
next: push acc
dsp2:mov a,temp2
cjne a,#24,next2
mov temp2,#0
 next2:pop acc//调时调分
jb p3.2,th
lcall d10ms
jb p3.2,th
inc temp
lcall d1ms
th:jb p3.4,th2
lcall d10ms
jb p3.4,th2
inc temp2
lcall d1ms
th2:jb p3.3,th3
lcall d10ms
jb p3.3,th3
mov a,temp
jz th3//为0跳转
dec temp
lcall d1ms

th3:jb p3.5,th4
lcall d10ms
jb p3.5,th4
lcall out
th4:jb p1.0,th42//不等于0跳转,检查闹铃铃是否开
ljmp stlop
th42:push acc
clr p1.2 //闹铃开指示灯
mov a,temp
cjne a,temp01,up//分钟和定时的分钟相比
mov a,temp2
cjne a,temp21,up
clr p2.1//开闹铃
up:pop acc
ljmp stlop



disply:mov a,temp
mov b,#10
div ab
mov b_m,a
mov a_m,b
mov dptr,#nemtab
dplop:mov a,a_m
movc a,@a+dptr
mov p0,a//送显示
clr p2.2
acall d1ms
setb p2.2

mov a,b_m
movc a,@a+dptr
mov p0,a
clr p2.3
acall d1ms
setb p2.3


/*      分钟完                       */

push acc
push b

mov a,temp2
mov b,#10
div ab
mov b_h,a
mov a_h,b
mov dptr,#nemtab
mov a,a_h
movc a,@a+dptr
mov p0,a//送显示
clr p2.4
acall d1ms
setb p2.4

mov a,b_h
movc a,@a+dptr
mov p0,a
clr p2.5
acall d1ms
setb p2.5


pop b
pop acc

/*小时显示完毕,以下是闪点显示*/
push acc
push b

mov a,s_bit
mov p0,a//送显示
clr p2.4
acall d1ms
setb p2.4
pop b
pop acc

ret

/*小时完*/

out:/*调定时部分*/
mov p3,#0ffh//定时子程序部分
acall disply2
next5:
jb p3.2,th5
lcall d10ms
jb p3.2,th5
inc temp01
lcall d1ms
mov a,temp01
cjne a,#60,th5//不等于60跳转
mov temp01,#00h
th5:jb p3.4,th6
lcall d10ms
jb p3.4,th6
inc temp21
lcall d1ms
mov a,temp21
cjne a,#24,th6
mov temp21,#00h
th6:jb p3.3,th7
lcall d10ms
jb p3.3,th7
setb p2.1//消闹铃
cpl p1.0
nop
th7:jb p3.5,th8
lcall d10ms
jb p3.5,th8
ret
th8: 
mov a,r0//检查时钟情况,防止溢出

cjne a,#60,dsp1 
inc temp
mov r0,#0
dsp1:mov a,temp
		
		cjne a,#60,next1//60分钟重计数
		inc temp2

		mov temp,#0
      
next1: push acc
dsp21:mov a,temp21
cjne a,#24,next21
mov temp21,#0
 next21:pop acc
ajmp out






disply2:push acc
mov a,temp01//定时部分显示程序
mov b,#10
div ab
mov b_m,a
mov a_m,b
mov dptr,#nemtab
dplop5:mov a,a_m
movc a,@a+dptr
mov p0,a//送显示
clr p2.2
acall d1ms
setb p2.2

mov a,b_m
movc a,@a+dptr
mov p0,a
clr p2.3
acall d1ms
setb p2.3

pop acc
/*      分钟完                       */

push acc
push b

mov a,temp21
mov b,#10
div ab
mov b_h,a
mov a_h,b
mov dptr,#nemtab
mov a,a_h
movc a,@a+dptr
mov p0,a//送显示
clr p2.4
acall d1ms
setb p2.4

mov a,b_h
movc a,@a+dptr
mov p0,a
clr p2.5
acall d1ms
setb p2.5


pop b
pop acc

/*小时显示完毕,以下是闪点显示*/
push acc
push b

mov a,#07fh
mov p0,a//送显示
clr p2.4
acall d1ms
setb p2.4
pop b
pop acc

ret



d1ms:mov r7,#10
d1:mov r6,#200
d2:djnz r6,$
djnz r7,d1
ret


d10ms:mov r7,#200
d3:mov r6,#200
d4:djnz r6,$
djnz r7,d3
ret

time0:
push acc
push psw
inc 30h
inc 31h
mov a,30h
cjne a,#249,tnext//计到250个4MS秒加1,时间不准可调这里
inc r0
mov 30h,#0
mov 32h,#0
setb p1.2//关闹铃指示灯

/*以上是处理分钟的,下面处理闪点的*/
tnext:mov a,31h
cjne a,#125,tnext2
cpl s_bit.7
mov 31h,#0
mov 33h,#0
mov 34h,#0


tnext2:mov th0,#0f1h
       mov tl0,#0a4h
		 pop psw
		 pop acc
		 reti


		 


nemtab:db 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

end
/*按扭1调分钟加,按扭2调分钟减,按扭3调小时加,按扭4进入闹铃设定子程序.
进入子程序后按扭1调分钟加,按钮2设置闹铃的天与关,P1.0亮表示闹铃关,灭表示
闹铃开,P1.2指示灯闪亮表示闹铃正在工作中.按扭3调小时加,按扭4退出子程序*/

⌨️ 快捷键说明

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