📄 disp.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 + -