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

📄 disp.asm

📁 c8051f31x系列芯片控制7段数码管显示的驱动程序
💻 ASM
字号:
$INCLUDE(C8051F020.INC)
BIT_COUNT DATA 07FH
TIMER     DATA 07EH
TIMER1    DATA 07DH
TEN       DATA 07CH
DATA_IN   DATA 020H
DATA_OUT  DATA 021H

CLK BIT  P1.6
DAT BIT  P1.7
           ORG 0000H
					 JMP START
					 ORG 0100H
START:      mov   WDTCN, #0deh            ; disable watchdog timer
            mov   WDTCN, #0adh
            mov   OSCXCN, #67h            ; enable external crystal
                                          ; oscillator at 22.1184MHz

            clr   A                       ; wait at least 1ms 
            djnz  acc, $                  ;  wait ~512us
            djnz  acc, $                  ;  wait ~512us

osc_wait:                                 ; poll for XTLVLD-->1
            mov   a, OSCXCN
            jnb   acc.7, osc_wait

            orl   OSCICN, #08h            ; select external oscillator as 
                                          ; system clock source
            orl   OSCXCN, #80h            ; enable missing clock detector

CP1INIT: 	mov CPT1CN, #080h	  ; Comparator 1 Control Register
          mov A, #010h          ;CPT1CN          djnz ACC, $           ;CPT1CN wait at least 20us          anl CPT1CN, #not(30h)
          mov EIP1, #040h
					MOV TIMER,#50
PORTINIT:mov XBR2, #044h
         mov P0MDOUT, #001h 
DELAY0:  MOV TIMER1,#255
DELAY1:  DJNZ TIMER1,DELAY1
         DJNZ TIMER,DELAY0
				 ANL P5,#00H
				 MOV DATA_OUT,#10100100B
				 CALL SEND
				 MOV R0,#11001000B
				 MOV R1,#00000000B
				 MOV R7,#16
DISPLAY: MOV DATA_OUT,R0      ;在第一个数码管上显示0~F
				 CALL SEND
				 //CALL SHORT_DELAY
				 MOV DATA_OUT,R1
				 CALL SEND
				 //INC R0
				 INC R1
				 CALL DELAY1S
				 DJNZ R7,DISPLAY
				 MOV R7,#5
MOVLEFT:CALL DELAY1S            ;将F移到左端
        MOV DATA_OUT,#10100001B
				CALL SEND
				DJNZ R7,MOVLEFT
				MOV R7,#5
MOVRIGHT:CALL DELAY1S           ;将F移到可端
         MOV DATA_OUT,#10100000B
				 CALL SEND
				 DJNZ R7,MOVRIGHT
BLINKY:CALL DELAY1S              ;使F闪烁显示
       MOV DATA_OUT,#10001000B
       CALL SEND
			 MOV DATA_OUT,#11111110B
			 CALL SEND
HERE:AJMP  HERE       
SEND: MOV BIT_COUNT,#8         ;发送字符子程序
      ANL P5,#00H
      CALL LONG_DELAY
SEND_LOOP:MOV C,DATA_OUT.7
          MOV DAT,C
          SETB CLK
          MOV A,DATA_OUT
          RL A
          MOV DATA_OUT,A
          CALL SHORT_DELAY
          CLR CLK
          CALL SHORT_DELAY
          DJNZ BIT_COUNT,SEND_LOOP
          CLR DAT
          RET
RECEIVE:MOV BIT_COUNT,#8         ;接收字符子程序
        SETB DAT
				CALL LONG_DELAY
RECEIVE_LOOP:SETB CLK              
             CALL LONG_DELAY
						 MOV A,DATA_IN
						 RL A
						 MOV DATA_IN,A
						 MOV C,DAT
						 MOV DATA_IN.0,C
						 CLR CLK
						 CALL SHORT_DELAY
						 DJNZ BIT_COUNT,RECEIVE_LOOP
						 CLR DAT
						 RET
LONG_DELAY:  MOV TIMER,#150         ;延时约200US
DELAY_LOOP:  DJNZ TIMER,DELAY_LOOP
             RET
SHORT_DELAY: MOV TIMER,#20          ;延时约20US
SHORT_LP:    DJNZ TIMER,SHORT_LP
             RET
DELAY1S:	  MOV TIMER,#200          ;延时约1S 
DELAY10:    MOV TIMER1,#20
              
DELAY11:  	CLR A
						DJNZ ACC,$
						DJNZ ACC,$
							 
						DJNZ TIMER1,DELAY11
						DJNZ TIMER,DELAY10
            RET
				    END

⌨️ 快捷键说明

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