logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak uzyskać tekst w negatywie na wyświetlaczu T6963C w Bascom?

thorin00 24 Mar 2008 17:23 3732 16
REKLAMA
  • #1 4948765
    thorin00
    Poziom 14  
    Posty: 163
    Pomógł: 2
    witam
    programuje w bascomie.
    w helpie niestety nie znalazłem tego co mnie interesuje.
    Jak uzyskać tekst w negatywie na wyświetlaczu T6963C w Bascom?
    wysyłajac coś na wyświetlacz wygląda to tak jak na pozycji 2. CONTROL natomiast jak to zrobić aby było to w negatywie tak jak na pozycji 1. VISUAL. ?
    dziękuje za pomoc i pozdrawiam
  • REKLAMA
  • #2 4948818
    autoservice
    Poziom 20  
    Posty: 516
    Pomógł: 7
    Ocena: 16
    ...zalezy jaki sterownik, niektore maja mozliwosc sprzetowego wlaczenia negatywnych czcionek itd ale tu zapewne jest jako obrazek. wiec musisz zdefiniowac takie czcionki albo jak chcesz tylko zmienic na pozytyw to odczytujesz bajt po bajcie negujesz i wysylasz na lcd te zanegowane.
    pzdr.
  • #3 4948826
    thorin00
    Poziom 14  
    Posty: 163
    Pomógł: 2
    wyswietlacz jest na sterowniku t6963c - 240x128
  • REKLAMA
  • #5 4949675
    august_a
    Poziom 21  
    Posty: 572
    Pomógł: 32
    Ocena: 4
    XOR w BASCOMie będzie chyba ciężko...
  • #6 4949706
    Freddy
    Poziom 43  
    Posty: 19997
    Pomógł: 1394
    Ocena: 2818
    A niby dlaczego, jest przecież operator XOR.
  • REKLAMA
  • #8 4949883
    august_a
    Poziom 21  
    Posty: 572
    Pomógł: 32
    Ocena: 4
    Z poziomu Bascom, może się to nie udać... Ponieważ Bascom ma wbudowaną standardową obsługę wyświetlacza.
  • REKLAMA
  • #9 4949937
    Freddy
    Poziom 43  
    Posty: 19997
    Pomógł: 1394
    Ocena: 2818
    a co to jest XOR jak nie operator logiczny ?
  • #11 4952840
    Freddy
    Poziom 43  
    Posty: 19997
    Pomógł: 1394
    Ocena: 2818
    Thorin00 :arrow: szukając czegoś innego znalazłem coś co może cię zainteresować.

    
    '------------------------------------------------------------------
    '                           GRAPHIC FONT
    '     Use the Bascom font file's for all the graphic display's,
    '              include inverted and/or rotated text.
    '        By Evert Dekker 2007 GraphicFont@Evertdekker dotje com
    '                   Created with Bascom-Avr: 1.11.8.8
    '------------------------------------------------------------------
    
    ............
    ...........
    Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portc , Ce = 3 , Cd = 0 , Wr = 2 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 6
    Cursor Off
    Cls
    
    
    Declare Sub Lcdtext(byval S As String , Byval Xoffset As Byte , Byval Yoffset As Byte , Byval Fontset As Byte , Byval Inverse As Byte , Byval Rotation As Byte)
    'SYNTAX  Lcdtest String , Xoffset , Yoffset , Fontset , Inverse , Rotation
    '
    '* Xoffset and Yoffset is in pixels, so you can place text on every spot on the display
    '* You determin yourself in the subroutine witch font belongs to the fontset
    
    
    .....................
    ......................
    
    '=== Sub Routines ===
    Sub Lcdtext(byval S As String , Xoffset As Byte , Yoffset As Byte , Fontset As Byte , Inverse As Byte , Rotation As Byte)
    Local Tempstring As String * 1 , Temp As Byte               'Dim local the variables
    Local A As Byte , Pixels As Byte , Count As Byte , Carcount As Byte , Lus As Byte
    Local Row As Byte , Byteseach As Byte , Blocksize As Byte , Dummy As Byte
    Local Colums As Byte , Columcount As Byte , Rowcount As Byte , Stringsize As Byte
    Local Xpos As Byte , Ypos As Byte , Pixel As Byte , Pixelcount As Byte
    If Inverse > 1 Then Inverse = 0                             'Inverse can't be greater then 1
    If Rotation > 3 Then Rotation = 0                           'There are only 4 rotation's
    Stringsize = Len(s) - 1                                     'Size of the text string -1 because we must start with 0
    For Carcount = 0 To Stringsize                              'Loop for the numbers of caracters that must be displayed
    
     If Fontset = 1 Then Restore Font8x8                        'Add or remove here fontset's that you need or not,
     If Fontset = 2 Then Restore Font16x16                      'this is the name that you gave to the font, NOT the filename
     If Fontset = 3 Then Restore Font6x8                        'If you dont know the name, open the font file in wordpad, and there it is,
     If Fontset = 4 Then Restore Font5x5                        'right on top.
    
     Temp = Carcount + 1                                        'Cut the text string in seperate caracters
    Tempstring = Mid(s , Temp , 1)
    Read Row : Read Byteseach : Read Blocksize : Read Dummy     'Read the first 4 bytes from the font file
    Temp = Asc(tempstring) - 32                                 'Font files start with caracter 32
    For Lus = 1 To Temp                                         'Do dummie read to point to the correct line in the fontfile
       For Count = 1 To Blocksize
        Read Pixels
       Next Count
    Next Lus
    Colums = Blocksize / Row                                    'Calculate the numbers of colums
    Row = Row * 8                                               'Row is always 8 pixels high = 1 byte, so working with row in steps of 8.
    Row = Row - 1                                               'Want to start with row=0 instead of 1
    Colums = Colums - 1                                         'Same for the colums
    Select Case Rotation
        Case 0                                                  '0 degrees rotation
                For Rowcount = 0 To Row Step 8                  'Loop for numbers of rows
                      A = Rowcount + Yoffset
                      For Columcount = 0 To Colums              'Loop for numbers of Colums
                          Read Pixels : If Inverse = 1 Then Toggle Pixels       'Read the byte from the file and if inverse = true then invert de byte
                          Xpos = Columcount                     'Do some calculation to get the caracter on the correct Xposition
                          Temp = Carcount * Byteseach
                          Xpos = Xpos + Temp
                          Xpos = Xpos + Xoffset
                              For Pixelcount = 0 To 7           'Loop for 8 pixels to be set or not
                                 Ypos = A + Pixelcount          'Each pixel on his own spot
                                 Pixel = Pixels.0               'Set the pixel (or not)
                                 Pset Xpos , Ypos , Pixel       'Finaly we can set the pixel
                                 Shift Pixels , Right           'Shift the byte 1 bit to the right so the next pixel comes availible
                              Next Pixel
                      Next Columcount
                Next Rowcount
        Case 1                                                  '90 degrees rotation
                For Rowcount = Row To 0 Step -8                 'Loop is now counting down
                      A = Rowcount + Xoffset
                      A = A - 15                                'Correction to set Xpos on Xoffset with rotation
                      For Columcount = 0 To Colums
                          Read Pixels : If Inverse = 1 Then Toggle Pixels
                          Xpos = Columcount
                          Temp = Carcount * Byteseach
                          Xpos = Xpos + Temp
                          Xpos = Xpos + Yoffset                 'We want that Xoffset is still Xoffset, so we need here the change from x to y
                                 For Pixelcount = 7 To 0 Step -1
                                    Ypos = A + Pixelcount
                                    Pixel = Pixels.0
                                    Pset Ypos , Xpos , Pixel
                                    Shift Pixels , Right
                                 Next Pixel
                      Next Columcount
                Next Rowcount
        Case 2                                                  '180 degrees rotation
                For Rowcount = Row To 0 Step -8
                      A = Rowcount + Yoffset
                      A = A - 7                                 'Correction to set Xpos on Xoffset with rotation
                      For Columcount = Colums To 0 Step -1
                          Read Pixels : If Inverse = 1 Then Toggle Pixels
                          Xpos = Columcount
                          Temp = Carcount * Byteseach
                          Xpos = Xpos - Temp
                          Xpos = Xpos - 8                       'Correction to set Xpos on Xoffset with rotation
                          Xpos = Xpos + Xoffset
                              For Pixelcount = 7 To 0 Step -1
                                 Ypos = A + Pixelcount
                                 Pixel = Pixels.0
                                 Pset Xpos , Ypos , Pixel
                                 Shift Pixels , Right
                              Next Pixel
                      Next Columcount
                Next Rowcount
        Case 3                                                  '270 degrees rotation
                For Rowcount = 0 To Row Step 8
                      A = Rowcount + Xoffset
                        For Columcount = Colums To 0 Step -1
                          Read Pixels : If Inverse = 1 Then Toggle Pixels
                          Xpos = Columcount
                          Temp = Carcount * Byteseach
                          Xpos = Xpos - Temp
                          Xpos = Xpos - 8                       'Correction to set Xpos on Xoffset with rotation
                          Xpos = Xpos + Yoffset
                                 For Pixelcount = 0 To 7
                                    Ypos = A + Pixelcount
                                    Pixel = Pixels.0
                                    Pset Ypos , Xpos , Pixel
                                    Shift Pixels , Right
                                 Next Pixel
                      Next Columcount
                Next Rowcount
    End Select
    Next Carcount
    End Sub                                                     'End of this amazing subroutine
    
    
    '=== Includes ===
    
    
  • #12 4953471
    Freddy
    Poziom 43  
    Posty: 19997
    Pomógł: 1394
    Ocena: 2818
    august_a napisał:
    Umieszczam całą paczkę tego co napisał Freddy


    Nie przeginasz z tą punktacją , przecież ta paczka to nie jest Twoje dzieło !!

    Link do strony zawierającej projekt:
    http://evertdekker.com/Joomla/index.php?option=com_content&task=view&id=49&Itemid=84
  • #14 5462521
    Samuraj
    Poziom 35  
    Posty: 2792
    Pomógł: 286
    Ocena: 619
    neo_84 napisał:
    Witam a jak zrobic taki negatyw na LCD alfanumerycznym ?

    Nie da się dla całego wyświetlacza. Można co prawda definiować swoje znaki i je wyświetlać lecz ich ilość jest ograniczona.
  • #16 5465296
    Pituś Bajtuś
    Poziom 28  
    Posty: 934
    Pomógł: 137
    Ocena: 10
    W pamięci wyświetlacza. A konkretnie w CGRAM.
  • #17 5465562
    nsvinc
    Poziom 35  
    Posty: 2870
    Pomógł: 262
    Ocena: 88
    I wypadałoby przeczytać datasheeta do T6963 i sie dowiedziec jakie polecenia powodują zapis bajtów do CGRAM. Zresztą - PO CO uzywać gotowych fontów na wyswietlaczu graficznym? Można zrobić swoje - ladniejsze / traktowane jako grafika (pixel po pixlu) a nie jako 'text' daje to dużo większe mozliwości kontroli obrazu.

    Poza tym - T6963 ma sporo ficzerów, niestety są one POWOOOLNE. W szczególnosci np xor warstw, o których tutaj mowa. Za to dobrze mu idzie tłuczenie w kółko wszystkich pixli obrazu z jakiegos bufora w uC (sprawdzilem) - no a bufor ramki w uC daje juz ekstremalnie duże możliwości (grafika wektorowa w czasie rzeczywistym + tło) no i mega128 podkrecona na 24MHz daje sobie z tym radę tak do 15fps (czyli animacja 'w kit') co jest i tak niezlym osiągiem.

    Jesli o mnie chodzi - ładne i zaaawansowane menu bedzie tak czy siak wymagać szybkich operacji read-modify-write na pojedynczych pixlach - a takie rzeczy tylko w ramie uC. Komunikacja między T6963 a uC jednak sux (powolne....) :]

Podsumowanie tematu

✨ Dyskusja dotyczy uzyskania efektu negatywu tekstu na wyświetlaczu graficznym sterowanym układem T6963C o rozdzielczości 240x128, programowanym w Bascom. Wskazano, że T6963C posiada funkcję wyświetlania grafiki w trybie XOR, co pozwala na uzyskanie efektu negatywu poprzez narysowanie prostokąta w trybie XOR na obszarze tekstu. Jednak implementacja tej funkcji bezpośrednio w Bascom może być trudna ze względu na ograniczenia w standardowej obsłudze wyświetlacza. Alternatywnie sugerowano negowanie bajtów tekstu przed wysłaniem do wyświetlacza lub definiowanie własnych czcionek negatywowych. Wskazano również na możliwość wykorzystania zewnętrznych bibliotek graficznych dla Bascom, które umożliwiają wyświetlanie tekstu odwróconego (inverted) i obróconego. Poruszono temat definiowania polskich znaków w pamięci CGRAM wyświetlacza oraz konieczności operacji read-modify-write na pikselach w pamięci mikrokontrolera dla bardziej zaawansowanych efektów graficznych, ze względu na powolność wbudowanych funkcji T6963C. Podkreślono, że praca z grafiką i tekstem na tym sterowniku wymaga często własnych implementacji i buforowania obrazu w mikrokontrolerze.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA