STC单片机驱动MAX7219

10 篇文章 1 订阅
8 篇文章 3 订阅

MAX7219是MAXIM公司生产的串行输入/输出共阴极数码管显示驱动芯片,一片MAX7219可驱动8个7段(包括小数点共8段)数字LED、LED条线图形显示器、或64个分立的LED发光二级管。MCU只需通过模拟SPI三线接口就可以将相关的指令写入MAX7219的内部指令和数据寄存器,同时它还允许用户选择多种译码方式和译码位。此外它还支持多片7219串联方式,这样MCU就可以通过3根线(即串行数据线、串行时钟线和芯片选通线)控制更多的数码管显示。

MAX7219的外部引脚分配如下图:

各引脚的功能为:

DIN:串行数据输入端

DOUT:串行数据输出端,用于级连扩展

LOAD:装载数据输入

CLK:串行时钟输入

DIG0~DIG7:8位LED位选线,从共阴极LED中吸入电流

SEG A~SEG G DP 7段驱动和小数点驱动

ISET: 通过一个10k电阻和Vcc相连,设置段电流

MAX7219驱动共阴极点阵电路图:

MAX7219寄存器:

使用STC15W104驱动MAX7219

初始化:

向MAX7219写入一字节:STC15W104使用22.1184MHZ晶振,管脚操作过程中不需要延时。

 向MAX7219中写入数据:

 写共阴极点阵全开全关:

写共阴极点阵数字“0”:

 

 

 看到有些论坛说STC单片机在上电初始化MAX7219时需要加延时以保持稳定

实测STC15W104使用22.1184MHZ晶振时不加50ms延时也可以使用。

技术支持请加Q,一起学习新知识。删除& —等特殊字符277&94一3&652。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是基于STC 89C52单片机MAX30102血氧心率测量程序,供参考: ``` #include <REG51.H> #include <intrins.h> sbit SCL=P1^0; sbit SDA=P1^1; #define IICStar() {SCL=1;SDA=1;SDA=0;SCL=0;} #define IICStop() {SCL=0;SDA=0;SCL=1;SDA=1;} #define IICAck() {SCL=0;SDA=0;SCL=1;SCL=0;} #define IICNack() {SCL=0;SDA=1;SCL=1;SCL=0;} uchar ReadIIC(uchar Addr) { uchar i, dat=0; IICStar(); for(i=0;i<8;i++) { if((Addr<<i)&0x80) SDA=1; else SDA=0; SCL=1; _nop_();_nop_(); SCL=0; } SDA=1; SCL=1; _nop_();_nop_(); while(SDA) { SCL=0; _nop_();_nop_(); SCL=1; _nop_();_nop_(); SCL=0; } for(i=0;i<8;i++) { SCL=1; _nop_();_nop_(); dat<<=1; if(SDA) dat|=0x01; SCL=0; } IICNack(); return(dat); } void WriteIIC(uchar Addr,uchar dat) { uchar i; IICStar(); for(i=0;i<8;i++) { if((Addr<<i)&0x80) SDA=1; else SDA=0; SCL=1; _nop_();_nop_(); SCL=0; } for(i=0;i<8;i++) { if((dat<<i)&0x80) SDA=1; else SDA=0; SCL=1; _nop_();_nop_(); SCL=0; } IICAck(); } void Init_MAX30102(void) { WriteIIC(0xAE,0x07); //软件复位 Delay(50); WriteIIC(0xAE,0x03); //I2C模式 WriteIIC(0xAE,0x09); //常规模式 WriteIIC(0xAE,0x19); //采样速率100Hz,脉冲宽度411us WriteIIC(0xAE,0x20); //红光增益18倍 WriteIIC(0xAE,0x21); //红光LED幅度限制 WriteIIC(0xAE,0x23); //红光LED驱动电流12.5mA WriteIIC(0xAE,0x24); //红光LED驱动电流12.5mA WriteIIC(0xAE,0x25); //绿光增益18倍 WriteIIC(0xAE,0x26); //绿光LED幅度限制 WriteIIC(0xAE,0x28); //绿光LED驱动电流12.5mA WriteIIC(0xAE,0x29); //绿光LED驱动电流12.5mA WriteIIC(0xAE,0x2A); //脉冲宽度调制 WriteIIC(0xAE,0x2B); //脉冲宽度调制 WriteIIC(0xAE,0x2C); //脉冲宽度调制 WriteIIC(0xAE,0x2D); //脉冲宽度调制 WriteIIC(0xAE,0x31); //自动增益控制,红光LED驱动电流自动调整 WriteIIC(0xAE,0x33); //自动增益控制,绿光LED驱动电流自动调整 } unsigned long Get_RED(void) { uchar i; unsigned long dat=0; for(i=0;i<8;i++) dat+=ReadIIC(0xAF)<<((7-i)*3); return(dat); } unsigned long Get_IR(void) { uchar i; unsigned long dat=0; for(i=0;i<8;i++) dat+=ReadIIC(0xB0)<<((7-i)*3); return(dat); } void main() { unsigned long RED, IR; Init_MAX30102(); while(1) { RED=Get_RED(); IR=Get_IR(); Delay(500); } } ``` 需要注意的是,这只是一个基本的程序框架,具体的实现还需要根据具体的硬件设计和需求进行调整和优化。同时,对于MAX30102的详细使用和数据处理,还需要参考其官方文档和相关资料进行学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单片机毕业设计-远望创客学堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值