Скачиваний:
3
Добавлен:
27.01.2022
Размер:
50.82 Кб
Скачать

Министерство образования и науки Кыргызской Республики Государственный Технический Университет им. Раззакова

Факультет Информационных Технологий

Кафедра «Информатика и Вычислительная техника»

Отчет

Лабораторная работа № 2

Бишкек 2019 г.

Задание. Вариант 4.

Подключить к микроконтроллеру семисегментный индикатор и 2 кнопки. Написать программу, считающую нажатия на первую кнопку и выводящую значение на индикатор, а при нажатии второй кнопки счетчик нажатий уменьшался на 1 каждую секунду пока не достигнет 0.

Листинг кода

#define F_CPU 1000000UL

#include <avr/io.h>

#include <avr/interrupt.h>

#include <util/delay.h>

unsigned char Numeral[10]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

unsigned char Discharge[4] = {0, 0, 0, 0};

ISR (TIMER1_COMPA_vect) {

static unsigned char ID;

ID++;

switch (ID) {

case 1:

PORTD = 0b00001110;

PORTC = Numeral[Discharge[0]];

break;

case 2:

PORTD = 0b00001101;

PORTC = Numeral[Discharge[1]];

break;

case 3:

PORTD = 0b00001011;

PORTC = Numeral[Discharge[2]];

break;

case 4:

PORTD = 0b00000111;

PORTC = Numeral[Discharge[3]];

ID = 0;

break;

}

}

int main(void) {

DDRC = 0xff;

DDRA = 0x00;

DDRD = 0x0f;

PORTA = 0x0f;

PORTD = 0x00;

TCCR1B |= (1<<WGM12); // устанавливаем режим по совпадению

TIMSK |= (1<<OCIE1A); //разрешаю прерывания

OCR1AH = 0b00000011;//устанавливаю число для сравнения в таймере

OCR1AL = 0b01000010;

TCCR1B |= (1<<CS11); // устанавливаю делитель частоты

int16_t counter;

counter = 0x01;

asm("sei");

while (1) {

if(PINA == 0b1110){

_delay_ms(300);

asm("cli");

if(counter == 10000)

counter ^= counter;

uint16_t buff = counter;

for(uint8_t i = 0; i < 4; i++){

Discharge[i] = buff % 10;

buff = buff / 10;

}

asm("sei");

counter++;

}

if(PINA == 0b1101){

--counter;

_delay_ms(300);

while(counter > -1){

asm("cli");

uint16_t buff = counter;

for(uint8_t i = 0; i < 4; i++){

Discharge[i] = buff % 10;

buff = buff / 10;

}

--counter;

asm("sei");

_delay_ms(1000);

}

if (counter == -1)

{

counter=0;

}

}

}

}

Рис. 1. Схема с семисегментныйм индикатором и кнопками управления им.

Соседние файлы в папке МПС 4 вариант