码迷,mamicode.com
首页 > 其他好文 > 详细

点阵大屏语音感应时计——MAX7219点阵

时间:2015-10-29 16:27:10      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:stc   单片机   max7219   点阵   级联   

MAX7219点阵模块可以用三根数据线实现8*8的LED点阵控制,而且不需要单片机参与扫描,使用非常方便。更为重要的是,它支持模块级联使用,在不增加IO数量的条件下,实现多模块的控制。因此在大屏时计中采用了3个MAX7219点阵模块组合成8*24的点阵屏。

点阵的使用遇到一点小麻烦,是关于级联使用的,网络上查询到的代码每一块点阵的写入需要采用单独的函数,如:

//向第二片MAX7219写数据    
void MAX7219_Write_1(uchar add2,uchar dat2) {    
    Max7219_pinCS=0;    
    sent(add2);               
    sent(dat2);  
    Max7219_pinCLK=1;      // 第16.5个时钟周期,数据从第一片MAX7219的DOUT端开始输出 
    sent(REG_NO_OP);   //对第一片MAX7219进行空操作, 
    sent(0x00); 
    Max7219_pinCS=1;    

这不实用,不敢想象点阵模块数量更多的情况。改写后如下:

// 首先定义模块的数量

#define MAX7219_NUMS    3  

 

//-------------------------------------------  
//功能:向MAX7219写入数据    
//入口参数:chip: 级联芯片编号,0~MAX7219_NUMS-1    
//    address、dat    
   
void Write_Max7219(uchar chip, uchar address, uchar dat) {    
    int i;    
    Max7219_pinCS=0;    
    for(i=0;i<MAX7219_NUMS;i++) {    
        if(i==chip) {    
            Write_byte(address);    
            Write_byte(dat);    
        } else {    
            Write_byte(REG_NO_OP);   //空操作, 
            Write_byte(REG_NO_OP);   //空操作    
        }    
    }    
    Max7219_pinCS=1;                       
}

另外,发两个函数,刚好也可以作为使用上述函数对点阵屏操作的例子。

//-------------------------------------------  
//功能: 点阵屏初始化

//入口参数:无  

void MAX7219_Init(void) {  
    int i;    
    for(i=0;i<MAX7219_NUMS;i++) {    
        Write_Max7219(i, 0x09, 0x00);       //译码方式:BCD码    
        Write_Max7219(i, 0x0a, 0x01);       //亮度    
        Write_Max7219(i, 0x0b, 0x07);       //扫描界限;8个数码管显示    
        Write_Max7219(i, 0x0c, 0x01);       //掉电模式:0,普通模式:1    
        Write_Max7219(i, 0x0f, 0x00);       //显示测试:1;测试结束,正常显示:0    
    }    
    for(i=0;i<8*MAX7219_NUMS;i++)    
        Write_Max7219(i/8, i%8+1, 0);    // 黑屏    
}

 

//-------------------------------------------  
//功能: 关闭点阵屏显示

//入口参数:无  

void MAX7219_Sleep(void) {  
    int i;    
    for(i=0;i<8*MAX7219_NUMS;i++)    
        Write_Max7219(i/8, i%8+1, 0);    // 黑屏    
    for(i=0;i<MAX7219_NUMS;i++) {    
        Write_Max7219(i, 0x0c, 0x00);       //掉电模式:0,普通模式:1    
    }    
}

本文出自 “青龙偃月” 博客,转载请与作者联系!

点阵大屏语音感应时计——MAX7219点阵

标签:stc   单片机   max7219   点阵   级联   

原文地址:http://longman.blog.51cto.com/2730483/1707739

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!