#ifndef __DISPLAY_H #define __DISPLAY_H //-------------------------------------------------------------------------- // display.h //-------------------------------------------------------------------------- // Beinhaltet Funktionen zur Ansteuerung eines Displays // DEM20488 von Display Elektronik GmbH oder // EA DIP204-4NLED von Electronic Assembly GmbH //-------------------------------------------------------------------------- // Autor: Sven Jordan, http://www.s-jordan.de // Version: 3.0 // Stand: 2012-12-17 // // Versionsverlauf: Version 1.0: Initiale Version // Version 1.1: Wartefunktionen geaendert // Version 2.0: Funktion zum Anzeigen von grossen Zahlen // ueber alle 4 Display-Zeilen ergaenzt, // Funktion zum Anzeigen eines Bargraphs // ergaenzt // Version 3.0: Unterstuetzung von EA DIP204-4NLED // //-------------------------------------------------------------------------- #define LCD_EN 0 // Enable (fallende Flanke zur Datenuebernahme) #define LCD_RS 1 // Umschaltung Befehl (0) / Daten (1) #define LCD_BL 2 // Ansteuerung Hintergrundbeleuchtung Aus (0) / Ein (1) #define LCD_PW 3 // Betrieb (Power) Display Aus (0) / Ein (1) #define LCD_D0 4 // Datenleitung D0 #define LCD_D1 5 // Datenleitung D1 #define LCD_D2 6 // Datenleitung D2 #define LCD_D3 7 // Datenleitung D3 #include #include #include void wait_10_millisek(void); void wait_500_mikrosek(void); void display_init(unsigned char eingangsport, unsigned char displaytyp); // 0=DEM20488, 1=EA DIP204-4NLED void display_off(void); void backlight_on(void); void backlight_off(void); void clear_display(void); void cursor_to_position(unsigned char zeile, unsigned char spalte); void print_char(char character); void print_string(char* string); void print_number(signed short value, unsigned char sign, unsigned char vorkommastellen, unsigned char nachkommastellen); void define_big_numbers(void); void print_big_number(unsigned char number, unsigned char spalte); void define_bargraph(void); void print_bargraph(signed short value, unsigned char length, signed short min_value, signed short max_value); static unsigned char power = 0, light = 0, displaytyp_static = 0; static volatile unsigned char *zeiger_auf_port = 0; void wait_10_millisek(void) { unsigned short i = 0; for (i=0; i<8421; i++); } void wait_500_mikrosek(void) { unsigned short i = 0; for (i=0; i<421; i++); } void display_init(unsigned char eingangsport, unsigned char displaytyp) { displaytyp_static=displaytyp; switch(eingangsport) { case 'A': zeiger_auf_port=&PORTA; DDRA=0xFF; break; case 'B': zeiger_auf_port=&PORTB; DDRB=0xFF; break; case 'C': zeiger_auf_port=&PORTC; DDRC=0xFF; break; case 'D': zeiger_auf_port=&PORTD; DDRD=0xFF; break; } switch(displaytyp_static) { case 0: power=1; *zeiger_auf_port |= (1<>4)<<4)|(1<>4)<<4)|(1<>4)<<4)|(light<>4)<<4)|(light<5)vorkommastellen=5; else if(vorkommastellen<1)vorkommastellen=1; if(nachkommastellen>4)nachkommastellen=4; if((vorkommastellen+nachkommastellen)>5)nachkommastellen=5-vorkommastellen; for(counter=3; counter>=1; counter-=1) { if (value>=counter*10000) { break; } } if((vorkommastellen+nachkommastellen)>=5) { if(value<10000) print_char('0'); else print_char(counter+48); } value-=counter*10000; if(nachkommastellen==4) print_char(','); for(counter=9; counter>=1; counter-=1) { if (value>=counter*1000) { break; } } if((vorkommastellen+nachkommastellen)>=4) { if(value<1000) print_char('0'); else print_char(counter+48); } value-=counter*1000; if(nachkommastellen==3) print_char(','); for(counter=9; counter>=1; counter-=1) { if (value>=counter*100) { break; } } if((vorkommastellen+nachkommastellen)>=3) { if(value<100) print_char('0'); else print_char(counter+48); } value-=counter*100; if(nachkommastellen==2) print_char(','); for(counter=9; counter>=1; counter-=1) { if (value>=counter*10) { break; } } if((vorkommastellen+nachkommastellen)>=2) { if(value<10) print_char('0'); else print_char(counter+48); } value-=counter*10; if(nachkommastellen==1) print_char(','); for(counter=9; counter>=1; counter-=1) { if (value>=counter) { break; } } if((vorkommastellen+nachkommastellen)>=1) { if(value<1) print_char('0'); else print_char(counter+48); } } void define_big_numbers(void) { *zeiger_auf_port = (1<20) length=20; if(value>max_value) value=max_value; else if(value -3000) { diff*=10; value*=10; } schrittweite = diff / ((length-2) * 5); print_char(0); length--; while(value >= (schrittweite * 5) && length > 2) { print_char(7); value -= (schrittweite * 5); length--; } if(value >= (schrittweite * 5)) print_char(7); else if(value >= (schrittweite * 4)) print_char(6); else if(value >= (schrittweite * 3)) print_char(5); else if(value >= (schrittweite * 2)) print_char(4); else if(value >= schrittweite) print_char(3); else print_char(2); length--; while(length > 1) { print_char(2); length--; } print_char(1); } #endif