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


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

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

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

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

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

Как и в предыдущем эксперименте контроллер передает последовательный сигнал на вывод DS микросхемы, который преобразуется в параллельный сигнал на выводах Q0…Q7. К этим выводам через токоограничительные резисторы подключаем LED - индикатор.

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

Exp19
  1. int a = 8;
  2. int b = 9;
  3. int c = 11;
  4. int d = 5;
  5. int e = 4;
  6. int f = 7;
  7. int g = 6;
  8. int h = 10;
  9. int keyPin = 3;
  10. int data [11][8] = {{1,1,1,1,1,1,0,1}, //"Ноль"
  11. {0,1,1,0,0,0,0,1}, //"Один"
  12. {1,1,0,1,1,0,1,1}, //"Два"
  13. {1,1,1,1,0,0,1,1}, //"Три"
  14. {0,1,1,0,0,1,1,1}, //"Четыре"
  15. {1,0,1,1,0,1,1,1}, //"Пять"
  16. {1,0,1,1,1,1,1,1}, //"Шесть"
  17. {1,1,1,0,0,0,0,1}, //"Семь"
  18. {1,1,1,1,1,1,1,1}, //"Восемь"
  19. {1,1,1,1,0,1,1,1}, //"Девять"
  20. {0,0,0,0,0,0,0,0}}; // Исходное состояние
  21.  
  22. void displ (int);
  23.  
  24. void setup() {
  25. for(int i=4;i<=11;i++)
  26. pinMode(i,OUTPUT);
  27. pinMode(keyPin,INPUT);
  28. displ(11);
  29. }
  30.  
  31. int x = -1;
  32. int button_old = 1;
  33. void loop() {
  34. if((digitalRead(keyPin) == LOW)&&(button_old == 1)) {
  35. x = x + 1;
  36. }
  37. displ(11);
  38. displ(x);
  39. if (x > 9) {x = 0;}
  40.  
  41. button_old = digitalRead(keyPin);
  42. delay(20);
  43. }
  44.  
  45. void displ (int num) {
  46. int j = 0;
  47. digitalWrite(a, data[num][j]); j = j + 1;
  48. digitalWrite(b, data[num][j]); j = j + 1;
  49. digitalWrite(c, data[num][j]); j = j + 1;
  50. digitalWrite(d, data[num][j]); j = j + 1;
  51. digitalWrite(e, data[num][j]); j = j + 1;
  52. digitalWrite(f, data[num][j]); j = j + 1;
  53. digitalWrite(g, data[num][j]); j = j + 1;
  54. digitalWrite(dp, data[num][j]); j = j + 1;
  55. }

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

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

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