sk9822.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "sk9822.h"
  2. //写一个字节数据函数
  3. void SK9822_Write_Byte(unsigned char Data)
  4. {
  5. // unsigned char i=0;
  6. // for(i=0;i<8;i++)
  7. // {
  8. // //SDI=(Data&0x80)>>7;
  9. // if(Data&0x80)
  10. // {
  11. // SK9822_SDI_PIN_H();
  12. // }else
  13. // {
  14. // SK9822_SDI_PIN_L();
  15. // }
  16. // Data<<=1;
  17. // delay_us(1);
  18. // SK9822_SCK_PIN_H();
  19. // delay_us(1);
  20. // SK9822_SCK_PIN_L();
  21. // delay_us(1);
  22. // }
  23. unsigned char i;
  24. unsigned char txdata=Data;
  25. for(i = 0; i < 8; i++)
  26. {
  27. SK9822_SCK_PIN_L();
  28. delay_us(1);
  29. //数据发送
  30. if(txdata & 0x80){
  31. SK9822_SDI_PIN_H();
  32. }else{
  33. SK9822_SDI_PIN_L();
  34. }
  35. txdata <<= 1;
  36. delay_us(1);
  37. SK9822_SCK_PIN_H();
  38. delay_us(1);
  39. }
  40. SK9822_SCK_PIN_L();
  41. }
  42. //函数名称:SK9822写数据函数
  43. //输入参数:Bri 亮度调整 高3位固定为1 取值范围00000-11111
  44. //输入参数:RED 红色灰度值 取值范围0-255
  45. //输入参数:GREEN 绿色灰度值
  46. //输入参数:BLUE 蓝色灰度值
  47. void SK9822_Write_Data(unsigned char Bri,unsigned char RED,unsigned char GREEN,unsigned char BLUE)
  48. {
  49. SK9822_Write_Byte(0x00);//写开始帧
  50. SK9822_Write_Byte(0x00);
  51. SK9822_Write_Byte(0x00);
  52. SK9822_Write_Byte(0x00);
  53. SK9822_Write_Byte(Bri);//写亮度值
  54. SK9822_Write_Byte(BLUE);//写蓝色灰度
  55. SK9822_Write_Byte(GREEN);//写绿色灰度
  56. SK9822_Write_Byte(RED);//写红色灰度
  57. SK9822_Write_Byte(0xFF);//写结束帧
  58. SK9822_Write_Byte(0xFF);
  59. SK9822_Write_Byte(0xFF);
  60. SK9822_Write_Byte(0xFF);
  61. }
  62. void SK9822_Intit(void)
  63. {
  64. GPIO_InitTypeDef GPIO_InitStructure;
  65. RCC_APB2PeriphClockCmd(SK9822_RCC, ENABLE); //使能A端口时钟
  66. GPIO_InitStructure.GPIO_Pin =SK9822_SCK_PIN|SK9822_SDI_PIN;
  67. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
  68. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
  69. GPIO_Init(SK9822_PORT, &GPIO_InitStructure); //初始化GPIOB
  70. GPIO_SetBits(SK9822_PORT,SK9822_SCK_PIN|SK9822_SDI_PIN);
  71. SK9822_Write_Data(255,0,0,0);
  72. }