Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * lab7.c
- *
- * Created: 2013-04-10 11:28:36
- * Author: student
- */
- #include <avr/io.h>
- #include <lcd.h>
- #include <util/delay.h>
- #include <stdio.h>
- #include <avr/interrupt.h>
- /* Dodatkowe procedury obsługi wyświetlacza LCD, wymagają dołączenia
- modułu <lcd.h>.
- Rejestry wyświetlacza dostępne są pod adresami:
- - rejestr sterujący 0x1F90 (COMM_LCD)
- char *COMM_LCD = 0x1F90;
- - rejestr danych 0x1F91 (DATA_LCD)
- char *DATA_LCD = 0x1F91; */
- #ifndef __PGMSPACE_H_
- # include <avr/pgmspace.h>
- #endif
- // Zerowanie wyświetlacza
- void lcd_clear(void);
- // Przesunięcie kursora
- void lcd_home(void);
- // Inicjalizacja wyświetlacza 5x7, 2 wiersze
- void init_lcd(void);
- // Przepisanie tekstu (koniec = 0xFF) z pamięci programu na wyświetlacz
- // Funkcja dopuszcza wykorzystanie znaku o kodzie 0x00
- // _adres - adres tekstu w pam. FLASH
- void disp_txt_P(const char* _adres);
- // Przepisanie tekstu (koniec = 0x00) z pamięci danych na wyświetlacz
- // _adres - adres tekstu w pam. RAM
- void disp_txt_D(char* _adres);
- //Implementacja
- void lcd_clear(void)
- {
- pisz_com(0x01);
- }
- void lcd_home(void)
- {
- pisz_com(0x02);
- }
- void init_lcd(void)
- {
- _delay_ms(15);
- COMM_LCD = 0x30;
- _delay_ms(5);
- COMM_LCD = 0x30;
- _delay_ms(0.2);
- COMM_LCD = 0x30;
- _delay_ms(30);
- COMM_LCD = 0x38; //Słowo danych 8-bitów, dwa wiersze, znak 7x5
- //pikseli
- test_bf();
- pisz_com(0x0C); //Włączenie wyświetlacza, bez kursora, bez
- //migotania
- lcd_clear();
- pisz_com(0x06); //Wpisywanie znaków od lewej, autoinkrementacja
- lcd_home();
- }
- void disp_txt_P(const char* _adres)
- {
- volatile uint8_t al;
- for (int i = 0; i<16; i++)
- {
- al = pgm_read_byte(&_adres[i]);
- if (al == 0xFF) break;
- pisz_ws(al);
- }
- }
- void disp_txt_D(char* _adres)
- {
- volatile uint8_t al;
- for (int i = 0; i<16; i++)
- {
- al = _adres[i];
- if (al == 0x00) break;
- pisz_ws(al);
- }
- }
- char w1[] = "Przetwornik A/C";
- char w2[32];
- int d1, d2;
- /*ISR(ADC_vect)
- {
- d1 = 5 * ADC / 1024;
- d2 = (10 * 5 * ADC / 1024) % 10;
- }*/
- int main(void)
- {
- sei();
- MCUCR =_BV(SRE) | _BV(SRW10);
- XMCRA =_BV(SRW01) |_BV(SRW00) |_BV(SRW11);
- init_lcd();
- /*ADCSRA = _BV(7);
- ADMUX = _BV(6) | _BV(1);
- while(1)
- {
- ADCSRA |= _BV(6);
- while (ADCSRA & _BV(4))
- ;
- ADCSRA &= ~_BV(6);
- lcd_clear();
- pisz_com(0x80);
- disp_txt_D(w1);
- d1 = 5 * ADC / 1024;
- d2 = (10 * 5 * ADC / 1024) % 10;
- sprintf(w2, "Pomiar: %d.%dV", d1, d2);
- pisz_com(0xC0);
- disp_txt_D(w2);
- _delay_ms(500);
- }*/
- /*ADCSRA = _BV(7) | _BV(3);
- ADMUX = _BV(6) | _BV(1);
- while(1)
- {
- ADCSRA |= _BV(6);
- while (ADCSRA & _BV(4))
- ;
- ADCSRA &= ~_BV(6);
- //lcd_clear();
- pisz_com(0x80);
- disp_txt_D(w1);
- sprintf(w2, "Pomiar: %d.%dV", d1, d2);
- pisz_com(0xC0);
- disp_txt_D(w2);
- _delay_ms(500);
- }*/
- ADCSRA = _BV(7);
- ADMUX = _BV(6) | _BV(1);
- DDRB = 0xFF;
- PORTB = PIND;
- while(1)
- {
- ADCSRA |= _BV(6);
- while (ADCSRA & _BV(4))
- ;
- ADCSRA &= ~_BV(6);
- //lcd_clear();
- pisz_com(0x80);
- disp_txt_D(w1);
- d1 = 5 * ADC / 1024;
- d2 = (10 * 5 * ADC / 1024) % 10;
- sprintf(w2, "Pomiar: %d.%dV", d1, d2);
- if (d1 > 0)
- {
- PORTB &= ~_BV(0);
- }
- else
- {
- PORTB |= _BV(0);
- }
- if (d1 > 1)
- {
- PORTB &= ~_BV(1);
- }
- else
- {
- PORTB |= _BV(1);
- }
- if (d1 > 2)
- {
- PORTB &= ~_BV(2);
- }
- else
- {
- PORTB |= _BV(2);
- }
- if (d1 > 3)
- {
- PORTB &= ~_BV(3);
- }
- else
- {
- PORTB |= _BV(3);
- }
- if (d1 > 4)
- {
- PORTB &= ~_BV(4);
- }
- else
- {
- PORTB |= _BV(4);
- }
- pisz_com(0xC0);
- disp_txt_D(w2);
- _delay_ms(500);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement