Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
artikel:displays:weh001602_8080_democode [2013/03/02 23:29] – angelegt Hannes Jochriemartikel:displays:weh001602_8080_democode [2024/02/06 09:43] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 7: Zeile 7:
    
  * Pin-Belegung Display:  * Pin-Belegung Display:
- * 1: GND + * 1: GND 
- * 2: VCC + * 2: VCC 
- * 3: N.C. + * 3: N.C. 
- * 4: RS + * 4: RS 
- * 5: R/W + * 5: R/W 
- * 6: ENABLE + * 6: ENABLE 
- * 7: Data0 + * 7: Data0 
- * 8: Data1 + * 8: Data1 
- * 9: Data2+ * 9: Data2
  * 10: Data3  * 10: Data3
  * 11: Data4  * 11: Data4
Zeile 25: Zeile 25:
    
  * µC-Belegung:  * µC-Belegung:
- * Data0: PD0 + * Data0: PD0 
- * Data1: PD1 + * Data1: PD1 
- * Data2: PD2 + * Data2: PD2 
- * Data3: PD3 + * Data3: PD3 
- * Data4: PD4 + * Data4: PD4 
- * Data5: PD5 + * Data5: PD5 
- * Data6: PD6 + * Data6: PD6 
- * Data7: PD7 + * Data7: PD7 
- * RS: PD4 H: Daten, L: Befehl + * RS: PD4 H: Daten, L: Befehl 
- * R/W: PD5 H: Lesen(MPU->Modul), L: Schreiben(MPU->Modul) + * R/W: PD5 H: Lesen(MPU->Modul), L: Schreiben(MPU->Modul) 
- * E: PD6 Aktivieren H, H->L+ * E: PD6 Aktivieren H, H->L
    
  */  */
Zeile 59: Zeile 59:
 uint8_t _data_pins[4]; uint8_t _data_pins[4];
  
-#define RS (1<<PC3) +#define RS (1<<PC3) 
-#define RW (1<<PC4)+#define RW (1<<PC4)
 #define ENABLE (1<<PC5) #define ENABLE (1<<PC5)
-#define LED (1<<PC2)+#define LED (1<<PC2)
 #define DATA0 (1<<PD0) #define DATA0 (1<<PD0)
 #define DATA1 (1<<PD1) #define DATA1 (1<<PD1)
Zeile 74: Zeile 74:
 int main(void) int main(void)
 { {
- DDRD = 0xff; // Datenport als Ausgang+ DDRD = 0xff; // Datenport als Ausgang
  DDRC |= (LED|RS|RW|ENABLE); // Steuerpins als Ausgang  DDRC |= (LED|RS|RW|ENABLE); // Steuerpins als Ausgang
- PORTD = 0; // Datenport auf 0 + PORTD = 0; // Datenport auf 0 
- PORTC |= (RS|RS|ENABLE); // Steuerpins auf 1 + PORTC |= (RS|RS|ENABLE); // Steuerpins auf 1 
- led_an(); // "debug"-LED einschalten + led_an(); // "debug"-LED einschalten 
- long_delay(500); // Display benoetigt 500ms beim Power-up + long_delay(500); // Display benoetigt 500ms beim Power-up 
- led_aus(); // "debug"-LED ausschalten+ led_aus(); // "debug"-LED ausschalten
  
- sende_befehl(0b00111001); // Function set: 8bit, 2 Zeilen, 5x8 Punkte, Westeurop. Charset+ sende_befehl(0x38);//function set
  _delay_us(5000);  _delay_us(5000);
- sende_befehl(0b00001100); // Display on. Display an, Cursor aus, Blinken aus.+ sende_befehl(0x38);//function set
  _delay_us(5000);  _delay_us(5000);
- sende_befehl(0b00000001); // Display clear+ sende_befehl(0x38);//function set
  _delay_us(5000);  _delay_us(5000);
- sende_befehl(0b00000010); // Display home+ sende_befehl(0x38);//function set
  _delay_us(5000);  _delay_us(5000);
- sende_befehl(0b00000100); // Entry mode: Dekrement, no shift.+ sende_befehl(0x08);//display off
  _delay_us(5000);  _delay_us(5000);
 + sende_befehl(0x06);//entry mode set//need to configure this cmd or char will move left not move right
 + _delay_us(5000);
 + sende_befehl(0x17);//Character mode and internel power on (have to turn on internel power to get the best brightness)
 + _delay_us(5000);
 + sende_befehl(0x01);//clear display
 + _delay_us(5000);
 + sende_befehl(0x02);//return home
 + _delay_us(5000);
 + sende_befehl(0x0c);//display on
   
  schreibe_text(0, "eHaJo.de");  schreibe_text(0, "eHaJo.de");
Zeile 105: Zeile 114:
 void sende_daten(uint8_t zeichen) void sende_daten(uint8_t zeichen)
 { {
- PORTC |= (RS); // RS ist 1 bei Daten+ PORTC |= (RS); // RS ist 1 bei Daten
  DDRD = 0xff;  DDRD = 0xff;
  PORTD = zeichen;  PORTD = zeichen;
Zeile 120: Zeile 129:
  
 void toggle_en() void toggle_en()
-{ // ENABLE + RW werden getoggelt, es gibt keien Busy-Bit-Abfrage.+{ // ENABLE + RW werden getoggelt, es gibt keien Busy-Bit-Abfrage.
  PORTC &= ~(ENABLE | RW);  PORTC &= ~(ENABLE | RW);
  _delay_us(500);  _delay_us(500);
Zeile 132: Zeile 141:
  
  if(zeile == 0)  if(zeile == 0)
- sende_befehl((0x80)+19); // Setze Adresse an die erste Position von Zeile 1+ sende_befehl((0x80)+0); // Setze Adresse an die erste Position von Zeile 1
  else  else
- sende_befehl((0x80)+83); // Setze Adresse an die erste Position von Zeile 2+ sende_befehl((0x80)+64); // Setze Adresse an die erste Position von Zeile 2
  while ((zeichen = *text++))   while ((zeichen = *text++)) 
  { // Solange Zeichen vorhanden sind zum Display schicken  { // Solange Zeichen vorhanden sind zum Display schicken