#include“reg52.hâ€
#include “intrins.hâ€
#define byte unsigned char
//#define N_NOP _nop_();//_nop_();_nop_();
///////////////////////////////////////////////// /////
//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 ,Bench Type Digital Multimeter,Meco Multimeter,Hioki Multimeter
YINTE TOOLS (NINGBO) CO., LTD , https://www.yinte-tools.com