/************************************************************************* Title: Testing output to a HD44780 based LCD display. Author: Peter Fleury http://tinyurl.com/peterfleury File: $Id: test_lcd.c,v 1.8 2015/01/31 18:04:08 peter Exp $ Software: AVR-GCC 4.x Hardware: HD44780 compatible LCD text display AVR with external SRAM interface if memory-mapped LCD interface is used any AVR with 7 free I/O pins if 4-bit IO port mode is used **************************************************************************/ #include #include #include #include #include "lcd.h" /* ** constant definitions */ static const PROGMEM unsigned char copyRightChar[] = { 0x07, 0x08, 0x13, 0x14, 0x14, 0x13, 0x08, 0x07, 0x00, 0x10, 0x08, 0x08, 0x08, 0x08, 0x10, 0x00 }; /* ** function prototypes */ void wait_until_key_pressed(void); void wait_until_key_pressed(void) { unsigned char temp1, temp2; do { temp1 = PIND; // read input _delay_ms(5); // delay for key debounce temp2 = PIND; // read input temp1 = (temp1 & temp2); // debounce input } while ( temp1 & _BV(PIND2) ); loop_until_bit_is_set(PIND,PIND2); /* wait until key is released */ } int main(void) { char buffer[7]; int num=134; unsigned char i; DDRD &=~ (1 << PD2); /* Pin PD2 input */ PORTD |= (1 << PD2); /* Pin PD2 pull-up enabled */ /* initialize display, cursor off */ lcd_init(LCD_DISP_ON); for (;;) { /* loop forever */ /* * Test 1: write text to display */ /* clear display and home cursor */ lcd_clrscr(); /* put string to display (line 1) with linefeed */ lcd_puts("LCD Test Line 1\n"); /* cursor is now on second line, write second line */ lcd_puts("Line 2"); /* move cursor to position 8 on line 2 */ lcd_gotoxy(7,1); /* write single char to display */ lcd_putc(':'); /* wait until push button PD2 (INT0) is pressed */ wait_until_key_pressed(); /* * Test 2: use lcd_command() to turn on cursor */ /* turn on cursor */ lcd_command(LCD_DISP_ON_CURSOR); /* put string */ lcd_puts( "CurOn"); /* wait until push button PD2 (INT0) is pressed */ wait_until_key_pressed(); /* * Test 3: display shift */ lcd_clrscr(); /* clear display home cursor */ /* put string from program memory to display */ lcd_puts_P( "Line 1 longer than 14 characters\n" ); lcd_puts_P( "Line 2 longer than 14 characters" ); /* move BOTH lines one position to the left */ lcd_command(LCD_MOVE_DISP_LEFT); /* wait until push button PD2 (INT0) is pressed */ wait_until_key_pressed(); /* turn off cursor */ lcd_command(LCD_DISP_ON); /* * Test: Display integer values */ lcd_clrscr(); /* clear display home cursor */ /* convert interger into string */ itoa( num , buffer, 10); /* put converted string to display */ lcd_puts(buffer); /* wait until push button PD2 (INT0) is pressed */ wait_until_key_pressed(); /* * Test: Display userdefined characters */ lcd_clrscr(); /* clear display home cursor */ lcd_puts("Copyright: "); /* * load two userdefined characters from program memory * into LCD controller CG RAM location 0 and 1 */ lcd_command(_BV(LCD_CGRAM)); /* set CG RAM start address 0 */ for(i=0; i<16; i++) { lcd_data(pgm_read_byte_near(©RightChar[i])); } /* move cursor to position 0 on line 2 */ /* Note: this switched back to DD RAM adresses */ lcd_gotoxy(0,1); /* display user defined (c), built using two user defined chars */ lcd_putc(0); lcd_putc(1); /* wait until push button PD2 (INT0) is pressed */ wait_until_key_pressed(); } }