MAX7219驱动共阴极LED原理图及程序

1、max7219简介 max7219是一种串入、并出的共阴极led数码管显示驱动器,每片可驱动8位led数码管显示,与单片机的接口只需3根线,内带bcd译码器,及显示测试、移位、锁存器等,输出电流达40ma,外围只需一只亮度调整电阻。
max7219引脚图
2、引脚功能说明 1)引脚功能 din:串行数据输入端,clk的上升沿时数据被载入内部16位移位寄存器中
clk:串行时钟输入端,最高工作频率可达10mhz
load:片选端,低电平接收din端的数据,高电平时数据被所存
dig0~7:led的位控制端a~dp:led的端控制端
dout:串行数据输出端,用于芯片的级联
iset:硬件亮度调整端,在该引脚与vcc之间跨接一个电阻,led的亮度即可通过该电阻来调节,流过led的段驱动平均电流为流过此电阻电流的100倍,此电阻值范围为:10~80k之间。
2)内部寄存器说明 a、译码方式选择寄存器地址:09h
赋值:ffh 表示使用max7219内部的bcd译码器
00h 表示不使用max7219内部的bcd译码器
b、亮度调节寄存器地址:0ah
赋值:00h~0fh 可改变max7219所驱动的led的亮度,其变化范围在1/32~31/32之间
c、扫描位数设定寄存器地址:0bh
赋值:00h 所有位不显示
01h~07h 依次对应于1~8位及前面位全部显示(即需显示的位应为“1”)
d、待机模式开关寄存器地址:0ch
赋值:00h led全灭
01h led正常显示
e、显示器测试寄存器地址:0fh
赋值:00h led为正常显示状态
01h led测试状态,即led全亮
f、8位led显示数据寄存器地址:01h~08h
对这些寄存器赋值(即需显示的内容),就会在对应的1~8位led数码管上显示出来
由于电源中杂波或附近的电磁等干扰信号,使max7219在上电后不显示或乱显示;为了消除这种现象应在max7219的vcc端与地之间接一只104pf的瓷片电容,在load端于地之间接一只10k的电阻。最号还在电源与max7219的vcc端之间串一只去高频的电感。
而在电源方面,最好使用变压器供电,而不要用开关电源供电。
加在din引脚上的串行数据必须在load脚为低电平时,以每2字节一次,在sck脚信号的每个上升沿移入1位数据,且高位在前低位在后,然后在load信号的上升沿max7219所存数据。
3、led数码管引脚图如下:
显示段码表如下:
4、原理图
5、c源程序 #include《reg51.h》
sbit clk=p1^7; //max7219时钟信号线
sbit ld=p1^6; //数据加载线
sbit din=p1^5; //数据输入线
unsigned char code disp_table[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,
0x77,0x1f,0x4e,0x3d,0x01,0x00}; //非译码方式时的共阴数码管显示编码,0~9,e,o,r,d,-,息灭
void w_max7219(unsigned char addr,unsigned char wdata); //向max7219写数据函数声明
void init_max7219(); //max7219初始化函数声明
void timer_ms(unsigned char tim); //毫秒级延时函数声明
/******************************************************************************************
函数名称:main
函数说明:主函数
入口参数:
出口参数:
其 它:
******************************************************************************************/
main()
{
init_max7219(); //max7219初始化函数
w_max7219(0x01,disp_table[1]); //向max7219第一位寄存器写显示数据1
w_max7219(0x02,disp_table[2]); //向max7219第二位寄存器写显示数据2
w_max7219(0x03,disp_table[3]); //向max7219第三位寄存器写显示数据3
w_max7219(0x04,disp_table[4]); //向max7219第四位寄存器写显示数据4
w_max7219(0x05,disp_table[5]); //向max7219第五位寄存器写显示数据5
w_max7219(0x06,disp_table[6]); //向max7219第六位寄存器写显示数据6
w_max7219(0x07,disp_table[7]); //向max7219第七位寄存器写显示数据7
w_max7219(0x08,disp_table[8]); //向max7219第八位寄存器写显示数据8
while(1);
}
/**********************************************************************************************
函数名称:init_max7219
函数功能:max7219初始化
入口参数:
出口参数:
其 它:
**********************************************************************************************/
void init_max7219()
{
w_max7219(0x0a,0x07); //显示亮度,取值范围0~f
w_max7219(0x0b,0x07); //8位扫描显示,取值范围0x01~0x07
w_max7219(0x09,0x00); //译码方式,0x00为不译码,0xff为译码
w_max7219(0x0c,0x01); //操作方式,0x00为低功耗模式,0x01为正常操作模式
w_max7219(0x0f,0x00); //显示状态,0x00为正常显示,0x01为显示测试
timer_ms(2);
}
/*********************************************************************************************
函数名称:w_max7219
函数功能:向max7219写入数据
入口参数:addr max7219内部寄存器地址,wdata 写入内部寄存器的操作数值
出口参数:
其 它:
*********************************************************************************************/
void w_max7219(unsigned char addr,unsigned char wdata)
{
unsigned char temp,i=1,j,k;
ld=0;
while(i《16)
{
if(i《8) temp=addr; //先写入max7219内部寄存器地址,再向内部寄存器写入操作数值
else temp=wdata;
for(j=0;j《8;j++)
{
clk=0;
if((temp&0x80)==0x80) din=1; //先发送数据的最高位
else din=0;
for(k=5;k》0;k--); //时钟频率高的单片机需曾加延时时间,此处为12mhz
clk=1;
for(k=5;k》0;k--);
temp《《=1;
}
i+=8;
}
ld=1;
}
/*-------------------------------------------------------------------------------------------
函数名称: timer_ms
函数说明: 1ms延时子程序
入口参数: tim为接收主调传来需延时的毫秒数,取值范围1~256,定时时间1~256ms
出口参数:
其 它:
------------------------------------------------------------------------------------------*/
void timer_ms(unsigned char tim)
{
unsigned char i;
while(tim--)
{
for(i=0;i《200;i++); //延时1ms
}
}

为什么魏建军没有出席欧拉发布会?欧拉未来前景究竟如何?
大众召回70万辆途观和途安,主要原因是由于车辆或存在照明缺陷
植物冠层分析仪的具体操作步骤是怎样的
adsl调制解调器的功能及用途
滤波器与相位关系的基础知识
MAX7219驱动共阴极LED原理图及程序
智能手机的电路结构图分享
诺基亚8上市时间和外形照片曝光,情怀+实力或有惊喜!
智能电销机器人vs电销员工,5项能力PK
导热塑料散热能力超越金属铜、铝之10倍以上
SMT贴片加工中的锡膏印刷工艺
iPhone8什么时候上市?最新消息:iphone 8发布日期、外观、配置细节曝光,十周年力作苹果8涨价是必须!
Altium Designer 22导出Gerber文件的常规步骤
降低电感磁芯损耗的解决方案
干货:黑轴红轴茶轴青轴哪个机械键盘适合你?
苹果推出的Airtag究竟能否带火UWB?
移动设备性能与健康状况:安卓设备故障率高于IOS,三星是最容易坏的
开发者圆桌会议:HTML5误解
三星GalaxyFold折叠屏手机高清图赏
SDSoC就绪,它如何在实际的设计开发工作中支持你的“表演”