Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
22
Добавлен:
26.01.2023
Размер:
2 Кб
Скачать
8. Составьте программу, которая выводит на семисегментные индикаторы
десятичный эквивалент двоичного восьмиразрядного кода.
*/


#include <iom8535v.h>
#include <macros.h>
#include <stdint.h>
#include <stdlib.h>

uint8_t c[] =
{
0x3F, // код цифры "0"
0x06, // код цифры "1"
0x5B, // код цифры "2"
0x4F, // код цифры "3"
0x66, // код цифры "4"
0x6D, // код цифры "5"
0xFD, // код цифры "6"
0x07, // код цифры "7"
0x7F, // код цифры "8"
0x6F, // код цифры "9"
0x3F // код цифры "0"
};

char str[3];
int ia;

unsigned char n; // номер индикатора
// Обработка прерывания Таймера Т0
#pragma interrupt_handler indic:10
void indic(void)
{

itoa(PINA , str, 10); // Переводим в строку

switch (n)
{
case 0:
ia = str[0] - '0';
PORTC=c[ia];
PORTD=0x01; // индикатор HG1
break;
case 1:
ia = str[1] - '0';
PORTC=c[ia];
PORTD=0x02; // индикатор HG1
break;
case 2:
ia = str[2] - '0';
PORTC=c[ia];
PORTD=0x04; // индикатор HG1
}
n++; // смена номера индикатора
n%=3;

}

void port_init(void)
{
PORTA = 0xff; //Вкл подтягивающие резисторы на порту А
DDRA = 0x00; //Порт А на вход

DDRC =0xFF; // все биты порта C - на выход
PORTC=0x00; // сегменты не светятся

DDRD =0x07; // младшие три бита порта D - на выход
PORTD=0x00; // индикаторы не выбраны
}

void init_devices(void)
{
CLI();
port_init();

TIMSK=0x01; // разрешение прерывания по переполнению таймера 0

TCCR0=0x04; // =0000 0100, коэффициент предделителя 256,
// частота прерываний будет 8000000/256/256=122 Гц,
// частота обновления числа (3 цифры): 122/3=40 Гц

SEI(); // общее разрешение прерываний - установка бита 7 регистра SREG
}

// главная функция
void main(void)
{

init_devices();

while (1)
{
}
}
Соседние файлы в папке LABA3