原创 max7221LEDDisplayDriver

2007-1-12 04:12 4725 6 6 分类: MCU/ 嵌入式

点击看大图


Max7221的数据传输时序:每次16bits,高位在前;SCl上升沿触发接收。


数据包格式:


点击看大图


传输时序:


/*******************************************************************************
*** 函 数 名: static void Max7221_Write(int8u addr,int8u dat)
*** 功能描述: 向7221中写一个字节数据;
*** 全局变量: No !
*** 输  入: addr:寄存器地址;dat:数据;
*** 输  出: No !
*** 创 建 人:huangtiexiong     日期:2006-11-28
*** 修 改 人:           日期:2006-11-28
*** 函数说明: 7221一次传输的数据包为16bit,以_CS拉低为启动传输标识,
       数据在每一个SCL时钟的上升沿被触发接收。
       而且最高位先发送;
/******************************************************************************/
static void Max7221_Write(int8u addr,int8u dat)
{
 int8u i;
 _CS = 0;    //启动数据传输;
 for(i=0;i<8;i++)
 {
  if(addr&0x80) DIN = 1;  //将数据送往总线;
  else      DIN =0;
  SCL = 1;   //数据在SCL的上升沿触发捕捉;
  addr <<= 1;
  _nop_();
  SCL = 0;   //SCL复位,为下一个Bit准备;
  }
 for(i=0;i<8;i++)
 {
  if(dat&0x80)  DIN = 1;
  else      DIN =0;
  SCL = 1; 
  dat <<= 1;
  _nop_();
  SCL = 0;
  } 
 _CS = 1;  //结束此次数据报传输,同时数据锁存;
 SCL = 0;  //保证_CS为1时,SCL为0; 
 }
Max7221初始化:


/*******************************************************************************
*** 函 数 名: extern void Max7221_Init(void)
*** 功能描述: 7221初始化;
*** 全局变量: NO !
*** 输  入: NO !
*** 输  出: NO !
*** 创 建 人:huangtiexiong     日期:2006-11-28
*** 修 改 人:           日期:2006-11-28
*** 函数说明: 初始化中必须打开显示;向Shut down寄存器写1;
/******************************************************************************/
extern void Max7221_Init(void)
{
 _CS = 1;  //CS为1时,总线传输终止;
 SCL = 0;  //保证此时SCL信号为0;为数据传输作准备;
 _nop_();
 _nop_();
 
 /*************************************************
  显示模式:正常、测试;                
 *************************************************/
 Max7221_Write(REG_TEST_MODE,    0x00); //正常显示模式;
 /*************************************************
  编码模式:              
 *************************************************/
 Max7221_Write(REG_DECODE_MODE,  0xff); //八个数码管digit均CODE B编码;
 /*************************************************
   控制显示的数码管数:                
 *************************************************/
 Max7221_Write(REG_SCAN_LIMIT,   0x07); //八个数码管均扫描显示;
 /*************************************************
  控制显示亮度:             
 *************************************************/
 Max7221_Write(REG_INTENSITY,    0x0f); //最高亮度;
 /*************************************************
  开启数码管(digits)显示:
 *************************************************/
 Max7221_Write(REG_SHUT_DOWN,    0x01); //正常显示模式;初始化时必须向
                     //该寄存器写1,否则显示关闭;
 }


附proteus仿真图:


点击看大图

文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /2 下一条