Nokia 3310 main_c
// Для корректной работы, укажите истинное значение тактовую частоту микроконтроллера #include <avr/io.h> //Стандартная библиотека ввода/вывода #include <util/delay.h> //Библиотека задержек #include <avr/pgmspace.h> //Библиотека для работы с память EEPROM микроконтроллера #include<avr/interrupt.h> //<b,kbjntrf прерываний #include "n3310.h" #include "picture.h" //Прототипы функций: void USART_Transmit( unsigned char data ); void USART_Init( unsigned int ubrr); void pixel (void); //Переменные необходимые для работы: int a=20; int l=10; int h; //Обработчик прерываний от модуля USART по приходу байта ISR(USART_RXC_vect) { // Получаем данные h = UDR; // Обрабатываем if (h=='2')//Если приняли "2" вверх {USART_Transmit('2'); l=l+1; if(l>48){l=1;} pixel(); } else if (h=='8')//Если приняли "8" вниз {USART_Transmit('8'); l=l-1; if(l<1) {l=48;} pixel(); } else if (h=='6')//Если приняли "6" вправо {USART_Transmit('6'); a=a+1; if(a>84) {a=1;} pixel(); } else if (h=='4')//Если приняли "4" влево {USART_Transmit('4'); a=a-1; if(a<1) {a=84;} pixel(); } else if (h=='5')//Если приняли "5" центр {a=42; l=24; pixel();} } void pixel (void) { LcdPixel(a,l,PIXEL_ON); LcdUpdate(); USART_Transmit('+'); //_delay_ms(1000); } void USART_Init( unsigned int ubrr) { /* Set baud rate */ UBRRH = (unsigned char)(ubrr>>8); UBRRL = (unsigned char)ubrr; /* Enable receiver and transmitter */ UCSRB=(1<<RXEN)|(1<<TXEN); UCSRB |= (1 << RXCIE); //UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE); /* Set frame format: 8data, 2stop bit */ UCSRC=0x86;// UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); } void USART_Transmit( unsigned char data ) //Функция отправки данных { while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема UDR = data; //Начало передачи данных } int main() { USART_Init (3);//115200 8MHz USART_Transmit('O'); USART_Transmit('k'); USART_Transmit('!'); USART_Transmit(0x0d); USART_Transmit(0x0a); LcdInit(); LcdClear(); LcdImage(Picture); LcdUpdate(); _delay_ms(1000); LcdClear(); LcdPixel(a,l,PIXEL_ON); LcdUpdate(); _delay_ms(1000); LcdClear(); sei(); while(1) { } //return 0; }
»
