test.ino 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. #include <Arduino.h>
  2. #include <SPI.h>
  3. #include "u8x8.h"
  4. uint8_t u8x8_gpio_and_delay_arduino(u8x8_t *u8g2, uint8_t msg, uint8_t arg_int, void *arg_ptr)
  5. {
  6. switch(msg)
  7. {
  8. case U8X8_MSG_GPIO_AND_DELAY_INIT:
  9. pinMode(8, OUTPUT);
  10. pinMode(9, OUTPUT);
  11. pinMode(10, OUTPUT);
  12. pinMode(11, OUTPUT);
  13. pinMode(13, OUTPUT);
  14. break;
  15. case U8X8_MSG_DELAY_MILLI:
  16. delay(arg_int);
  17. break;
  18. case U8X8_MSG_GPIO_DC:
  19. digitalWrite(9, arg_int);
  20. break;
  21. case U8X8_MSG_GPIO_CS:
  22. digitalWrite(10, arg_int);
  23. break;
  24. case U8X8_MSG_GPIO_RESET:
  25. digitalWrite(8, arg_int);
  26. break;
  27. case U8X8_MSG_GPIO_CLOCK:
  28. digitalWrite(13, arg_int);
  29. break;
  30. case U8X8_MSG_GPIO_DATA:
  31. digitalWrite(11, arg_int);
  32. break;
  33. default:
  34. return 0;
  35. }
  36. return 1;
  37. }
  38. uint8_t u8x8_byte_arduino_hw_spi(u8x8_t *u8g2, uint8_t msg, uint8_t arg_int, void *arg_ptr)
  39. {
  40. uint8_t *data;
  41. switch(msg)
  42. {
  43. case U8X8_MSG_BYTE_SEND:
  44. data = (uint8_t *)arg_ptr;
  45. while( arg_int > 0 )
  46. {
  47. SPI.transfer((uint8_t)*data);
  48. data++;
  49. arg_int--;
  50. }
  51. break;
  52. case U8X8_MSG_BYTE_INIT:
  53. /* disable chipselect */
  54. u8x8_gpio_SetCS(u8g2, u8g2->display_info->chip_disable_level);
  55. /* no wait required here */
  56. /* for SPI: setup correct level of the clock signal */
  57. digitalWrite(13, u8x8_GetSPIClockPhase(u8g2_GetU8x8(u8g2)));
  58. break;
  59. case U8X8_MSG_BYTE_SET_DC:
  60. u8x8_gpio_SetDC(u8g2, arg_int);
  61. break;
  62. case U8X8_MSG_BYTE_START_TRANSFER:
  63. SPI.begin();
  64. SPI.setClockDivider( SPI_CLOCK_DIV2 );
  65. SPI.setDataMode(u8g2->display_info->spi_mode);
  66. SPI.setBitOrder(MSBFIRST);
  67. u8x8_gpio_SetCS(u8g2, u8g2->display_info->chip_enable_level);
  68. u8g2->gpio_and_delay_cb(u8g2, U8X8_MSG_DELAY_NANO, u8g2->display_info->post_chip_enable_wait_ns, NULL);
  69. break;
  70. case U8X8_MSG_BYTE_END_TRANSFER:
  71. u8g2->gpio_and_delay_cb(u8g2, U8X8_MSG_DELAY_NANO, u8g2->display_info->pre_chip_disable_wait_ns, NULL);
  72. u8x8_gpio_SetCS(u8g2, u8g2->display_info->chip_disable_level);
  73. SPI.end();
  74. break;
  75. case U8X8_MSG_BYTE_SET_I2C_ADR:
  76. break;
  77. case U8X8_MSG_BYTE_SET_DEVICE:
  78. break;
  79. default:
  80. return 0;
  81. }
  82. return 1;
  83. }
  84. void u8x8_Setup_UC1701_DOGS102(u8x8_t *u8x8)
  85. {
  86. /* setup defaults */
  87. u8x8_SetupDefaults(u8x8);
  88. /* setup specific callbacks */
  89. u8x8->display_cb = u8x8_d_uc1701_dogs102;
  90. u8x8->cad_cb = u8x8_cad_001;
  91. u8x8->byte_cb = u8x8_byte_8bit_sw_spi;
  92. u8x8->gpio_and_delay_cb = u8x8_gpio_and_delay_arduino;
  93. /* setup display info */
  94. u8x8_SetupMemory(u8x8);
  95. }
  96. void u8x8_Setup_SSD1306_128x64_NONAME(u8x8_t *u8x8)
  97. {
  98. /* setup defaults */
  99. u8x8_SetupDefaults(u8x8);
  100. /* setup specific callbacks */
  101. u8x8->display_cb = u8x8_d_ssd1306_128x64_noname;
  102. u8x8->cad_cb = u8x8_cad_001;
  103. //u8x8->byte_cb = u8x8_byte_arduino_hw_spi;
  104. u8x8->byte_cb = u8x8_byte_8bit_sw_spi;
  105. u8x8->gpio_and_delay_cb = u8x8_gpio_and_delay_arduino;
  106. /* setup display info */
  107. u8x8_SetupMemory(u8x8);
  108. }
  109. u8x8_t u8g2;
  110. uint8_t tile[8] = { 0x0f, 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xf0, 0xf0 };
  111. void setup(void)
  112. {
  113. //u8x8_Setup_UC1701_DOGS102(&u8g2);
  114. u8x8_Setup_SSD1306_128x64_NONAME(&u8g2);
  115. }
  116. void loop(void)
  117. {
  118. u8x8_InitDisplay(&u8g2);
  119. //u8x8_SetFlipMode(&u8g2, 1);
  120. for(;;)
  121. {
  122. u8x8_ClearDisplay(&u8g2);
  123. u8x8_SetPowerSave(&u8g2, 0);
  124. //u8x8_SetContrast(&u8g2, 10);
  125. delay(500);
  126. u8x8_SetFont(&u8g2, u8x8_font_chroma48medium8_r);
  127. u8x8_DrawString(&u8g2, 0, 0, "Hello World");
  128. u8x8_DrawString(&u8g2, 3, 1, "ABCdefg");
  129. u8x8_DrawTile(&u8g2, 1, 1, 1, tile);
  130. u8x8_DrawTile(&u8g2, 2, 2, 1, tile);
  131. u8x8_DrawTile(&u8g2, 3, 3, 1, tile);
  132. u8x8_DrawTile(&u8g2, 4, 4, 1, tile);
  133. u8x8_DrawTile(&u8g2, 5, 5, 1, tile);
  134. u8x8_DrawTile(&u8g2, 6, 6, 1, tile);
  135. delay(2000);
  136. }
  137. }