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条评论)
登录后参与讨论