Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/io.h>
- #include <stdio.h>
- #include <string.h>
- #define F_CPU 16000000
- #include <util/delay.h>
- #include <avr/interrupt.h>
- void Inicjalizacja(void); //deklaracja funkcji inicjalizacji LCD
- void Wyswietlanie(char*, int8_t); //deklaracja funkcji wyswietlania na LCD
- void Wyswietlanie_nizej(char*, int8_t); //deklaracja funkcji wyswietlania nizej na LCD
- void Zapis(int8_t); //deklaracja funkcji zapisu na wyswietlaczu LCD
- int licznik = 0;
- char tab0[16] = {' ' , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
- char tab1[16] = {'o' , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
- char tab2[16] = {'l' , 'o', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
- char tab3[16] = {'l' , 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
- char tab4[16] = {'a' , 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
- char tab5[16] = {'H', 'a', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
- char tab6[16] = {' ' ,'H', 'a', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
- char tab7[16] = {' ' , ' ', 'H', 'a', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
- char tab8[16] = {' ' , ' ', ' ', 'H', 'a', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
- char tab9[16] = {' ' , ' ', ' ', ' ', 'H', 'a', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
- char tab10[16] = {' ' , ' ', ' ', ' ', ' ', 'H', 'a', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' '};
- char tab11[16] = {' ' , ' ', ' ', ' ', ' ', ' ', 'H', 'a', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' '};
- char tab12[16] = {' ' , ' ', ' ', ' ', ' ', ' ', ' ', 'H', 'a', 'l', 'l', 'o', ' ', ' ', ' ', ' '};
- char tab13[16] = {' ' , ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'H', 'a', 'l', 'l', 'o', ' ', ' ', ' '};
- char tab14[16] = {' ' , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'H', 'a', 'l', 'l', 'o', ' ', ' '};
- char tab15[16] = {' ' , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'H', 'a', 'l', 'l', 'o', ' '};
- char tab16[16] = {' ' , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'H', 'a', 'l', 'l', 'o'};
- char tab17[16] = {' ' , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'H', 'a', 'l', 'l'};
- char tab18[16] = {' ' , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'H', 'a', 'l'};
- char tab19[16] = {' ' , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'H', 'a'};
- char tab20[16] = {' ' , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'H'};
- volatile uint8_t keystate_forward;
- volatile uint8_t keystate_backward;
- volatile uint8_t keystate_stop;
- int tablice = 0;
- int flaga = 0;
- int main(void)
- {
- TCCR0 |= (1<<WGM01) | (0<<WGM00); // wybor timera
- TCCR0 |= (1<<CS02) | (0<<CS01) | (1<<CS00); // tutaj dzielnik
- OCR0 = 50; // liczenie do tej wartosci
- TIMSK |= (1<<OCIE0);
- sei();
- PORTC = 0xFF; // wlaczanie rezystora
- Inicjalizacja();
- for(;;){
- if(keystate_forward == 2){
- tablice++;
- flaga = 0;
- if(tablice == 32){
- licznik++;
- tablice = 0;
- }
- keystate_forward = 3;
- }
- if(keystate_backward == 2){
- tablice--;
- flaga = 0;
- if(tablice == -1){
- tablice = 31;
- }
- keystate_backward = 3;
- }
- if(keystate_stop == 2){
- flaga = 1;
- keystate_stop = 3;
- }
- switch(tablice){
- case 0:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab5,16);
- Wyswietlanie_nizej(tab0,16);
- break;
- case 1:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab6,16);
- Wyswietlanie_nizej(tab0,16);
- break;
- case 2:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab7,16);
- Wyswietlanie_nizej(tab0,16);
- break;
- case 3:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab8,16);
- Wyswietlanie_nizej(tab0,16);
- break;
- case 4:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab9,16);
- Wyswietlanie_nizej(tab0,16);
- break;
- case 5:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab10,16);
- Wyswietlanie_nizej(tab0,16);
- break;
- case 6:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab11,16);
- Wyswietlanie_nizej(tab0,16);
- break;
- case 7:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab12,16);
- Wyswietlanie_nizej(tab0,16);
- break;
- case 8:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab13,16);
- Wyswietlanie_nizej(tab0,16);
- break;
- case 9:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab14,16);
- Wyswietlanie_nizej(tab0,16);
- break;
- case 10:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab15,16);
- Wyswietlanie_nizej(tab0,16);
- break;
- case 11:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab16,16);
- Wyswietlanie_nizej(tab0,16);
- break;
- case 12:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab17,16);
- Wyswietlanie_nizej(tab1,16);
- break;
- case 13:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab18,16);
- Wyswietlanie_nizej(tab2,16);
- break;
- case 14:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab19,16);
- Wyswietlanie_nizej(tab3,16);
- break;
- case 15:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab20,16);
- Wyswietlanie_nizej(tab4,16);
- break;
- case 16:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab0,16);
- Wyswietlanie_nizej(tab5,16);
- break;
- case 17:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab0,16);
- Wyswietlanie_nizej(tab6,16);
- break;
- case 18:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab0,16);
- Wyswietlanie_nizej(tab7,16);
- break;
- case 19:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab0,16);
- Wyswietlanie_nizej(tab8,16);
- break;
- case 20:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab0,16);
- Wyswietlanie_nizej(tab9,16);
- break;
- case 21:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab0,16);
- Wyswietlanie_nizej(tab10,16);
- break;
- case 22:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab0,16);
- Wyswietlanie_nizej(tab11,16);
- break;
- case 23:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab0,16);
- Wyswietlanie_nizej(tab12,16);
- break;
- case 24:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab0,16);
- Wyswietlanie_nizej(tab13,16);
- break;
- case 25:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab0,16);
- Wyswietlanie_nizej(tab14,16);
- break;
- case 26:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab0,16);
- Wyswietlanie_nizej(tab15,16);
- break;
- case 27:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab0,16);
- Wyswietlanie_nizej(tab16,16);
- break;
- case 28:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab1,16);
- Wyswietlanie_nizej(tab17,16);
- break;
- case 29:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab2,16);
- Wyswietlanie_nizej(tab18,16);
- break;
- case 30:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab3,16);
- Wyswietlanie_nizej(tab19,16);
- break;
- case 31:
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Wyswietlanie(tab4,16);
- Wyswietlanie_nizej(tab20,16);
- break;
- }
- //Przesuwanie(20);
- }
- return 0;
- }
- void Inicjalizacja() //definicja funkcji inicjalizacji
- {
- DDRB=0xff; //wyjscie do lcd
- DDRA |= (1<<PA4)|(1<<PA6); //wyjscie do sterowania
- PORTB = (PORTB & 0x0F); //PB7..0 <-0
- PORTA &= ~(1<<PA4); //slowa sterujace
- PORTA &= ~(1<<PA6); //E <- 0
- _delay_ms(40);
- PORTA |= (1<<PA6); //E<-1
- PORTB = 0b00110000; //1-sza sekwencja 0011****
- PORTA &= ~(1<<PA6); //E <-0
- _delay_ms(4.1);
- PORTA |= (1<<PA6); //E<- 1
- //2 sekwencja 0011****
- PORTA &= ~(1<<PA6); //E<-0
- _delay_ms(100);
- PORTA |= (1<<PA6); // E<-1
- //3 sekwencja 0011****
- PORTA &= ~(1<<PA6); // E<-0
- _delay_ms(100);
- Zapis(0b00101000); //wywolanie funkcji zapis do LCD
- //8 bitowe slowo, 2 wiersze, matryca 5x10
- Zapis(0b00001100); //wlaczanie wyswietlacza, kursor aktywny i miga
- Zapis(1); //czyszczenie wyswietlacza
- _delay_ms(1.64);
- Zapis(0b00000110); //adres inkrementowany, przesuwanie kursora
- }
- void Wyswietlanie(char * co, int8_t ile) //definicja funkcji wyświetlania
- {
- int wew_flag = 0;
- int8_t k = 0;
- PORTA |= (1<<PA4); //RS <-1 teraz znaki
- while(k<ile)
- {
- if(flaga == 1 && wew_flag == 1){
- Zapis(licznik + 48);
- wew_flag = 0;
- }
- else
- Zapis(co[k]); //wyslanie znakow "Fajnie?" na wyswietlacz
- if(co[k] == 'o') wew_flag = 1;
- k++;
- }
- PORTA &= ~(1<<PA4);
- }
- void Wyswietlanie_nizej(char * co, int8_t ile) //definicja funkcji wyświetlania
- {
- int wew_flag = 0;
- int8_t k = 0;
- //PORTA &= ~(1<<PA4);
- Zapis(0b11000000);
- PORTA |= (1<<PA4); //RS <-1 teraz znaki
- while(k<ile)
- {
- if(flaga == 1 && wew_flag == 1){
- Zapis(licznik + 48);
- wew_flag = 0;
- }
- else
- Zapis(co[k]); //wyslanie znakow "Fajnie?" na wyswietlacz
- if(co[k] == 'o') wew_flag = 1;
- k++;
- }
- PORTA &= ~(1<<PA4);
- }
- void Zapis(int8_t bajt) //definicja funkcji zapisu
- {
- PORTA |=(1<<PA6); //E<-1
- PORTB = (bajt & 0xF0)|(PORTB & 0x0F);
- PORTA &= ~(1<<PA6);
- asm volatile("nop"); //male opoznienie
- PORTA |=(1<<PA6); //E<-1
- PORTB = ((bajt & 0x0F)<<4)|(PORTB & 0x0F);
- PORTA &= ~(1<<PA6); //E<-0 zapis opadajacym zboczem
- _delay_us(40);
- }
- ISR(TIMER0_COMP_vect){
- //obsluga klawisza
- switch(keystate_forward){
- case 0: if((PINC & 0x01) == 0) keystate_forward = 1;
- break;
- case 1: if((PINC & 0x01) == 0) keystate_forward = 2;
- else keystate_forward = 0;
- break;
- case 2: break;
- case 3: if((PINC & 0x01) != 0) keystate_forward = 4;
- break;
- case 4: if((PINC & 0x01) != 0) keystate_forward = 0;
- else keystate_forward = 3;
- break;
- }
- switch(keystate_backward){
- case 0: if((PINC & 0x02) == 0) keystate_backward = 1;
- break;
- case 1: if((PINC & 0x02) == 0) keystate_backward = 2;
- else keystate_backward = 0;
- break;
- case 2: break;
- case 3: if((PINC & 0x02) != 0) keystate_backward = 4;
- break;
- case 4: if((PINC & 0x02) != 0) keystate_backward = 0;
- else keystate_backward = 3;
- break;
- }
- switch(keystate_stop){
- case 0: if((PINC & 0x04) == 0) keystate_stop = 1;
- break;
- case 1: if((PINC & 0x04) == 0) keystate_stop = 2;
- else keystate_stop = 0;
- break;
- case 2: break;
- case 3: if((PINC & 0x04) != 0) keystate_stop = 4;
- break;
- case 4: if((PINC & 0x04) != 0) keystate_stop = 0;
- else keystate_stop = 3;
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement