📄 max7219.c
字号:
#include <reg51.h>
/*macro define*/
#define HIGH 1
#define LOW 0
#define TRUE 1
#define FALSE 0
#define ZERO 0
#define MSB 0x80
#define LSB 0x01
/*mode define*/
#define NO_OP 0x00
#define DECODE_MODE 0x09
#define INTENSITY 0x0A
#define SCAN_LIMIT 0x0B
#define SHUTDOWN 0x0C
#define DISPLAY_TEST 0x0F
/*pin define*/
sbit DIN = P2^5; //MAX7219 Serial-Data Input: rising edge pin 1
sbit LOAD = P2^6; //MAX7219 Load-Data Input: rising edge pin 12
sbit CLK = P2^7; //MAX7219 Serial-Clock Input: maximum 10MHz pin 13
/*funtion define*/
void Init_Max7219(void);//initialize max7219
void Write_Max7219_byte(unsigned char temp);//send max7219 a byte
void Write_Max7219(unsigned char address,unsigned char dat);//send max7219 command and data
void Show_Max7219(unsigned int left,unsigned int right) reentrant;//十进制显示,第一个参数是7219左四位,第二个是右四位
void Byte_Max7219(unsigned char byte_data);//十进制输出一字节数据
void Regprint_Max7219(unsigned char byte_data);//二进制输出一字节数据,用于打印八位寄存器
void Interger_Max7219(unsigned long int interger) reentrant;//显示十进制整形数
/************************************************************************************
code of funtions
************************************************************************************/
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(SHUTDOWN, 0x01);//Normal Operation
Write_Max7219(DISPLAY_TEST, 0x00);//Normal Operation
Write_Max7219(DECODE_MODE, 0xff);//Code B decode for digits 7-0
Write_Max7219(SCAN_LIMIT, 0x07);//Display digits 7-0
Write_Max7219(INTENSITY, 0x02);//Duty Cycle 9/32
}
void Show_Max7219(unsigned int left,unsigned int right) reentrant
{
unsigned char i,digit_l,digit_r;
for(i=8;i>4;i--)
{
digit_l=left%10;
Write_Max7219(i-4,digit_l);
left/=10;
digit_r=right%10;
Write_Max7219(i,digit_r);
right/=10;
}
}
void Byte_Max7219(unsigned char byte_data)
{
unsigned char i,digit;
for(i=8;i>0;i--)
{
digit=byte_data%10;
Write_Max7219(i,digit);
byte_data/=10;
}
}
void Regprint_Max7219(unsigned char byte_data)
{
unsigned char i,reg_bit,test_bit=0x01;
for(i=8;i>0;i--)
{
reg_bit=byte_data&test_bit;
Write_Max7219(i,reg_bit);
byte_data=byte_data>>1;
}
}
void Interger_Max7219(unsigned long int interger) reentrant
{
unsigned char i,digit;
for(i=8;i>0;i--)
{
digit=interger%10;
Write_Max7219(i,digit);
interger/=10;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -