Advertisement
Guest User

arduino direct 8x8 led matrix

a guest
Mar 24th, 2013
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.91 KB | None | 0 0
  1. #include <avr/pgmspace.h>
  2. #include <FrequencyTimer2.h>
  3.  
  4. #define SPACE { \
  5. 0b00000000, \
  6. 0b00000000, \
  7. 0b00000000, \
  8. 0b00000000, \
  9. 0b00000000, \
  10. 0b00000000, \
  11. 0b00000000 \
  12. }
  13.  
  14. #define ZERO { \
  15. 0b00000000, \
  16. 0b01111110, \
  17. 0b01000010, \
  18. 0b01000110, \
  19. 0b01101010, \
  20. 0b01110010, \
  21. 0b01100010, \
  22. 0b01111110 \
  23. }
  24.  
  25. #define ONE { \
  26. 0b00000000, \
  27. 0b00111000, \
  28. 0b00001000, \
  29. 0b00001000, \
  30. 0b00011000, \
  31. 0b00011000, \
  32. 0b00011000, \
  33. 0b00111100 \
  34. }
  35.  
  36. #define TWO { \
  37. 0b00000000, \
  38. 0b01111110, \
  39. 0b01000010, \
  40. 0b00000010, \
  41. 0b01111110, \
  42. 0b01100000, \
  43. 0b01100000, \
  44. 0b01111110 \
  45. }
  46.  
  47. #define THREE { \
  48. 0b00000000, \
  49. 0b00111110, \
  50. 0b00000010, \
  51. 0b00000010, \
  52. 0b00011110, \
  53. 0b00000110, \
  54. 0b00000110, \
  55. 0b01111110 \
  56. }
  57.  
  58. #define FOUR { \
  59. 0b00000000, \
  60. 0b01000000, \
  61. 0b01000000, \
  62. 0b01000100, \
  63. 0b01000100, \
  64. 0b01111110, \
  65. 0b00001100, \
  66. 0b00001100 \
  67. }
  68.  
  69. #define FIVE { \
  70. 0b00000000, \
  71. 0b00111110, \
  72. 0b00100000, \
  73. 0b00100000, \
  74. 0b00111110, \
  75. 0b00000110, \
  76. 0b01000110, \
  77. 0b01111110 \
  78. }
  79.  
  80. #define SIX { \
  81. 0b00000000, \
  82. 0b01111110, \
  83. 0b01000000, \
  84. 0b01000000, \
  85. 0b01111110, \
  86. 0b01100010, \
  87. 0b01100010, \
  88. 0b01111110 \
  89. }
  90.  
  91. #define SEVEN { \
  92. 0b00000000, \
  93. 0b01111110, \
  94. 0b01000010, \
  95. 0b00000100, \
  96. 0b00001000, \
  97. 0b00011000, \
  98. 0b00011000, \
  99. 0b00011000 \
  100. }
  101.  
  102. #define EIGHT { \
  103. 0b00000000, \
  104. 0b00111100, \
  105. 0b00100100, \
  106. 0b00100100, \
  107. 0b01111110, \
  108. 0b01100010, \
  109. 0b01100010, \
  110. 0b01111110 \
  111. }
  112.  
  113. #define NINE { \
  114. 0b00000000, \
  115. 0b01111110, \
  116. 0b01000010, \
  117. 0b01000010, \
  118. 0b01111110, \
  119. 0b00000110, \
  120. 0b00000110, \
  121. 0b01111110 \
  122. }
  123.  
  124. #define A { \
  125. 0b00000000, \
  126. 0b00111100, \
  127. 0b00100100, \
  128. 0b01111110, \
  129. 0b01100010, \
  130. 0b01100010, \
  131. 0b01100010, \
  132. 0b01100010 \
  133. }
  134.  
  135. #define B { \
  136. 0b00000000, \
  137. 0b01111100, \
  138. 0b00100100, \
  139. 0b00111100, \
  140. 0b00110010, \
  141. 0b00110010, \
  142. 0b00110010, \
  143. 0b01111110 \
  144. }
  145.  
  146. #define C { \
  147. 0b00000000, \
  148. 0b01111110, \
  149. 0b01000010, \
  150. 0b01000000, \
  151. 0b01100000, \
  152. 0b01100000, \
  153. 0b01100010, \
  154. 0b01111110 \
  155. }
  156.  
  157. #define D { \
  158. 0b00000000, \
  159. 0b01111110, \
  160. 0b01000010, \
  161. 0b01000010, \
  162. 0b01100010, \
  163. 0b01100010, \
  164. 0b01100010, \
  165. 0b01111110 \
  166. }
  167.  
  168. #define E { \
  169. 0b00000000, \
  170. 0b01111110, \
  171. 0b01000000, \
  172. 0b01000000, \
  173. 0b01111000, \
  174. 0b01100000, \
  175. 0b01100000, \
  176. 0b01111110 \
  177. }
  178.  
  179. #define F { \
  180. 0b00000000, \
  181. 0b01111110, \
  182. 0b01000000, \
  183. 0b01000000, \
  184. 0b01111000, \
  185. 0b01100000, \
  186. 0b01100000, \
  187. 0b01100000 \
  188. }
  189.  
  190. #define G { \
  191. 0b00000000, \
  192. 0b01111110, \
  193. 0b01000010, \
  194. 0b01000000, \
  195. 0b01101110, \
  196. 0b01100010, \
  197. 0b01100010, \
  198. 0b01111110 \
  199. }
  200.  
  201. #define H { \
  202. 0b00000000, \
  203. 0b01000010, \
  204. 0b01000010, \
  205. 0b01000010, \
  206. 0b01111110, \
  207. 0b01100010, \
  208. 0b01100010, \
  209. 0b01100010 \
  210. }
  211.  
  212. #define I { \
  213. 0b00000000, \
  214. 0b00010000, \
  215. 0b00010000, \
  216. 0b00010000, \
  217. 0b00011000, \
  218. 0b00011000, \
  219. 0b00011000, \
  220. 0b00011000 \
  221. }
  222.  
  223. #define J { \
  224. 0b00000000, \
  225. 0b00000010, \
  226. 0b00000010, \
  227. 0b00000010, \
  228. 0b00000110, \
  229. 0b00000110, \
  230. 0b01000110, \
  231. 0b00111110 \
  232. }
  233.  
  234. #define K { \
  235. 0b00000000, \
  236. 0b01000010, \
  237. 0b01000100, \
  238. 0b01001000, \
  239. 0b01111110, \
  240. 0b01100010, \
  241. 0b01100010, \
  242. 0b01100010 \
  243. }
  244.  
  245. #define L { \
  246. 0b00000000, \
  247. 0b01000000, \
  248. 0b01000000, \
  249. 0b01000000, \
  250. 0b01100000, \
  251. 0b01100000, \
  252. 0b01100000, \
  253. 0b01111110 \
  254. }
  255.  
  256. #define M { \
  257. 0b00000000, \
  258. 0b01110110, \
  259. 0b01011010, \
  260. 0b01000010, \
  261. 0b01100010, \
  262. 0b01100010, \
  263. 0b01100010, \
  264. 0b01100010 \
  265. }
  266.  
  267. #define N { \
  268. 0b00000000, \
  269. 0b01110010, \
  270. 0b01001010, \
  271. 0b01001010, \
  272. 0b01101010, \
  273. 0b01101010, \
  274. 0b01101010, \
  275. 0b01100110 \
  276. }
  277.  
  278. #define O { \
  279. 0b00000000, \
  280. 0b01111110, \
  281. 0b01000010, \
  282. 0b01000010, \
  283. 0b01100010, \
  284. 0b01100010, \
  285. 0b01100010, \
  286. 0b01111110 \
  287. }
  288.  
  289. #define P { \
  290. 0b00000000, \
  291. 0b01111110, \
  292. 0b01000010, \
  293. 0b01000010, \
  294. 0b01111110, \
  295. 0b01100000, \
  296. 0b01100000, \
  297. 0b01100000 \
  298. }
  299.  
  300. #define Q { \
  301. 0b00000000, \
  302. 0b01111110, \
  303. 0b01000010, \
  304. 0b01000010, \
  305. 0b01100010, \
  306. 0b01101010, \
  307. 0b01100100, \
  308. 0b01111010 \
  309. }
  310.  
  311. #define R { \
  312. 0b00000000, \
  313. 0b01111110, \
  314. 0b01000010, \
  315. 0b01000010, \
  316. 0b01111110, \
  317. 0b01100100, \
  318. 0b01100010, \
  319. 0b01100010 \
  320. }
  321.  
  322. #define S { \
  323. 0b00000000, \
  324. 0b01111110, \
  325. 0b01000010, \
  326. 0b01000000, \
  327. 0b01111110, \
  328. 0b00000110, \
  329. 0b00000110, \
  330. 0b01111110 \
  331. }
  332.  
  333. #define T { \
  334. 0b00000000, \
  335. 0b01111110, \
  336. 0b00010000, \
  337. 0b00010000, \
  338. 0b00011000, \
  339. 0b00011000, \
  340. 0b00011000, \
  341. 0b00011000 \
  342. }
  343.  
  344. #define U { \
  345. 0b00000000, \
  346. 0b01000010, \
  347. 0b01000010, \
  348. 0b01000010, \
  349. 0b01100010, \
  350. 0b01100010, \
  351. 0b01100010, \
  352. 0b01111110 \
  353. }
  354.  
  355. #define V { \
  356. 0b00000000, \
  357. 0b01000010, \
  358. 0b01000010, \
  359. 0b01000010, \
  360. 0b00100100, \
  361. 0b00100100, \
  362. 0b00011000, \
  363. 0b00011000 \
  364. }
  365.  
  366. #define W { \
  367. 0b00000000, \
  368. 0b01100010, \
  369. 0b01100010, \
  370. 0b01100010, \
  371. 0b01100010, \
  372. 0b01000010, \
  373. 0b01011010, \
  374. 0b01100110 \
  375. }
  376.  
  377. #define X { \
  378. 0b00000000, \
  379. 0b01000010, \
  380. 0b00100100, \
  381. 0b00011000, \
  382. 0b01111100, \
  383. 0b01100010, \
  384. 0b01100010, \
  385. 0b01100010 \
  386. }
  387.  
  388. #define Y { \
  389. 0b00000000, \
  390. 0b01000010, \
  391. 0b01000010, \
  392. 0b01000010, \
  393. 0b00111100, \
  394. 0b00011000, \
  395. 0b00011000, \
  396. 0b00011000 \
  397. }
  398.  
  399. #define Z { \
  400. 0b00000000, \
  401. 0b01111100, \
  402. 0b00000010, \
  403. 0b00011100, \
  404. 0b01100000, \
  405. 0b01100000, \
  406. 0b01100000, \
  407. 0b01111110 \
  408. }
  409.  
  410. byte col = 0;
  411. byte leds[8];
  412.  
  413. // pin[xx] on led matrix connected to nn on Arduino (-1 is dummy to make array start at pos 1)
  414. int pins[17]= {-1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17};
  415.  
  416. // col[xx] of leds = pin yy on led matrix
  417. int cols[8] = {pins[1], pins[2], pins[3], pins[4], pins[5], pins[6], pins[7], pins[8]};
  418.  
  419. // row[xx] of leds = pin yy on led matrix
  420. int rows[8] = {pins[9], pins[10], pins[11], pins[12], pins[13], pins[14], pins[15], pins[16]};
  421.  
  422.  
  423. byte patterns[][8] PROGMEM = {
  424. SPACE,ZERO,ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,
  425. A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
  426. };
  427.  
  428. #define numPatterns (sizeof(patterns)/sizeof(patterns[0]))
  429.  
  430. int pattern = 0;
  431.  
  432. void setup() {
  433. // sets the pins as output
  434. for (int i = 1; i <= 16; i++) {
  435. pinMode(pins[i], OUTPUT);
  436. }
  437.  
  438. // set up cols and rows
  439. for (int i = 1; i <= 8; i++) {
  440. digitalWrite(cols[i - 1], LOW);
  441. }
  442.  
  443. for (int i = 1; i <= 8; i++) {
  444. digitalWrite(rows[i - 1], LOW);
  445. }
  446.  
  447. clearLeds();
  448.  
  449. // Turn off toggling of pin 11
  450. FrequencyTimer2::disable();
  451. // Set refresh rate (interrupt timeout period)
  452. FrequencyTimer2::setPeriod(2000);
  453. // Set interrupt routine to be called
  454. FrequencyTimer2::setOnOverflow(display);
  455.  
  456. setPattern(pattern);
  457. }
  458.  
  459. void loop() {
  460. pattern = ++pattern % numPatterns;
  461. slidePattern(pattern, 150);
  462. }
  463.  
  464. void clearLeds() {
  465. // Clear display array
  466. for (int i = 0; i < 8; i++) {
  467. leds[i] = 0;
  468. }
  469. }
  470.  
  471. void setPattern(int pattern) {
  472. for (int i = 0; i < 8; i++) {
  473. leds[i] = pgm_read_byte_near(&patterns[pattern][i]);
  474. }
  475. }
  476.  
  477. void slidePattern(int pattern, int del) {
  478. for (int l = 0; l < 8; l++) {
  479. for (int i = 0; i < 8; i++) {
  480. byte acol = pgm_read_byte_near(&patterns[pattern][i]);
  481. leds[i] = (acol << l) | (acol >> (8 - l));
  482. }
  483. delay(del);
  484. }
  485. }
  486.  
  487. // Interrupt routine
  488. void display() {
  489. digitalWrite(cols[col], LOW); // Turn whole previous column off
  490. col++;
  491. if (col == 8) {
  492. col = 0;
  493. }
  494. for (int row = 0; row < 8; row++) {
  495. if ((leds[col] >> row) & 0x1) {
  496. digitalWrite(rows[row], LOW); // Turn on this led
  497. }
  498. else {
  499. digitalWrite(rows[row], HIGH); // Turn off this led
  500. }
  501. }
  502. digitalWrite(cols[col], HIGH); // Turn whole column on at once (for equal lighting times)
  503. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement