- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Große Zeichen auf 16*2 LCD

  1. #11
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077
    Anzeige

    Powerstation Test
    Man braucht wahrscheinlich nur die Hexzahlen zwischen "call Char" für Bascom auf Dezimalzahlen wandeln. Wenn man das als Tabelle haben will, sollte mit "db" gehen. Z.B. Zeichen "0" als "db 3,3,3,3,3,3,3,3" usw.

    MfG

  2. #12
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Ich hab's mal umgesetzt, Bascom-Programmierer mögen mir verzeihen:

    Bild hier  

    Ein kleiner Bug in der oberen Zeile: Auch mein LCD hat nur 8 Sonderzeichen. Im Code ist das aber korrigiert:
    Code:
    ' nibobee mit Bascom "Doppelthohe Ziffern"                                     6.5.10 mic
    
    ' Doppelthohe Ziffern:  https://www.roboternetz.de/phpBB2/viewtopic.php?t=54147
    ' nibobee mit 4bit-LCD: https://www.roboternetz.de/phpBB2/ze...ag.php?t=51821
    
    ' Zeichensatz von PICture: https://www.roboternetz.de/phpBB2/vi...=437434#437434
    
    
    $regfile = "m16def.dat"
    $crystal = 15000000
    $hwstack = 32
    $swstack = 8
    $framesize = 24
    
    Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.0 , Rs = Portc.1
    Config Lcd = 20 * 4
    Config Lcdbus = 4                                           ' oje
    
    Deflcdchar 0 , &H03 , &H03 , &H03 , &H03 , &H03 , &H03 , &H03 , &H03       ' Zeichensatz von PICture
    Deflcdchar 1 , &H1F , &H1F , &H03 , &H03 , &H03 , &H03 , &H03 , &H03
    Deflcdchar 2 , &H03 , &H03 , &H03 , &H03 , &H03 , &H03 , &H1F , &H1F
    Deflcdchar 3 , &H1F , &H1F , &H03 , &H03 , &H03 , &H03 , &H1F , &H1F
    Deflcdchar 4 , &H1F , &H1F , &H18 , &H18 , &H18 , &H18 , &H1F , &H1F
    Deflcdchar 5 , &H1F , &H1F , &H1B , &H1B , &H1B , &H1B , &H1B , &H1B
    Deflcdchar 6 , &H1B , &H1B , &H1B , &H1B , &H1B , &H1B , &H1F , &H1F
    Deflcdchar 7 , &H1F , &H1F , &H1B , &H1B , &H1B , &H1B , &H1F , &H1F
    
    Dim Ziffer(10) As Byte
    Ziffer(1) = &H56                                            ' 0
    Ziffer(2) = &H00                                            ' 1
    Ziffer(3) = &H14                                            ' 2
    Ziffer(4) = &H32                                            ' 3
    Ziffer(5) = &H60                                            ' 4
    Ziffer(6) = &H42                                            ' 5
    Ziffer(7) = &H46                                            ' 6
    Ziffer(8) = &H10                                            ' 7
    Ziffer(9) = &H76                                            ' 8
    Ziffer(10) = &H53                                           ' 9
    
    Dim B As Byte , Temp As Byte
    
    Cls                                                         ' clear the LCD display
    Cursor Off Noblink
    Lcd "Nibobee mit LCD"                                       ' display this at the top line
    Locate 3 , 1
    Lcd "Doppelthohe Ziffern"
    
    Wait 2
    
    Cls
    For B = 1 To 8                                              ' es sind nur 8 Userzeichen ;)
       Locate 1 , B
       Temp = B - 1                                             ' ächz
       Lcd Chr(temp)
       Locate 2 , B
       Lcd Temp
    Next
    Wait 2
    For B = 1 To 10
       Locate 3 , B
       Temp = Ziffer(b ) / 16                                   ' Bit 7-4 sind die obere Zifferhälfe
       Lcd Chr(temp)
       Locate 4 , B
       Temp = Ziffer(b) And &H0F                                ' und Bit 3-0 die Untere ;)
       Lcd Chr(temp)
    Next
    
    Do
    Loop
    End
    Gruß

    mic

    &H72 für die 9?
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #13
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077
    Wow! Das sieht auf deinem Display viel besser als auf meinem aus!

    Es ist also mit jedem µC möglich wenn man sich dafür etwas bemüht...

    Möglicherweise lassen sich mit z.B. 4x16 Zeichen noch grössere erzeugen.

    MfG
    Geändert von PICture (27.03.2011 um 17:13 Uhr)

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    09.05.2010
    Ort
    Baden Württemberg
    Beiträge
    11

    Auch für C!

    Hallo zusammen,

    ich habe das Projekt gerade gut gebrauchen können! Danke auch.
    Ich programmiere in C auf dem AT89C5131 und AT89C4051 und habe dafür das Programm mal angepasst:
    Erstmal die Deklaration der Arrays (wandern später vermutlich aus Platzgründen in EEPROM) im Programmspeicher (Schlüsselwort code)
    Code:
    // 8 User-Definierte Zeichen zum zusammenbau der Ziffern
    static code char Symbol0[8]={0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03};
    static code char Symbol1[8]={0x1f,0x1f,0x03,0x03,0x03,0x03,0x03,0x03};
    static code char Symbol2[8]={0x03,0x03,0x03,0x03,0x03,0x03,0x1f,0x1f};
    static code char Symbol3[8]={0x1f,0x1f,0x03,0x03,0x03,0x03,0x1f,0x1f};
    static code char Symbol4[8]={0x1f,0x1f,0x18,0x18,0x18,0x18,0x1f,0x1f};
    static code char Symbol5[8]={0x1f,0x1f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b};
    static code char Symbol6[8]={0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1f,0x1f};
    static code char Symbol7[8]={0x1f,0x1f,0x1b,0x1b,0x1b,0x1b,0x1f,0x1f};
    und die Deklaration der Ziffern 0-9 (bei der 9 habe ich die Darstellung leicht geändert)
    Code:
    // 2-Zeilige Zusammensetzung der Ziffern aus den 8 User-Definierten Zeichen
    // High-Nibble für obere Zeile, Low-Nibble für untere Zeile
    code unsigned char Ziffer[10] = {0x56,0x00,0x14,0x32,0x60,0x42,0x46,0x10,0x76,0x72};// 9 war 53
    So. erstmal das.

    tschuessle
    Benrhard

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    09.05.2010
    Ort
    Baden Württemberg
    Beiträge
    11
    Zweiter Teil: die Funktionen
    Zunächst die User-Zeichen deklarieren:

    Code:
    void Set_Characters(void){	
    	definierelcdsymbol(Symbol0, 0);
    	definierelcdsymbol(Symbol1, 1);
    	definierelcdsymbol(Symbol2, 2);
    	definierelcdsymbol(Symbol3, 3);
    	definierelcdsymbol(Symbol4, 4);
    	definierelcdsymbol(Symbol5, 5);
    	definierelcdsymbol(Symbol6, 6);
    	definierelcdsymbol(Symbol7, 7);
    }
    und als "printf-Ersatz" eine Funktion, die eine Char-Variable als 3-Stellige Zahl mit unterdrückten 0-en ausgibt:
    Code:
    void Ausgabe_3s2z(unsigned char Zahl, unsigned char Pos)
    {	unsigned char Hunni, Zehner, Einer;
    	Hunni  = Zahl / 100;      
    	Einer  = Zahl % 100;
    	Zehner = Einer / 10;
    	Einer  = Einer % 10;
    	cursorpos(Pos + 0);
    	if (Hunni==0) charlcd(0x20);			// führende 0 unterdrücken
    	else charlcd(Ziffer[Hunni] /16); 	// High-Nibble
    	if (Zahl <= 9) charlcd(0x20);			// führende 0 unterdrücken
    	else charlcd(Ziffer[Zehner]/16); 	// High-Nibble
    	charlcd(Ziffer[Einer] /16); 			// High-Nibble
    
    	cursorpos(Pos + 0x40);          		// Zweite Zeile
    	if (Hunni==0) charlcd(0x20);			// führende 0 unterdrücken
    	else charlcd(Ziffer[Hunni] &0X0F); 	// Low-Nibble
    
    	if (Zahl <= 9) charlcd(0x20);			// führende 0 unterdrücken
    	else charlcd(Ziffer[Zehner]&0X0F); 	// Low-Nibble
    	charlcd(Ziffer[Einer] &0X0F); 		// Low-Nibble
    }
    und zum Schluß noch eine Funktion, die eine Int-Variable (bei mir Geschwindigkeit in 1/10 km/h) als 3.1-Stellige Zalh ausgibt. Der Dezimalpunkt ist leider nicht mehr definierbar, so dass ich auf ein Zeichen aus dem Erweiterten Zeichensatz des LCD zurückgegriffen habe...
    Code:
    void Ausgabe_3s1_2z(unsigned int Zahl, unsigned char Pos)
    {	unsigned char Hunni, Zehner, Einer, Nachkomma;
    	unsigned int Rest;
    	Hunni  = Zahl / 1000;      
    	Rest   = Zahl % 1000;
    	Zehner = Rest / 100;
    	Rest   = Zahl % 100;
    	Einer  = Rest / 10;
    	Nachkomma = Rest % 10;
    	cursorpos(Pos + 0);
    	if (Hunni==0) charlcd(0x20);		// führende 0 unterdrücken
    	else charlcd(Ziffer[Hunni] /16); // High-Nibble
    	if (Zahl <= 99) charlcd(0x20);		// führende 0 unterdrücken
    	else charlcd(Ziffer[Zehner]/16); // High-Nibble
    	charlcd(Ziffer[Einer] /16); 		// High-Nibble
    	charlcd(0x20);
    	charlcd(Ziffer[Nachkomma] /16); 	// High-Nibble
    
    	cursorpos(Pos + 0x40);           // Zweite Zeile
    	if (Hunni==0) charlcd(0x20);		// führende 0 unterdrücken
    	else charlcd(Ziffer[Hunni] &0X0F); // Low-Nibble
    
    	if (Zahl <= 99) charlcd(0x20);	// führende 0 unterdrücken
    	else charlcd(Ziffer[Zehner]&0X0F); // Low-Nibble
    	charlcd(Ziffer[Einer] &0X0F); // Low-Nibble
    	// Komma Symbolisieren
    	charlcd(0xa5);
    	charlcd(Ziffer[Nachkomma] &0X0F); // Low-Nibble
    }
    unn tschuess
    Bernhard

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress