max7219(max7219点阵滚动显示)
跪求MAX7219驱动数码管的时钟代码
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(i16)
{
? if(i8) temp=addr; ?//先写入MAX7219内部寄存器地址,再向内部寄存器写入操作数值
else temp=wdata;
for(j=0;j8;j++)
{
?CLK=0;
?if((temp0x80)==0x80) DIN=1; ?//先发送数据的最高位
?else DIN=0;
? ? for(k=5;k0;k--); ?//时钟频率高的单片机需曾加延时时间,此处为12MHz ,k=5
?CLK=1;
? ? for(k=5;k0;k--);
?temp=1;
}
i+=8;
}
LD=1;
}
/*-------------------------------------------------------------------------------------------
基于MAX7219的按键调光
这样24C02会一直被读写,过不了多久就没办法再写了, 理论是按键读取后有变化再去写入就好
max7219数码管小数点点不上
{
for(j=1;j9;j++)
{
max7219_send(j,0xf8);//0x08无小数点,0xf8有小数点
HAL_Delay(100);
}
for(j=1;j9;j++)
{
max7219_send(j,0x0f);//清屏,0xff会显示小点
HAL_Delay(100);
}
/* USER CODE END WHILE */
for(j=1;j9;j++)
{
max7219_send(j,j);
HAL_Delay(500);
}
uint8_t max7219_send(uint8_t reg,uint8_t value)//reg:指定的寄存器地址 value:写入的值
{
uint8_t status;
max7219_cs_low();
status=HAL_SPI_Transmit(hspi2, reg, 1,0xff); //如果速度太快两次发送之间加延时区隔
status=HAL_SPI_Transmit(hspi2,value,1,0xff);
max7219_cs_high();
return(status);
}