📄 max7219程序.txt
字号:
汇编语言
CLK CONNECT P1.1
LAOD CONNECT P1.2
DIN CINNECT P1.0
ADDRESS 42H
DATA 43H
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN: CALL FIR
MOV 42H,#3 ;在第三个数码管显示9
MOV 43H,#9
LCALL WRIT
SJMP $
FIR: ;显示初始化
MOV 42H,#0CH ;开显示器
MOV 43H,#01H
LCALL WRIT
MOV 42H,#0BH ;位数控制
MOV 43H,#07H ;显示8个数码管
LCALL WRIT
MOV 42H,#0AH ;亮度控制
MOV 43H,#0FAH
LCALL WRIT
MOV 42H,#09H ;译码方式
MOV 43H,#0FFH
LCALL WRIT
RET
WRIT: ;发送16BIT子程序
CLR LAOD
NOP
MOV R2,#08
MOV A,42H
T—1: SETB CLK
RLC A
MOV DIN,C
NOP
CLR CLK
DJNZ R2,T—1
MOV R2,#08H
MOV A,43H
T—2: SETB CLK
RLC A
MOV DIN,C
NOP
CLR CLK
DJNZ R2,T—2:
SETB CLK
SETB LOAD
RET
C语言:
#inciude <reg52.h>
#inciude <stdio.h>
sbit DIN=P1^0; //定义I/O口
sbit CLK=P1^1;
sbit LOAD=P1^2;
void send(unsigned char add,unsigned char dat) //发送16字节函数
{
unsigned char ADS,i,j;
LOAD=0;
i=0;
while(i<16)
{
if(i<8)ADS=add;
else
ADS=dat;
for(j=8;j>=1;j--)
{ //CLK=1;
DIN=ADS&0X80;
ADS=ADS<<1;
CLK=1;
CLK=0;
}
i=i+8;
}
LOAD=1;
}
main()
{
send(0x0c,0x01); //初始化MAX7219
send(0x0b,0x07);
send(0x0a,0x0f5);
send(0x09,0x0ff);
while(1)
{
send(0x01,0x81); //在8个数码管上显示1-8,带小数点显示
send(0x02,0x82);
send(0x03,0x83);
send(0x04,0x84);
send(0x05,0x85);
send(0x06,0x86);
send(0x07,0x87);
send(0x08,0x88);
}
}
ORG 0000H
SJMP MAIN
ORG 000BH
NOP
NOP
SJMP MAIN
MAIN:
MOV 20H,#00H
LCALL INIT_1302
LCALL INIT_7219
LCALL READ_1302
LCALL DISP
SJMP $
INIT_7219:
CLR P1.1
CLR P1.2
CLR P1.3
MOV A,#0CH
MOV B,#00H
LCALL INPUT
MOV A,#09H
MOV B,#0FFH
LCALL INPUT
MOV A,#0BH
MOV B,#07H
LCALL INPUT
MOV A,#0AH
MOV B,#0FH
LCALL INPUT
MOV A,#0FH
MOV B,#00H
LCALL INPUT
MOV A,#0CH
MOV B,#01H
LCALL INPUT
RET
INIT_1302:
MOV 68H,#01H
MOV 67H,#01H
MOV 66H,#01H
MOV 65H,#01H
MOV 64H,#01H
MOV 63H,#01H
MOV 62H,301H
MOV 61H,#00H
RET
WRITE_1302:
CLR P1.6
SETB P1.5
MOV A,#8EH
LCALL WRITE_BYTE
MOV A,#00H
LCALL WRITE_BYTE
CLR P1.5
CLR P1.6
CLR P1.6
CLR P1.5
MOV A,#0BEH
LCALL WRITE_BYTE
MOV R0,#68H
MOV R2,#08H
WRITE_LOOP:
MOV A,@R0
LCALL WRITE_BYTE
DEC R0
DJNZ R2,WRITE_LOOP
CLR P1.6
CLR P1.5
RET
WRITE_BYTE:
MOV R1,#08H
WRITE_LOOP2:
CLR P1.6
RRC A
MOV P1.7,C
SETB P1.6
DJNZ R1,WRITE_LOOP2
RET
READ_1302:
CLR P1.6
SETB P1.5
MOV A,#0FBH
LCALL WRITE_BYTE
MOV R0,#6FH
MOV R2,#08H
SETB P1.7
READ_LOOP:
LCALL READ_BYTE
DEC R0
DJNZ R2,READ_LOOP
CLR P1.6
CLR P1.5
RET
READ_BYTE:
MOV R1,#08H
READ_LOOP2:
CLR P1.6
MOV A,@R0
MOV C,P1.7
RRC A
MOV @R0,A
SETB P1.6
DJNZ R1,READ_LOOP2
RET
DISP: MOV 20H,#01H
MOV R3,#6FH
MOV R4,#20H
MOV R1,#08H
DISP_LOOP:
MOV A,@R4
MOV B,@R3
LCALL INPUT
DEC R3
INC R4
DJNZ R1,DISP_LOOP
MOV 20H,#00H
SETB P1.3
RET
INPUT:
LCALL INPUTA
LCALL INPUTB
SETB P1.2
NOP
NOP
CLR P1.2
RET
INPUTA:
MOV R0,#08H
INPUT1:RLC A
JNC INLOW
SETB P1.0
NOP
INPUT2:
SETB P1.1
NOP
CLR P1.1
DJNZ R0,INPUT1
RET
INLOW:CLR P1.0
SJMP INPUT2
INPUTB:
MOV A,B
SJMP INPUTA
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -