MAX7219共阴极LED驱动器程序
MAX7219共阴极LED数码管显示驱动
(一)、MAX7219
MAX7219是一种串入、并出的共阴极LED数码管显示驱动器,每片可驱动8位LED数码管显示,与单片机的接口只需3根线,内带BCD译码器,及显示测试、移位、锁存器等,输出电流达40mA,外围只需一只亮度调整电阻。
MAX7219引脚图
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数码管上显示出来
3、使用注意事项
由于电源中杂波或附近的电磁等干扰信号,使MAX7219在上电后不显示或乱显示;为了消除这种现象
应在MAX7219的VCC端与地之间接一只104pf的瓷片电容,在LOAD端于地之间接一只10K的电阻。最号还在电源与MAX7219的VCC端之间串一只去高频的电感。
而在电源方面,最好使用变压器供电,而不要用开关电源供电。
加在DIN引脚上的串行数据必须在LOAD脚为低电平时,以每2字节一次,在SCK脚信号的每个上升沿移入1位数据,且高位在前低位在后,然后在LOAD信号的上升沿MAX7219所存数据。
LED数码管引脚图如下:
显示段码表如下:
D7D6D5D4D3D2D1D0十六
进制值显示内容
dp a b c d e f g
011111100x7e0 001100000x301
011011010x6d2
┊
010011110x4f E
010001110x47F
需要显示的段应为“1”,不显示的则为“0”
原理图如下:
C源程序如下:
#include<>
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 }
}
max7219资料及电路图
MAX7219是MAXIM公司生产的串行输入/输出共阴极数码管显示驱动芯片,一片MAX7219可驱动8个7段(包括小数点共8段)数字LED、LED条线图形显示器、或64个分立的LED发光二级管。该芯片具有10MHz传输率的三线串行接口可与任何微处理器相连,只需一个外接电阻即可设置所有LED的段电流。。它的操作很简单,MCU只需通过模拟SPI三线接口就可以将相关的指令写入MAX7219的内部指令和数据寄存器,同时它还允许用户选择多种译码方式和译码位。此外它还支持多片7219串联方式,这样MCU就可以通过3根线(即串行数据线、串行时钟线和芯片选通线)控制更多的数码管显示。MAX7219的外部引脚分配如图1所示及内部结构如图2所示。 图1 MAX7219的外部引脚分配
图2 MAX7219的内部引脚分配 各引脚的功能为: DIN:串行数据输入端 DOUT:串行数据输出端,用于级连扩展 LOAD:装载数据输入 CLK:串行时钟输入 DIG0~DIG7:8位LED位选线,从共阴极LED中吸入电流 SEG A~SEG G DP 7段驱动和小数点驱动 ISET:通过一个10k电阻和Vcc相连,设置段电流 MAX7219有下列几组寄存器:(如图3) MAX7219内部的寄存器如图3,主要有:译码控制寄存器、亮度控制寄存器、扫描界限寄存器、关断模式寄存器、测试控制寄存器。编程时只有正确操作这些寄存器,MAX7219才可工作。
图 3 MAX7219内部的相关寄存器 分别介绍如下: (1)译码控制寄存器(X9H) 如图4所示,MAX7219有两种译码方式:B译码方式和不译码方式。当选择不译码时,8个数据为分别一一对应7个段和小数点位;B译码方式是BCD译码,直接送数据就可以显示。实际应用中可以按位设置选择B译码或是不译码方式。 图4 MAX7219的译码控制寄存器 (2)扫描界限寄存器(XBH)
MAX7219中文资料
_______________General Description The MAX7219/MAX7221 are compact, serial input/out-put common-cathode display drivers that interface microprocessors (μPs) to 7-segment numeric LED dis-plays of up to 8 digits, bar-graph displays, or 64 indi-vidual LEDs. Included on-chip are a BCD code-B decoder, multiplex scan circuitry, segment and digit drivers, and an 8x8 static RAM that stores each digit.Only one external resistor is required to set the seg-ment current for all LEDs. The MAX7221 is compatible with SPI?, QSPI?, and Microwire?, and has slew-rate-limited segment drivers to reduce EMI. A convenient 3-wire serial interface connects to all common μPs. Individual digits may be addressed and updated without rewriting the entire display. The MAX7219/MAX7221 also allow the user to select code- B decoding or no-decode for each digit. The devices include a 150μA low-power shutdown mode, analog and digital brightness control, a scan-limit register that allows the user to display from 1 to 8digits, and a test mode that forces all LEDs on. ________________________Applications Bar-Graph Displays 7-Segment Displays Industrial Controllers Panel Meters LED Matrix Displays ____________________________Features o 10MHz Serial Interface o Individual LED Segment Control o Decode/No-Decode Digit Selection o 150μA Low-Power Shutdown (Data Retained)o Digital and Analog Brightness Control o Display Blanked on Power-Up o Drive Common-Cathode LED Display o Slew-Rate Limited Segment Drivers for Lower EMI (MAX7221) o SPI, QSPI, Microwire Serial Interface (MAX7221)o 24-Pin DIP and SO Packages MAX7219/MAX7221 Serially Interfaced, 8-Digit LED Display Drivers ________________________________________________________________Maxim Integrated Products 1 ________Typical Application Circuit __________________Pin Configuration 19-4452; Rev 3; 7/97 SPI and QSPI are trademarks of Motorola Inc. Microwire is a trademark of National Semiconductor Corp. For free samples & the latest literature: https://www.360docs.net/doc/3e16154994.html,, or phone 1-800-998-8800.For small orders, phone 408-737-7600 ext. 3468.
点阵屏驱动程序(MAX7219)
//自己做项目写的2*4点阵屏驱动,分享给大家,基于STC15单片机 点阵屏如上图所示 #include "stc15w4k32s4.h" #define uchar unsigned char #define uint unsigned int //定义Max7219端口 sbit Max7219_pinCLK = P1^7; sbit Max7219_pinCS = P1^6; sbit Max7219_pinDIN = P1^5; void Write_Max7219_byte(uchar DATA); //向MAX7219(U3)写入字节void Write_Max7219(uchar address,uchar dat); //向MAX7219写入数据 void Init_MAX7219(void); //初使化函数 void Display_1(uchar dat); //1号屏显示数字 void Display_2(uchar dat); //2号屏显示数字 void Display_3(uchar dat); //3号屏显示数字 void Display_4(uchar dat); //4号屏显示数字 void Display_5(uchar dat); //5号屏显示数字 void Display_6(uchar dat); //6号屏显示数字 void Display_7(uchar dat); //7号屏显示数字
void Display_8(uchar dat); //8号屏显示数字、 /* 8个点阵驱动程序 */ uchar code disp1[38][8] ={ {0x00,0x30,0x48,0x48,0x48,0x48,0x48,0x30}, //0 {0x00,0x10,0x30,0x10,0x10,0x10,0x10,0x38}, //1 {0x00,0x78,0x08,0x08,0x78,0x40,0x40,0x78}, //2 {0x00,0x78,0x08,0x08,0x78,0x08,0x08,0x78}, //3 {0x00,0x10,0x30,0x50,0x78,0x10,0x10,0x10}, //4 {0x00,0x78,0x40,0x40,0x78,0x08,0x08,0x78}, //5 {0x00,0x78,0x40,0x40,0x78,0x48,0x48,0x78}, //6 {0x00,0x7C,0x04,0x08,0x10,0x10,0x10,0x10}, //7 {0x00,0x78,0x48,0x48,0x78,0x48,0x48,0x78}, //8 {0x00,0x78,0x48,0x48,0x78,0x08,0x08,0x78}, //9 {0}, //显示空白10 {0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00}, //显示负数符号11 {0x00,0x7C,0x40,0x40,0x7C,0x40,0x40,0x7C}, //E 12 {0x00,0x78,0x44,0x44,0x7C,0x48,0x48,0x44}, //R 13 {0x10,0x28,0x44,0x44,0x44,0x7C,0x44,0x44}, //A 14 {0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x78}, //L 15 {0x00,0x70,0x88,0x80,0x80,0x80,0x88,0x70}, //C 16 }; //-------------------------------------------- //功能:向MAX7219(U3)写入字节 //入口参数:DATA //出口参数:无 //说明: void Write_Max7219_byte(uchar DATA) { uchar i; Max7219_pinCS=0; for(i=8;i>=1;i--) { Max7219_pinCLK=0; Max7219_pinDIN=DATA&0x80; DATA=DATA<<1; Max7219_pinCLK=1; } } //------------------------------------------- //功能:向MAX7219写入数据 //入口参数:address、dat
MAX7219
多功能LED译码显示驱动IC PS7219 1 引言 PS7219是由力源公司自行研制、开发的一款新型多功能8位LED显示驱动IC。接口采用三线SPI方式,用户只需简单修改内部相关的控制或数字RAM,便可很容易地实现多位LED显示。在性能上PS7219与MAXIM 公司的MAX7219完全兼容,并增加了位闪等功能。 PS7219具有多个级联特性,为大屏幕LED显示提供了方便。在理论上,只需三根用户I/O口控制线,便可以实现无穷多的LED级联显示。在实际应用中,已实现了149片PS7219级联,可以控制1192位LED 显示。 2 PS7219特点与引脚说明 PS7219的特点: ★ 串行接口(16位控制字); ★ 8位共阴级LED显示驱动; ★ 显示位数1~8,可数字调节; ★ 按位进行BCD译码/不译码数字制; ★ 16级亮度数字控制; ★ 上电LED全熄; ★ 提供位闪功能; ★ 多个PS7219级联可实现任意多的LED显示;★ 宽24脚双列直插模块封装。 PS7219引脚图如图1所示。 引脚功能说明见表1。 3 PS7219内部结构 如图2 所示,PS7219由六部分组成。 图2 PS7219内部组成框图 图1 PS7219引脚排列
3.1 串行输入缓冲部分 主要功能是与外部控制信号接口,将控制命令串 行读入,并进行串并转换,供控制器读取。 3.2 控制器 是整个IC的核心部分。它先将输入缓冲部分的控制字读入处理,根据其地址值送到相应的控制RAM或数字RAM,同时将数据送入串行同步输出部分,以便在下一个控制字输入周期,将其串行输出。 3.3 控制RAM数据RAM 这两部分一起控制LED译码显示部分,实现不同功能及字符的显示。 控制RAM包括:空操作寄存器,译码模式控制寄存器,亮度控制寄存器,掉电控制寄存器,闪烁控制寄存器,测试控制寄存器和扫描界线寄存器。 数据RAM包括:数据1—8寄存器。 3.4 LED译码显示 根据控制RAM和数据RAM的不同值,来实现相应的显示功能。 3.5 内部时钟电路 为控制器提供频率为24MHz的基准时钟,为LED译码显示电路提供频率为1.5kHz的扫描时钟。 4 使用及实例 4.1 使用注意事项 (1)PS7219上电后,内部RAM清零。显示前应先将亮度寄存器、译码模式寄存器及数据寄存器赋值。 (2)PS7219应连接共阴式LED显示器,没有用的LED显示器位选引脚可以悬空不接。 (3)其显示采用扫描方式,使用普通LED亮度可能不足,可选用高亮型号或超高亮型号。对于尺寸大于0.8英寸的LED,应使用适当的驱动电路。 (4)PS7219的RST复位端应可靠地接到复位电路上去。上电复位信号宽度要求大于100ms,典型复位门限为4.65V。 (5)级联时,如果驱动的LED个数不足8的倍数,可把两片驱动器的扫描界线设置为相同的值。 例如,若需11个LED,则两片PS7219分别联接6和5个,并把两片PS7219的显示位数都设置为6。这样,便不会造成两片PS7219驱动的LED亮度有所差异。 (6)当PS7219级联个数大于8个时,需要增加CLK、LOAD信号的驱动能力。可选用如SN74HC245类似的驱动IC。其具体做法见下面将要举的一实例。 4.2 应用举例 (1)单片应用单片PS7219驱动8位LED的原理图如图3所示。
串行接口8位LED显示驱动MAX7219-MAX7221
```````````````````````````````````?? NBY832:0NBY8332????????0???????????????????)μQ*?9?8?MFE??????????????75????MFE?????CDE!C?????????????????????????????9y9??SBN???????????????MFE?????NBY8332???TQJ UN ?RTQJ UN ??NJDSPXJSF UN ?????????????????FNJ? ???5?????????????μQ???????????????????????????NBY832:0NBY8332????????????C?????????? ????261μB????????????????????????2?9???????????????????MFE?????? ??4W????????????????NBY7:62????? ```````````````````````````````````?? ```````````````````````````````````?? ?21NI{????????MFE??????0?????? ?261μB?????)????*!??????????????????????????MFE??? ?????????????????FNJ!)NBY8332*!?TQJ?RTQJ?NJDSPXJSF????)NBY8332*!?35??EJQ?TP?? NBY832:0NBY8332 ?????9??MFE????? ________________________________________________________________Maxim Integrated Products 1 ```````````````````````````?????? ```````````````````````````````???? 19-4452; Rev 4; 7/03 ```````````````````````````````???? ????)?*???????????*?????U B >!,36°D? TQJ?RTQJ?Npupspmb!Jod/????NJDSPXJSF?Obujpobm!Tfnjdpoevdups!Dpsq/???? ??????????? ???MFE????? ???????????????????????????????????????????????????? ????????????????Nbyjn??????ǖ21911!963!235:!)????*?21911!263!235:!)????*????Nbyjn?????ǖdijob/nbyjn.jd/dpn?
MAX7219抗干扰
在强干扰环境下,如大功率电机的起停或高压发生过程中,干扰源可能通过供电电源或3根信号线串入显示电路而造成显示器的不稳定,从而出现笔段跳跃、显示不全、甚至全暗或全亮的现象. 4.对显示电路单独供电,并在Max7219的电源V+和GND之间接并接一个0.1uF去耦电容和一个10uF/16V电解电容,以有效提高其工作可靠性。 5. 在硬件上采用TVS管吸收瞬态功率,采用磁珠消除高频脉冲;在软件上采用不断刷新显示缓冲区的办法来保证显示的正确性,实际使用效果明显。 max7219(级联)显示问题 悬赏分:0 |解决时间:2008-10-2 22:46 |提问者:sangfuhuan 我用了两个max7219(级联),即显示4个四位, 但是,显示一会其中一对就开始灭了,或是其中一对出现乱码,好像是随机的,只是灭的时间! 难道说级联要注意什么吗? 还是---? 谢谢! 问题补充: 你好!我还想问你关于7219的问题,真是麻烦你了! 你说的加电容我已经加过了,但是你说的CLK,LOAD引脚窜入了干扰信号是啥意思呢?“加入抗干扰的驱动程序,定期重新配置7219 ”是啥意思呢?就是定期重新配置7219吗? 还有就是当我加了电容后小郭很明显!基本都好了,就是最近一上电一会就开始灭了,我怀疑是不是7219模块又问了?还是7219有问题了?你有什么意见呢?还有就是级联的时候,在程序中,在分别给凉快传数据时需要延时吗?在手册里
说是“串行数据输出端口,从DIN 输入的数据在16.5 个时钟周期后在此端有效”是什么意思呢? 非常感谢你!!! 我以前项目中用过4个max7219级联,用得比较稳定。 你这个现象是因为CLK,LOAD引脚窜入了干扰信号,而7219是边沿触发,容易受到干扰。 解决方法: 1、可以在靠近7219芯片的地方,给CLK,DIN加101 - 104的滤波电容,效果比较明显。 2、在程序中,加入抗干扰的驱动程序,定期重新配置7219 3、可以选用完全兼容的max7221代替
Arduino驱动MAX7219四位数码管显示时间
Arduino驱动MAX7219四位数码管显示时间 默认使用Pin 2为MOSI(数据发送)引脚,Pin 3为CS(片选)引脚,Pin 4为SCLK(时钟)引脚,如有需要请修改代码前三行的define。 #define MO 2 #define CS 3 #define CLK 4 static int time_h = 21, time_m =25, time_s = 30; //此刻时间:时,分,秒 int alarm_clock_h = 8, alarm_clock_m = 00; //闹钟时间 unsigned long time = 0; unsigned char buffer_led[5] = { 0x00,};//缓存 void SPI_init(void) //初始化SPI引脚 { pinMode(CLK, OUTPUT); pinMode(MO, OUTPUT); pinMode(CS, OUTPUT); digitalWrite(CS, HIGH); digitalWrite(CLK, LOW); digitalWrite(MO, HIGH); } void SPI_send(unsigned char reg, unsigned char data) //spi单向16位数据发送{ int x; /* Serial.print("reg = "); Serial.print(reg, HEX); Serial.print(" data = "); Serial.println(data, HEX); */ digitalWrite(CS, LOW); for (x = 0; x < 8; x++) { digitalWrite(MO, 0x80 & (reg << x)); //高位在前 digitalWrite(CLK, HIGH); digitalWrite(CLK, LOW); } for (x = 0; x < 8; x++) {
51单片机程序 MAX7219
#include
MAX7219工作原理简介
MAX7219工作原理简介 MAX7219是一个采用3线串行接口的8位共阴极7段LED显示驱动器。本文分析了MAX7219各个寄存器的功能,并结合MAX7219的工作时序,给出了MAX7219在Motorola MC68HC908单片机系统中的一个应用实例。关键词: MCU;MAX7219;LED Motorola MC68HC908 MAX7219工作时序及其寄存器 MAX7219是一个高性能的多位LED显示驱动器,可同时驱动8位共阴极LED或64个独立的LED。其内部结构框图如图1所示,主要包括移位寄存器、控制寄存器、译码器、数位与段驱动器以及亮度调节和多路扫描电路等。 MAX7219 采用串行接口方式,只需LOAD、DIN、CLK三个管脚便可实现数据传送。DIN管脚上的16位串行数据包不受LOAD状态的影响,在每个CLK的上升沿被移入到内部16位移位寄存器中。然后,在LOAD的上升沿数据被锁存到数字或控制寄存器中。LOAD必须在第16个时钟上降沿或之后,但在下一个时钟上升沿之前变高,否则数据将会丢失。DIN端的数据通过移位寄存器传送,并在16.5个时钟周期后出现在DOUT端,随CLK 的下降沿输出。 MAX7219的操作时序如图2所示。 MAX7219的串行数据标记为D15~D0,其中低8位表示显示数据本身,最高的4位D15~D12未使用,寻址内部寄存器的地址位占用D11~D8,选择14个内部寄存器,见表1。 图1 MAX7219内部结构框图 图2 MAX7219的数据传送时序 MAX7219 内部具有14个可寻址数字和控制寄存器。其中的8个数字寄存器由一个片内8×8双端口SRAM实现。它们可直接寻址,因此可对单个数进行更新并且通常只要 V+超过2V数据就可保留下去。除8个数位寄存器之外,还有无操作、译码方式、亮度调整、扫描位数、睡眠模式和显示器测试6个控制寄存器。 无操作寄存器用于多片MAX7219级联,在不改变显示或不影响任意控制寄存器条件下,它允许数据从DIN传送到DOUT。 睡眠模式控制寄存器用于节省电源消耗,延长显示器的使用寿命。当睡眠模式控制寄存器控制字节中的最低位D0=0时,为睡眠模式;D0=1时,为正常操作模式。上电时所有的控制寄存器都复位,显示器都熄灭,芯片
max7219驱动8个数码管代码及电路图
max7219驱动8个数码管代码及电路图 #include "reg52.h" #include "my_type.h" #define Addr_No_Op 0x00 //不工作寄存器地址 #define Addr_Digit0 0x01 #define Addr_Digit1 0x02 #define Addr_Digit2 0x03 #define Addr_Digit3 0x04 #define Addr_Digit4 0x05 #define Addr_Digit5 0x06 #define Addr_Digit6 0x07 #define Addr_Digit7 0x08 #define Addr_Decode_Mode 0x09 //译码模式寄存器地址
#define Addr_Intensity 0x0a //亮度控制寄存器地址(max7221) #define Addr_Scan_Limit 0x0b //扫描控制寄存器地址 #define Addr_Shutdowm 0x0c //掉电模式寄存器地址 #define Addr_Display_Test 0x0f //显示检测寄存器地址 sbit Max7219_Din=P1^5; sbit Max7219_Load=P1^6; sbit Max7219_Clk=P1^7; uchar code max7219_7led_code[18]={0x7e,0x30,0x6d,0x79, //0-1-2-3 0x33,0x5b,0x5f,0x70, //4-5-6-7 0x7f,0x7b,0x01,0x4e, //8-9-"-"-E 0x37,0x0e,0x67,0x00}; //H-L-P-空白 void wr_max7219(uchar addr,uchar dat) { uchar i;
MAX7219共阴极LED驱动器程序
MAX7219共阴极LED数码管显示驱动 (一)、MAX7219 MAX7219是一种串入、并出的共阴极LED数码管显示驱动器,每片可驱动8位LED数码管显示,与单片机的接口只需3根线,内带BCD译码器,及显示测试、移位、锁存器等,输出电流达40mA,外围只需一只亮度调整电阻。 MAX7219引脚图 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数码管上显示出来 3、使用注意事项 由于电源中杂波或附近的电磁等干扰信号,使MAX7219在上电后不显示或乱显示;为了消除这种现象 应在MAX7219的VCC端与地之间接一只104pf的瓷片电容,在LOAD端于地之间接一只10K的电阻。最号还在电源与MAX7219的VCC端之间串一只去高频的电感。 而在电源方面,最好使用变压器供电,而不要用开关电源供电。 加在DIN引脚上的串行数据必须在LOAD脚为低电平时,以每2字节一次,在SCK脚信号的每个上升沿移入1位数据,且高位在前低位在后,然后在LOAD信号的上升沿MAX7219所存数据。 LED数码管引脚图如下:
Max7219驱动led时钟代码(包含初始化
Max7219驱动led时钟代码(包含初始化) #include
MAX7219驱动8位数码管
#include delayms(10); for(i=0;i<8;i++) { write(i+1,disp_buffer[i]); } while(1) { } } #include max7219驱动数码管程序(51单片机+STM32 MAX7219数码管程序案例) 1、STM32 硬件SPI max7219 8位数码管显示模块数码管模块电路图 /***************************************************************** Updated TIme:12th,12,2015 FuncTIon:通过MAX7219驱动数码管 ******************************************************************/ #include delay.h #include sys.h #include usart.h//串口通信 #define Max7219_pinCLK PAout(5) #define Max7219_pinCS PAout(3) #define Max7219_pinDIN PAout(7) /**************************************************************************** * 名称:SPI1_Init(void) * 功能:STM32_SPI1硬件配置初始化 * 入口参数:无 * 出口参数:无 * 说明:STM32_SPI1硬件配置初始化,使用3V3 ****************************************************************************/ void SPI1_Init(void) { SPI_InitTypeDef SPI1_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; //配置SPI1管脚 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE); /*DS18B20、MAX7219驱动数码管、温度测量与显示程序*/ #include 数码管的几种驱动方式汇总 这段时间做数码管的电路,所以就专门整理了一下数码管的驱动IC和相关问题,集中发在这里便于学习。 数码管的显示方式可以分为动态和静态的。 动态的也叫扫描方式,是利用发光二极管的余辉效应和人眼的视觉暂留效应来实现的,只要在在一定时间内数码管的笔段亮的频率够快,人眼就看不出闪烁,一般外围硬件较少,但是对单片机资源耗用巨大。 静态的也较锁存方式,单片机送出数据后控制外围锁存器件锁存数据,这样数码管笔段里的电流不变,数码管稳定显示,这样单片机可以干别的活不用管数码管了。这种方案的优点是对单片机的P口资源和时间耗用很少,但是数码管的外围辅助电路复杂。 前些日子又发现了一种新的驱动方式,使用专门的驱动IC,单片机发送完数据就控制锁存,由芯片完成数码管动态扫描显示,一般使用串行接口,占用单片机资源最少,而且数码管还能实现左右循环移动等效果,显示稳定,消隐效果比较好。 下面分别结合这些芯片归纳一下数码管的驱动方案。 1、不需要芯片的驱动方式,扫描显示 这种方式a~g和DP一共8根线分别占用单片机8个端口线,一般是一整个P口,然后有几位数码管就另外需要几个控制线作为片选。对于MCU的时间占用几乎是全时的,如果没有其他的任务或者其他的任务耗用时间很少可以考虑这种显示方式,比如时钟、温度计等等。 2、宝刀未老74LS164 这是一片带锁存的串入并出芯片,需要占用单片机的2或3根线,MR为输出状态清除,本 身驱动电流不大,驱动LED需要另外加三极管或者驱动芯片。 如果需要多位驱动,一般使用74HC138这样的译码器进行快速线选,一样实现扫描显示,对单片机端口的耗用比较少,但是因为是扫描方式所以对单片机时间耗用还是全时的。 3、串行驱动MAX7219 按说这是驱动LED数码管最理想的一个芯片了,从典型应用电路上看外围元件极少,直接驱动,最吸引人的是使用了串行接口,只要三根线就可以驱动多大8位的数码管,而且可以送数据后就不用管了,自己消零消隐,可惜的就是太贵了,市场价都在20多RMB以上,比起LS164的一块多钱显得不合算。 另外有用过整个IC朋友说,如果有的地方考虑的不周全,很容易出现显示崩溃问题,必须重新上电才可以解决,我没有用过没有发言权,只是提个醒儿,呵呵。 PDF下载地址:https://www.360docs.net/doc/3e16154994.html,/getds.cfm/qv_pk/1339/ln/cn 4、串行驱动HD7279、BC7281、ZLG7289、ZLG7290、WH8280MAX7219显示C代码
max7219驱动数码管程序(51单片机+STM32 MAX7219数码管程序案例)
用DS18B20和MAX7219完成温度实时测量与显示
数码管驱动方式选择