#include #include #include #include "lcd.h" #define ZPOZ_TLAC 200 // zpoždění pro všechna tlačítka unsigned int menu=0; unsigned int teplota=0; // proměnná pro výpis unsigned int teplota_zap=500; unsigned int teplota_vyp=500; unsigned int adc; unsigned int p1,p2,p3,p4,p5,p6,p7s; // pomocné proměnné unsigned char pom[10]; unsigned int cit=0; // čítač pro počítání času unsigned int vteriny; unsigned int minuty; unsigned int hodiny; unsigned int i; uint16_t dat; // pro ukládání do EEPROM uint16_t pam; void vypis_vteriny(void); // fce pro výpis void vypis_minuty(void); void vypis_hodiny(void); void vypis_teplota_vyp(void); void vypis_teplota_zap(void); int main (void) { DDRD=0xFF; // display - vystupní port DDRB=0b11110000; // tlačítka a spínací tranzistor ADMUX=0b00000000; // A/D na měření teploty ADCSRB=0B00000000; ADCSRA=0b10011111; lcd_init(LCD_DISP_ON); //init LCD lcd_clrscr(); //clears LCD lcd_gotoxy(0,0); // počáteční výpis lcd_puts("Spinani Cerpadla"); lcd_gotoxy(0,1); for (i=0;i<16;i++) { lcd_putc('.'); _delay_ms(150); } lcd_clrscr(); // načtení hodnot z EEPROM ----------------- pam=0x00; teplota_zap = eeprom_read_word ( pam ); pam=0x10; teplota_vyp = eeprom_read_word ( pam ); pam=0x30; minuty = eeprom_read_word ( pam ); pam=0x40; hodiny = eeprom_read_word ( pam ); // ------------------------------------------------ /// SMAZAT !!!!!!!!!!!!! /* teplota_zap=250; teplota_vyp=250; vteriny=0; // nulovani hodin minuty=0; hodiny=0;*/ /////!!!!!!!!!!!!!!! // ---- první výpis---------------- vypis_hodiny(); lcd_gotoxy(13,0); lcd_putc(':'); vypis_minuty(); lcd_gotoxy(10,0); lcd_putc(':'); vypis_vteriny(); vypis_teplota_vyp(); vypis_teplota_zap(); //- --------------------------------- while (1) { _delay_ms(10); ADCSRA=0b11001111; // zacatek noveho prevodu AD loop_until_bit_is_set( ADCSRA,4 ); // čekání na převedení adc=ADCW; teplota=((adc-555)*10)/2; // odečtení 2.73V =0°C // vypis na LCD teplota p1=teplota/100; pom[0]=48+p1; p2=teplota-100*p1; p3=p2/10; pom[1]=48+p3; p4=p2-p3*10; pom[2]=48+p4; lcd_gotoxy(0,0); lcd_putc(pom[0]); lcd_gotoxy(1,0); lcd_putc(pom[1]); lcd_gotoxy(2,0); lcd_putc('.'); lcd_gotoxy(3,0); lcd_putc(pom[2]); lcd_gotoxy(4,0); lcd_putc(223); lcd_gotoxy(5,0); lcd_putc('C'); //--------------------------- //-----nastavování teplot a nulování času if ( bit_is_clear( PINB,3 )) // volba co budu nastavovat { _delay_ms(ZPOZ_TLAC); menu++; if (menu==4) menu=1; } if ( bit_is_clear( PINB,0 )) // exit z menu { menu=0; pam=0x00; // uložit vše do EEPROM eeprom_write_word (pam, teplota_zap ); pam=0x10; eeprom_write_word (pam, teplota_vyp ); pam=0x30; eeprom_write_word (pam, minuty ); pam=0x40; eeprom_write_word (pam, hodiny ); lcd_gotoxy(7,1); lcd_putc(' '); lcd_gotoxy(8,1); lcd_putc(' '); } if (menu==1) // nastavování teploty zapínací { lcd_gotoxy(7,1); lcd_putc('<'); lcd_gotoxy(8,1); lcd_putc('<'); if ( bit_is_clear( PINB,1 )) { teplota_zap=teplota_zap-5; // dekrementace teploty if ( teplota_vyp>teplota_zap) teplota_vyp=teplota_vyp-5; _delay_ms(ZPOZ_TLAC); } if ( bit_is_clear( PINB,2 )) { teplota_zap=teplota_zap+5; // inkrementace teploty _delay_ms(ZPOZ_TLAC); } vypis_teplota_zap(); // vypis na LCD teplota zapínací vypis_teplota_vyp() ; } if (menu==2) // nastavování teploty vypínací { lcd_gotoxy(7,1); lcd_putc('>'); lcd_gotoxy(8,1); lcd_putc('>'); if ( bit_is_clear( PINB,1 )) { teplota_vyp=teplota_vyp-5; // dekrementace teploty _delay_ms(ZPOZ_TLAC); } if ( bit_is_clear( PINB,2 )) { teplota_vyp=teplota_vyp+5; // inkrementace teploty if ( teplota_zap=teplota_zap) { PORTB |= 0b00010000; // sepne } if ( teplota