?? 51single-2.asm
字號:
SDA BIT P1.0
CLK BIT P1.1
KDKEY BIT P1.2 ;定義鍵盤檢測位
FRIT EQU P1 ;定義P1口
DBUF0 DATA 40H ;顯示緩沖區首址
DBUF1 DATA 41H
DBUF2 DATA 42H
DBUF3 DATA 43H
DBUF4 DATA 44H
BUF EQU 45H ;存放中間變量
LENTH EQU 05H ;顯示緩沖區長度
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN:
MOV SP,#60H
MOV 30H,#00H
MOV 31H,#0EH
MOV 32H,#10H
MOV 33H,#05H
MOV 34H,#01H
MOV TMOD,#20H ;設置T1為方式2
MOV TH1,#0FDH ;設置波特率為9600
MOV TL1,#0FDH
MOV SCON,#50H ;設置串口位方式1
MOV PCON,#00H
SETB TR1
UP:
MOV R0,#40H
MOV R7,#05H
ACALL RDS ;接受d-51
MOV A,40H
CJNE A,#00H,DPDIS
MOV A,41H
CJNE A,#0DH,DPDIS
MOV A,42H
CJNE A,#10H,DPDIS
MOV A,43H
CJNE A,#05H,DPDIS
MOV A,43H
CJNE A,#01H,DPDIS
MOV 31H,#0DH
MOV 30H,#10H
DPDIS:
MOV R0,#30H
MOV R7,#05H
ACALL SENDU ;發送5個數據
TENDUP:
ACALL DISPLAY
AJMP TENDUP
;串口發送子程序,R7中存放數據個數,數據首地址存放在R0中
SENDU:
MOV A,@R0
MOV SBUF,A
SENDWT:
JBC TI,SENDNEXT
AJMP SENDWT
SENDNEXT:
INC R0
DJNZ R7,SENDU
RET
;串口接受子程序,R7中存放數據個數,接受存放到首地址R0中
RDS:
SETB REN
RDWAIT: JBC RI,RDNEXT
AJMP RDWAIT
RDNEXT: MOV A,SBUF
MOV @R0,A
INC R0
DJNZ R7,RDS
RET
TXDBYTE:
PUSH PSW
PUSH ACC
MOV R3,#08H
TXDUP: RLC A
MOV SDA,C
CLR CLK
SETB CLK
DJNZ R3,TXDUP
POP ACC
POP PSW
RET
DISPLAY:
MOV R2, #7FH ;給位碼初值
MOV R0, #DBUF0 ;給顯示緩沖區首值
ZCQ: MOV A, @R0
LCALL TAB ;查表取段碼
ACALL TXDBYTE ;送段碼輸出
MOV BUF, FRIT
ANL BUF, #07H
MOV A, R2 ;保證不影響其它位送位碼
ORL A, BUF
MOV FRIT, A
LCALL DELAY ;調延時子程序
MOV FRIT,#0FFH
INC R0
MOV A, R2
RR A
MOV R2, A
CJNE R0, #45H, ZCQ;5位顯示完嗎?
MOV R0, #40H
MOV R2, #7FH
MOV FRIT, #0FFH
RET
;延時子程序
DELAY: MOV R7, #50H ;12M時鐘下延時1MS
DELAY0: MOV R6, #10H
DELAY1: DJNZ R6, DELAY1
DJNZ R7, DELAY0
RET
;查表子程序
TAB: INC A ;基地址加一
MOVC A, @A+PC ;查段碼表,取其相應的段碼
RET
DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,80H,090H,088H,083H,0c6H,0a1H,86H,8eH,0bfH,89H,8CH
;(0-9 A-F)共陽段碼表
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -