Nokia 3310 main_c

  1. // Для корректной работы, укажите истинное значение тактовую частоту микроконтроллера
  2. #include <avr/io.h> //Стандартная библиотека ввода/вывода
  3. #include <util/delay.h> //Библиотека задержек
  4. #include <avr/pgmspace.h> //Библиотека для работы с память EEPROM микроконтроллера
  5. #include<avr/interrupt.h> //<b,kbjntrf прерываний
  6.  
  7. #include "n3310.h"
  8. #include "picture.h"
  9.  
  10. //Прототипы функций:
  11. void USART_Transmit( unsigned char data );
  12. void USART_Init( unsigned int ubrr);
  13. void pixel (void);
  14.  
  15. //Переменные необходимые для работы:
  16. int a=20; int l=10; int h;
  17.  
  18. //Обработчик прерываний от модуля USART по приходу байта
  19. ISR(USART_RXC_vect)
  20. {
  21. // Получаем данные
  22. h = UDR;
  23. // Обрабатываем
  24. if (h=='2')//Если приняли "2" вверх
  25. {USART_Transmit('2');
  26. l=l+1; if(l>48){l=1;}
  27. pixel();
  28. }
  29. else
  30.  
  31. if (h=='8')//Если приняли "8" вниз
  32. {USART_Transmit('8'); l=l-1; if(l<1) {l=48;}
  33. pixel();
  34. }
  35.  
  36. else
  37.  
  38. if (h=='6')//Если приняли "6" вправо
  39. {USART_Transmit('6'); a=a+1; if(a>84) {a=1;}
  40. pixel();
  41. }
  42.  
  43. else
  44.  
  45. if (h=='4')//Если приняли "4" влево
  46. {USART_Transmit('4'); a=a-1; if(a<1) {a=84;}
  47. pixel();
  48. }
  49.  
  50. else
  51.  
  52. if (h=='5')//Если приняли "5" центр
  53. {a=42; l=24; pixel();}
  54. }
  55.  
  56. void pixel (void)
  57. {
  58. LcdPixel(a,l,PIXEL_ON);
  59. LcdUpdate();
  60.  
  61. USART_Transmit('+');
  62. //_delay_ms(1000);
  63. }
  64.  
  65. void USART_Init( unsigned int ubrr)
  66. {
  67. /* Set baud rate */
  68. UBRRH = (unsigned char)(ubrr>>8);
  69. UBRRL = (unsigned char)ubrr;
  70. /* Enable receiver and transmitter */
  71. UCSRB=(1<<RXEN)|(1<<TXEN);
  72. UCSRB |= (1 << RXCIE);
  73.  
  74. //UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
  75. /* Set frame format: 8data, 2stop bit */
  76. UCSRC=0x86;//
  77. UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
  78. }
  79.  
  80. void USART_Transmit( unsigned char data ) //Функция отправки данных
  81. {
  82. while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема
  83. UDR = data; //Начало передачи данных
  84. }
  85.  
  86. int main()
  87. {
  88.  
  89. USART_Init (3);//115200 8MHz
  90.  
  91. USART_Transmit('O');
  92. USART_Transmit('k');
  93. USART_Transmit('!');
  94.  
  95. USART_Transmit(0x0d);
  96. USART_Transmit(0x0a);
  97.  
  98. LcdInit();
  99.  
  100. LcdClear();
  101. LcdImage(Picture);
  102. LcdUpdate();
  103. _delay_ms(1000);
  104.  
  105. LcdClear();
  106. LcdPixel(a,l,PIXEL_ON);
  107. LcdUpdate();
  108. _delay_ms(1000);
  109. LcdClear();
  110.  
  111. sei();
  112.  
  113. while(1)
  114. {
  115. }
  116. //return 0;
  117. }