Programming and Testing of 51 Single Chip Microcomputer MAX7219

#include“reg52.h”

#include “intrins.h”

#define byte unsigned char

//#define N_NOP _nop_();//_nop_();_nop_();

///////////////////////////////////////////////// /////

//MAX7219

///////////////////////////////////////////////// //////////////////

Programming and Testing of 51 Single Chip Microcomputer MAX7219

//Pin, variable and constant definition; DEFINE

#define Model_addr 0x09 // X9 H

#define Bright_addr 0x0a // XA H

#define Limit_addr 0x0b // XB H

#define Shutd_addr 0x0c // XC H

#define Test_addr 0x0f // Xf H

#define Set_Normal 0x00 //Enter normal mode instead of testing mode

#define Set_Halt 0x00 //Enter the shutdown mode?

#define Set_Model 0xff //Translate BCD code into B code;

#define Set_Bright 0x04 //The duty cycle is 15/32;

#define Set_Limit 0x07 //8-digit display mode;

#define Set_Shutd 0x01 //Enter normal mode instead of shutdown mode?

sbit DIN =P1^0;

sbit LOAD =P1^1;

sbit CLK =P1^2;

bit bdata bonceinit7219;

///////////////////////////////////////////////// ////////////////////

//Function declaration; PROPERTY

void Init_7219_begin(void);

void Init_7219(void);

void write_one_8279 (byte addr, byte mydate);

///////////////////////////////////////////////// ////////////////////

//Function definition; FOUNCTION

void Init_7219_begin(void)

{//The initialization of MAX7219 display model;

write_one_8279 (Model_addr, 0x00); //Translate BCD code to B code?

write_one_8279 (Bright_addr, Set_Bright); //The duty cycle is 15/32?

write_one_8279 (Limit_addr, Set_Limit); //8-digit display mode;

write_one_8279 (Shutd_addr, Set_Shutd); //Enter normal working mode

}

void Init_7219 (void)

{//The initialization of MAX7219 during normal operation;

write_one_8279 (Shutd_addr, Set_Halt); //Enter the shutdown mode

write_one_8279 (Model_addr, Set_Model); //Translate BCD code into B code?

write_one_8279 (Bright_addr, Set_Bright); //The duty cycle is 15/32?

write_one_8279 (Limit_addr, Set_Limit); //8-digit display mode;

write_one_8279 (Shutd_addr, Set_Shutd); //Enter normal mode instead of shutdown

write_one_8279 (Test_addr, Set_Normal); //Enter normal mode instead of test mode

}

void write_one_8279 (byte addr, //The position to be written;

byte mydate) //The data to be written;

{//Write data to MAX7219 function; display data

register byte i;

LOAD=0; //-/_

for(i=0;i《8;i++)

{

_nop_();

CLK=0; //-/_

if (addr & 0x80)

DIN=1;

else

DIN=0;

_nop_();

CLK=1; //_/-

addr=addr《》1;

}

for(i=0;i《8;i++)

{

_nop_();

CLK=0; //-/_

if(mydate & 0x80)

DIN=1;

else

DIN=0;

_nop_();

CLK=1; //_/-

mydate=mydate《》1;

}

LOAD=1; //_/-

}

2: http://? newsid=138

Thanks to the author.

//max7219 led drive program

//for 51 mcu

//designed by zhaoliang

//2005-6-12 13:52

#include“reg52.h”

#include “intrins.h”

/************************************************* **********************/

//common part

#define HIGH 1

#define LOW 0

#define TRUE 1

#define FALSE 0

#define ZERO 0

#define MSB 0x80

#define LSB 0x01

//max7219 part

#define DECODE_MODE 0x09

#define INTENSITY 0x0A

#define SCAN_LIMIT 0x0B

#define SHUT_DOWN 0x0C

#define DISPLAY_TEST 0x0F

//pin defined

/************************************************* **********************/

//change this part at different board

sbit LOAD=P1^2; //MAX7219 Load-Data Input: rising edge pin 12

sbit DIN=P1^1; //MAX7219 Serial-Data Input: rising edge pin 1

sbit CLK=P1^0; //MAX7219 Serial-Clock Input: maximum 10MHz pin 13

//funcTIon define

/************************************************* **********************/

void Write_Max7219_byte (unsigned char temp);//write max7219 a byte

void Write_Max7219 (unsigned char address, unsigned char dat);//write max7219 command and data

void Init_Max7219(void);//IniTIze max7219

//test program display from 1~8

/************************************************* **********************/

void main(void)

{

unsigned char i;

Init_Max7219();

while (TRUE)

{

for(i=1;i《9;i++)

{

Write_Max7219(i, i);

}

}

}

/************************************************* **********************/

void Write_Max7219_byte (unsigned char temp)

{

unsigned char i;

for (i=0;i《8;i++)

{

CLK=LOW;

DIN=(bit)(temp&MSB);

temp《》=1;

CLK=HIGH;

}

}

/************************************************* **********************/

void Write_Max7219 (unsigned char address, unsigned char dat)

{

LOAD=LOW;

Write_Max7219_byte(address);

Write_Max7219_byte(dat);

LOAD=HIGH;

}

/************************************************* **********************/

void Init_Max7219 (void)

{

Write_Max7219 (SHUT_DOWN, 0x01); //Normal OperaTIon XXXXXXX1 Shutdown Mode XXXXXXXX0

Write_Max7219 (DISPLAY_TEST, 0x00); //Normal OperaTIon XXXXXXX0 Display Test Mode

XXXXXXXX1

Write_Max7219 (DECODE_MODE, 0xff); //Decode Mode Select D7~D0 1 B decode 0 No decode

Write_Max7219 (SCAN_LIMIT, 0x07); //SCAN LIMIT 0~7 0xX0~0xX7

Write_Max7219 (INTENSITY, 0x04); //Set Intensity 0xX0~0xXf

}

Digital Multimeter

Digital Multimeter ,Bench Type Digital Multimeter,Meco Multimeter,Hioki Multimeter

YINTE TOOLS (NINGBO) CO., LTD , https://www.yinte-tools.com