在MCS51多功能实验板制作电子钟(汇编代码) | 太极博弈原理官方站|紫欽天|融通百科为我所用|生活全智慧|生活智慧之书

正在阅读:

在MCS51多功能实验板制作电子钟(汇编代码)

907

;电路介绍:由于实验板只有4位数码显示器,因此规定个位、十位显示秒信号;百位、千位显示分信号;p0口;的前四位和后四位LED显示时信号。
; doudou1013  2003/7/30编写
xsdat bit p1.4    
xsclk bit p1.5    ;74164的时钟
gw    bit p1.0    ;个位显示控制脚
sw    bit p1.1    ;十位
bw    bit p1.2    ;百位
qw    bit p1.3    ;千位
sjgw  equ 79h     ;显示数据存储器
sjsw  equ 7Ah
sjbw  equ 7Bh
sjqw  equ 7Ch
sjww  equ 7dh
ssww  equ 7eh
ORG 0000H
START: AJMP MAIN
org 0bh
ajmp PIT0     ;转向中断服务程序
ORG 30H
MAIN: MOV SP,#60H ;初始化
      mov p1,#0fh
      mov p0,#0ffh      
      MOV R0,#79H
      MOV R7,#06H

ML1: MOV @R0, #00H ;显示数据存储器清零
     INC R0
     DJNZ R7,ML1
     MOV TMOD,#01H
     MOV TL0,#0B0H
     MOV TH0,#3CH
     SETB TR0
     SETB EA
     SETB ET0
     MOV 30H,#14H
ML0: LCALL DISPLAY ;驱动4位共阴数码管
     SJMP ML0

PIT0: PUSH PSW  ;中断服务程序
      PUSH ACC
      SETB PSW.3
      MOV TL0,#0B0H
      MOV TH0,#3CH
      MOV A,30H
      DEC A
      MOV 30H,A
      JNZ RET0
      MOV 30H,#14H
      MOV R0,#7AH
      ACALL DAAD1
      MOV A,R2
      XRL A,#60H
      JNZ RET0
      ACALL CLR0
      MOV R0,#7CH
      ACALL DAAD1
      MOV A,R2
      XRL A,#60H
      JNZ RET0
      ACALL CLR0
      MOV R0,#7EH
      ACALL DAAD1
      MOV A,R2
      XRL A,#24H
      JNZ RET0
      ACALL CLR0
LJMP MAIN
RET0: POP ACC  ;中断返回
      POP PSW
      RETI
DAAD1: MOV A,@R0 ;加一程序
       DEC R0
       SWAP A
       ORL A,@R0
       ADD A,#01H
       DA A
       MOV R2,A
       ANL A,#0FH
       MOV @R0,A
       MOV A,R2
       INC R0
       ANL A,#0F0H
       SWAP A
       MOV @R0,A
       RET
CLR0: CLR A  ;清零程序
      MOV @R0,A
      DEC R0
      MOV @R0,A
      RET
;****************************************
;显示部分
display:  PUSH ACC             ;保存ACC
          push psw
          clr rs1
          setb rs0             ;使用第一区工作寄存器 
          mov dptr,#xstab    
          mov a,sjgw           ;取得数据
          movc a,@a+dptr       ;提取字模
          acall dsout          ;调用送出子程序
         clr gw
          acall ds1ms          ;调用显示1ms延时程序
         setb gw
          mov a,sjsw
          movc a,@a+dptr        ;提取字模
          acall dsout          ;送出
         clr sw
          acall ds1ms          ;显示1ms  
         setb sw        
          mov a,sjbw
          movc a,@a+dptr        ;提取字模
          acall dsout          ;送出
         clr bw
          acall ds1ms          ;显示1ms 
         setb bw 
          mov a,sjqw
          movc a,@a+dptr        ;提取字模
          acall dsout          ;送出
         clr qw
          acall ds1ms          ;显示1ms
         setb qw
         mov r0,sjww
         mov a,ssww
         swap a
         orl a,r0
         cpl a
         mov p0,a
          pop psw
          POP ACC              ;出栈
          ret                  ;返回调用
  ;---送出循环----------
dsout:    
          MOV R0,#8            ;传送一个字节8位
dSLOOP:   RLC A                ;右移
          MOV xsdat,C          ;送数据到数据口
          SETB xsclk           ;送一时钟
          CLR xsclk
          DJNZ R0,dSLOOP
          RET         
   ;---显示延时---------- 
ds1ms:    mov r1,#10
ds1lo:    mov r2,#100
          djnz r2,$
          djnz r1,ds1lo
          ret                  ;延时返回
;************************************************************************
;显示字表(共阴)
xstab:    DB  3FH,06H,5BH,4FH    ;"0","1","2","3"
          DB  66H,6DH,7DH,07H    ;"4","5","6","7"
          DB  7FH,6FH,77H,7cH    ;"8","9","A","B" 
          DB  39H,5eh,79h,71h    ;"C","D","E","F"

end

抱歉,这篇文章关闭了评论功能。

关闭