51单片机程序 MAX7219

合集下载

max7219资料及电路图

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)如图5所示,此寄存器用于设置显示的LED的个数(1~8),比如当设置为0xX4时,LED 0~5显示。

MAX7219中文资料-附有程序

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)

点阵屏驱动程序(MAX7219)
Write_Max7219_byte(0);
Write_Max7219_byte(0);
Write_Max7219_byte(0);
Max7219_pinCS=1;
Write_Max7219(0,0); //清除缓冲区数据,消除显示误差
}
}
void Display_4(uchar dat)
{
uchar i;
{0x00,0x70,0x88,0x80,0x80,0x80,0x88,0x70},//C16
};
//--------------------------------------------
//功能:向MAX7219(U3)写入字节
//入口参数:DATA
//出口参数:无
//说明:
void Write_Max7219_byte(uchar DATA)
Write_Max7219_byte(0);
Write_Max7219_byte(0);
Write_Max7219_byte(0);
Write_Max7219_byte(0);
Write_Max7219_byte(0);
Max7219_pinCS=1;
Write_Max7219(0,0); //清除缓冲区数据,消除显示误差
Write_Max7219(7,0);//清除缓冲区数据,消除显示误差
Write_Max7219(8,0);//清除缓冲区数据,消除显示误差
}
/***************************************************/
void Display_1(uchar dat)
{
Write_Max7219_byte(0);

MAX7219单片以及级联驱动程序

MAX7219单片以及级联驱动程序

MAX7219单片以及级联驱动程序2011-03-20 09:40说明一下:这个word版式是从百度上下载的,在原版中,作者只是写了驱动一片MAX7219的程序。

本人作为菜鸟,第一次使用MAX7219就用了两片级联来驱动15个数码管,按照原版程序驱动一片MAX7219是没有问题的,但是,驱动两片MAX7219就不行了。

自己先认真看了MAX7219的DataSsheet,因为英语是个二把刀,看的迷迷糊糊,似懂非懂(可见英语还是很重要的),又在网上搜索也没发现有正确的程序(都是有点儿问题,上网贴出来请教各位大虾的),没办法只能自力更生了,终于调出来了。

将原版增删修改,传上来共享,希望对以后某位菜鸟第一次使用MAX7219时有所帮助啦,嘿嘿!/**************************************************************** *常用符号定义******************************************************************/#define uchar unsigned char/**************************************************************** *定义MAX7219寄存器******************************************************************/#define REG_NO_OP 0x00 //定义空操作register#define DIG_1 0x01 // 定义数码管1 register#define DIG_2 0x02 // 定义数码管2 register#define DIG_3 0x03 // 定义数码管3 register#define DIG_4 0x04 // 定义数码管4 register#define DIG_5 0x05 // 定义数码管5 register#define DIG_6 0x06 // 定义数码管6 register#define DIG_7 0x07 // 定义数码管7 register#define DIG_8 0x08 // 定义数码管8 register#define REG_DECODE 0x09 // 定义解码控制register#define REG_INTENSITY 0x0a // 定义显示亮度register#define REG_SCAN_LIMIT 0x0b // 定义扫描限制register#define REG_SHUTDOWN 0x0c // 定义"shutdown"模式register#define REG_DISPLAY_TEST 0x0f // 定义"display test"模式register#define INTENSITY_MIN 0x00 // 定义最低显示亮度#define INTENSITY_MAX 0x0f // 定义最高显示亮度/****************************************************************** * 定义硬件引脚连接******************************************************************/#define DATA P2^3; //定义P3_5连接MAX7219 DATA引脚#define CLK P2^5; //定义P3_4连接MAX7219 CLK 引脚#define CS P2^4; //定义P3_3连接MAX7219 CS 引脚/***************************************************************** * 共阴极七段数码管显示对应段查询表(数字0-9分别对应code_table[0]-[9])***********************************************************/uchar code code_table[10]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b}; /*采用数组*//****************************************************************** * MAX7219_Send()描述: 向MAX7219传送一字节数据Arguments : dataout = data to sendReturns : none******************************************************************/ void send (uchar datain){char I,temp;for (i=8; i>0; i--){CLK=0; // CLK 置低temp=datain&0x80;if (temp==0x80) // 判断并输出一位DATA=1; // 输出"1"else // 或DATA=0; // 输出"0"datain<<=1; //datain左移位,以便再次与0x80按位与CLK=1; // CLK 置高}}/**************************************************************** * MAX7219_Write()/MAX7219_Write_1()描述: 向 MAX7219 写命令Arguments : reg_number = register to write todataout = data to write to MAX7219Returns : none************************************************************** */ void MAX7219_Write (uchar add1, uchar dat1) //向第一片MAX7219写数据{CS=0; // CS置低选通MAX7219send(add1); // 写register number 到MAX7219send(dat1); // 写data 到MAX7219CS=1; // 利用CS上升沿锁存以上移位进输入的16位数据}void MAX7219_Write_1(uchar add2,uchar dat2) //向第二片MAX7219写数据{CS=0;sent(add2);sent(dat2);CLK=1; // 第16.5个时钟周期,数据从第一片MAX7219的DOUT端开始输出sent(REG_NO_OP); //对第一片MAX7219进行空操作,sent(0x00);CS=1;}/******************************************************************** MAX7219_DisplayChar()描述: 使某一位显示一个数字Arguments : digit = digit number (0-7)character = character to display (0-9, A-Z)Returns : none****************************************************************/void MAX7219_DisplayChar (char digit, char character){MAX7219_Write(digit, character);}PS:这个函数可以不要,直接调用写数据函数就可以了(原版)/******************************************************************** MAX7219_Clear()/MAX7219_clear_1()描述: 清除所有位的显示Arguments : noneReturns : none*****************************************************************/ void MAX7219_Clear (){uchar i;for (i=0; i < 8; i++)MAX7219_Write(i, 0x00); // 清除第一片MAX7219所有位的显示}void MAX7219_Clear_1(){uchar i;for(i=1;i<=8;i++)MAX7219_Write_1(i,0x00); //清除第二片MAX7219所有位的显示}PS:可以两片一起清楚数据,但建议分开较好。

MAX7219在单片机系统显示电路中的应用

MAX7219在单片机系统显示电路中的应用

摘要:介绍8位串行LED显示驱动 ̄MAX7219的特性,并给出了单片机系统中MAX7219与MCS--51的硬件接口设计,以及相应的软件流程图和编程实现。

关键词:MAX721;单片机;显示电路单片机系统通常需要有LED对系统的状态进行观测,而很多工业控制用单片机FIMCS51系列本身并无显示接口部分,需要外接显示的译码驱动电路。

在MCS51单片机的控制系统中,采用MAxIM公司的MAX7219构成显示接口电路,仅需使用单片机3个引脚,即可实现对8位LED数码管的显示控制和驱动,线路简单,控制方便。

1MAx7219与单片机的连接MAX7219与MCS一51单片机连接时可根据具体的系统要求和系统资源占用情况选用2种驱动方式:串行口移位驱动MAX7219或I/0口模拟三线协议时序驱动MAX7219。

通常单片机系统的串口要用作其他用途,比如和上位机联机通信等。

故本系统利用单片机的I/O口来模拟MAX7219的时序,应用电路如图1所示。

其中,P2.0作串行数据输出,连接 ̄IDIN端,P2.1和P2.2连扫描电路选通某字时,相引脚DIG×为低电平。

显示接至CLK和LOAD,通过程序分别模拟MAX7219的时钟数据串行输入MAX7219,移位存入数字寄存器,片内多脉CLK及数据加载LOAD信号。

ISET管脚接l0kQ电阻路扫描电路顺序扫描,分时选通各字,被选通字的引脚用于限定峰值段电流。

置为低电平,LED发光显示数字,未选通的字引脚保持本系统的设计中,只需要5个LED,所以DIG5~DIG7高电平。

未用悬空。

显示电路中,所有LED显示器的同名段(a~f,系统设计中,应用MAX7219芯片时需要注意如下dp)连接在一起并与MAX7219的同名段引脚(SA~SG,几个关键问题:SDP)H连,各LED显示器的共阴极分别与MAX721的相(1)3根信号线。

应字引脚(DIG0一DIG4)相连,以实现位选,当MAX7219在强干扰环境中,如大功率电机的启停或高压发生过程中,干扰源可能通过供电电源或3根信号线串入显示电路,造成显示器的不稳定,从而出现段闪烁、显示不全、甚至全暗或全亮的现象。

单片机时钟设计MAX7219驱动数码管

单片机时钟设计MAX7219驱动数码管

单片机时钟设计MAX7219驱动数码管#include#define uchar unsigned char#define uint unsigned intsbit DIN=P0^1; //"显示串行数据输入端"sbit LOAD=P0^2; //"显示数据锁存端"sbit CLK=P0^3; //"显示时钟输入端"#define DecodeMode 0x09 //"译码模式"#define Intensity 0x0a //"亮度"#define ScanLimit 0x0b //"扫描界限"#define ShutDown 0x0c //"掉电模式"#define DisplayTest 0x0f //"显示测试"uchar code seg_data[]={0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70,0x7F,0x7B}; //"0,1,2,3,4,5,6,7,8,9" uchar disp_buf[5];uchar code bit_tab[]={0x01,0x02,0x03,0x04};uchar hour=12,min=0,sec=0,count=0;bit flag;void delay (uint a) //" 毫秒延时函数"{uint i;while( --a != 0){for(i = 0; i < 110; i++);}}void write_max7219_byte(uchar temp){uchar i;for(i=0;i<8;i++){CLK=0;DIN=(bit)(temp&0x80);temp<<=1;CLK=1;}}void write_max7219(uchar address,uint dat){LOAD=0;write_max7219_byte(address);write_max7219_byte(dat);LOAD=1;}void Init_max7219 (void){write_max7219(ScanLimit,0x07); //*"设置扫描界限"*/write_max7219(DecodeMode,0xff); //*"设置译码模式"*/ write_max7219(Intensity,0x04); //*"设置亮度"*/write_max7219(ShutDown,0x01); //*"设置电源工作模式"*/ write_max7219(DisplayTest,0x01);delay(5);write_max7219(DisplayTest,0x00);}void conv(uchar in1,in2){disp_buf[0]=in1/10;disp_buf[1]=in1%10;disp_buf[2]=in2/10;if(flag==0)disp_buf[3]=(in2%10)|0x80;elsedisp_buf[3]=in2%10;}void display( ){write_max7219(bit_tab[0],disp_buf[0]); write_max7219(bit_tab[1],disp_buf[1]); write_max7219(bit_tab[2],disp_buf[2]); write_max7219(bit_tab[3],disp_buf[3]); }void init(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count==20){count=0;flag=~flag;sec++;if(sec==60) {sec=0;min++;if(min==60) {min=0;hour++;if(hour==24) {hour=0;min=0;sec=0;}}}}}void main() {init();Init_max7219 ( ); while(1){conv(hour,min); display( );}}。

max7219驱动数码管程序(51单片机+STM32 MAX7219数码管程序案例)

max7219驱动数码管程序(51单片机+STM32 MAX7219数码管程序案例)
SPI1_InitStructure.SPI_Mode=SPI_Mode_Master;//设置SPI工作模式;设置为主SPI
SPI1_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB; //高位MSB在先
SPI1_InitStructure.SPI_CPOL = SPI_CPOL_High; //选择了串行时钟的稳态,时钟悬空高
*功能:STM32_SPI1硬件配置初始化
*入口参数:无
*出口参数:无
*说明:STM32_SPI1硬件配置初始化,使用3V3
****************************************************************************/
void SPI1_Init(void)
SPI1_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;//数据捕获于第二个时钟沿
SPI1_InitStructure.SPI_NSS = SPI_NSS_Soft;CPolynomial = 7;//CRC值计算的多项式
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOA,GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//SPI1相关引脚

max7219程序

max7219程序
r2^=0x0080
[P_IOB_Data]=r2 //load值0,选中7219
retf
.endp
.public _display8
_display8:.proc
r1=0x08
[P_SIO_Data]=r1 //
call _busy
r1=[_data]
[P_SIO_Data]=r1
void InitIO_7219()
{
*P_IOB_DIR|=SCK_HEX;
*P_IOB_ATTRIB|=SCK_HEX;
*P_IOB_DATA|=SCK_HEX;
*P_IOB_DIR|=SDA_HEX;
*P_IOB_ATTRIB|=SDA_HEX;
*P_IOB_DATA|=SDA_HEX;
r2^=0x0080
[P_IOB_Data]=r2 //load值0,选中7219
retf
.endp
.public _display4
_display4:.proc
r1=0x04
[P_SIO_Data]=r1 //
call busy
r1=[_data]
[P_SIO_Data]=r1
.external _data
.external _bitdata
.ram
.code
.public _intint7219
_intint7219: .proc
r1=0xffff
[P_IOB_Dir]=r1
[P_IOB_Attrib]=r1
r1=0x0000
[P_IOB_Data]=r1
retf

max7219使用详解介绍

max7219使用详解介绍
该寄存器的主要功能有两个: 1 选择解码模式,MAX7219 有两种解码模式,Code B 和 No decode。 2 选择解码个数(戒范围) (MAX7219 最多可以解码 8 个数码管) 该寄存器所在地址为 0x9(D15~D12 设置为 0) 当我们向该地址写数据 0x00,则选择 No decode 解码模式,并丏解码数码管 7 到 0。此时,Code B 解码模式
D15~12 以 X 表示,代表可为 0,也可为 1。 Digit0~7 对应到 8 个数码管的地址。 Decode Mode:解码模式寄存器,其地址用 16 迚制表示为 0x09; Intensity:亮度调节寄存器,其地址用 16 迚制表示为 0x0A; Scan Limit:扫描范围寄存器,其地址用 16 迚制表示为 0x0B; Shutdown:省电模式,其地址用 16 迚制表示为 0x0C; Display Test:测试寄存器,其地址用 16 迚制表示为 0x0F;
这个图由三部分组成:
第一部分:是要显示的数据 第二部分:是要发送的数据 D7~D0 第三部分:是数码管的八个段,分别用 DP*,A,B,C,D,E,F,G(DP*表示小数点)
D7 来控制小数点的显示 在弄清这个图之前,我们有必要了解数码管的构造。 下面是数码管的构造图:
数码管有八个段(DP,A,B,C,D,E,F,G)每个段都有一个电路来驱动它, 当你要显示"0",就让 A,B,C,D,E,F 亮,让 G 灭。 当你要显示"1",就让 B,C 亮,让 A,D,E,F,G 灭。 其他的就丌用多说了。 我们再回过头去看 Code B Font 图, 当我们想让数码管显示"0",就向数据位 D3~D0 赋值"0000",那么 MAX7219 就会让 A,B,C,D,E NhomakorabeaF 亮,

max7129 使用方法

max7129 使用方法

(一)、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秒表程序(一键控制三个状态)

max7219秒表程序(一键控制三个状态)

#include <reg51.h>#include "type.h"#include "max7219.h"/********************************************************************控制按键定义***********************************************************************/ sbit Key = P3^0;/********************************************************************变量定义***********************************************************************/uint16 Ms = 0;uint16 Sec = 0;uint8 k;uint8 Count = 0;/************************************************************************函数声明*************************************************************************/void Start_Stop();void Init_Timer0();void Delay();void Display();void Key_In();void Reset();/************************************************************************main()主函数*************************************************************************/void main(){Init_Max7219();Init_Timer0();while(1){Key_In();switch(k){case 0 : Reset();break;case 1 : Display();break;case 2 : TR0 = 0;break;}}}/************************************************************************定时器0中断函数*************************************************************************/void Interrupt_Timer0() interrupt 1{TH0 = 0xee;TL0 = 0x00;Count++;if(Count >= 2){Count = 0;Ms++;if(Ms >= 99) //100次为1s{Ms = 0; //秒数最大显示为99,之后从头开始计时Sec++;}if(Sec >= 99)Sec = 0; //秒加到99,重新计数}}/************************************************************************Reset()清零函数*************************************************************************/void Reset(){Init_Max7219();Init_Timer0();Ms = 0;Sec = 0;}/************************************************************************Display()函数*************************************************************************/void Display(){Write_Max7219(DIG_8,Ms%10);Write_Max7219(DIG_7,Ms/10);Write_Max7219(DIG_6,(Sec%10 | 0x80));Write_Max7219(DIG_5,Sec/10);}/***********************************************************************延时函数(约7毫秒)************************************************************************/void Delay(uint16 x){char i;while(x--){for(i=0;i<125;i++);}}/************************************************************************定时器0初始化*************************************************************************/void Init_Timer0(){TMOD |= 0x11; //初始化两个定时器TH0 = 0x33; //只用到定时器0,赋初值,中断一次5msTL0 = 0x00;TR0 = 1; //启用定时器0ET0 = 1; //允许定时器中断EA = 1; //将总中断打开}/************************************************************************按键控制*************************************************************************/ void Key_In(){if(!Key){Delay(19);if(!Key){k++;if(k>2){k = 0;}while(!Key);}}}max7219.h#ifndef _MAX7219_H_#define _MAX7219_H_/*********************************************************引脚位定义**********************************************************/sbit LOAD=P1^2; //MAX7219 Load-Data Input: rising edge pin 12 sbit DIN=P1^1; //MAX7219 Serial-Data Input: rising edge pin 1 sbit CLK=P1^0; //MAX7219/****************************************************MAX7219 宏定义*****************************************************/#define REG_NO_OP 0x00 // 定义空操作#define DIG_1 0x01 // 定义数码管1#define DIG_2 0x02 // 定义数码管2#define DIG_3 0x03 // 定义数码管3#define DIG_4 0x04 // 定义数码管4#define DIG_5 0x05 // 定义数码管5#define DIG_6 0x06 // 定义数码管6#define DIG_7 0x07 // 定义数码管7#define DIG_8 0x08 // 定义数码管8#define DECODE_MODE 0x09#define INTENSITY 0x0A#define SCAN_LIMIT 0x0B#define SHUT_DOWN 0x0C#define DISPLAY_TEST 0x0F/***********************************************************MAX7210函数声明************************************************************/void Write_Max7219_byte(uint8 temp);//write max7219 a bytevoid Write_Max7219(uint8 address,uint8 dat);//write max7219 command and data void Init_Max7219(void);//Initize max7219/************************************************************MAX7219地址、数据写入函数子程序*************************************************************/void Write_Max7219_byte(uint8 temp){uint8 i;for (i=0;i<8;i++){CLK = 0;DIN = (bit)(temp&0x80);temp <<= 1;CLK = 1;}}/*************************************************************MAX7219地址、数据写入**************************************************************/void Write_Max7219(uint8 address,uint8 dat){LOAD = 0;Write_Max7219_byte(address);Write_Max7219_byte(dat);LOAD = 1;}/**************************************************************MAX7219初始化***************************************************************/void Init_Max7219(void){Write_Max7219(SHUT_DOWN, 0x01);Write_Max7219(DISPLAY_TEST, 0x00);Write_Max7219(DECODE_MODE, 0xff);Write_Max7219(SCAN_LIMIT, 0x07); //SCAN LIMIT 0~7 0xX0~0xX7 Write_Max7219(INTENSITY, 0x04);Write_Max7219(DIG_7,0x00);Write_Max7219(DIG_5,0x00);Write_Max7219(DIG_6,0x80);Write_Max7219(DIG_8,0x00);}#endiftype.h#ifndef _TYPE_H_#define _TYPE_H_typedef unsigned char uint8;typedef unsigned int uint16;typedef unsigned long uint32;typedef char int8;typedef int int16;typedef long int32;#endif。

MAX7219共阴极LED驱动器程序

MAX7219共阴极LED驱动器程序

MAX7219共阴极 LED数码管显示驱动(一)、 MAX7219MAX7219是一种串入、并出的共阴极LED数码管显示驱动器,每片可驱动8 位 LED数码管显示,与单片机的接口只要 3 根线,内带BCD译码器,及显示测试、移位、锁存器等,输出电流达40mA,外头只要一只亮度调整电阻。

MAX7219引脚图1、引脚功能说明DIN:串行数据输入端,CLK的上涨沿时数据被载入内部16 位移位存放器中CLK:串行时钟输入端,最高工作频次可达10MHzLOAD:片选端,低电平接收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芯片4片级联C51程序与电路

max7219芯片4片级联C51程序与电路
send(0);//输入空操作
send(0);//输入空操作 load=1;//收尾 LOAD 升高 }
write3(uchar pos,num)//同理,多输出一对空操作数 { load=0; send(pos); send(num);
send(0); send(0); send(0); send(0); load=1; }
}
void main()//主函数! { init();初始化四片 7219,里面的 write,write2,write3,write4 就是分别向 4 片 7219 写入数据的程序! for(number=1;number<9;number++)//简单的循环,让四片 7219 都显示出 1~8,顺 序相反 { write(number,number); write2(number,9-number); write3(number,number); write4(number,9-number);
4 片 7219 芯片级联 C51 程序与电路
7219 芯片可以直接带动 8 个数码管显示只需要 3 个 IO 口控制,功能强大,现 在用四片 7219 级联,使用 C 语言编程,力求简单、有效,借鉴了前辈的一些经 验,欢迎各路人马提出宝贵意见! 一.电路 这是在 proteus 中模拟的电路图:
看了这个图你一定知道 4 片 7219 级联是绝对可行的,那么请看细节:
write2(0x0c,1);//开启正常工作模式 1 正常 0 关闭芯片 write2(0x0f,0);//显示测试 正常工作 0 全亮 1 write2(0x09,0xff);//解码方式 0xff 全译码 write2(0x0b,0x07);//8 只 LED 全用 write2(0x0a,10);//亮度为 10

点阵屏驱动程序(MAX7219)

点阵屏驱动程序(MAX7219)

点阵屏驱动程序(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//出口参数:无//说明:void Write_Max7219(uchar address,uchar dat){uchar i;Max7219_pinCS=0;for(i=1;i<9;i++){Write_Max7219_byte(address); //写入地址,即数码管编号Write_Max7219_byte(dat); //写入数据,即数码管显示数字}Max7219_pinCS=1;}void Init_MAX7219(void) //初使化7219{Write_Max7219(0x09, 0x00); //译码方式:1;BCD码,0;非BCD模式Write_Max7219(0x0a, 0x0a); //亮度0-f (0-16) Write_Max7219(0x0b, 0x07); //扫描界限;8个数码管显示Write_Max7219(0x0c, 0x01); //掉电模式:0,普通模式:1Write_Max7219(0x0f, 0x00); //显示测试:1;测试结束,正常显示:0Write_Max7219(1,0); //清除缓冲区数据,消除显示误差Write_Max7219(2,0); //清除缓冲区数据,消除显示误差Write_Max7219(3,0); //清除缓冲区数据,消除显示误差Write_Max7219(4,0); //清除缓冲区数据,消除显示误差Write_Max7219(5,0); //清除缓冲区数据,消除显示误差Write_Max7219(6,0); //清除缓冲区数据,消除显示误差Write_Max7219(7,0); //清除缓冲区数据,消除显示误差Write_Max7219(8,0); //清除缓冲区数据,消除显示误差}/***************************************************/void Display_1(uchar dat){uchar i;for(i=1;i<9;i++){Max7219_pinCS=0;Write_Max7219_byte(i); //写入地址,即数码管编号Write_Max7219_byte(disp1[dat][i-1]); //写入数据,即数码管显示数字Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Max7219_pinCS=1;Write_Max7219(0,0); //清除缓冲区数据,消除显示误差}}void Display_2(uchar dat){uchar i;for(i=1;i<9;i++){Max7219_pinCS=0;Write_Max7219_byte(i); //写入地址,即数码管编号Write_Max7219_byte(disp1[dat][i-1]); //写入数据,即数码管显示数字Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Max7219_pinCS=1;Write_Max7219(0,0); //清除缓冲区数据,消除显示误差}}void Display_3(uchar dat){uchar i;for(i=1;i<9;i++){Max7219_pinCS=0;Write_Max7219_byte(i); //写入地址,即数码管编号Write_Max7219_byte(disp1[dat][i-1]); //写入数据,即数码管显示数字Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Max7219_pinCS=1;Write_Max7219(0,0); //清除缓冲区数据,消除显示误差}}void Display_4(uchar dat){uchar i;for(i=1;i<9;i++){Max7219_pinCS=0;Write_Max7219_byte(i); //写入地址,即数码管编号Write_Max7219_byte(disp1[dat][i-1]); //写入数据,即数码管显示数字Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Max7219_pinCS=1;Write_Max7219(0,0); //清除缓冲区数据,消除显示误差}}void Display_5(uchar dat){uchar i;for(i=1;i<9;i++){Max7219_pinCS=0;Write_Max7219_byte(i); //写入地址,即数码管编号Write_Max7219_byte(disp1[dat][i-1]); //写入数据,即数码管显示数字Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Max7219_pinCS=1;Write_Max7219(0,0); //清除缓冲区数据,消除显示误差}void Display_6(uchar dat){uchar i;for(i=1;i<9;i++){Max7219_pinCS=0;Write_Max7219_byte(i); //写入地址,即数码管编号Write_Max7219_byte(disp1[dat][i-1]); //写入数据,即数码管显示数字Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Write_Max7219_byte(0);Max7219_pinCS=1;Write_Max7219(0,0); //清除缓冲区数据,消除显示误差}}void Display_7(uchar dat){uchar i;for(i=1;i<9;i++){Max7219_pinCS=0;Write_Max7219_byte(i); //写入地址,即数码管编号Write_Max7219_byte(disp1[dat][i-1]); //写入数据,即数码管显示数字Write_Max7219_byte(0);Write_Max7219_byte(0);Max7219_pinCS=1;Write_Max7219(0,0); //清除缓冲区数据,消除显示误差}void Display_8(uchar dat){uchar i;for(i=1;i<9;i++){Max7219_pinCS=0;Write_Max7219_byte(i); //写入地址,即数码管编号Write_Max7219_byte(disp1[dat][i-1]); //写入数据,即数码管显示数字Max7219_pinCS=1;Write_Max7219(0,0); //清除缓冲区数据,消除显示误差}}void main(void){Init_MAX7219();Display_1(0); //1号屏显示数字0Display_2(1); //2号屏显示数字1Display_3(2); //3号屏显示数字2Display_4(3); //4号屏显示数字3Display_5(4); //5号屏显示数字4Display_6(5); //6号屏显示数字5Display_7(6); //7号屏显示数字6Display_8(7); //8号屏显示数字7while(1);}。

MAX7219级联教程

MAX7219级联教程
பைடு நூலகம்
河南工业大学爬山虎工作室
DIN=1; else DIN=0; Dat <<= 1; CLK = 1; _nop_(); _nop_(); CLK = 0; } for(i=0;i<Num_Addr;i++) { for(j=0;j<16;j++) { CLK = 0; DIN = 0; CLK = 1; _nop_(); _nop_(); CLK = 0; } } LOAD = 1; } void Initialise7219()//初始化 { //第 0 个 7219 初始化 Write(0x00,0x09,0xff); //编码模式 Write(0x00,0x0b,0x07); //全部扫描 Write(0x00,0x0c,0x01); //正常模式:1,掉电模式:0 Write(0x00,0x0a,0x07); //消隐时间设为 T/2 //第 1 个 7219 初始化 Write(0x01,0x09,0xff); //编码模式 Write(0x01,0x0b,0x07); //全部扫描 Write(0x01,0x0c,0x01); //正常模式 Write(0x01,0x0a,0x07); //消隐时间设为 T/2 } void main() { u8 i; Initialise7219(); DelayMS(1); for(i=0;i<8;i++) {
河南工业大学爬山虎工作室
MAX7219 级联教程,附驱动源码
一、电路原理图
河南工业大学爬山虎工作室
二、 级联程序
#include <reg52.h> #include <intrins.h> #define u8 unsigned char #define uint unsigned int sbit DIN = P2^0; sbit LOAD = P2^1; sbit CLK = P2^2; u8 Disp_Buffer[8]={2,0,0,9,10,8,10,9}; //软件延时函数,延时 xms void DelayMS(uint x) { u8 t; while(x--) { for(t=120;t>0;t--); } } //向第 Num_Addr 片 7219 的 Addr 寄存器写入一个 Dat 数据 //Num_Addr:7219 地址(0~255) //Addr:7219 数显寄存器地址(1~8) //Dat:要显示的数据(0~15)(含字母) void Write(u8 Num_Addr,u8 Addr,u8 Dat) { u8 i,j; LOAD = 0; for(i=0;i<8;i++) { CLK = 0; if(Addr&0x80) DIN=1; else DIN=0; Addr <<= 1; CLK = 1; _nop_(); _nop_(); CLK = 0; } for(i=0;i<8;i++) { CLK = 0; if(Dat&0x80)

MAX7219级联教程

MAX7219级联教程

河南工业大学爬山虎工作室
DIN=1; else DIN=0; Dat <<= 1; CLK = 1; _nop_(); _nop_(); CLK = 0; } for(i=0;i<Num_Addr;i++) { for(j=0;j<16;j++) { CLK = 0; DIN = 0; CLK = 1; _nop_(); _nop_(); CLK = 0; } } LOAD = 1; } void Initialise7219()//初始化 { //第 0 个 7219 初始化 Write(0x00,0x09,0xff); //编码模式 Write(0x00,0x0b,0x07); //全部扫描 Write(0x00,0x0c,0x01); //正常模式:1,掉电模式:0 Write(0x00,0x0a,0x07); //消隐时间设为 T/2 //第 1 个 7219 初始化 Write(0x01,0x09,0xff); //编码模式 Write(0x01,0x0b,0x07); //全部扫描 Write(0x01,0x0c,0x01); //正常模式 Write(0x01,0x0a,0x07); //消隐时间设为 T/2 } void main() { u8 i; Initialise7219(); DelayMS(1); for(i=0;i<8;i++) {
更多资源和知识请关注微信公共号 河爬山虎工作室。 分享资源、拒绝技术封锁。 快来加入我们吧。
河南工业大学爬山虎工作室
二、 级联程序
#include <reg52.h> #include <intrins.h> #define u8 unsigned char #define uint unsigned int sbit DIN = P2^0; sbit LOAD = P2^1; sbit CLK = P2^2; u8 Disp_Buffer[8]={2,0,0,9,10,8,10,9}; //软件延时函数,延时 xms void DelayMS(uint x) { u8 t; while(x--) { for(t=120;t>0;t--); } } //向第 Num_Addr 片 7219 的 Addr 寄存器写入一个 Dat 数据 //Num_Addr:7219 地址(0~255) //Addr:7219 数显寄存器地址(1~8) //Dat:要显示的数据(0~15)(含字母) void Write(u8 Num_Addr,u8 Addr,u8 Dat) { u8 i,j; LOAD = 0; for(i=0;i<8;i++) { CLK = 0; if(Addr&0x80) DIN=1; else DIN=0; Addr <<= 1; CLK = 1; _nop_(); _nop_(); CLK = 0; } for(i=0;i<8;i++) { CLK = 0; if(Dat&0x80)

MAX7219与51单片机的驳接

MAX7219与51单片机的驳接

MAX7219与51单片机的驳接
MAX7219 是一种高集成化的串行输入/输出的共阴极LED 显示驱动器。

每片可驱动8 位7 段加小数点的共阴极数码管,可以数片级联,而与微处理器的连接只需3 根线。

MAX7219 内部设有扫描电路,除了更新显示数据时从单片
机接收数据外,平时独立工作,极大地节省了MCU 有限的运行时间和程序资源。

MAX7219 芯片上包括BCD 译码器、多位扫描电路、段驱动器、位驱动器和用于存放每个数据位的8 乘以8 静态RAM 以及数个工作寄存器。

通过指令设置这些工作寄存器,可以使MAX7219 进入不同的工作状态。

1管脚说明
图1 是MAX7219 的管脚分布图。

其中:
(1)DIN为串行数据输入端。

当CLK 为上升沿时,数据被载入16 b 内部移位寄存器。

(2)CLK为串行时钟输入端。

其最大工作频率可达10 MHz。

(3)LOAD为片选端,当LOAD 为低电平时,芯片接收来自DIN 的数据,
接收完毕,LOAD 回到高电平时,接收的数据将被锁定。

(4)DIG0~DIG7为吸收显示器共阴极电流的位驱动线。

其最大值可达500 mA,关闭状态时,输出+VCC。

(5)SEGA~SEGG,DP为驱动显示器7 段及小数点的输出电流,一般为40 mA 左右,可软件调整,关闭状态时,接入GND。

(6)DOUT为串行数据输出端,通常直接接入下一片MAX7219 的DIN 端。

51单片机+MAX7219

51单片机+MAX7219

Protues仿真51单片机+MAX7219循环显示0-9仿真电路代码:void delayms(unsigned int ms);//声明毫秒延时函数/********************************************************** **************I/O定义*********************************************************** **************/sbit DIN=P0^0;//MAX7219 DIN引脚sbit LOAD=P0^1;//MAX7219 Load引脚sbit CLK=P0^2; //MAX7219 CLK引脚/********************************************************** **************指令函数*********************************************************** **************/void Command(uchar add,uchar dat){uchar ADS,i,j;CLK=0;LOAD=0;DIN=0;i=4;while(i<16){if(i<8){ADS=add;}else{ADS=dat;}for(j=8;j>=1;j--){if((ADS&0x80)==0){DIN=0 ;}else{DIN=1;}ADS=ADS<<1;CLK=1;CLK=0;}i=i+8;}LOAD=1;}/********************************************************** **************主函数*********************************************************** **************/void main(void){uchar d=0;Command(0x0c,0x01);//工作模式--常规模式Command(0x0b,0x07);//扫苗模式--7个数码管Command(0x0a,0x05);//亮度模式--11/32Command(0x09,0xff);//译码模式--7段数码管while(1){for(d=0;d<10;d++){switch(d){case0:Command(0x01,0x00);Command(0x02,0x01);Command(0x03,0x02);Co mmand(0x04,0x03);Command(0x05,0x04);Command(0x06,0x05);Comm and(0x07,0x06);Command(0x08,0x07);break;case1:Command(0x01,0x01);Command(0x02,0x02);Command(0x03,0x03);Co mmand(0x04,0x04);Command(0x05,0x05);Command(0x06,0x06);Comm and(0x07,0x07);Command(0x08,0x08);break;case2:Command(0x01,0x02);Command(0x02,0x03);Command(0x03,0x04);Co mmand(0x04,0x05);Command(0x05,0x06);Command(0x06,0x07);Comm and(0x07,0x08);Command(0x08,0x09);break;case3:Command(0x01,0x03);Command(0x02,0x04);Command(0x03,0x05);Co mmand(0x04,0x06);Command(0x05,0x07);Command(0x06,0x08);Comm and(0x07,0x09);Command(0x08,0x00);break;case4:Command(0x01,0x04);Command(0x02,0x05);Command(0x03,0x06);Co mmand(0x04,0x07);Command(0x05,0x08);Command(0x06,0x09);Comm and(0x07,0x00);Command(0x08,0x01);break;case5:Command(0x01,0x05);Command(0x02,0x06);Command(0x03,0x07);Co mmand(0x04,0x08);Command(0x05,0x09);Command(0x06,0x00);Command(0x07,0x01);Command(0x08,0x02);break;case6:Command(0x01,0x06);Command(0x02,0x07);Command(0x03,0x08);Co mmand(0x04,0x09);Command(0x05,0x00);Command(0x06,0x01);Comm and(0x07,0x02);Command(0x08,0x03);break;case7:Command(0x01,0x07);Command(0x02,0x08);Command(0x03,0x09);Co mmand(0x04,0x00);Command(0x05,0x01);Command(0x06,0x02);Comm and(0x07,0x03);Command(0x08,0x04);break;case8:Command(0x01,0x08);Command(0x02,0x09);Command(0x03,0x00);Co mmand(0x04,0x01);Command(0x05,0x02);Command(0x06,0x03);Comm and(0x07,0x04);Command(0x08,0x05);break;case9:Command(0x01,0x09);Command(0x02,0x00);Command(0x03,0x01);Co mmand(0x04,0x02);Command(0x05,0x03);Command(0x06,0x04);Comm and(0x07,0x05);Command(0x08,0x06);break;default:Command(0x01,0x00);Command(0x02,0x00);Command(0x03 ,0x00);Command(0x04,0x00);Command(0x05,0x00);Command(0x06,0x0 0);Command(0x07,0x00);Command(0x08,0x00);break;}delayms(1000);}}}/********************************************************** **************毫秒延时函数*********************************************************** **************/void delayms(unsigned int ms){unsigned int i,j;for(j=0;j<ms;j++)for(i=0;i<115;i++);}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#define MSB 0x80
#define LSB 0x01
//max7219 part
#define DECODE_MODE 0x09
#define INTENSITY 0x0A
#define SCAN_LIMIT 0x0B
#define SHUT_DOWN 0x0C
#define DISPLAY_TEST 0x0F
{
LOAD = LOW;
Write_Max7219_byte(address);
Write_Max7219_byte(dat);
LOAD = HIGH;
}
void Init_Max7219(void) //初始化max7219子函数设置工作寄存器需要查看芯片手册
{
Write_Max7219(SHUT_DOWN,0x01); //Normal Operation XXXXXXX1 Shutdown Mode XXXXXXXX0
Write_Max7219(SCAN_LIMIT,0x07); //SCAN LIMIT 0~7 0xX0~0xX7
Write_Max7219(INTENSITY,0x0f); //Set Intensity 0xX0~0xXf强度调节
}
void main(void)//显示1~8数字
{
unsigned char i;
void delayms(uint z)//延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y-Fra bibliotek);}
void Write_Max7219_byte(unsigned char temp)//发送一个字节的子程序,上升沿发送数据
{
unsigned char i;
sbit LOAD = P3^5; //MAX7219 Load-Data Input:rising edgepin 12
sbit DIN = P3^6;//MAX7219 Serial-Data Input:rising edgepin 1
sbit CLK = P3^7;//MAX7219 Serial-Clock Input:maximum 10MHzpin 13
i=0;
Init_Max7219();
while(TRUE)
{
Write_Max7219(1,0x83+i);delayms(500);
i++;
}
}
for (i=0; i<8; i++)
{
CLK = LOW;
DIN = (bit)(temp&MSB);
temp <<=1;
CLK = HIGH;
}
}
void Write_Max7219(unsigned char address,unsigned char dat)//向寄存器中写入一个数据先写地址,后写数据load上升沿锁存数据
Write_Max7219(DISPLAY_TEST, 0x00); //Normal Operation XXXXXXX0 Display Test Mode XXXXXXXX1
Write_Max7219(DECODE_MODE,0xff); //Decode Mode Select D7~D0 1 B decode 0 No decode在非BCD译码态输入,高四位为8,9,A,B,C,D,E,F等数显示“.”低四位为正常数码管字型码。
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
//common part
#define HIGH 1
#define LOW 0
#define TRUE 1
#define FALSE 0
#define ZERO 0
相关文档
最新文档