这是我以前用的,传给你参考一下
//------------------------------------------------------ // spi_led_send //------------------------------------------------------ // // 向74HC595发送一个字节 // 注: 74HC595速度很快,MCU应用一般不需要做任何延时,移位时 // 钟与输出锁存时钟均为上升沿触发(高,低电平或下降沿均无效) // void spi_led_send(U8 byte) { U8 i;
//------------------------------------- // 负逻辑 #if _74HC595_NEGATIVE_LOGIC_OUT_EN byte = ~byte; #endif
#if _74HC595_CLK_IDLE == 0 SPI_CLK = 0; // 准备上升沿 SPI_LATCH = 0; // 准备上升沿
for(i=8; i; i--){ byte <<= 1; SPI_MOSI = CY; SPI_CLK = 1; // 上升沿发送数据(置于此处更合理) SPI_CLK = 0; // 准备上升沿 }
//------------------------------------- // 使能输出 SPI_LATCH = 1; // 上升沿将数据送到输出锁存器 SPI_MOSI = 1; // 复位SPI_MOSI(省电) SPI_LATCH = 0; // 准备上升沿
#else // _74HC595_CLK_IDLE == 1(推荐使用这种方案)
for(i=8; i; i--){ SPI_CLK = 0; // 准备上升沿 byte <<= 1; SPI_MOSI = CY; // 准备数据 SPI_CLK = 1; // 上升沿发送数据(置于此处更合理) }
//------------------------------------- // 使能输出 SPI_LATCH = 0; // 准备上升沿 SPI_MOSI = 1; // 复位SPI_MOSI(省电) SPI_LATCH = 1; // 上升沿将数据送到输出锁存器 #endif }
|