3个595控制8X8点阵,一个595接公共端,另两个595级联控制双 {MOD},红。绿,下面附有
电路图
程序带有一定解释
SC1 BIT P1.2 //hang
CLK1 BIT P1.1
SEN1 BIT P1.0
SC2 BIT P2.2 //lie
CLK2 BIT P2.1
SEN2 BIT P2.0
ORG 0000H
AJMP START
NOP
ORG 0030H
MAIN: MOV R0,#00H
MOV R1,#08H
MOV R2,#80H ;第一行地址
MOV R3,#08H ;移八次
MOV R4,#00H
MOV R5,#00H
START: LCALL LIE ;调列
LCALL HANG ;调行
LCALL DIS ;调显示
DJNZ R1,CL ;处理程序
MOV R1,#08H
MOV R0,#00H
MOV R2,#80H
AJMP START
CL: MOV A,R2
RR A //第一行一列送完送第2行2列
MOV R2,A
INC R0
AJMP START
LIE: MOV 30H,R2 //把第一列的数值送个30
CLR C
LIE1: MOV R4,30H //把送来的列地址,通过八次以为移入锁存器中
MOV A,R4
RLC A
MOV R4,A
MOV SEN2,C
CLR CLK2
NOP
SETB CLK2
DJNZ R3,LIE1
MOV R4,#00H
MOV R3,#10H //双 {MOD}点阵,移位行时得移2字节16位(一个移给红 {MOD}595,一个移给绿 {MOD}595)
RET
HANG: CLR C
MOV DPTR,#TAB
MOV A,@R0 //把行显示给R5
MOVC A,@A+DPTR
MOV R5,A
HANG1: MOV A,R5
RLC A
MOV R5,A
MOV SEN1,C
CLR CLK1
NOP
SETB CLK1
CJNE R3,#08H,HANG2 //判断可移完八次,没用转回移完第一字节
INC R0 //以为,Inc R0,移第二字节,
HANG2: DJNZ R3,HANG1
MOV R5,#00H
MOV R3,#08H
RET
DIS: CLR SC2
NOP
SETB SC2
CLR SC1 //开锁存,输出行列数据
NOP
SETB SC1
LCALL DEL
RET
DEL: MOV R7,#10
DEL1: MOV R6,#100
DJNZ R6,$
DJNZ R7,DEL1
RET
TAB: DB 00H,00H,00H,6CH,00H,92H,00H,82H,00H,44H,00H,28H,00H,10H
END
-
编译通过,没有电路板测试。可能有多少错误,自己调整吧
;----------移八次把行地址移入595中锁存
OUTCLK1 MACRO ;移八次把行地址移入595中锁存
SETB CLK1 ;移八次把行地址移入595中锁存
NOP
CLR CLK1
ENDM
;----------;移八次把L列数据移入595中锁存
OUTCLK2 MACRO ;移八次把L列数据移入595中锁存
SETB CLK2
NOP
CLR CLK2
ENDM
;---------------输出行
H_OUT MACRO
SETB SC1
NOP
CLR SC1
ENDM
;---------------输出列
L_OUT MACRO
SETB SC2
NOP
CLR SC2
ENDM
SC1 BIT P1.2 //锁存
CLK1 BIT P1.1 //时钟脉冲
SEN1 BIT P1.0 //数据输入
SC2 BIT P2.2 //锁存
CLK2 BIT P2.1 //时钟脉冲
SEN2 BIT P2.0 //数据输入
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: LCALL DEL
LCALL DEL
MAIN1: MOV DPTR,#TAB
MOV R3,#08
LOOP: LCALL LLB
INC DPTR
LCALL LLR
L_OUT//输出列
LCALL HHH
DJNZ R3,LOOP
AJMP MAIN1
;------扫描输出8行
HHH: SETB SEN1 //输出第一个1
OUTCLK1 ;移八次把行地址移入595中锁存
H_OUT//输出行
MOV R2,#08H ;移八次
HH1:
LCALL DEL ;每一行停留一下
CLR SEN1 //连续输出8个0 .最后一个是关闭行
OUTCLK1 ;移八次把行地址移入595中锁存
H_OUT//输出行
DJNZ R2,HH1
RET
;------输出绿列
LLB: CLR A
MOVC A,@A+DPTR
LCALL LL
RET
;------输出红列
LLR: MOV A,#0FFH
LCALL LL
RET
;------输出列的一个字节
LL: MOV R2,#08H
LL1:MOV C,ACC.7
MOV SEN2,C
OUTCLK2 ;移八次把L列数据移入595中锁存
RL A
DJNZ R2,LL1
RET
;------延时子程序
DEL: MOV R7,#10
DEL1: MOV R6,#10
DJNZ R6,$
DJNZ R7,DEL1
RET
TAB: DB ~00H,~6CH,~92H,~82H,~44H,~28H,~10H,~00H
END
一周热门 更多>