Created
June 1, 2014 21:41
-
-
Save pferreir/8cb33e14a9b36503894e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/************************************************************************* | |
Title: testing output to a HD44780 based LCD display. | |
Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury | |
File: $Id: test_lcd.c,v 1.6 2004/12/10 13:53:59 peter Exp $ | |
Software: AVR-GCC 3.3 | |
Hardware: HD44780 compatible LCD text display | |
ATS90S8515/ATmega if memory-mapped LCD interface is used | |
any AVR with 7 free I/O pins if 4-bit IO port mode is used | |
**************************************************************************/ | |
#include <stdlib.h> | |
#include <avr/io.h> | |
#include <avr/delay.h> | |
#include <avr/pgmspace.h> | |
#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; | |
unsigned int i; | |
do { | |
temp1 = PIND; // read input | |
for(i=0;i<65535;i++); | |
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 */ | |
DDRA = 0xff; | |
PORTA = 2; | |
_delay_ms(1000); | |
PORTA = 1; | |
_delay_ms(1000); | |
/* 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(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment