sk9822.c 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. char i=0;
  50. SK9822_Write_Byte(0x00);//写开始帧
  51. SK9822_Write_Byte(0x00);
  52. SK9822_Write_Byte(0x00);
  53. SK9822_Write_Byte(0x00);
  54. for(i=0;i<3;i++)
  55. {
  56. SK9822_Write_Byte(Bri);//写亮度值
  57. SK9822_Write_Byte(BLUE);//写蓝色灰度
  58. SK9822_Write_Byte(GREEN);//写绿色灰度
  59. SK9822_Write_Byte(RED);//写红色灰度
  60. }
  61. SK9822_Write_Byte(0xFF);//写结束帧
  62. SK9822_Write_Byte(0xFF);
  63. SK9822_Write_Byte(0xFF);
  64. SK9822_Write_Byte(0xFF);
  65. }
  66. void SK9822_Intit(void)
  67. {
  68. GPIO_InitTypeDef GPIO_InitStructure;
  69. RCC_APB2PeriphClockCmd(SK9822_RCC, ENABLE); //使能A端口时钟
  70. GPIO_InitStructure.GPIO_Pin =SK9822_SCK_PIN|SK9822_SDI_PIN;
  71. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
  72. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
  73. GPIO_Init(SK9822_PORT, &GPIO_InitStructure); //初始化GPIOB
  74. GPIO_SetBits(SK9822_PORT,SK9822_SCK_PIN|SK9822_SDI_PIN);
  75. SK9822_Write_Data(0,0,0,0);
  76. }