EPD_5in65f.c 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #include "EPD_5in65f.h"
  2. static void EPD_5IN65F_Reset(void)
  3. {
  4. DEV_Digital_Write(EPD_RST_PIN, 1);
  5. DEV_Delay_ms(200);
  6. DEV_Digital_Write(EPD_RST_PIN, 0);
  7. DEV_Delay_ms(1);
  8. DEV_Digital_Write(EPD_RST_PIN, 1);
  9. DEV_Delay_ms(200);
  10. }
  11. static void EPD_5IN65F_SendCommand(UBYTE Reg)
  12. {
  13. DEV_Digital_Write(EPD_DC_PIN, 0);
  14. DEV_Digital_Write(EPD_CS_PIN, 0);
  15. DEV_SPI_WriteByte(Reg);
  16. DEV_Digital_Write(EPD_CS_PIN, 1);
  17. }
  18. static void EPD_5IN65F_SendData(UBYTE Data)
  19. {
  20. DEV_Digital_Write(EPD_DC_PIN, 1);
  21. DEV_Digital_Write(EPD_CS_PIN, 0);
  22. DEV_SPI_WriteByte(Data);
  23. DEV_Digital_Write(EPD_CS_PIN, 1);
  24. }
  25. static void EPD_5IN65F_BusyHigh(void)// If BUSYN=0 then waiting
  26. {
  27. while(!(DEV_Digital_Read(EPD_BUSY_PIN)));
  28. }
  29. static void EPD_5IN65F_BusyLow(void)// If BUSYN=1 then waiting
  30. {
  31. while(DEV_Digital_Read(EPD_BUSY_PIN));
  32. }
  33. void EPD_5IN65F_Init(void)
  34. {
  35. EPD_5IN65F_Reset();
  36. EPD_5IN65F_BusyHigh();
  37. EPD_5IN65F_SendCommand(0x00);
  38. EPD_5IN65F_SendData(0xEF);
  39. EPD_5IN65F_SendData(0x08);
  40. EPD_5IN65F_SendCommand(0x01);
  41. EPD_5IN65F_SendData(0x37);
  42. EPD_5IN65F_SendData(0x00);
  43. EPD_5IN65F_SendData(0x23);
  44. EPD_5IN65F_SendData(0x23);
  45. EPD_5IN65F_SendCommand(0x03);
  46. EPD_5IN65F_SendData(0x00);
  47. EPD_5IN65F_SendCommand(0x06);
  48. EPD_5IN65F_SendData(0xC7);
  49. EPD_5IN65F_SendData(0xC7);
  50. EPD_5IN65F_SendData(0x1D);
  51. EPD_5IN65F_SendCommand(0x30);
  52. EPD_5IN65F_SendData(0x3C);
  53. EPD_5IN65F_SendCommand(0x40);
  54. EPD_5IN65F_SendData(0x00);
  55. EPD_5IN65F_SendCommand(0x50);
  56. EPD_5IN65F_SendData(0x37);
  57. EPD_5IN65F_SendCommand(0x60);
  58. EPD_5IN65F_SendData(0x22);
  59. EPD_5IN65F_SendCommand(0x61);
  60. EPD_5IN65F_SendData(0x02);
  61. EPD_5IN65F_SendData(0x58);
  62. EPD_5IN65F_SendData(0x01);
  63. EPD_5IN65F_SendData(0xC0);
  64. EPD_5IN65F_SendCommand(0xE3);
  65. EPD_5IN65F_SendData(0xAA);
  66. DEV_Delay_ms(100);
  67. EPD_5IN65F_SendCommand(0x50);
  68. EPD_5IN65F_SendData(0x37);
  69. }
  70. void EPD_5IN65F_Clear(UBYTE color)
  71. {
  72. EPD_5IN65F_SendCommand(0x61);//Set Resolution setting
  73. EPD_5IN65F_SendData(0x02);
  74. EPD_5IN65F_SendData(0x58);
  75. EPD_5IN65F_SendData(0x01);
  76. EPD_5IN65F_SendData(0xC0);
  77. EPD_5IN65F_SendCommand(0x10);
  78. for(int i=0; i<EPD_5IN65F_HEIGHT; i++) {
  79. for(int j=0; j<EPD_5IN65F_WIDTH/2; j++)
  80. EPD_5IN65F_SendData((color<<4)|color);
  81. }
  82. EPD_5IN65F_SendCommand(0x04);//0x04
  83. EPD_5IN65F_BusyHigh();
  84. EPD_5IN65F_SendCommand(0x12);//0x12
  85. EPD_5IN65F_BusyHigh();
  86. EPD_5IN65F_SendCommand(0x02); //0x02
  87. EPD_5IN65F_BusyLow();
  88. DEV_Delay_ms(500);
  89. }
  90. void EPD_5IN65F_Display(const UBYTE *image)
  91. {
  92. unsigned long i,j;
  93. EPD_5IN65F_SendCommand(0x61);//Set Resolution setting
  94. EPD_5IN65F_SendData(0x02);
  95. EPD_5IN65F_SendData(0x58);
  96. EPD_5IN65F_SendData(0x01);
  97. EPD_5IN65F_SendData(0xC0);
  98. EPD_5IN65F_SendCommand(0x10);
  99. for(i=0; i<EPD_5IN65F_HEIGHT; i++) {
  100. for(j=0; j<EPD_5IN65F_WIDTH/2; j++)
  101. EPD_5IN65F_SendData(image[j+((EPD_5IN65F_WIDTH/2)*i)]);
  102. }
  103. EPD_5IN65F_SendCommand(0x04);//0x04
  104. EPD_5IN65F_BusyHigh();
  105. EPD_5IN65F_SendCommand(0x12);//0x12
  106. EPD_5IN65F_BusyHigh();
  107. EPD_5IN65F_SendCommand(0x02); //0x02
  108. EPD_5IN65F_BusyLow();
  109. DEV_Delay_ms(200);
  110. }
  111. void EPD_5IN65F_Sleep(void)
  112. {
  113. DEV_Delay_ms(100);
  114. EPD_5IN65F_SendCommand(0x07);
  115. EPD_5IN65F_SendData(0xA5);
  116. DEV_Delay_ms(100);
  117. DEV_Digital_Write(EPD_RST_PIN, 0); // Reset
  118. }