Микропроцессорные средства и системы / lab2micro
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ и НАУКИ
КЫРГЫЗСКОЙ РЕСПУБЛИКИ
КЫРГЫЗСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ им. И. РАЗЗАКОВА
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА «ИНФОРМАТИКА И ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА»
Отчет
Лабораторная работа 2
Бишкек 2020
3. Вывести на семисегментный индикатор число 1857, чтобы при этом выводимое число
мигало с частотой 2 Гц.
Код программы:
#define F_CPU 8000000L
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
unsigned char R1=1, R2=8, R3=3, R4=7;
unsigned char n_count=0;
void segchar (unsigned char seg)
{
switch(seg)
{
case 1: PORTC = 0b11111001; break;
case 2: PORTC = 0b10100100; break;
case 3: PORTC = 0b10110000; break;
case 4: PORTC = 0b10011001; break;
case 5: PORTC = 0b10010010; break;
case 6: PORTC = 0b10000010; break;
case 7: PORTC = 0b11111000; break;
case 8: PORTC = 0b10000000; break;
case 9: PORTC = 0b10010000; break;
case 0: PORTC = 0b11000000; break;
}
}
void timer_ini(void)
{
TCCR1B |= (1<<WGM12);
TIMSK |= (1<<OCIE1A);
OCR1AH = 0b00001111;
OCR1AL = 0b01000010;
TCCR1B |= (1<<CS11);
}
ISR (TIMER1_COMPA_vect)
{
if(n_count==0) {PORTD=0b00000001;segchar(R1);}
if(n_count==1) {PORTD=0b00000010;segchar(R2);}
if(n_count==2) {PORTD=0b00000100;segchar(R3);}
if(n_count==3) {PORTD=0b00001000;segchar(R4);}
if(n_count==4) {PORTD=0b00000000;_delay_ms(250);}
n_count++;
if (n_count>4)n_count=0;
}
int main(void)
{
timer_ini();
DDRC = 0xFF;
DDRD = 0b00001111;
sei();
while(1){
} }