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为译码