Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * dyn_displ_C.c
- *
- * Created: 14.3.2016 11:55:01
- * Author: V1-S104
- */
- #define F_CPU 16000000
- #include <avr/io.h>
- #include <util/delay.h>
- #include <avr/interrupt.h>
- volatile unsigned int i = 0; //konstanta
- volatile unsigned char video[6];
- volatile unsigned int rizeni = 0b11011111;
- unsigned int znak;
- unsigned char tab_segmenty[16] = {0x40, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
- 0x00, 0x10, 0x88, 0x03, 0x46, 0xA1, 0x06, 0x0E};
- //ppop
- ISR (TIMER0_OVF_vect) //přerušení při přetečení
- {
- PORTB=video[i];
- PORTD=rizeni;
- i++;
- rizeni=(rizeni<<7)|(rizeni>>1); //rotace doprava
- if (i==6)
- {
- i=0;
- rizeni=0b11011111;
- }
- }
- int klav()
- {
- unsigned int vystup[16]={1,2,3,10, 4,5,6,11, 7,8,9,12, 14,0,15,13};
- unsigned int pozice=0;
- for (int radek=3; radek>=0; radek--)
- {
- PORTE =~(1<<radek);
- _delay_ms(1);
- for (int sloupec=4; sloupec<8; sloupec++)
- {
- if (~PINE&(1<<sloupec))
- {
- return(vystup[pozice]);
- }
- else pozice+=1;
- }
- }
- return 255;
- }
- int main(void)
- {
- DDRE=0x0F;
- DDRB=0xFF;
- DDRD=0xFF;
- TCCR0B|=(1<<CS01)|(1<<CS00); //předdělička
- TIMSK0|=(1<<TOIE0); //
- sei(); //globální povolení přerušení
- while(1)
- {
- do
- {
- znak=klav();
- } while (znak==255); //dokud znak=255 bude stále cyklit
- for (int posun=4;posun>=0;posun--)
- {
- video[posun+1]=video[posun]; //posun ve video paměti
- }
- video[0]=(tab_segmenty[znak]);
- while (znak==klav())
- {
- _delay_ms(1);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement