Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/io.h>
- #include <avr/interrupt.h>
- unsigned char simboli[] = {
- 0xa7, 0x05, 0x2f, 0x0c
- }; //look-up tabela sa simbolima
- unsigned char DISP_BAFER[4] = {
- 0xff, 0xff, 0xff, 0xff
- }; //bafer displeja
- unsigned char LOrA[4] = {
- 0xa7, 0x05, 0x2f, 0x0c
- };
- unsigned char dUGE[4] = {
- 0xc4, 0x85, 0x24, 0x26
- };
- unsigned long millis = 0;
- unsigned char disp = 3;
- unsigned char cntr = 0;
- unsigned char brojimNapred = 1;
- ISR(TIMER0_COMPA_vect)
- {
- //prekid tajmera 0 usled dostizanja vrednosti registra OCR0A
- if (++disp > 3)
- disp = 0;
- PORTB = ~(1 << (3-disp)); //ukljucenje tranzistora
- PORTD = DISP_BAFER[disp]; //ispis na trenutno aktivan displej
- if(millis % 1000 == 0){
- cntr++;
- if( cntr == 5) {
- if(brojimNapred == 0) {
- brojimNapred = 1;
- } else {
- brojimNapred = 0;
- }
- cntr = 0;
- }
- }
- millis++; //sistemsko vreme
- }
- ISR(PCINT1_vect)
- {
- //prekid usled promene stanja pina PCINT10 ili pina PCINT8
- switch ((~PINC) & 0x05)
- {
- case 0x01: //pritisnut levi taster
- for(int i = 0; i < 4; i++) {
- simboli[i] = LOrA[i];
- }
- break;
- case 0x04: //pritisnut desni taster
- for(int i = 0; i < 4; i++) {
- simboli[i] = dUGE[i];
- }
- break;
- }
- }
- int main()
- {
- unsigned long t0;
- unsigned char i;
- //inicijalizacija portova:
- DDRB = 0x0f; //PB3-PB0 -> izlazi
- DDRD = 0xff; //port D -> izlaz
- PCICR = (1 << PCIE1); //dozvola prekida usled promene stanja
- PCMSK1 = 0x05; //pina PCINT10, ili pina PCINT8
- //inicijalizacija tajmera 0:
- TCCR0A = 0x02; //tajmer 0: CTC mod
- TCCR0B = 0x03; //tajmer 0: fclk = fosc/64
- OCR0A = 249; //perioda tajmera 0: 250 Tclk (OCR0A + 1 = 250)
- TIMSK0 = 0x02; //dozvola prekida tajmera 0
- //usled dostizanja vrednosti registra OCR0A
- sei(); //I = 1 (dozvola prekida)
- while(1)
- {
- t0 = millis;((millis - t0) < 300); //pauza 500ms
- if(brojimNapred) {
- for (i = 0; i < cntr; i++){
- DISP_BAFER[i] = simboli[i];
- }
- }
- if(!brojimNapred) {
- for (i = 0; i < cntr; i++){
- DISP_BAFER[3-i] = 0xff;
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement