max7219(max7219点阵滚动显示)

http://www.itjxue.com  2023-01-26 04:17  来源:未知  点击次数: 

跪求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);

}

(责任编辑:IT教学网)

更多

推荐鼠标代码文章