
Добавил:
Andrejjavd
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Примеры решения лабораторных работ / LABA3 / 3_2
.txt// Динамическая индикация на 7-ми сегментных индикаторах
// с использованием таймера Т0
// Вывод сообщения "123"
// Входы: нет
// Выходы: PORTC - сегменты
// PD0...PD2 - HG1...HG3
#include <iom8535v.h>
#include <macros.h>
unsigned char c1=0x06, // код цифры "1"
c2=0x5B, // код цифры "2"
c3=0x4F; // код цифры "3"
unsigned char n; // номер индикатора
// Обработка прерывания Таймера Т0
#pragma interrupt_handler indic:10
void indic(void)
{
PORTD&=0xF8; // выключаем все индикаторы HG1-HG3
switch (n)
{
case 0:
PORTC=c1; // код "1"
PORTD=0x01; // индикатор HG1
break;
case 1:
PORTC=c2; // код "2"
PORTD=0x02; // индикатор HG2
break;
case 2:
PORTC=c3; // код "3"
PORTD=0x04; // индикатор HG3
}
n++; // смена номера индикатора
n%=3;
}
// главная функция
void main(void)
{
DDRC =0xFF; // все биты порта C - на выход
PORTC=0x00; // сегменты не светятся
DDRD =0x07; // младшие три бита порта D - на выход
PORTD=0x00; // индикаторы не выбраны
TIMSK=0x01; // разрешение прерывания по переполнению таймера 0
SEI(); // общее разрешение прерываний - установка бита 7 регистра SREG
TCCR0=0x04; // =0000 0100, коэффициент предделителя 256,
// частота прерываний будет 8000000/256/256=122 Гц,
// частота обновления числа (3 цифры): 122/3=40 Гц
for (;;);
}