#ifndef LCD_H_ #define LCD_H_ #include #include #include "RTC.h" /* Wiring dependent definitions */ #define LCDcontrolPort PORTA // Output Port Register #define DDRcontrolPort DDRA // Data Direction Register #define E 7 // Enable Signal #define RW 6 // Read Write Select Signal #define RS 5 // Register Select Signal #define LCDdataPort PORTB // Output Port Register #define DDRdataPort DDRB // Data Direction Register /* Values defined for the LCD BC2004A-series */ #define FUNCTIONSET 0x38 // Functionset 00111000 => (8-bit 2-line) #define DISPLAY_ONOFF 0x0F // Display ONOFF 00001111 => cursor blinking #define CLEAR_DISPLAY 0x01 // Clear LCD display #define ExecutionTimeCmd 80 // Delay needed for writing command to LCD #define ExecutionTimeWrite 50 // Delay needed for writing character to display #define SECONDS_REGISTER 0x00 #define MINUTES_REGISTER 0x01 #define HOURS_REGISTER 0x02 #define DAYOFWK_REGISTER 0x03 #define DAYS_REGISTER 0x04 #define MONTHS_REGISTER 0x05 #define YEARS_REGISTER 0x06 char sendNumber(uint8_t nbr); void write_lcd_cmd(unsigned char command); // sends instruction to LCD void write_on_lcd(unsigned char character); // prints character on LCD screen void sendString(char *string_of_characters); // prints string on LCD screen void lcd_init() { DDRcontrolPort |= 1<0){ write_on_lcd(*string_of_characters++); //_delay_ms(100); // Just to make it look nice } } void WriteTime() { uint8_t hours, minutes, seconds; DS1307_GetTime(&hours,&minutes,&seconds); TwoDigits(hours); write_on_lcd(':'); TwoDigits(minutes); write_on_lcd(':'); TwoDigits(seconds); } void DS1307_GetDate(uint8_t *months, uint8_t *days, uint8_t *years) // returns months, days, and years in BCD format { *months = rtc_read_register(MONTHS_REGISTER); *days = rtc_read_register(DAYS_REGISTER); *years = rtc_read_register(YEARS_REGISTER); } void WriteDate() { uint8_t months, days, years; DS1307_GetDate(&months,&days,&years); TwoDigits(months); write_on_lcd('/'); TwoDigits(days); write_on_lcd('/'); TwoDigits(years); } void DS1307_GetTime(uint8_t *hours, uint8_t *minutes, uint8_t *seconds) // returns hours, minutes, and seconds in BCD format { *hours = rtc_read_register(HOURS_REGISTER); *minutes = rtc_read_register(MINUTES_REGISTER); *seconds = rtc_read_register(SECONDS_REGISTER); if (*hours & 0x40) // 12hr mode: *hours &= 0x1F; // use bottom 5 bits (pm bit = temp & 0x20) else *hours &= 0x3F; // 24hr mode: use bottom 6 bits } void TwoDigits(uint8_t data) // helper function for WriteDate() and WriteTime() // input is two digits in BCD format // output is to LCD display at current cursor position { uint8_t temp = data>>4; // get upper 4 bits write_on_lcd(sendNumber(temp)); // display upper digit data &= 0x0F; // get lower 4 bits write_on_lcd(sendNumber(data)); // display lower digit } //convert int to string char sendNumber(uint8_t nbr){ switch(nbr){ case 0: return('0'); break; case 1: return('1'); break; case 2: return('2'); break; case 3: return('3'); break; case 4: return('4'); break; case 5: return('5'); break; case 6: return('6'); break; case 7: return('7'); break; case 8: return('8'); break; case 9: return('9'); break; } } #endif //LCD_H