跪求MAX7219驱动数码管的时钟代码

RT
2024-12-18 07:34:22
推荐回答(1个)
回答1:

void init_max7219()

{

  w_max7219(0x0a,0x07);  //显示亮度,取值范围0~f

  w_max7219(0x0b,0x07);  //8位扫描显示,取值范围0x01~0x07

  w_max7219(0x09,0x00);  //译码方式,0x00为不译码,0xff为译码

  w_max7219(0x0c,0x01);  //操作方式,0x00为低功耗模式,0x01为正常操作模式

  w_max7219(0x0f,0x00);  //显示状态,0x00为正常显示,0x01为显示测试

  timer_ms(2);

}


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

函数名称:w_max7219

函数功能:向MAX7219写入数据

入口参数:addr MAX7219内部寄存器地址,wdata 写入内部寄存器的操作数值

出口参数:

其    它:

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

void w_max7219(unsigned char addr,unsigned char wdata)

{

  unsigned int temp,i=1,j,k;

  LD=0;

  while(i<16)

  {

    if(i<8) temp=addr;  //先写入MAX7219内部寄存器地址,再向内部寄存器写入操作数值

else temp=wdata;

for(j=0;j<8;j++)

{

 CLK=0;

 if((temp&0x80)==0x80) DIN=1;  //先发送数据的最高位

 else DIN=0;

      for(k=5;k>0;k--);  //时钟频率高的单片机需曾加延时时间,此处为12MHz ,k=5

 CLK=1;

      for(k=5;k>0;k--);

 temp<<=1;  

}

i+=8;

  }

  LD=1;

}


/*-------------------------------------------------------------------------------------------