最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

MAX7219单片以及级联驱动程序

来源:动视网 责编:小OO 时间:2025-09-25 13:06:44
文档

MAX7219单片以及级联驱动程序

MAX7219单片以及级联驱动程序2011-03-2009:40说明一下:这个word版式是从百度上下载的,在原版中,作者只是写了驱动一片MAX7219的程序。本人作为菜鸟,第一次使用MAX7219就用了两片级联来驱动15个数码管,按照原版程序驱动一片MAX7219是没有问题的,但是,驱动两片MAX7219就不行了。自己先认真看了MAX7219的DataSsheet,因为英语是个二把刀,看的迷迷糊糊,似懂非懂(可见英语还是很重要的),又在网上搜索也没发现有正确的程序(都是有点儿问题,上网贴出来
推荐度:
导读MAX7219单片以及级联驱动程序2011-03-2009:40说明一下:这个word版式是从百度上下载的,在原版中,作者只是写了驱动一片MAX7219的程序。本人作为菜鸟,第一次使用MAX7219就用了两片级联来驱动15个数码管,按照原版程序驱动一片MAX7219是没有问题的,但是,驱动两片MAX7219就不行了。自己先认真看了MAX7219的DataSsheet,因为英语是个二把刀,看的迷迷糊糊,似懂非懂(可见英语还是很重要的),又在网上搜索也没发现有正确的程序(都是有点儿问题,上网贴出来
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 send 

Returns : 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 to 

dataout = data to write to MAX7219 

Returns : none ************************************************************** */ 

void MAX7219_Write (uchar add1, uchar dat1)  //向第一片MAX7219写数据

CS=0;                    // CS置低选通 MAX7219

send(add1);               // 写register number 到 MAX7219 

send(dat1);                // 写 data 到 MAX7219 

CS=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 : none 

Returns : 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_SetBrightness()描述: 设置数码管显示亮度

Arguments : brightness (0-15)

Returns : none *****************************************************************/ 

void MAX7219_SetBrightness (char brightness)

brightness &= 0x0f;                             // 屏蔽高位字节 

MAX7219_Write(REG_INTENSITY, brightness);   // 设置数码管显示亮度 

MAX7219_Write_1(REG_INTENSITY, brightness);  //第二片MAX7219

/******************************************************************** MAX7219_DisplayTestStart()描述: 进入 test 模式

Arguments : none

Returns : none ****************************************************************/ 

void MAX7219_DisplayTestStart () 

MAX7219_Write(REG_DISPLAY_TEST, 1);   //置MAX7219为 test 模式

MAX7219_Write_1(REG_DISPLAY_TEST, 1); //第二片MAX7219

/******************************************************************** MAX7219_DisplayTestStop()描述: 退出 test 模式

Arguments : none

Returns : none ***************************************************************/ 

void MAX7219_DisplayTestStop () 

MAX7219_Write(REG_DISPLAY_TEST, 0);   //置 MAX7219为正常显示模式 

MAX7219_Write_1(REG_DISPLAY_TEST, 0); //第二片MAX7219

}

/******************************************************************** MAX7219_ShutdownStart()描述: 进入 shutdown 模式

Arguments : none

Returns : none ************************************************************/ 

void MAX7219_ShutdownStart ()

MAX7219_Write(REG_SHUTDOWN, 0);   //置MAX7219为 shutdown 模式 

MAX7219_Write_1(REG_SHUTDOWN, 0); //第二片MAX7219

/********************************************************************

MAX7219_ShutdownStop()描述: 退出 shutdown 模式

Arguments : none

Returns : none ****************************************************************/ 

void MAX7219_ShutdownStop () 

MAX7219_Write(REG_SHUTDOWN, 1);    //置MAX7219为正常显示模式 

MAX7219_Write_1(REG_SHUTDOWN, 1); //第二片MAX7219

/******************************************************************** MAX7219_Init() 描述: MAX7219初始化模块,应该先于其他MAX7219函数而被调用 

Arguments : none

Returns : none *****************************************************************/ 

void MAX7219_Init () 

{   

DATA=1;                  // 置DATA为1 

CLK=1;                   // 置CLK 为1 

CS=1;                    // 置CS 为1 

MAX7219_Write(REG_SCAN_LIMIT, 7);       // 设置为全显示 

MAX7219_Write_1(REG_SCAN_LIMIT, 7);     //第二片MAX7219

MAX7219_Write(REG_DECODE, 0x00);       // 所有位设置为非解码方式 

MAX7219_Write_1(REG_DECODE, 0x00);     //第二片MAX7219

MAX7219_ShutdownStop();   //置MAX7219为正常显示模式 (非shutdown模式) 

MAX7219_DisplayTestStop();   // 置MAX7219为正常显示模式 (非test模式) 

MAX7219_Clear();                            // 清除所有位的显示 

MAX7219_Clear_1();                          //第二片MAX7219

MAX7219_SetBrightness(INTENSITY_MAX);    // 置最大亮度 

}

PS:如果只需驱动一片MAX7219,将关于驱动第二片MAX7219的函数去除就可以。

文档

MAX7219单片以及级联驱动程序

MAX7219单片以及级联驱动程序2011-03-2009:40说明一下:这个word版式是从百度上下载的,在原版中,作者只是写了驱动一片MAX7219的程序。本人作为菜鸟,第一次使用MAX7219就用了两片级联来驱动15个数码管,按照原版程序驱动一片MAX7219是没有问题的,但是,驱动两片MAX7219就不行了。自己先认真看了MAX7219的DataSsheet,因为英语是个二把刀,看的迷迷糊糊,似懂非懂(可见英语还是很重要的),又在网上搜索也没发现有正确的程序(都是有点儿问题,上网贴出来
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top