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

📄 max7219.c

📁 1
💻 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 + -