max7219 八位数码管


#include 
#include 

typedef enum {
	DIGIT_1 = 1, DIGIT_2 = 2, DIGIT_3 = 3, DIGIT_4 = 4,
	DIGIT_5 = 5, DIGIT_6 = 6, DIGIT_7 = 7, DIGIT_8 = 8
} MAX7219_Digits;

static uint32_t lcdPow10(uint8_t n)
{
	uint32_t retval = 1u;

	while (n > 0u)
	{
		retval *= 10u;
		n--;
	}

	return retval;
}

MAX7219_Digits max7219_PrintNtos(MAX7219_Digits position, uint32_t value, uint8_t n)
{
	if (n > 0u)
	{
		uint32_t i = lcdPow10(n - 1u);

		while (i > 0u)	/* Display at least one symbol */
		{
			if(position > 0u)
			{
				printf("i : [%d]\n",(value / i) % 10u);
				position--;
			}

			i /= 10u;
		}
	}
	return position;
}

int main(int argc, char **argv)
{
	max7219_PrintNtos(DIGIT_8,12345678,8);
return 0;

}
i : [1]
i : [2]
i : [3]
i : [4]
i : [5]
i : [6]
i : [7]
i : [8]

https://www.21ic.com/embed/hardware/drivers/201801/50256.html
http://news.eeworld.com.cn/LED/article_2018012012418.html

#define DECODE_MODE  0x09   //译码控制寄存器
#define INTENSITY    0x0A   //亮度控制寄存器
#define SCAN_LIMIT   0x0B   //扫描界限寄存器
#define SHUT_DOWN    0x0C   //关断模式寄存器
#define DISPLAY_TEST 0x0F   //测试控制寄存器        
    Write7219(SHUT_DOWN,0x01);         //开启正常工作模式(0xX1)
    Write7219(DISPLAY_TEST,0x00);      //选择工作模式(0xX0)
    Write7219(DECODE_MODE,0xff);       //选用全译码模式
    Write7219(SCAN_LIMIT,0x07);        //8只LED全用
    Write7219(INTENSITY,0x04);          //设置初始亮度     
(1)        译码控制寄存器(X9H)
如图4所示,MAX7219有两种译码方式:B译码方式和不译码方式。当选择不译码时,8个数据为分别一一对应7个段和小数点位;B译码方式是BCD译码,直接送数据就可以显示。实际应用中可以按位设置选择B译码或是不译码方式。
	w_max7219(0x09, 0x00); //译码方式,0x00为不译码,0xff为译码
						  
					  
 2    1 2 下一页 尾页

相关