NOKIA 3310 ЖКИ и ИК пульт с RC5

Проект симбиоза библиотеки для работы с ЖКИ от NOKIA 3310 и декодера сигналов протокола RC5.
Программа принимает сигналы от инфракрасного пульта работающего по протоколу RC5, пульт подходит от бытовой техники. Мой пульт от спутникового ТВ тюнера Sky Star II.
Для нормальной работы необходимо иметь в наличии приемник ИК лучей из серии TSOP1736. Для конкретного пульта лучше конечно подобрать свой приемник со своей несущей частотой.

Принципе работы программы:
При нажатии кнопок на пульте 5,9,0,7 на экране ЖКИ от NOKIA 3310 ,будет отрисовываться пиксель(точка).
Нажатие на кнопку 8 будет очищать экран дисплея.
Текст главного файла программы находится ниже:

  1. /*
  2. Дисплей - МК
  3. 1-+
  4. 2-pb5
  5. 3-pb3
  6. 4-pb1
  7. 5-pb2
  8. 6--
  9. 7-конденсатор
  10. 8-pb4
  11. */
  12.  
  13. // В настройках проекта обязательно правильно укажите свою тактовую частоту
  14. #include <avr/io.h>
  15. #include <util/delay.h>
  16. #include <avr/pgmspace.h>
  17. #include<avr/interrupt.h>
  18.  
  19. #include "n3310.h"
  20. #include "picture.h"
  21. #include "rc5_german.h"
  22. #include "rc5_german_c.c"
  23.  
  24. void pixel (void);
  25.  
  26. void pause_ (unsigned int a);
  27.  
  28. int a;
  29. int l;
  30.  
  31. void pixel (void)
  32. {
  33. LcdPixel(a,l,PIXEL_ON);
  34. LcdUpdate();
  35. }
  36.  
  37. int main()
  38. {
  39.  
  40. uint i;
  41.  
  42. TCCR0 = 1<<CS02; //Деление тактовой частоты на 256
  43. TIMSK = 1<<TOIE0; //Разрешаем прерывание по таймеру
  44.  
  45. sei(); //Разрешаем глобально прерывания
  46.  
  47. LcdInit();
  48.  
  49. LcdClear();
  50. LcdImage(Picture);
  51. LcdUpdate();
  52. _delay_ms(1000);
  53.  
  54. LcdClear();
  55. LcdPixel(a,l,PIXEL_ON);
  56. LcdUpdate();
  57. _delay_ms(1000);
  58. LcdClear();
  59.  
  60. sei();
  61.  
  62. //Начальные координаты
  63. a=47; l=25;
  64.  
  65. for(;;) //Главный цикл
  66. {
  67. cli(); //запрет прерывания
  68. i = rc5_data; //Читаем два байта из прерывания
  69. rc5_data = 0;
  70.  
  71. sei();//разрешаем прерывания
  72.  
  73. if( i )
  74. {
  75. int n = ((i & 0x3F)|(~i >> 7 & 0x40)); //Выделяем только код команды
  76.  
  77. switch (n) //Проверяем что выполнять в зависимости от команды
  78. {
  79. case 5: l=l-1; pixel (); break;
  80. case 9: a=a+1; pixel (); break;
  81. case 7: a=a-1; pixel (); break;
  82. case 0: l=l+1; pixel (); break;
  83. case 8: LcdClear(); LcdUpdate(); break;
  84. }
  85. }
  86. }
  87.  
  88. }

декодер RC5

При включении устройства на экране на секунду включается картинка приветствия после чего программа готова к работе.

Скачать проект для AVR Studio