Управление подсветкой LCD
//пример использования программного таймера
//Pashgan ChipEnable.ru
#include <ioavr.h>
#include <intrinsics.h>
#include "Timers.h"
#include "bits_macros.h"
#define LED 0
#define BUTTON 1
//объявляем программный таймер
SoftTimer timer1;
//функции управления подсветкой
void LedOn(void)
#include <intrinsics.h>
#include "Timers.h"
#include "bits_macros.h"
#define LED 0
#define BUTTON 1
//объявляем программный таймер
SoftTimer timer1;
//функции управления подсветкой
void LedOn(void)
{
ClearBit(PORTD, LED);
}
void LedOff(void)
ClearBit(PORTD, LED);
}
void LedOff(void)
{
SetBit(PORTD, LED);
}
int main( void )
{
//инициализация выводов для кнопки и подсветки
SetBit(PORTD, BUTTON);
SetBit(DDRD, LED);
SetBit(PORTD, LED);
//инициализация таймера Т0 - прерывания каждую ms
TIMSK = (1<<OCIE0);
TCCR0 = (1<<WGM01)|(0<<WGM00)|(0<<COM01)|(0<<COM00)|(0<<CS02)|(1<<CS01)|(1<<CS00);
TCNT0 = 0;
OCR0 = 0x7d;
//создаем таймер, пока что он будет выключен
CreateTimer(&timer1, 0, 0, IDLE, LedOff);
__enable_interrupt();
while(1);
return 0;
}
//************************************
//Прерывание таймера/счетчика Т0
#pragma vector = TIMER0_COMP_vect
__interrupt void Timer0CompVect(void)
{
//если кнопка нажата, включить подсветку
//запусить таймер с периодом 5 секунд
if (BitIsClear(PIND, BUTTON)) {
LedOn();
RestartTimer(&timer1, 5000);
}
//опрошиваем программный таймер
CheckTimer();
}
SetBit(PORTD, LED);
}
int main( void )
{
//инициализация выводов для кнопки и подсветки
SetBit(PORTD, BUTTON);
SetBit(DDRD, LED);
SetBit(PORTD, LED);
//инициализация таймера Т0 - прерывания каждую ms
TIMSK = (1<<OCIE0);
TCCR0 = (1<<WGM01)|(0<<WGM00)|(0<<COM01)|(0<<COM00)|(0<<CS02)|(1<<CS01)|(1<<CS00);
TCNT0 = 0;
OCR0 = 0x7d;
//создаем таймер, пока что он будет выключен
CreateTimer(&timer1, 0, 0, IDLE, LedOff);
__enable_interrupt();
while(1);
return 0;
}
//************************************
//Прерывание таймера/счетчика Т0
#pragma vector = TIMER0_COMP_vect
__interrupt void Timer0CompVect(void)
{
//если кнопка нажата, включить подсветку
//запусить таймер с периодом 5 секунд
if (BitIsClear(PIND, BUTTON)) {
LedOn();
RestartTimer(&timer1, 5000);
}
//опрошиваем программный таймер
CheckTimer();
}
Пояснения к коду
Пояснять тут особо нечего. Единственное, на чем стоит остановиться - функция RestartTimer. Она получает указатель на программный таймер, устанавливает его состояние в положение ACTIVE и перезаписывает его счетчик time. В данном примере таймер срабатывает через 5 с.
Файлы
Управление подсветкой lcd - проект для IARa, проект для WINAVR.
Comments
И я присоединяюсь к вопросу TERMINа...
Жду ответы)
RSS feed for comments to this post