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

📄 556.asm

📁 应用单片机设计一个电子钟
💻 ASM
字号:
a_bit equ 20h        
b_bit equ 21h        
c_bit equ 22h
d_bit equ 23h
temp1 equ 24h          
temp2 equ 25h
org 0000h
ljmp main
org 001bh
ajmp intt1
;org 0013h
;ajmp intr1
org 0100h
main:  	mov temp1,#0   
        mov temp2,#0
        mov tmod,#10h ;用定时器1,其中断优先级比外部中断1低	
        mov th1,#3ch  ;工作模式1,定时50ms
        mov  tl1,#0b0h				
        setb tr1
        setb et1
	    ;clr  it1   ;外部中断1触发方式,电平触发
	    ;setb ex1
        setb ea
        mov  r3,#6  ;r3,r4定时器两重循环,定时60s
        mov  r4,#153		
stlop:  jnb p2.3,intr11
		lcall display
        mov a,temp1
        cjne a,#60,next 
        mov temp1,#0
    	inc temp2
        clr p3.7  ;整点报时
    	acall delay
        setb p3.7
	    mov a,temp2
       	cjne a,#24,next
       	mov temp1,#0
        mov temp2,#0
next:   ljmp stlop
intr11: clr p1.6
        lcall delay
		setb p1.6
	    ljmp intr1

;显示子程序
display: cpl p1.0
         mov a,temp1  ;将temp1中的十六进制数转换成10进制 
         mov b,#10   ;10进制/10=10进制
         div ab
         mov b_bit,a ;十位在a
         mov a_bit,b ;个位在b
         mov a,temp2   
         mov b,#10   
         div ab
         mov d_bit,a 
         mov c_bit,b
         mov dptr,#numtab ;指定查表启始地址
         mov r0,#4
dpl1:    mov r1,#250 ;显示1000次
dplop:   mov a,a_bit ;取个位数
         MOVC A,@A+DPTR ;查个位数的7段代码
         mov p0,a ;送出个位的7段代码
         clr p2.4 ;开个位显示
         acall d1ms ;显示1ms
         setb p2.4
         mov a,b_bit ;取十位数
         MOVC A,@A+DPTR ;查十位数的7段代码
         mov p0,a ;送出十位的7段代码
         clr p2.5 ;开十位显示
         acall d1ms ;显示1ms
         setb p2.5
         mov a,c_bit
         movc A,@A+DPTR
         mov p0,a
         clr p2.6
         mov c,p1.0  ;把p1.0的状态送到p0.7,使小数点闪烁
         mov p0.7,c
         acall d1ms
         setb p2.6
         mov a,d_bit
         movc A,@A+DPTR
         mov p0,a
	     clr p2.7														  
         acall d1ms
         setb p2.7
         djnz r1,dplop 
         djnz r0,dpl1 
         ret
;1MS延时(按12MHZ算)
;====================================================
D1MS: MOV R7,#80 
      DJNZ R7,$
      RET
DELAY:
        MOV R5,#1
    L3: MOV R2 ,#250
    L1: MOV R6 ,#250										   
    L2: DJNZ R6 ,L2
        DJNZ R2 ,L1
        DJNZ R5 ,L3
        RET
intt1:mov tl0,#0b0h  ;定时器1中断服务程序
      mov th0,#3ch   ;重新赋定时器初值
      djnz r4,a2     
      djnz r3,a1     ;定时60s		
      mov  r3,#6     ;重新赋循环初值
      mov  r4,#153									 
      inc  temp1     ;分钟加1
a2:   reti											    
a1:   mov r4,#153						 
      ajmp a2
intr1:clr tr1
      mov tl1,#0
	  mov th0,#0
      mov temp1,#0  ;外部中断1服务程序,分钟清0    
      mov temp2,#0  ;小时清0
b1:   acall display ;调用显示程序
      jnb p2.2,b4   ;当p2.2键按下为0时,退出中断服务程序
      jnb p2.0,b2   ;当p2.0键按下为0时,小时加1
      jnb p2.1,b3   ;当p2.1按下时,分钟加1
      ajmp b1       ;当没按下p2.0,p2.1,p2.2键时,循环查询按键
b2:   inc temp2     ;小时加1
      mov a,temp2
      cjne a,#24,b1 ;调到24小时,清0
      mov temp2,#0
      ajmp b1       ;循环查询按键
b3:   inc temp1     ;分钟加1
      mov a,temp1
      cjne a,#60,b1 ;调到60分钟,清0
      mov temp1,#0
      ajmp b1       ;循环查询按键
b4:   clr p1.7      ;当p2.2键按下时,p1.7灯亮,退出中断服务程序
      acall delay
      setb p1.7
	  mov tl1,#0b0h
	  mov th1,#3ch
	  setb tr1
      ljmp stlop
	  ;reti
;7段数码管各划的数字排列表
numtab: DB        0C0H;0
        DB        0F9H;1
        DB        0A4H;2
        DB        0B0H;3
        DB        099H;4
        DB        092H;5
        DB        082H;6
        DB        0F8H;7
        DB        080H;8
        DB        090H;9

end

⌨️ 快捷键说明

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