Na wstępie chciałbym powiedzieć że piszę w BASCOM-ie AVR.
Buduję urządzenie które ma wyświetlać wynik na wyświetlaczu 7-mio segmentowym (podyktowane warunkami środowiskowymi i widocznością).
Napisałem program który działa (listing poniżej) ale dręczy mnie pytanie czy nie da się tego zrobić prościej tzn pobierać poszczególne cyfry bezpośrednio ze zmiennej WORD (LONG??) bez bez zmieniania jej na zmienną STRING (chodzi mi o oszczędność pamięci- niestety piszę na AT90S2313)
Najważniejsze dla zagadnienia części programu wyglądają tak:
Dim Sek As Byte
Dim Czas As Word
Dim Wynik As String * 4
Dim Wyswietlacz As Byte
Dim Cyfra_t As String * 1
Dim Cyfra As Byte
' tutaj deklaracje przerwania itp
Do
'pozostałe części programu
If Sek = 250 Then ' Aktualizacja wyniku co około 1 sekundę
Wynik = Str(Czas) ' zmienna WORD zmieniam na STRING
' Ponieważ zmienna może przyjmować wartości od 0000 do 9999 a wyświetlacz będzie 3 cyfrowy a ja chcę wyświetlić tylko najstarsze pozycje zmieniam format uzyskanej zmiennej tekstowej aby przy zmiennej mniejszej od 1000 na wyświetlaczu uzyskać 0.99 a nie 999
Wynik = Format(Wynik , "0000")
Sek = 0
End If
Loop
End
' tutaj podprogramy itp
Co4ms:
Timer0 = 6
Incr Sek
Incr Wyswietlacz
If Wyswietlacz = 4 Then Wyswietlacz = 1
Cyfra_t = Mid(wynik , Wyswietlacz , 1) ' pobranie kolejnych cyfr z tekstu
Cyfra = Val(cyfra_t) ' zmiana tekstu na cyfrę
Set Portd.3
Set Portd.4
Set Portd.5
' obsługa wyświetlacza
Select Case Wyswietlacz
Case 1:
Portb = Lookup(cyfra , Cyfry)
Portb.7 = 0
Portd.5 = 0
Case 2:
Portb = Lookup(cyfra , Cyfry)
Portd.4 = 0
Case 3:
Portb = Lookup(cyfra , Cyfry)
Portd.3 = 0
End Select
Return
Cyfry:
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
Zmienna CZAS pobierana jest z rejestru CAPTURE
Będę bardzo wdzięczny za wszelkie sugestie.
Pozdrawiam
KrzysiekG
Buduję urządzenie które ma wyświetlać wynik na wyświetlaczu 7-mio segmentowym (podyktowane warunkami środowiskowymi i widocznością).
Napisałem program który działa (listing poniżej) ale dręczy mnie pytanie czy nie da się tego zrobić prościej tzn pobierać poszczególne cyfry bezpośrednio ze zmiennej WORD (LONG??) bez bez zmieniania jej na zmienną STRING (chodzi mi o oszczędność pamięci- niestety piszę na AT90S2313)
Najważniejsze dla zagadnienia części programu wyglądają tak:
Dim Sek As Byte
Dim Czas As Word
Dim Wynik As String * 4
Dim Wyswietlacz As Byte
Dim Cyfra_t As String * 1
Dim Cyfra As Byte
' tutaj deklaracje przerwania itp
Do
'pozostałe części programu
If Sek = 250 Then ' Aktualizacja wyniku co około 1 sekundę
Wynik = Str(Czas) ' zmienna WORD zmieniam na STRING
' Ponieważ zmienna może przyjmować wartości od 0000 do 9999 a wyświetlacz będzie 3 cyfrowy a ja chcę wyświetlić tylko najstarsze pozycje zmieniam format uzyskanej zmiennej tekstowej aby przy zmiennej mniejszej od 1000 na wyświetlaczu uzyskać 0.99 a nie 999
Wynik = Format(Wynik , "0000")
Sek = 0
End If
Loop
End
' tutaj podprogramy itp
Co4ms:
Timer0 = 6
Incr Sek
Incr Wyswietlacz
If Wyswietlacz = 4 Then Wyswietlacz = 1
Cyfra_t = Mid(wynik , Wyswietlacz , 1) ' pobranie kolejnych cyfr z tekstu
Cyfra = Val(cyfra_t) ' zmiana tekstu na cyfrę
Set Portd.3
Set Portd.4
Set Portd.5
' obsługa wyświetlacza
Select Case Wyswietlacz
Case 1:
Portb = Lookup(cyfra , Cyfry)
Portb.7 = 0
Portd.5 = 0
Case 2:
Portb = Lookup(cyfra , Cyfry)
Portd.4 = 0
Case 3:
Portb = Lookup(cyfra , Cyfry)
Portd.3 = 0
End Select
Return
Cyfry:
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
Zmienna CZAS pobierana jest z rejestru CAPTURE
Będę bardzo wdzięczny za wszelkie sugestie.
Pozdrawiam
KrzysiekG