You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

12 jaren geleden
12 jaren geleden
12 jaren geleden
12 jaren geleden
12 jaren geleden
12 jaren geleden
12 jaren geleden
12 jaren geleden
12 jaren geleden
12 jaren geleden
12 jaren geleden
12 jaren geleden
12 jaren geleden
12 jaren geleden
12 jaren geleden
12 jaren geleden
12 jaren geleden
12 jaren geleden
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. /*
  2. * lcd.c:
  3. * Text-based LCD driver.
  4. * This is designed to drive the parallel interface LCD drivers
  5. * based in the Hitachi HD44780U controller and compatables.
  6. *
  7. * This test program assumes the following:
  8. *
  9. * 8-bit displays:
  10. * GPIO 0-7 is connected to display data pins 0-7.
  11. * GPIO 11 is the RS pin.
  12. * GPIO 10 is the Strobe/E pin.
  13. *
  14. * For 4-bit interface:
  15. * GPIO 4-7 is connected to display data pins 4-7.
  16. * GPIO 11 is the RS pin.
  17. * GPIO 10 is the Strobe/E pin.
  18. *
  19. * Copyright (c) 2012-2013 Gordon Henderson.
  20. ***********************************************************************
  21. * This file is part of wiringPi:
  22. * https://projects.drogon.net/raspberry-pi/wiringpi/
  23. *
  24. * wiringPi is free software: you can redistribute it and/or modify
  25. * it under the terms of the GNU Lesser General Public License as published by
  26. * the Free Software Foundation, either version 3 of the License, or
  27. * (at your option) any later version.
  28. *
  29. * wiringPi is distributed in the hope that it will be useful,
  30. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  31. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  32. * GNU Lesser General Public License for more details.
  33. *
  34. * You should have received a copy of the GNU Lesser General Public License
  35. * along with wiringPi. If not, see <http://www.gnu.org/licenses/>.
  36. ***********************************************************************
  37. */
  38. #include <stdio.h>
  39. #include <stdlib.h>
  40. #include <stdint.h>
  41. #include <unistd.h>
  42. #include <string.h>
  43. #include <time.h>
  44. #include <wiringPi.h>
  45. #include <lcd.h>
  46. #ifndef TRUE
  47. # define TRUE (1==1)
  48. # define FALSE (1==2)
  49. #endif
  50. static unsigned char newChar [8] =
  51. {
  52. 0b11111,
  53. 0b10001,
  54. 0b10001,
  55. 0b10101,
  56. 0b11111,
  57. 0b10001,
  58. 0b10001,
  59. 0b11111,
  60. } ;
  61. // Global lcd handle:
  62. static int lcdHandle ;
  63. /*
  64. * usage:
  65. *********************************************************************************
  66. */
  67. int usage (const char *progName)
  68. {
  69. fprintf (stderr, "Usage: %s bits cols rows\n", progName) ;
  70. return EXIT_FAILURE ;
  71. }
  72. /*
  73. * scrollMessage:
  74. *********************************************************************************
  75. */
  76. static const char *message =
  77. " "
  78. "Wiring Pi by Gordon Henderson. HTTP://WIRINGPI.COM/"
  79. " " ;
  80. void scrollMessage (int line, int width)
  81. {
  82. char buf [32] ;
  83. static int position = 0 ;
  84. static int timer = 0 ;
  85. if (millis () < timer)
  86. return ;
  87. timer = millis () + 200 ;
  88. strncpy (buf, &message [position], width) ;
  89. buf [width] = 0 ;
  90. lcdPosition (lcdHandle, 0, line) ;
  91. lcdPuts (lcdHandle, buf) ;
  92. if (++position == (strlen (message) - width))
  93. position = 0 ;
  94. }
  95. /*
  96. * pingPong:
  97. * Bounce a character - only on 4-line displays
  98. *********************************************************************************
  99. */
  100. static void pingPong (int lcd, int cols)
  101. {
  102. static int position = 0 ;
  103. static int dir = 0 ;
  104. if (dir == 0) // Setup
  105. {
  106. dir = 1 ;
  107. lcdPosition (lcdHandle, 0, 3) ;
  108. lcdPutchar (lcdHandle, '*') ;
  109. return ;
  110. }
  111. lcdPosition (lcdHandle, position, 3) ;
  112. lcdPutchar (lcdHandle, ' ') ;
  113. position += dir ;
  114. if (position == cols)
  115. {
  116. dir = -1 ;
  117. --position ;
  118. }
  119. if (position < 0)
  120. {
  121. dir = 1 ;
  122. ++position ;
  123. }
  124. lcdPosition (lcdHandle, position, 3) ;
  125. lcdPutchar (lcdHandle, '#') ;
  126. }
  127. /*
  128. * waitForEnter:
  129. *********************************************************************************
  130. */
  131. static void waitForEnter (void)
  132. {
  133. printf ("Press ENTER to continue: ") ;
  134. (void)fgetc (stdin) ;
  135. }
  136. /*
  137. * The works
  138. *********************************************************************************
  139. */
  140. int main (int argc, char *argv[])
  141. {
  142. int i ;
  143. int lcd ;
  144. int bits, rows, cols ;
  145. struct tm *t ;
  146. time_t tim ;
  147. char buf [32] ;
  148. if (argc != 4)
  149. return usage (argv [0]) ;
  150. printf ("Raspberry Pi LCD test\n") ;
  151. printf ("=====================\n") ;
  152. bits = atoi (argv [1]) ;
  153. cols = atoi (argv [2]) ;
  154. rows = atoi (argv [3]) ;
  155. if (!((rows == 1) || (rows == 2) || (rows == 4)))
  156. {
  157. fprintf (stderr, "%s: rows must be 1, 2 or 4\n", argv [0]) ;
  158. return EXIT_FAILURE ;
  159. }
  160. if (!((cols == 16) || (cols == 20)))
  161. {
  162. fprintf (stderr, "%s: cols must be 16 or 20\n", argv [0]) ;
  163. return EXIT_FAILURE ;
  164. }
  165. wiringPiSetup () ;
  166. if (bits == 4)
  167. lcdHandle = lcdInit (rows, cols, 4, 11,10, 4,5,6,7,0,0,0,0) ;
  168. else
  169. lcdHandle = lcdInit (rows, cols, 8, 11,10, 0,1,2,3,4,5,6,7) ;
  170. if (lcdHandle < 0)
  171. {
  172. fprintf (stderr, "%s: lcdInit failed\n", argv [0]) ;
  173. return -1 ;
  174. }
  175. lcdPosition (lcdHandle, 0, 0) ; lcdPuts (lcdHandle, "Gordon Henderson") ;
  176. lcdPosition (lcdHandle, 0, 1) ; lcdPuts (lcdHandle, " wiringpi.com ") ;
  177. waitForEnter () ;
  178. if (rows > 1)
  179. {
  180. lcdPosition (lcdHandle, 0, 1) ; lcdPuts (lcdHandle, " wiringpi.com ") ;
  181. if (rows == 4)
  182. {
  183. lcdPosition (lcdHandle, 0, 2) ;
  184. for (i = 0 ; i < ((cols - 1) / 2) ; ++i)
  185. lcdPuts (lcdHandle, "=-") ;
  186. lcdPuts (lcdHandle, "=3") ;
  187. lcdPosition (lcdHandle, 0, 3) ;
  188. for (i = 0 ; i < ((cols - 1) / 2) ; ++i)
  189. lcdPuts (lcdHandle, "-=") ;
  190. lcdPuts (lcdHandle, "-4") ;
  191. }
  192. }
  193. waitForEnter () ;
  194. lcdCharDef (lcdHandle, 2, newChar) ;
  195. lcdClear (lcdHandle) ;
  196. lcdPosition (lcdHandle, 0, 0) ;
  197. lcdPuts (lcdHandle, "User Char: ") ;
  198. lcdPutchar (lcdHandle, 2) ;
  199. lcdCursor (lcdHandle, TRUE) ;
  200. lcdCursorBlink (lcdHandle, TRUE) ;
  201. waitForEnter () ;
  202. lcdCursor (lcdHandle, FALSE) ;
  203. lcdCursorBlink (lcdHandle, FALSE) ;
  204. lcdClear (lcdHandle) ;
  205. for (;;)
  206. {
  207. scrollMessage (0, cols) ;
  208. if (rows == 1)
  209. continue ;
  210. tim = time (NULL) ;
  211. t = localtime (&tim) ;
  212. sprintf (buf, "%02d:%02d:%02d", t->tm_hour, t->tm_min, t->tm_sec) ;
  213. lcdPosition (lcdHandle, (cols - 8) / 2, 1) ;
  214. lcdPuts (lcdHandle, buf) ;
  215. if (rows == 2)
  216. continue ;
  217. sprintf (buf, "%02d/%02d/%04d", t->tm_mday, t->tm_mon + 1, t->tm_year+1900) ;
  218. lcdPosition (lcdHandle, (cols - 10) / 2, 2) ;
  219. lcdPuts (lcdHandle, buf) ;
  220. pingPong (lcd, cols) ;
  221. }
  222. return 0 ;
  223. }