Это старая версия документа!


Эксперимент 21. Анимация

Компьютерная анимация — последовательный показ (слайд-шоу) заранее подготовленных графических файлов. Мы уже создавали анимацию на 7-ми сегментном LED - индикаторе, Эксперимент 14. Секундомер, но там мы могли отображать только буквенно-цифровые символы.
LED - матрица с которой мы познакомились в предыдущем эксперименте, позволяет не только отображать простейшие картинки 8х8 точек (пикселей), но создавать простые игры.

В данном эксперименте

Схема эксперимента

Рисунок 1. Электрическая принципиальная схема эксперимента

Рисунок 2. Монтажная схема эксперимента

Программный код эксперимента

Exp21
  1. int R[] = {2,7,A5,5,13,A4,12,A2};
  2. int C[] = {6,11,10,3,A3,4,8,9};
  3.  
  4. unsigned char ris1[8][8] = {
  5. 1,0,0,0,0,0,0,1,
  6. 0,0,1,1,1,1,0,0,
  7. 0,1,0,0,0,0,1,0,
  8. 0,1,0,1,1,0,1,0,
  9. 0,1,0,1,1,0,1,0,
  10. 0,1,0,0,0,0,1,0,
  11. 0,0,1,1,1,1,0,0,
  12. 1,0,0,0,0,0,0,1,
  13. };
  14.  
  15. unsigned char ris2[8][8] = {
  16. 0,0,1,1,1,1,0,0,
  17. 0,1,0,0,0,0,1,0,
  18. 1,0,0,1,1,0,0,1,
  19. 1,0,1,0,0,1,0,1,
  20. 1,0,1,0,0,1,0,1,
  21. 1,0,0,1,1,0,0,1,
  22. 0,1,0,0,0,0,1,0,
  23. 0,0,1,1,1,1,0,0,
  24. };
  25.  
  26. void setup() {
  27. for(int i = 0;i<8;i++) {
  28. pinMode(R[i],OUTPUT);
  29. pinMode(C[i],OUTPUT);
  30. }
  31. }
  32.  
  33. void loop(){
  34. for(int i = 0 ; i < 20 ; i++) {
  35. Display(ris1);
  36. }
  37. for(int i = 0 ; i < 20 ; i++) {
  38. Display(ris2);
  39. }
  40. }
  41.  
  42. void Display(unsigned char dat[8][8]) {
  43. for(int c = 0; c<8;c++) {
  44. digitalWrite(R[c],LOW);
  45. for(int r = 0;r<8;r++) {
  46. digitalWrite(C[r],dat[r][c]);
  47. }
  48. delay(1);
  49. Clear();
  50. }
  51. }
  52.  
  53. void Clear() {
  54. for(int i = 0;i<8;i++) {
  55. digitalWrite(C[i],LOW);
  56. digitalWrite(R[i],HIGH);
  57. }
  58. }

В программе эксперимента используем двухмерный массив, в котором зашифровываем выводимые символы. Для вывода всех символов напишем универсальную функцию в которую будем передавать порядковый номер символа зашифрованного в массиве.

Дополнительное задание

  • добавьте дополнительно еще буквы A, b, C, d, E, F
  • усовершенствуйте функцию displ(),(подсказка - для этого вам понадобится изменить монтажную схему подключения