Микропроцессорные средства и системы / lab4micro
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ и НАУКИ
КЫРГЫЗСКОЙ РЕСПУБЛИКИ
КЫРГЫЗСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ им. И. РАЗЗАКОВА
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА «ИНФОРМАТИКА И ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА»
Отчет
Лабораторная работа 4
Бишкек 2020
Собрать схему из светодиода и матричной клавиатуры. Запрограммировать
микроконтроллер так, чтобы при нажатии на цифры клавиатуры светодиод менял
яркость в соответствии с диапазоном.
Код программы:
#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 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;
break;
case 0b11010000:
key_value = 2 + i * 3;
break;
case 0b10110000:
key_value = 3 + i * 3;
break;
default:
break;
}
}
}
int main(void)
{
PORTD = 0x00;
DDRD = 0xFF;
DDRC = 0b00001111;
PORTC = 0xF0;
DDRB=0xFF;
TCCR1B |= (1<<WGM12); // устанавливаем режим СТС (сброс по совпадению)
TIMSK |= (1<<OCIE1A); //устанавливаем бит разрешения прерывания 1ого счетчика по совпадению с OCR1A(H и L)
OCR1AH = 0b00000011; //записываем в регистр число для сравнения
OCR1AL = 0b01000010;
TCCR1B |= (1<<CS11);//установим делитель.
DDRB |=(1<<3);
OCR0=100;
TCCR0=0B01111011;
TIMSK|=(1<<1);
asm("sei");
while (1)
{
PORTD = key_value;
asm("nop");
if(key_value==1){
OCR0=0;
}
if(key_value==2){
OCR0=50;
}
if(key_value==3){
OCR0=80;
}
if(key_value==4){
OCR0=150;
}
if(key_value==5){
OCR0=200;
}
if(key_value==6){
OCR0=0;
}
if(key_value==7){
OCR0=2;
}
if(key_value==8){
OCR0=250;
}
if(key_value==9){
OCR0=140;
}
}
}
обычный режим
кнопка один
кнопка два
кнопка три
кнопка 4
кнопка 5
кнопка 6
и тд