
Микропроцессорные средства и системы / Вариант 5 / mp3
.docxМинистерство образования и науки Кыргызской Республики
Кыргызский Государственный Технический Университет им. Раззакова
Факультет Информационных Технологий
Кафедра «Информатика и Вычислительная техника»
Отчет
Микропроцессоры и микроконтроллеры.
Лабораторная работа № 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);
}
}
}
Схема подключения
Содержимое энергонезависимой памяти