在最近的一个项目当中用到了一个通过2个GPIO配合两个移位寄存器控制16个LED灯的案例,才开始的感觉蛮简单,但是实际做的时候却发现了一些问题,当然最后还是比较完美的完成了任务,现在总结一下
移位寄存器的时序图:
首先是基本功能就是通过GPIO模拟时序写寄存器,一个寄存器是8位,两个移位拼在一起就是16位,在模块当中的将写寄存器封装成一个函数
- #define sclk_high() gpio_mgr_write_pin(LED_CLK_GPIO, 1)
- #define sclk_low() gpio_mgr_write_pin(LED_CLK_GPIO, 0)
- #define sda_high() gpio_mgr_write_pin(LED_DATA_GPIO, 1)
- #define sda_low() gpio_mgr_write_pin(LED_DATA_GPIO, 0)
- void led_write_register(unsigned int reg_Data)
- {
- inti;
- unsignedint Temp_Data=reg_Data;
- sclk_low();
- ndelay(1);
- for(i=15;i>=0; i--)
- {
- Temp_Data= ((reg_Data >> i) & 0x01);
- if(Temp_Data)
- sda_high();
- else
- sda_low();
- ndelay(1);
- sclk_high();