📄 pcf8574led.#3
字号:
;实验程序A:PCF8574LED。ASM PCF8574控制6位数码显示
;显示子程序 : 在六个数码管上显示数据。数值在71H ~ 76H之中。不用键盘。
SLA1W EQU 70H ;PCF8574 A片写的节点地址 (可选地址开关:000H)
SLA1R EQU 71H ;PCF8574 A片读的节点地址
SLA2W EQU 72H ;PCF8574 B片写的节点地址 (可选地址开关:001H )
SLA2R EQU 73H ;PCF8574 B片读的节点地址
SLA3W EQU 76H ;PCF8574 C片写的节点地址 (可选地址开关:011H)
SLA3R EQU 77H ;PCF8574 C片读的节点地址
SLA EQU 60H
SLAW EQU 62H
SLAR EQU 63H
NUMBYT EQU 61H ;被传送的字节数存放单元
MTD EQU 20H ;发送数据缓冲区首地址
MRD EQU 30H ;接收字节缓冲区首地址
VSCL EQU P0.1 ;模拟I2C总线时钟线
VSDA EQU P0.0 ;模拟I2C总线数据线
ORG 00H
AJMP START
ORG 0030H
START: MOV SP,#7H ;堆栈地址
MOV WDTCN,#0DEH ;禁止看门狗定时器
MOV WDTCN,#0ADH;
MOV XBR2,#40H ;C8051F交叉开关使能
ACALL SEND ;传送子程序,在RAM71H-76H中分别存入1,2,3,4,5,6
DD: ACALL DISP ; 显示六位数字:'1', '2', '3', '4,' '5', '6'
AJMP DD
;显示子程序:显示固定存储区(即CPU RAM 71H~76H)中存放的数值
DISP: MOV R2,#01H ; 字位码在R2中,(R2)= #1,#2,#4,#8
MOV R5,#6 ;显示6个数。
MOV R0,#71H ;71H为数据区首地址
DSP1: MOV A,R2
ACALL WRITEB ;B口输出作为六位数码管的位选
MOV A,@R0 ;将要显示的数值送入A中
DSP2: MOV DPTR,#BCD ;查表
MOVC A,@A+DPTR ;查表,查出要显示的数值的字形码
ACALL WRITEC ;C口输出字形码
ACALL DEL0 ;延时
MOV A,R2
RL A
MOV R2,A ; 字位码指向下一位
INC R0 ;准备显示下一位
DJNZ 次 R5, DSP1
RET
BCD: 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
DB 73H,3EH,31H,6EH ;P,U,Z,Y
DB 40H,00H ;- ,灭
DEL0: MOV R6,#00H ;延时子程序
TM: MOV R7,#01
DJNZ R7,$
DJNZ R6,TM
RET
;传送子程序, 在RAM 71H-76H中分别存入六位数字:'1', '2', '3', '4,' '5', '6'
SEND: MOV R7,#6
MOV R0, #71H
MOV A,#1
SS: MOV @R0,A
INC A
INC R0
DJNZ R7,SS
RET
WRITEB: MOV SLAW,#SLA2W ;将数据送器件B
MOV SLAR,#SLA2R
ACALL WRBC
RET
WRITEC: MOV SLAW,#SLA3W ;将数据送器件C
MOV SLAR,#SLA3R
ACALL WRBC
RET
WRBC: MOV MTD,A
MOV SLA,SLAW
MOV NUMBYT,#1
LCALL WRNBYT
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -