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

📄 sz605.asm

📁 一个本人编写的时钟程序
💻 ASM
字号:

  LED1        BIT  p1.3  ;4位数码管选通引脚
  LED2        BIT  p1.4
  LED3        BIT  p1.6
  LED4        BIT  p1.7
  LED2DZ      BIT  P1.5  ;小数点

  LS164_AB    BIT  p3.0 ;74LS164数据线
  LS164_CLK   BIT  p3.1 ;74LS164时钟线

  KEY1      BIT  p3.5 ;按键1
  KEY2      BIT  p3.7 ;按键2
  KEYFLAG   EQU  40H

  DISPBUF   EQU  20H
  
  BEEP   BIT  p1.0

  MSCNT  EQU  30H
  

		ORG  0000h
		JMP  START
	        ORG  000Bh
                JMP  TIMER0
                ORG  0100H


START:

CLRDISPBUF: ; 清显示缓冲区
                MOV  R2,#0FH
                MOV  R0,#DISPBUF+1
CLRDISPBUFLOOP:
                MOV  @R0,#0H
                INC  R0
                DJNZ R2,CLRDISPBUFLOOP
                
                MOV      KEYFLAG,#0
                
                MOV  SP,#50H


                MOV DISPBUF+1,#0
                MOV DISPBUF+2,#0
                MOV DISPBUF+3,#2
                MOV DISPBUF+4,#1
                MOV DISPBUF+5,#1
                MOV DISPBUF+6,#0
                MOV DISPBUF+7,#3
                MOV DISPBUF+8,#0
                MOV DISPBUF+9,#2
                MOV DISPBUF+0AH,#0                

                CLR  LS164_AB
	        CLR  LS164_CLK

	 	MOV  TMOD,#01H ; 方式1

	 	MOV  TH0,#0BH  ;初值
           	MOV  TL0,#0DCH
         
	 	SETB TR0
	 	SETB EA
	 	SETB ET0
		MOV  MSCNT,#16H


LOOP:
                 LCALL    KEYINPUT
                 LCALL    DISP
                 JMP   LOOP


TIMER0:
	 	 PUSH  PSW
	 	 PUSH  ACC

		 MOV   TH0,#0BH
		 MOV   TL0,#0DCH
		 MOV   A,MSCNT
		 DEC   A
		 MOV   MSCNT,A
		 JNZ   RET1
                 MOV   MSCNT,#16
                 MOV   R0,#DISPBUF+0AH
                 LCALL DAAD
                 MOV   A,R2
                 XRL   A,#60H
                 JNZ   RET0
                 ACALL CLR0
RET0:
; LCALL DISP

RET1:            POP   ACC
                 POP   PSW
	        RETI

DAAD: ;+1 十进制调整
                MOV	A,@R0
	        SWAP	A
                DEC	R0
	        ORL	A,@R0
	        INC     A
	        DA 	A
	        MOV	R2,A
	        ANL	A,#0Fh
	        MOV	@R0,A
	        MOV	A,R2
	        ANL	A,#0F0h
         	SWAP	A
                INC	R0
	        MOV	@R0,A
                RET
CLR0:
                CLR     A
                MOV     @R0,A
                DEC     R0
                MOV     @R0,A
                RET


; 74LS164芯片工作原理程序
Send74LS164:
		MOV	R1,#8
Send2LS164_Loop:
		RLC  A
	        MOV  LS164_AB,C
	        SETB LS164_CLK
	        CLR  LS164_CLK
	        DJNZ r1,Send2LS164_Loop
                RET

KEYINPUT:

K1:  JB KEY1,K2
     LCALL DELAY20MS

     JNB KEY1,KEYRET
     MOV A,KEYFLAG
    ; LCALL DELAY1000MS
    ; LCALL DELAY1000MS

     ADD A,#3
     MOV KEYFLAG,A
 
     CJNE A,#0FH,KEYRET
     MOV KEYFLAG,#0
     JMP KEYRET

K2:  JB KEY2,KEYRET

     MOV A,KEYFLAG
MONADD1: ; 月加1
     CJNE A,#3,DAYADD1

     JMP KEYRET
DAYADD1: ; 日加1 
     CJNE A,#6,HOURADD1
     JMP KEYRET
HOURADD1: ; 小时加1
     CJNE A,#9,MINADD1
     JMP KEYRET
MINADD1:  ; 分钟加1
     CJNE A,#0CH,K2X
K2X:  ; 显示日期和秒
      
    ; LCALL DELAY1000MS
    ; LCALL DELAY1000MS
     ADD A,#1
     MOV KEYFLAG,A
     CJNE A,#3,KEYRET
     MOV KEYFLAG,#0   
KEYRET:

RET

;显示程序
DISP:      
                MOV    R1,#KEYFLAG
;初始显示 "时间"                
KF0:            CJNE   @R1,#0,KF1

	 	MOV    R0,#DISPBUF+1
	 	MOV    DPTR,#SAG_LED234
		MOV    A,@R0
	 	MOVC   A,@A+DPTR

                LCALL Send74LS164
                LCALL SELECT_LED4
                LCALL DELAY20MS

                MOV    R0,#DISPBUF+2
	 	MOV    DPTR,#SAG_LED234
		MOV    A,@R0
	 	MOVC   A,@A+DPTR

                LCALL Send74LS164
                LCALL SELECT_LED3
                LCALL DELAY20MS

                MOV    R0,#DISPBUF+3
	 	MOV    DPTR,#SAG_LED234
		MOV    A,@R0
	 	MOVC   A,@A+DPTR

                LCALL Send74LS164
                LCALL SELECT_LED2
                LCALL DELAY20MS

                MOV    R0,#DISPBUF+4
	 	MOV    DPTR,#SAG_LED1
		MOV    A,@R0
	 	MOVC   A,@A+DPTR

                LCALL Send74LS164
                LCALL SELECT_LED1
                LCALL DELAY20MS
                AJMP  KFRET
;显示 "日期"               
KF1:            CJNE  @R1,#1,KF2

                MOV    R0,#DISPBUF+5
	 	MOV    DPTR,#SAG_LED234
		MOV    A,@R0
	 	MOVC   A,@A+DPTR

                LCALL Send74LS164
                LCALL SELECT_LED4
                LCALL DELAY20MS

                MOV    R0,#DISPBUF+6
	 	MOV    DPTR,#SAG_LED234
		MOV    A,@R0
	 	MOVC   A,@A+DPTR

                LCALL Send74LS164
                LCALL SELECT_LED3
                LCALL DELAY20MS

                MOV    R0,#DISPBUF+7
	 	MOV    DPTR,#SAG_LED234
		MOV    A,@R0
	 	MOVC   A,@A+DPTR

                LCALL Send74LS164
                LCALL SELECT_LED2
                LCALL DELAY20MS

                MOV    R0,#DISPBUF+8
	 	MOV    DPTR,#SAG_LED1
		MOV    A,@R0
	 	MOVC   A,@A+DPTR

                LCALL Send74LS164
                LCALL SELECT_LED1
                LCALL DELAY20MS
                AJMP  KFRET
;显示 "秒"                
KF2:            CJNE  @R1,#2,KF3

                MOV    R0,#DISPBUF+9
	 	MOV    DPTR,#SAG_LED234
		MOV    A,@R0
	 	MOVC   A,@A+DPTR

                LCALL Send74LS164
                LCALL SELECT_LED4
                LCALL DELAY20MS

                MOV    R0,#DISPBUF+0AH
	 	MOV    DPTR,#SAG_LED234
		MOV    A,@R0
	 	MOVC   A,@A+DPTR

                LCALL Send74LS164
                LCALL SELECT_LED3
                LCALL DELAY20MS
                AJMP  KFRET  
;显示 "月"               
KF3:            CJNE  @R1,#3,KF6

                MOV    R0,#DISPBUF+7
	 	MOV    DPTR,#SAG_LED234
		MOV    A,@R0
	 	MOVC   A,@A+DPTR

                LCALL Send74LS164
                LCALL SELECT_LED2
                LCALL DELAY20MS

                MOV    R0,#DISPBUF+8
	 	MOV    DPTR,#SAG_LED1
		MOV    A,@R0
	 	MOVC   A,@A+DPTR

                LCALL Send74LS164
                LCALL SELECT_LED1
                LCALL DELAY20MS
                AJMP  KFRET
;显示 "日"               
KF6:            CJNE  @R1,#6,KF9

                MOV    R0,#DISPBUF+5
	 	MOV    DPTR,#SAG_LED234
		MOV    A,@R0
	 	MOVC   A,@A+DPTR

                LCALL Send74LS164
                LCALL SELECT_LED4
                LCALL DELAY20MS

                MOV    R0,#DISPBUF+6
	 	MOV    DPTR,#SAG_LED234
		MOV    A,@R0
	 	MOVC   A,@A+DPTR

                LCALL Send74LS164
                LCALL SELECT_LED3
                LCALL DELAY20MS
                AJMP  KFRET
;显示 "小时"                
KF9:            CJNE  @R1,#9,KFC

                MOV    R0,#DISPBUF+3
	 	MOV    DPTR,#SAG_LED234
		MOV    A,@R0
	 	MOVC   A,@A+DPTR

                LCALL Send74LS164
                LCALL SELECT_LED2
                LCALL DELAY20MS

                MOV    R0,#DISPBUF+4
	 	MOV    DPTR,#SAG_LED1
		MOV    A,@R0
	 	MOVC   A,@A+DPTR

                LCALL Send74LS164
                LCALL SELECT_LED1
                LCALL DELAY20MS
                AJMP  KFRET
;显示 "分"                
KFC:            CJNE  @R1,#0CH,KFRET 

                MOV    R0,#DISPBUF+1
	 	MOV    DPTR,#SAG_LED234
		MOV    A,@R0
	 	MOVC   A,@A+DPTR

                LCALL Send74LS164
                LCALL SELECT_LED4
                LCALL DELAY20MS


                MOV    R0,#DISPBUF+2
	 	MOV    DPTR,#SAG_LED234
		MOV    A,@R0
	 	MOVC   A,@A+DPTR

                LCALL Send74LS164
                LCALL SELECT_LED3
                LCALL DELAY20MS
KFRET:
                RET


SELECT_LED1:;选通数码管1
CLR   LED1
SETB  LED2
SETB  LED3
SETB  LED4
RET

SELECT_LED2:;选通数码管1
CLR   LED2
SETB  LED1
SETB  LED3
SETB  LED4
RET

SELECT_LED3:;选通数码管1
CLR   LED3
SETB  LED1
SETB  LED2
SETB  LED4
RET

SELECT_LED4:;选通数码管1
CLR   LED4
SETB  LED1
SETB  LED2
SETB  LED3
RET

DELAY20MS:  ;延时20毫秒
MOV R7,#7
D51: MOV R6,#200 
D52:
NOP
NOP
NOP
NOP
NOP
DJNZ R6,D52
DJNZ R7,D51
RET

DELAY1000MS:  ;延时1000毫秒
MOV R7,#1000
D53: MOV R6,#200
D54:
NOP
NOP
NOP
NOP
NOP
DJNZ R6,D54
DJNZ R7,D53
RET

DELAY500US:
            MOV       R6,#250
            DJNZ      R6,$
            RET
            
SAG_LED1: ;LED1段码
DB  01010000b,11111001b,00110100b,10110000b,10011001b,10010010b,00010010b,11111000b,00010000b,10010000b,0ffh
SAG_LED234: ;LED234段码
DB  11000000b,11111001b,10100100b,10110000b,10011001b,10010010b,10000010b,11111000b,10000000b,10010000b,0ffh
  ;  0         1         2         3         4         5         6         7         8         9
TABLE_extra:
DB  11111110B,11111101B,11111011B,11110111B,11101111B,11011111B,10111111B,0h,0ffh,0ffh,0ffh
               END

⌨️ 快捷键说明

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