пока вот так, вроде работает
* Gcc_Aqua.c
*
* Created: 18.01.2016 21:44:40
* Author: Buba_Chkhadze
*/
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
#include <n3310.h>
#include <picture.h>
char C1, C2; //переменные единиц и десятков символов часов
typedef struct //структура Tclock с переменными часов, минут и секунд
{
uint8_t hour;
uint8_t min;
uint8_t sec;
} Tclock; //имя структуры Tclock
volatile Tclock clock; //переменная clock структуры Tclock
typedef struct //структура tChannel с переменными "время вкл", "время выкл"
{ //и "активно - неактивно"
Tclock tStart;
Tclock tStop;
char Active;
} tChannel; //имя структуры tChannel
volatile tChannel channel; //переменная channel структуры tChannel
void setup_TIMER2 (void) //инициализация таймера 2
{
cli (); //запрещаем прерывания
ASSR = 0x08; //включаем асинхронный режим таймера 2
TCCR2 = 0x05; //делим 32768 на 128
TCNT2 = 255; //
TIMSK = 0x40; //включаем прерывания по переполнению
sei (); //разрешаем прерывания
}
ISR (TIMER2_OVF_vect) //обработка прерываний таймера 2 по переполнению
{
clock.sec++ ; //считаем секунды
if (clock.sec == 60)
{
clock.min++; clock.sec = 0; //если секунд 60 , считаем минуты, секунды с 0
if (clock.min == 60)
{
clock.hour++; clock.min = 0; //если минут 60, считаем часы, минуты с 0
if (clock.hour == 24)
{
clock.hour = 0; //если часов 24, часы с 0
}
}
}
PORTD = PORTD^0x03; //инвертируем нулевой и первый биты порта D, раз в секунду
}
int main(void)
{
PORTD&= ~ 0x03; //установить порты D0, D1 в ноль
PORTC|= 0x07; //установить порты С0, С1, С2 на плюс
DDRD|= 0x03; //установить порты D0, D1 на выход
DDRC&= ~ 0x07; //установить порты С0, С1, С2 на вход
clock.sec = 0;
clock.min = 0;
clock.hour = 0;
setup_TIMER2(); //вызов таймера
void print_NN (int V)
{
char C1, C2; //преобразовываем V в десятки и единицы
C1 = V / 10 + 0x30; // C1 - десятки
C2 = V % 10 + 0x30; // C2 - единицы
LcdChr(FONT_1X, C1); //выводим десятки
LcdChr(FONT_1X, C2); //выводим единицы
}
{
LcdInit (); //инициализация дисплея
while (1)
{
if ((PINC& (1 << 0)) == 0)
{_delay_ms (250); clock.min++;} //если РС0 = 0 минуты ++
if ((PINC& (1 << 1)) == 0)
{_delay_ms (250); clock.hour++;} //если РС1 = 0 часы ++
//установка значений: секунд 60, минут 60, часов 24
if (clock.sec == 60){clock.min++; clock.sec = 0;}
if (clock.min == 60){clock.hour++; clock.min = 0;}
if (clock.hour == 24){clock.hour = 0;}
LcdClear(); //очистить дисплей
LcdGotoXYFont(3,1); //координата дисплея
print_NN(clock.hour); //вывести часы
LcdChr(FONT_1X, 0x3A); //вывести двоеточие размером 1
print_NN(clock.min); //вывести минуты
LcdChr(FONT_1X, 0x3A); //вывести двоеточие размером 1
print_NN(clock.sec); //вывести секунды
LcdGotoXYFont(3,4); //четвертая строка третий символ
LcdChr(FONT_1X, 0x31); //вывести 1
LcdChr(FONT_1X, 0x32); //вывести 2
LcdChr(FONT_1X, 0x33); //вывести 3
LcdChr(FONT_1X, 0x34); //вывести 4
LcdChr(FONT_1X, 0x35); //вывести 5
LcdChr(FONT_1X, 0x36); //вывести 6
LcdChr(FONT_1X, 0x37); //вывести 7
LcdChr(FONT_1X, 0x38); //вывести 8
LcdGotoXYFont(3,5); //пятая строка третий символ
LcdChr(FONT_1X, 0x7F); //вывести восемь инверсных пробелов
LcdChr(FONT_1X, 0x7F);
LcdChr(FONT_1X, 0x7F);
LcdChr(FONT_1X, 0x7F);
LcdChr(FONT_1X, 0x7F);
LcdChr(FONT_1X, 0x7F);
LcdChr(FONT_1X, 0x7F);
LcdChr(FONT_1X, 0x7F);
LcdUpdate(); //обновить дисплей
}
return 0;
}
}```