⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 max7219程序.txt

📁 7219显示驱动7段数码管程序,希望给与大家方便 学习之用
💻 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 + -