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

Министерство образования и науки Кыргызской Республики

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

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

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

Отчет

Микропроцессоры и микроконтроллеры.

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

Бишкек 2019

Собрать схему из светодиода и матричной клавиатуры. Запрограммировать микроконтроллер так, чтобы при нажатии на цифры клавиатуры светодиод моргал соответствующее число раз. Запомнить в энергонезависимую память, последнее число. При запуске сделать так, чтобы светодиод проморгал как в последний раз.

Листинг кода:

#define F_CPU 1000000UL

#include <avr/io.h>

#include <util/delay.h>

#include <avr/interrupt.h>

#include <avr/eeprom.h>

unsigned char key_tab[4] = {0b11111110,

0b11111101,

0b11111011,

0b11110111};

unsigned char key_value = 0;

void setData(char count){

eeprom_write_word (0x0000, count);

}

int getData(){

return eeprom_read_byte(0x0000);

}

void led(int a){

for (int i=0;i<a;i++)

{

PORTA = 0xFF;

_delay_ms(50);

PORTA = 0x00;

_delay_ms(50);

}

key_value = 0;

}

ISR (TIMER1_COMPA_vect)

{

unsigned char i;

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

{

PORTC = key_tab[i];

switch (PINC & 0b11110000)

{

case 0b11100000:

key_value = 1 + i * 3;

case 0b11010000:

key_value = 2 + i * 3;

case 0b10110000:

key_value = 3 + i * 3;

default:

break;

}

}

}

int main(void)

{

DDRC = 0b00001111;

PORTC = 0xF0;

DDRA=0xFF;

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

TIMSK |= (1<<OCIE1A); //устанавливаем бит разрешения прерывания 1ого счетчика по совпадению с OCR1A(H и L)

OCR1AH = 0b00000011; //записываем в регистр число для сравнения

OCR1AL = 0b01000010;

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

led(getData());

/* Replace with your application code */

asm("sei");

while (1)

{

if(key_value==1){

led(1);

setData(1);

}

if(key_value==2){

led(2);

setData(2);

}

if(key_value==3){

led(3);

setData(3);

}

if(key_value==4){

led(4);

setData(4);

}

if(key_value==5){

led(5);

setData(5);

}

if(key_value==6){

led(6);

setData(6);

}

if(key_value==7){

led(7);

setData(7);

}

if(key_value==8){

led(8);

setData(8);

}

if(key_value==9){

led(9);

setData(9);

}

}

}

Схема подключения

Содержимое энергонезависимой памяти

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