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

[BASCOM] - jak mnożyć znaki wyświetlane na LCD?

Hubert_19 18 Lis 2009 02:30 2363 7
REKLAMA
  • #1 7275766
    Hubert_19
    Poziom 2  
    Witam.

    Jako nowicjusz programowania mikrokontrolerów w bascomie. Piszę z takim pytaniem. Czy istnieje możliwość powielania wyrazów/ znaków ? ( Z doświadczenia wiem, że inne języki programowania to mogą, np. Python - ale to przecież inna para kaloszy)
    Chciałbym aby w zależności od wzrostu wartości zmiennej na wyświetlaczu LCD pojawiały się kolejne zaczernione pola.
    Chodzi o coś w tym stylu :

    Planuję 16-stopniową regulację dźwięku, gdzie 1 stopień regulacji = jeden znak wyświetlany na LCD.

    Wpadłem też na pomysł napisania do tego szesnastu instrukcji warunkowych, ale skoro może istnieś możliwość zastąpienia ich jedną to wolałem zapytać.

    Jest mi to potrzebne do zobrazowania poziomu głośniości na procesorze dźwięku TDA7313 .
    Wyświetlacz którego uzywam to standardowe 16 * 2 WC1602A ze sterownikiem HD44780. Przeszukałem google i elektrodę. Szukałem też rozwiązania w książce "Programowanie mikrokontrolerów AVR...." M.Wiązani i nadal nie mogę do tego dojść. Nie chodzi mi tu o gotowy kod, ale o jakiś trop dzięki, któremu mógłym to zajarzyć.
  • REKLAMA
  • #2 7275843
    Kuniarz
    Moderator Projektowanie
    Proponuję zrobić to w pętli, co ś w stylu

    cls
    for a=1 to X (gdzie x to liczba "słupków")
    lcd "O"
    next a

    czyli im większa będzie wartość X, tym więcej kółek wyświetli Ci się na LCDeku.
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #3 7275891
    ShEvU_elektro
    Poziom 25  
    Ja używam czegoś takiego :)

    Locate 3 , 1
    For Licznik = 1 To 20
    
                         Lcd Chr(3)
                         Waitms 200
    
    Next


    gdzie:
    Deflcdchar 3 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31        'caly prostokat 
  • REKLAMA
  • #4 7275918
    sp3ots
    Poziom 38  
    Witam ! Zachęcam do dowiedzenia folderu Samples, we folderze Bascoma AVR ( po instalacji ) w którym są przykłady plików BAS, jest tam plik BG30dB_LCD.BAS , w tym pliku jest schemat połączenia wejścia pomiarowego - bardzo ciekawy projekt skali na LCD.
    Powodzenia życzę. Stefan
  • #5 7276060
    Freddy
    Poziom 43  
    Na AVRFreaks jest ciekawy przykład :

    [BASCOM] - jak mnożyć znaki wyświetlane na LCD?

    
    ' ***************************************************************************
    ' *
    ' * Title         : ADC M8.bas
    ' * Version       : 1.0
    ' * Last Updated :  08.04.2006
    ' * Target        : AT Mega8
    ' * Author        : www.avrprojects.net
    ' * Program code  : BASCOM AVR
    ' * Hardware req. :
    ' * Description   : how to use the ADC convertor, show the result on a LCD
    ' *                 display with percentage and bargraph
    ' ***************************************************************************
    $regfile = "M8def.dat"                                      ' use the Mega8
    
    $crystal = 10000000
    
    Deflcdchar 0 , 32 , 32 , 31 , 31 , 31 , 31 , 32 , 32        ' replace ? with number (0-7)'
    Deflcdchar 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1                ' replace ? with number (0-7)
    Deflcdchar 2 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16        ' replace ? with number (0-7)
    Deflcdchar 3 , 16 , 16 , 31 , 31 , 31 , 31 , 16 , 16        ' replace ? with number (0-7)
    Deflcdchar 4 , 1 , 1 , 31 , 31 , 31 , 31 , 1 , 1            ' replace ? with number (0-7)
    
    Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.6 , Rs = Portd.7
    
    Config Lcd = 20 * 4
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc   'config ADC
    
    Start Adc
    
    Dim W As Word , Perc As Word , Channel As Byte , I As Byte , Cols As Byte
    
    Cls
    Cursor Off
    Locate 3 , 1
    Lcd "0"
    Locate 3 , 5
    Lcd "25"
    Locate 3 , 10
    Lcd "50"
    Locate 3 , 15
    Lcd "75"
    
    
    Do
      W = Getadc(0)
      Perc = W / 10
      Locate 1 , 1
      Lcd "ADC(0):" ; W ; "   "
      Locate 1 , 13
      Lcd Perc ; "%  "
    
      Cols = Perc / 5
    
      Locate 2 , 1
      For I = 1 To Cols
       Select Case I
       Case 1 : Lcd Chr(3)
       Case 5 : Lcd Chr(4)
       Case 10 : Lcd Chr(4)
       Case 15 : Lcd Chr(4)
       Case 20 : Lcd Chr(4)
       Case Else : Lcd Chr(0)
      End Select
      Next I
    
      Cols = Cols + 1
    
      For I = Cols To 20
      Select Case I
       Case 1 : Lcd Chr(2)
       Case 5 : Lcd Chr(1)
       Case 10 : Lcd Chr(1)
       Case 15 : Lcd Chr(1)
       Case 20 : Lcd Chr(1)
       Case Else : Lcd Chr(32)
       End Select
       Next I
    
       Waitms 100
      Loop
    End
    
  • REKLAMA
  • #6 7277624
    grysek
    Poziom 19  
    ShEvU_elektro napisał:
    Ja używam czegoś takiego :)

    Locate 3 , 1
    For Licznik = 1 To 20
    
                         Lcd Chr(3)
                         Waitms 200
    
    Next


    gdzie:
    Deflcdchar 3 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31        'caly prostokat 


    Wystarczy napisac: lcd Chr(255) i zamknąć to w pętle tak jak napisali koledzy wyżej
  • Pomocny post
    #7 7277778
    Freddy
    Poziom 43  
    Zgadza się oczywiście, sposób zaczerpnięty z AVRFreaks ma "fajniejsze" słupki, co widać na załączonym foto.
  • #8 7278685
    Hubert_19
    Poziom 2  
    Wielkie dzięki koledzy. Użyłem podanej przez Freddy'ego metody z AVR freaks. Musiałem tylko ją odpowiednio zmodyfikować pod LC 16 * 2. Ale efekt jest dokładnie taki jak zamierzyłem.
REKLAMA