matryce LED


Witam, czas pobawić się z matrycami LED (wpadły mi właśnie w ręce ),mam taki prosty schemacik i program znaleziony w sieci. Program coś tam działa,mogę wyświetlić tekst z przesuwaniem od prawej do lewej,jednak napisany jest jakoś bez składu.
Może ktoś już na forum przerobił ten temat i będzie chciał się podzielić doświadczeniami.
Docelowo ma wyświetlać gg:mm ,i przewijać napisy z trzema temperaturami.
Na chwilę obecną potrzebuję dobry programik z możliwością modyfikacji do założonych celów.

' *****************************************************************************
' *
' * Title         : Dot Matrix Display text.bas
' * Version       : 1.0
' * Last Updated  : 30.11.2008
' * Target Device : ATMEGA 8 @ 20Mhz
' * Author        : wwww .avrprojects.net
' * Program code  : BASCOM AVR
' * Hardware req. : scrolling sign board, ATTiny Board
' * Description   : shows characters on the dot matrix display that are placed in the variable Str_text
' *
' *
' *
' *****************************************************************************
 
$regfile = "M8def.dat"
'$crystal = 16000000
 
$hwstack = 32                                               ' default use 32 for the hardware stack
 
$swstack = 32                                               ' default use 10 for the SW stack
 
$framesize = 40                                             ' default use 40 for the frame space
 
Dim Char As Byte , C As Byte , Digit As Byte , L As Byte , I As Byte , Temp(2) As Byte , Temp2 As Byte
 
Dim X As Word
 
Dim Str_temp As String * 1 , Reeks(250) As Byte , Str_text As String * 50 , Str_len As Byte , Col_len As Byte , R As Byte
 
Dim Tempmsb As Byte , Templsb As Byte , Tempstr As String * 2
 
Dim Scroll_speed As Byte
 
Declare Sub Show_text
Declare Sub Set_text
Declare Sub Test_display
 
Config Portb = Output
Config Portd = Output
 
 
Goto Main
 
'****************
 
 
'set text
Sub Set_text
C = 1
For Digit = 1 To Str_len
Str_temp = Mid(str_text , Digit , 1)
Char = Asc(str_temp)
X = Char * 5
For I = 1 To 5
Reeks(c) = Lookup(x , Text_data)
X = X + 1
C = C + 1
Next I
Reeks(c) = 0
C = C + 1
Next Digit
End Sub Set_string
 
 
 
'show text
Sub Show_text
'
If Str_len > 4 Then
 
'For L = 0 To Col_len
Do
C = 1
   For R = 1 To Scroll_speed                                'scrolling speed
       Set Portb.0
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Char = C + L
       Portd = Reeks(char)
       Waitms 3
       C = C + 1
       Reset Portb.0
       For I = 1 To 30                                      '19
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Char = C + L
       Portd = Reeks(char)
       Waitms 3
       Incr C
       Next I
       C = 1
   Next R
Incr L
If L > Col_len Then L = 0
Loop
'Next L
 
Else
 
For L = 0 To Col_len
C = 1
   For R = 1 To Scroll_speed                                'scrolling speed
       Set Portb.0
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Portd = Reeks(c)
       Waitms 3
       C = C + 1
       Reset Portb.0
       For X = 1 To 30                                      '19
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Portd = Reeks(c)
       Waitms 3
       C = C + 1
       Next X
       C = 1
  Next R
Next L
 
End If
 
End Sub Show_text
 
Sub Test_display
Portd = 255
For X = 1 To 30                                             'liczba wierszy
       Set Portb.0
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
Next X
End Sub Test_display
 
'---------------------
 
Main:
 
Call Test_display
Waitms 100
'Str_text = "    monday 31 november 2008"
Str_text = "     * TEST * # $ % & <>?"
Str_len = Len(str_text)
Col_len = Str_len * 6
Scroll_speed = 8                                            'tempo przesuwania im mniejsze to szybciej
Call Set_text
Do
Call Show_text
Loop
End                                                         'end program
 
 
Text_data:
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      'space
Data 0 , 0 , 95 , 0 , 0                                     '!
Data 0 , 7 , 0 , 7 , 0                                      '''
Data 20 , 127 , 20 , 127 , 20                               '#
Data 36 , 42 , 127 , 42 , 18                                '$
Data 39 , 21 , 107 , 84 , 114                               '%
Data 54 , 73 , 86 , 32 , 80                                 '&
Data 0 , 0 , 11 , 7 , 0                                     ''
Data 0 , 28 , 34 , 65 , 0                                   ' (
Data 0 , 65 , 34 , 28 , 0                                   ')
Data 42 , 28 , 127 , 28 , 42                                '*
Data 8 , 8 , 62 , 8 , 8                                     '+
Data 0 , 88 , 56 , 0 , 0                                    ',
Data 8 , 8 , 8 , 8 , 8                                      '-
Data 0 , 96 , 96 , 0 , 0                                    '.
Data 32 , 16 , 8 , 4 , 2                                    '/
Data 62 , 81 , 73 , 69 , 62                                 '0
Data 0 , 66 , 127 , 64 , 0                                  '1
Data 114 , 73 , 73 , 73 , 70                                '2
Data 34 , 65 , 73 , 73 , 54                                 '3
Data 24 , 20 , 18 , 127 , 16                                '4
Data 39 , 69 , 69 , 69 , 57                                 '5
Data 60 , 74 , 73 , 73 , 48                                 '6
Data 1 , 113 , 9 , 5 , 3                                    '7
Data 54 , 73 , 73 , 73 , 54                                 '8
Data 6 , 73 , 73 , 41 , 30                                  '9
Data 0 , 54 , 54 , 0 , 0                                    ':
Data 0 , 91 , 59 , 0 , 0                                    ';
Data 8 , 20 , 34 , 65 , 0                                   '<
Data 20 , 20 , 20 , 20 , 20                                 '=
Data 0 , 65 , 34 , 20 , 8                                   '>
Data 2 , 1 , 81 , 9 , 6                                     '?
Data 50 , 73 , 121 , 65 , 62                                '@
Data 124 , 18 , 17 , 18 , 124                               'A
Data 65 , 127 , 73 , 73 , 62                                'B
Data 62 , 65 , 65 , 65 , 34                                 'C
Data 65 , 127 , 65 , 65 , 62                                'D
Data 127 , 73 , 73 , 65 , 65                                'E
Data 127 , 9 , 9 , 1 , 1                                    'F
Data 62 , 65 , 73 , 73 , 58                                 'G
Data 127 , 8 , 8 , 8 , 127                                  'H
Data 0 , 65 , 127 , 65 , 0                                  'I
Data 32 , 64 , 65 , 63 , 1                                  'J
Data 127 , 8 , 20 , 34 , 65                                 'K
Data 127 , 64 , 64 , 64 , 64                                'L
Data 127 , 2 , 12 , 2 , 127                                 'M
Data 127 , 2 , 4 , 8 , 127                                  'N
Data 62 , 65 , 65 , 65 , 62                                 'O
Data 127 , 9 , 9 , 9 , 6                                    'P
Data 62 , 65 , 65 , 33 , 94                                 'Q
Data 127 , 9 , 25 , 41 , 70                                 'R
Data 38 , 73 , 73 , 73 , 50                                 'S
Data 1 , 1 , 127 , 1 , 1                                    'T
Data 63 , 64 , 64 , 64 , 63                                 'U
Data 7 , 24 , 96 , 24 , 7                                   'V
Data 127 , 32 , 24 , 32 , 127                               'W
Data 99 , 20 , 8 , 20 , 99                                  'X
Data 3 , 4 , 120 , 4 , 3                                    'Y
Data 97 , 81 , 73 , 69 , 67                                 'Z
Data 0 , 127 , 65 , 65 , 0                                  '[
Data 2 , 4 , 8 , 16 , 32                                    '\
Data 0 , 65 , 65 , 127 , 0                                  ']
Data 4 , 2 , 1 , 2 , 4                                      '^
Data 64 , 64 , 64 , 64 , 64                                 '_
Data 0 , 0 , 7 , 11 , 0                                     ''
Data 32 , 84 , 84 , 84 , 56                                 'a
Data 127 , 40 , 68 , 68 , 56                                'b
Data 0 , 56 , 68 , 68 , 68                                  'c
Data 56 , 68 , 68 , 40 , 127                                'd
Data 56 , 84 , 84 , 84 , 24                                 'e
Data 8 , 126 , 9 , 9 , 2                                    'f
Data 8 , 84 , 84 , 84 , 60                                  'g
Data 127 , 16 , 8 , 8 , 112                                 'h
Data 0 , 68 , 125 , 0 , 0                                   'i
Data 32 , 64 , 68 , 61 , 0                                  'j
Data 0 , 127 , 16 , 40 , 68                                 'k
Data 0 , 65 , 127 , 64 , 0                                  'l
Data 124 , 4 , 120 , 4 , 120                                'm
Data 124 , 8 , 4 , 4 , 120                                  'n
Data 56 , 68 , 68 , 68 , 56                                 'o
Data 124 , 20 , 20 , 20 , 8                                 'p
Data 8 , 20 , 20 , 20 , 124                                 'q
Data 124 , 8 , 4 , 4 , 8                                    'r
Data 72 , 84 , 84 , 84 , 36                                 's
Data 0 , 4 , 63 , 68 , 68                                   't
Data 60 , 64 , 64 , 32 , 124                                'u
Data 28 , 32 , 64 , 32 , 28                                 'v
Data 60 , 64 , 60 , 64 , 60                                 'w
Data 68 , 40 , 16 , 40 , 68                                 'x
Data 12 , 80 , 80 , 80 , 60                                 'y
Data 68 , 100 , 84 , 76 , 68                                'z
Data 0 , 8 , 54 , 65 , 0                                    '{
Data 0 , 0 , 119 , 0 , 0                                    '|
Data 0 , 65 , 54 , 8 , 0                                    '}
Data 2 , 1 , 2 , 4 , 2                                      '~
Data 42 , 85 , 42 , 85 , 42                                 '  

Można dodać do ULN2803 74HC259 i zamiast 8 nóżek do sterowania potrzebne będą 3.




Portret użytkownika marekszy

matryce LED

trochę poprawiłem kod aby był bardziej czytelny

'*************************matryca LED 8x30**************************************
'**************************wysw.dziala******************************************
$regfile = "M8def.dat"
$crystal = 16000000
 
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 32                                               ' default use 10 for the SW stack
$framesize = 40                                             ' default use 40 for the frame space
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portc = &B00000000 : Portc = &B00000000
Config Portd = &B11111111 : Portd = &B11111111
 
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0
 
Enable Interrupts
 
Dim Licz_1s As Word , Dzielnik2 As Byte
Dim Flaga_4ms As Bit
Dim Flaga_100ms As Bit , Dzielnik As Byte
 
 
Dim Char As Byte , C As Byte , Digit As Byte , L As Byte , I As Byte , Temp(2) As Byte , Temp2 As Byte
Dim X As Word
Dim Str_temp As String * 1 , Reeks(250) As Byte , Str_text As String * 50 , Str_len As Byte , Col_len As Byte , R As Byte
Dim Tempmsb As Byte , Templsb As Byte , Tempstr As String * 2
Dim Scroll_speed As Byte
 
 
'***************************pętla glowna****************************************
Do
 
If Flaga_4ms = 1 Then
    Flaga_4ms = 0
  Gosub Main
 
  End If
   If Flaga_100ms = 1 Then
    Flaga_100ms = 0
    Gosub Show_text
    Gosub Set_text
  End If
Loop
End                                                         'end program
'*******************************************************************************
'***************************przerwanie timer 0**********************************
Prztimer0:
 Timer0 = 6
 Flaga_4ms = 1
  Incr Dzielnik
   If Dzielnik = 25 Then                                    '25*4ms = 100ms
    Dzielnik = 0
    Flaga_100ms = 1
  Incr Dzielnik2
   If Dzielnik2 = 10 Then                                   '10*100ms=1s'
    Dzielnik2 = 0
   End If
   End If
Return
'*************************przerwanie timer 0 koniec*****************************
'*******************************sub set_text************************************
Set_text:
C = 1
For Digit = 1 To Str_len
Str_temp = Mid(str_text , Digit , 1)
Char = Asc(str_temp)
X = Char * 5
For I = 1 To 5
Reeks(c) = Lookup(x , Text_data)
X = X + 1
C = C + 1
Next I
Reeks(c) = 0
C = C + 1
Next Digit
 
Return
'*****************************sub show_text*************************************
Show_text:
'
If Str_len > 4 Then
C = 1
   For R = 1 To Scroll_speed                                'scrolling speed
       Set Portb.0
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Char = C + L
       Portd = Reeks(char)
       Waitus 500
       C = C + 1
       Reset Portb.0
       For I = 1 To 30
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Char = C + L
       Portd = Reeks(char)
       Waitus 500
       Incr C
       Next I
       C = 1
   Next R
Incr L
If L > Col_len Then L = 0
 
Else
 
For L = 0 To Col_len
C = 1
   For R = 1 To Scroll_speed                                'scrolling speed
       Set Portb.0
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Portd = Reeks(c)
       Waitus 500
       C = C + 1
       Reset Portb.0
       For X = 1 To 30
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Portd = Reeks(c)
       Waitus 500
       C = C + 1
       Next X
       C = 1
  Next R
Next L
 
End If
Return
'*******************************************************************************
 
Main:
 
Str_text = "     < * TEST * >"
Str_len = Len(str_text)
Col_len = Str_len * 6
Scroll_speed = 8                                            'tempo przesuwania im mniejsze to szybciej
Return
 
'****************************tablica znakow*************************************
Text_data:
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      'space
Data 0 , 0 , 95 , 0 , 0                                     '!
Data 0 , 7 , 0 , 7 , 0                                      '''
Data 20 , 127 , 20 , 127 , 20                               '#
Data 36 , 42 , 127 , 42 , 18                                '$
Data 39 , 21 , 107 , 84 , 114                               '%
Data 54 , 73 , 86 , 32 , 80                                 '&
Data 0 , 0 , 11 , 7 , 0                                     ''
Data 0 , 28 , 34 , 65 , 0                                   ' (
Data 0 , 65 , 34 , 28 , 0                                   ')
Data 42 , 28 , 127 , 28 , 42                                '*
Data 8 , 8 , 62 , 8 , 8                                     '+
Data 0 , 88 , 56 , 0 , 0                                    ',
Data 8 , 8 , 8 , 8 , 8                                      '-
Data 0 , 96 , 96 , 0 , 0                                    '.
Data 32 , 16 , 8 , 4 , 2                                    '/
Data 62 , 81 , 73 , 69 , 62                                 '0
Data 0 , 66 , 127 , 64 , 0                                  '1
Data 114 , 73 , 73 , 73 , 70                                '2
Data 34 , 65 , 73 , 73 , 54                                 '3
Data 24 , 20 , 18 , 127 , 16                                '4
Data 39 , 69 , 69 , 69 , 57                                 '5
Data 60 , 74 , 73 , 73 , 48                                 '6
Data 1 , 113 , 9 , 5 , 3                                    '7
Data 54 , 73 , 73 , 73 , 54                                 '8
Data 6 , 73 , 73 , 41 , 30                                  '9
Data 0 , 54 , 54 , 0 , 0                                    ':
Data 0 , 91 , 59 , 0 , 0                                    ';
Data 8 , 20 , 34 , 65 , 0                                   '<
Data 20 , 20 , 20 , 20 , 20                                 '=
Data 0 , 65 , 34 , 20 , 8                                   '>
Data 2 , 1 , 81 , 9 , 6                                     '?
Data 50 , 73 , 121 , 65 , 62                                '@
Data 124 , 18 , 17 , 18 , 124                               'A
Data 65 , 127 , 73 , 73 , 62                                'B
Data 62 , 65 , 65 , 65 , 34                                 'C
Data 65 , 127 , 65 , 65 , 62                                'D
Data 127 , 73 , 73 , 65 , 65                                'E
Data 127 , 9 , 9 , 1 , 1                                    'F
Data 62 , 65 , 73 , 73 , 58                                 'G
Data 127 , 8 , 8 , 8 , 127                                  'H
Data 0 , 65 , 127 , 65 , 0                                  'I
Data 32 , 64 , 65 , 63 , 1                                  'J
Data 127 , 8 , 20 , 34 , 65                                 'K
Data 127 , 64 , 64 , 64 , 64                                'L
Data 127 , 2 , 12 , 2 , 127                                 'M
Data 127 , 2 , 4 , 8 , 127                                  'N
Data 62 , 65 , 65 , 65 , 62                                 'O
Data 127 , 9 , 9 , 9 , 6                                    'P
Data 62 , 65 , 65 , 33 , 94                                 'Q
Data 127 , 9 , 25 , 41 , 70                                 'R
Data 38 , 73 , 73 , 73 , 50                                 'S
Data 1 , 1 , 127 , 1 , 1                                    'T
Data 63 , 64 , 64 , 64 , 63                                 'U
Data 7 , 24 , 96 , 24 , 7                                   'V
Data 127 , 32 , 24 , 32 , 127                               'W
Data 99 , 20 , 8 , 20 , 99                                  'X
Data 3 , 4 , 120 , 4 , 3                                    'Y
Data 97 , 81 , 73 , 69 , 67                                 'Z
Data 0 , 127 , 65 , 65 , 0                                  '[
Data 2 , 4 , 8 , 16 , 32                                    '\
Data 0 , 65 , 65 , 127 , 0                                  ']
Data 4 , 2 , 1 , 2 , 4                                      '^
Data 64 , 64 , 64 , 64 , 64                                 '_
Data 0 , 0 , 7 , 11 , 0                                     ''
Data 32 , 84 , 84 , 84 , 56                                 'a
Data 127 , 40 , 68 , 68 , 56                                'b
Data 0 , 56 , 68 , 68 , 68                                  'c
Data 56 , 68 , 68 , 40 , 127                                'd
Data 56 , 84 , 84 , 84 , 24                                 'e
Data 8 , 126 , 9 , 9 , 2                                    'f
Data 8 , 84 , 84 , 84 , 60                                  'g
Data 127 , 16 , 8 , 8 , 112                                 'h
Data 0 , 68 , 125 , 0 , 0                                   'i
Data 32 , 64 , 68 , 61 , 0                                  'j
Data 0 , 127 , 16 , 40 , 68                                 'k
Data 0 , 65 , 127 , 64 , 0                                  'l
Data 124 , 4 , 120 , 4 , 120                                'm
Data 124 , 8 , 4 , 4 , 120                                  'n
Data 56 , 68 , 68 , 68 , 56                                 'o
Data 124 , 20 , 20 , 20 , 8                                 'p
Data 8 , 20 , 20 , 20 , 124                                 'q
Data 124 , 8 , 4 , 4 , 8                                    'r
Data 72 , 84 , 84 , 84 , 36                                 's
Data 0 , 4 , 63 , 68 , 68                                   't
Data 60 , 64 , 64 , 32 , 124                                'u
Data 28 , 32 , 64 , 32 , 28                                 'v
Data 60 , 64 , 60 , 64 , 60                                 'w
Data 68 , 40 , 16 , 40 , 68                                 'x
Data 12 , 80 , 80 , 80 , 60                                 'y
Data 68 , 100 , 84 , 76 , 68                                'z
Data 0 , 8 , 54 , 65 , 0                                    '{
Data 0 , 0 , 119 , 0 , 0                                    '|
Data 0 , 65 , 54 , 8 , 0                                    '}
Data 2 , 1 , 2 , 4 , 2                                      '~
Data 42 , 85 , 42 , 85 , 42                                 '  
'*******************************************************************************

Problem jest jeszcze w słabym i nierównomiernym świeceniu ledów w matrycy, rezystory zmniejszyłem do 47ohm ale nadal do niczego.

Portret użytkownika EDC

Odp. matryce LED

Chyba coś tu pomieszałeś.
Patrząc na to jak działał oryginał. Napisany tak nie po kolei, ale na początku następował skok do Label Main co jest tylko znacznikiem miejsca. Lądujesz więc tam przeskakując trochę kodu. Potem nastepuje test Wyświetlacza. Polega to na wystawieniu stanów wysokich na wszystkich pinach z lewej strony wyswietlacza i przeciągnięciu stanu niskiego przez wszystkie 30 kolumn na dole wyświetlacza.
Potem nastepuje załadowanie wartości dla każdej z liter stringa. Pięć bajtów na jedną literę i zapamietanie ilości liter.
Jak juz to wszystko ma to program zacina się na stałe w pętli Do Loop i juz robi tylko wyswietlanie bardzo szybko.

Teraz pomyśl. Jeśli dla trzech cyfr na multipleksowanie zwykłego 7 segment wyświetlacza to tak naprawdę co 4ms wysyłasz na port tyko jeden Bajt. Pamiętaj - co 4ms 1 bajt na 3 znaki. Teraz musisz wyświetlić 6 znaków i każdy ze znaków to 5 bajtów.
Wszystko się da zrobić ale trzeba zrozumieć działanie.
Jeśli oryginał był na 8MHz a Ty masz 16MHz...

-

BARTek
Moja strona

Portret użytkownika marekszy

matryce LED

Może i trochę namieszane (nie do końca rozumię działanie),pominąłem całkowicie sprawdzanie matrycy, ale tak też działa, przesuwa napis w tempie wybranym w programie.
W orginale pracował na zewnętrznym 20MHz z tym ,że nie można było zadeklarować rezonatora bo wtedy wogle głupiał, natomiast miałem ustawiony procesor na zewnętrzny 16MHz.

Portret użytkownika EDC

Odp. Matryce LED

Zerknij jak ja to rozumiem. Te tablice znaków umieściłem na osobnej kartce i nazwałem znaki_matrycy.bas
Nie trzeba tego wtedy załączać do kodu na stronie.
Nie mam tego na czym potestować więc musisz doprowadzić do takiego stanu że będzie się poprawnie wyświetlać to co chcesz z zadeklarowaną prędkością. Próbuj na 16MHz ale wiedz że one spokojnie chodzą tez na 20MHz a widziałem nawet projekt gdzie była taktowana zewnętrzym generatorem na 5V (bo kwarca już nie pociągnie) który dawał jej 32MHz :D

$regfile = "M8def.dat"
'$crystal = 16000000
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 32                                               ' default use 10 for the SW stack
$framesize = 40                                             ' default use 40 for the frame space
 
Dim Char As Byte , C As Byte , Digit As Byte , L As Byte , I As Byte , Temp(2) As Byte , Temp2 As Byte
 
Dim X As Word
 
Dim Str_temp As String * 1 , Reeks(250) As Byte , Str_text As String * 50 , Str_len As Byte , Col_len As Byte , R As Byte
 
Dim Tempmsb As Byte , Templsb As Byte , Tempstr As String * 2
 
Dim Scroll_speed As Byte
 
Declare Sub Set_text
Declare Sub Show_text
Declare Sub Test_display
 
Config Portb = Output
Config Portd = Output
 
Call Test_display                                           'skocz do testu matrycy
Waitms 100
 
 
Str_text = "     * TEST * # $ % & <>?"
Str_len = Len(str_text)                                     'oblicza ilość liter/znaków w stringu
Col_len = Str_len * 6                                       'kolumn tyle ile znaków *6 (5 kolumn na znak i 1 na odstęp)
Scroll_speed = 8
 
Call Set_text                                               'skocz by przerobić napis na sekwencję bajtów
 
'*************
'*** START ***
Do
 
 Call Show_text                                             '### TO WSZYSTKO ###  dalej sa już tylko podprogramy
 
Loop
End
'*** KONIEC ***
'**************
 
 
'Test wszystkich diod
Sub Test_display
Portd = 255                                                 'wszystkie linie w ULN2803 w stan wysoki
For X = 1 To 30                                             'wykonaj 30 razy
       Set Portb.0                                          'kolejne instrukcje obsugują przesuniecie
       Toggle Portb.1                                       'stan wysoki i zaraz niski na tym pinie
       Toggle Portb.1
       Toggle Portb.2                                       'stan wysoki i zaraz niski na tym pinie
       Toggle Portb.2
Next X
End Sub Test_display
'---------------------
 
 
'Zamien tekst ze string na sekwencję bajtów
Sub Set_text
C = 1                                                       'zaczynamy od pierwszego znaku stringa
For Digit = 1 To Str_len                                    'tyle razy ile wynosi długosc stringa
Str_temp = Mid(str_text , Digit , 1)                        'wytnij jedna litere/znak ze stringa bedacy na pozycji Digit
Char = Asc(str_temp)                                        'uzyskaj numer tego znaku w tablicy ASCII
 
'W tablicy ASCII znaki sa poukładane. Znaki do numeru 32 nie wyświetlają się. Znak 32 to spacja.
'Cyfryzaczynają się od 48. 48 oznacza 0. Jesli chcesz na przykład 8 to dodaj 48 = 56. 56 oznacza 8
'Teraz jeśli na każdy znak potrzebujemy 5 bajtów by go wyświetlić to co piąty bajt oznacza kolejny znak w tablicy programu
'Dlatego X = Znak ASCII * 5   32*5 bajtów da nam spację (dlatego w tablicy na początku jest dziura)
 
X = Char * 5
 
For I = 1 To 5                                              'dla jednego znaku zaladuj 5 bajtow
Reeks(c) = Lookup(x , Text_data)                            'bierz z tablicy
X = X + 1                                                   'dodawaj indeksy by sie przesuwac po tablicy
C = C + 1                                                   'dodawaj by układać bajty
Next I
Reeks(c) = 0
C = C + 1                                                   'zrob odstep (dodaj kolumne ale nie bierz zadnego bajtu)
Next Digit
End Sub Set_string
'---------------------
 
 
'show text
Sub Show_text
 
For L = 0 To Col_len
C = 1
   For R = 1 To Scroll_speed
       Set Portb.0
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Portd = Reeks(c)
       Waitms 3                                             'to bym sprawdził bo obliczane jest na zadeklarowana prędkość
       C = C + 1
       Reset Portb.0
       For X = 1 To 30
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Portd = Reeks(c)
       Waitms 3                                             'to bym sprawdził bo obliczane jest na zadeklarowana prędkość
       C = C + 1
       Next X
       C = 1
   Next R
Next L
 
End Sub Show_text
'---------------------
 
$include "znaki_matrycy.bas"

Pracuję ostatnio nad czymś nowym intensywnie i tak mnie trochę mniej wszędzie :P

Miłego dnia.

-

BARTek
Moja strona

Portret użytkownika gosc

matryce Led

Coś nie mogę tego ogarnąć, nie działa mi to Twoje.
O co chodzi z

$include "znaki_matrycy.bas"

po prostu ja na końcu mam wleić znaki ASCII?, test_data:
czemu pozbyłeś się podprogramu "Main:"
potrzebuję także później timera dla DS-ów od temp. więc te 16MHz lepiej niech będzie.

Portret użytkownika EDC

Odp. matryce LED

Ten listing po prostu trzymaj w tym samym folderze co program a Bascom sam go dołączy. Tak sie pozbywasz czegoś co tylko trzeba przewijać. Tak samo się dołącza pliki dla fontów. Po co na to patrzeć jak może być z boku. O prezentacji kodu na stronie internetowej nie wspomnę. Wystarczy to napisać raz i zmieniać tylko kod.
Nazwij to znaki_matrycy.bas

$nocompile
 
Text_data:
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      '
Data 0 , 0 , 0 , 0 , 0                                      'space
Data 0 , 0 , 95 , 0 , 0                                     '!
Data 0 , 7 , 0 , 7 , 0                                      '''
Data 20 , 127 , 20 , 127 , 20                               '#
Data 36 , 42 , 127 , 42 , 18                                '$
Data 39 , 21 , 107 , 84 , 114                               '%
Data 54 , 73 , 86 , 32 , 80                                 '&
Data 0 , 0 , 11 , 7 , 0                                     ''
Data 0 , 28 , 34 , 65 , 0                                   ' (
Data 0 , 65 , 34 , 28 , 0                                   ')
Data 42 , 28 , 127 , 28 , 42                                '*
Data 8 , 8 , 62 , 8 , 8                                     '+
Data 0 , 88 , 56 , 0 , 0                                    ',
Data 8 , 8 , 8 , 8 , 8                                      '-
Data 0 , 96 , 96 , 0 , 0                                    '.
Data 32 , 16 , 8 , 4 , 2                                    '/
Data 62 , 81 , 73 , 69 , 62                                 '0
Data 0 , 66 , 127 , 64 , 0                                  '1
Data 114 , 73 , 73 , 73 , 70                                '2
Data 34 , 65 , 73 , 73 , 54                                 '3
Data 24 , 20 , 18 , 127 , 16                                '4
Data 39 , 69 , 69 , 69 , 57                                 '5
Data 60 , 74 , 73 , 73 , 48                                 '6
Data 1 , 113 , 9 , 5 , 3                                    '7
Data 54 , 73 , 73 , 73 , 54                                 '8
Data 6 , 73 , 73 , 41 , 30                                  '9
Data 0 , 54 , 54 , 0 , 0                                    ':
Data 0 , 91 , 59 , 0 , 0                                    ';
Data 8 , 20 , 34 , 65 , 0                                   '<
Data 20 , 20 , 20 , 20 , 20                                 '=
Data 0 , 65 , 34 , 20 , 8                                   '>
Data 2 , 1 , 81 , 9 , 6                                     '?
Data 50 , 73 , 121 , 65 , 62                                '@
Data 124 , 18 , 17 , 18 , 124                               'A
Data 65 , 127 , 73 , 73 , 62                                'B
Data 62 , 65 , 65 , 65 , 34                                 'C
Data 65 , 127 , 65 , 65 , 62                                'D
Data 127 , 73 , 73 , 65 , 65                                'E
Data 127 , 9 , 9 , 1 , 1                                    'F
Data 62 , 65 , 73 , 73 , 58                                 'G
Data 127 , 8 , 8 , 8 , 127                                  'H
Data 0 , 65 , 127 , 65 , 0                                  'I
Data 32 , 64 , 65 , 63 , 1                                  'J
Data 127 , 8 , 20 , 34 , 65                                 'K
Data 127 , 64 , 64 , 64 , 64                                'L
Data 127 , 2 , 12 , 2 , 127                                 'M
Data 127 , 2 , 4 , 8 , 127                                  'N
Data 62 , 65 , 65 , 65 , 62                                 'O
Data 127 , 9 , 9 , 9 , 6                                    'P
Data 62 , 65 , 65 , 33 , 94                                 'Q
Data 127 , 9 , 25 , 41 , 70                                 'R
Data 38 , 73 , 73 , 73 , 50                                 'S
Data 1 , 1 , 127 , 1 , 1                                    'T
Data 63 , 64 , 64 , 64 , 63                                 'U
Data 7 , 24 , 96 , 24 , 7                                   'V
Data 127 , 32 , 24 , 32 , 127                               'W
Data 99 , 20 , 8 , 20 , 99                                  'X
Data 3 , 4 , 120 , 4 , 3                                    'Y
Data 97 , 81 , 73 , 69 , 67                                 'Z
Data 0 , 127 , 65 , 65 , 0                                  '[
Data 2 , 4 , 8 , 16 , 32                                    '\
Data 0 , 65 , 65 , 127 , 0                                  ']
Data 4 , 2 , 1 , 2 , 4                                      '^
Data 64 , 64 , 64 , 64 , 64                                 '_
Data 0 , 0 , 7 , 11 , 0                                     ''
Data 32 , 84 , 84 , 84 , 56                                 'a
Data 127 , 40 , 68 , 68 , 56                                'b
Data 0 , 56 , 68 , 68 , 68                                  'c
Data 56 , 68 , 68 , 40 , 127                                'd
Data 56 , 84 , 84 , 84 , 24                                 'e
Data 8 , 126 , 9 , 9 , 2                                    'f
Data 8 , 84 , 84 , 84 , 60                                  'g
Data 127 , 16 , 8 , 8 , 112                                 'h
Data 0 , 68 , 125 , 0 , 0                                   'i
Data 32 , 64 , 68 , 61 , 0                                  'j
Data 0 , 127 , 16 , 40 , 68                                 'k
Data 0 , 65 , 127 , 64 , 0                                  'l
Data 124 , 4 , 120 , 4 , 120                                'm
Data 124 , 8 , 4 , 4 , 120                                  'n
Data 56 , 68 , 68 , 68 , 56                                 'o
Data 124 , 20 , 20 , 20 , 8                                 'p
Data 8 , 20 , 20 , 20 , 124                                 'q
Data 124 , 8 , 4 , 4 , 8                                    'r
Data 72 , 84 , 84 , 84 , 36                                 's
Data 0 , 4 , 63 , 68 , 68                                   't
Data 60 , 64 , 64 , 32 , 124                                'u
Data 28 , 32 , 64 , 32 , 28                                 'v
Data 60 , 64 , 60 , 64 , 60                                 'w
Data 68 , 40 , 16 , 40 , 68                                 'x
Data 12 , 80 , 80 , 80 , 60                                 'y
Data 68 , 100 , 84 , 76 , 68                                'z
Data 0 , 8 , 54 , 65 , 0                                    '{
Data 0 , 0 , 119 , 0 , 0                                    '|
Data 0 , 65 , 54 , 8 , 0                                    '}
Data 2 , 1 , 2 , 4 , 2                                      '~
Data 42 , 85 , 42 , 85 , 42                                 '

Pisałem o tym w pierwszym poście. Main to nie jest podprogram. Przyjrzyj się uważnie. Nie ma tam Return ani End Sub. Main to jest znacznik w kodzie. Program po teście wyświetlacza skacze tam tylko raz. Przeanalizuj na spokojnie. Pisze oczywiście o pierwszym kodzie zanim coś zmieniłeś.

-

BARTek
Moja strona

Portret użytkownika marekszy

matryca LED

Trochę dodałem do tego co napisałeś bo nie chciało przewijać tekstu i zmieniłem czasy (nie działało z kwarcem),teraz jest dobrze.

$regfile = "M8def.dat"
$crystal = 16000000
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 32                                               ' default use 10 for the SW stack
$framesize = 40                                             ' default use 40 for the frame space
 
Dim Char As Byte , C As Byte , Digit As Byte , L As Byte , I As Byte , Temp(2) As Byte , Temp2 As Byte
 
Dim X As Word
 
Dim Str_temp As String * 1 , Reeks(250) As Byte , Str_text As String * 50 , Str_len As Byte , Col_len As Byte , R As Byte
 
Dim Tempmsb As Byte , Templsb As Byte , Tempstr As String * 2
 
Dim Scroll_speed As Byte
 
Declare Sub Set_text
Declare Sub Show_text
Declare Sub Test_display
 
Config Portb = Output
Config Portd = Output
 
Call Test_display                                           'skocz do testu matrycy
Waitms 100
 
 
Str_text = "       TEST"
Str_len = Len(str_text)                                     'oblicza ilość liter/znaków w stringu
Col_len = Str_len * 6                                       'kolumn tyle ile znaków *6 (5 kolumn na znak i 1 na odstęp)
Scroll_speed = 8
 
Call Set_text                                               'skocz by przerobić napis na sekwencję bajtów
 
'*************
'*** START ***
Do
 
 Call Show_text                                             '### TO WSZYSTKO ###  dalej sa już tylko podprogramy
 
Loop
End
'*** KONIEC ***
'**************
 
 
'Test wszystkich diod
Sub Test_display
Portd = 255                                                 'wszystkie linie w ULN2803 w stan wysoki
For X = 1 To 31                                             'wykonaj 30 razy
       Set Portb.0                                          'kolejne instrukcje obsugują przesuniecie
       Toggle Portb.1                                       'stan wysoki i zaraz niski na tym pinie
       Toggle Portb.1
       Toggle Portb.2                                       'stan wysoki i zaraz niski na tym pinie
       Toggle Portb.2
Next X
End Sub Test_display
'---------------------
 
 
'Zamien tekst ze string na sekwencję bajtów
Sub Set_text
C = 1                                                       'zaczynamy od pierwszego znaku stringa
For Digit = 1 To Str_len                                    'tyle razy ile wynosi długosc stringa
Str_temp = Mid(str_text , Digit , 1)                        'wytnij jedna litere/znak ze stringa bedacy na pozycji Digit
Char = Asc(str_temp)                                        'uzyskaj numer tego znaku w tablicy ASCII
 
'W tablicy ASCII znaki sa poukładane. Znaki do numeru 32 nie wyświetlają się. Znak 32 to spacja.
'Cyfryzaczynają się od 48. 48 oznacza 0. Jesli chcesz na przykład 8 to dodaj 48 = 56. 56 oznacza 8
'Teraz jeśli na każdy znak potrzebujemy 5 bajtów by go wyświetlić to co piąty bajt oznacza kolejny znak w tablicy programu
'Dlatego X = Znak ASCII * 5   32*5 bajtów da nam spację (dlatego w tablicy na początku jest dziura)
 
X = Char * 5
 
For I = 1 To 5                                              'dla jednego znaku zaladuj 5 bajtow
Reeks(c) = Lookup(x , Text_data)                            'bierz z tablicy
X = X + 1                                                   'dodawaj indeksy by sie przesuwac po tablicy
C = C + 1                                                   'dodawaj by układać bajty
Next I
Reeks(c) = 0
C = C + 1                                                   'zrob odstep (dodaj kolumne ale nie bierz zadnego bajtu)
Next Digit
End Sub Set_string
'---------------------
 
 
'show text
Sub Show_text
 
If Str_len > 4 Then
 
C = 1
   For R = 1 To Scroll_speed                                'scrolling speed
       Set Portb.0
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Char = C + L
       Portd = Reeks(char)
       Waitus 500                                           'ms 3
       C = C + 1
       Reset Portb.0
       For I = 1 To 30
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Char = C + L
       Portd = Reeks(char)
       Waitus 500                                           'ms 3
       Incr C
       Next I
       C = 1
   Next R
Incr L
If L > Col_len Then L = 0
 
Else
For L = 0 To Col_len
C = 1
   For R = 1 To Scroll_speed
       Set Portb.0
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Portd = Reeks(c)
       Waitus 500                                           'ms 3                                             'to bym sprawdził bo obliczane jest na zadeklarowana prędkość
       C = C + 1
       Reset Portb.0
       For X = 1 To 30
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Portd = Reeks(c)
       Waitus 500                                           'ms 3                                             'to bym sprawdził bo obliczane jest na zadeklarowana prędkość
       C = C + 1
       Next X
       C = 1
   Next R
Next L
End If
End Sub Show_text
'---------------------
 
$include "znaki_matrycy.bas"

Teraz dorobię Timer do obsługi 3 DS18B20 (każdy na osobnym wejściu).
Jednak jestem nadal w punkcie wyjścia, jak przewinąć napis TEMP_1,(tutaj wartość z DS-a 1),TEMP_2,(wartość z DS-a 2),TEMP_3,(wartość z DS-a 3)
Jak znajdziesz czas to zerknij na
http://www.elektroda.pl/rtvforum/viewtopic.php?p=10750835#10750835

Portret użytkownika EDC

Odp. matryce LED

Myślę że nie jesteś w punkie wyjścia bo teraz wiesz skąd i kiedy wołana jest procedura wyświetlania.
Teraz trzeba by w pętli pomiędzy Start i Koniec podokładać logikę. Na przykład:
Do Str_text wpisać na końcu cztery spacje żeby po przewinięciu całego tekstu wyświetlacz był ciemny.
Po wyswietleniu tekstu program wraca do pętli głównej. Wtedy odczytujesz kolejny czujnik i jego wartośc umieszczasz w Str_text albo jakiej tam chcesz osobnej zmiennej tekstowej. Wołasz Suba który zamienia stringa na kolejne bajty i znów wyświetlasz.
Teraz masz w pętli głównej po prostu kontrolę na tym kiedy i co wyswietlasz. Trzeba tylko zadbać żeby wyświetlacz był ciemny na czas odczytów jesli trzymać sie koncepcji tego sterowania jakie masz teraz. Tak myślę że trzeba się wyrobić w czasie jakby to miało sie dziać w tle. Nie liczyłem ile czasu jest na to wszystko potrzebne. Dlatego już przy multipleksowanych 7segment różne rzeczy robi się "na raty" żeby się nie zatrzymywać.

A jak z wyświetlaniem wyjedziesz tak że jest na chwilkę ciemny to po prostu w pętli sprawdzasz jedną temperature, przerabiasz ją na znaki tym subem Set_text i wyświetlasz.

-

BARTek
Moja strona

Portret użytkownika marekszy

matryca LED

kilka godzin kombinowania i nic.
nie potrafię nawet przeskoczyć od wyświetlania jednego napisu do drugiego a następnie trzeciego, a gdzie jeszcze wcisnąć między nie temperatury.
Może masz jakąś inną prostszą koncepcję na sterowanie matrycą.

Portret użytkownika EDC

Odp. matryce LED

Zobacz. Nie mam tego u siebie ale myślę że moze w ten deseń coś popróbuj.

$regfile = "M8def.dat"
$crystal = 16000000
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 32                                               ' default use 10 for the SW stack
$framesize = 40                                             ' default use 40 for the frame space
 
Dim Char As Byte , C As Byte , Digit As Byte , L As Byte , I As Byte , Temp(2) As Byte , Temp2 As Byte
 
Dim Nowy_text As Byte                                       '### DODANO ###
 
Dim X As Word
 
Dim Str_temp As String * 1 , Reeks(250) As Byte , Str_text As String * 50 , Str_len As Byte , Col_len As Byte , R As Byte
 
Dim Tempmsb As Byte , Templsb As Byte , Tempstr As String * 2
 
Dim Scroll_speed As Byte
 
Declare Sub Set_text
Declare Sub Show_text
Declare Sub Test_display
 
Config Portb = Output
Config Portd = Output
 
Call Test_display                                           'skocz do testu matrycy
Waitms 100
 
 
Scroll_speed = 8
 
                                               'skocz by przerobić napis na sekwencję bajtów
 
'*************
'*** START ***
Do
 
Str_text = "       MAREK    "
Str_len = Len(str_text)                                     'oblicza ilość liter/znaków w stringu
Col_len = Str_len * 6                                       'kolumn tyle ile znaków *6 (5 kolumn na znak i 1 na odstęp)
Call Set_text
 
 Do
  Call Show_text
 Loop Until Nowy_text = 1
Nowy_text = 0
 
Str_text = "      BARTEK    "
Str_len = Len(str_text)                                     'oblicza ilość liter/znaków w stringu
Col_len = Str_len * 6                                       'kolumn tyle ile znaków *6 (5 kolumn na znak i 1 na odstęp)
Call Set_text
 
Do
 Call Show_text
Loop Until Nowy_text = 1
Nowy_text = 0
 
Loop
End
'*** KONIEC ***
'**************
 
 
'Test wszystkich diod
Sub Test_display
Portd = 255                                                 'wszystkie linie w ULN2803 w stan wysoki
For X = 1 To 31                                             'wykonaj 30 razy
       Set Portb.0                                          'kolejne instrukcje obsugują przesuniecie
       Toggle Portb.1                                       'stan wysoki i zaraz niski na tym pinie
       Toggle Portb.1
       Toggle Portb.2                                       'stan wysoki i zaraz niski na tym pinie
       Toggle Portb.2
Next X
End Sub Test_display
'---------------------
 
 
'Zamien tekst ze string na sekwencję bajtów
Sub Set_text
C = 1                                                       'zaczynamy od pierwszego znaku stringa
For Digit = 1 To Str_len                                    'tyle razy ile wynosi długosc stringa
Str_temp = Mid(str_text , Digit , 1)                        'wytnij jedna litere/znak ze stringa bedacy na pozycji Digit
Char = Asc(str_temp)                                        'uzyskaj numer tego znaku w tablicy ASCII
 
'W tablicy ASCII znaki sa poukładane. Znaki do numeru 32 nie wyświetlają się. Znak 32 to spacja.
'Cyfryzaczynają się od 48. 48 oznacza 0. Jesli chcesz na przykład 8 to dodaj 48 = 56. 56 oznacza 8
'Teraz jeśli na każdy znak potrzebujemy 5 bajtów by go wyświetlić to co piąty bajt oznacza kolejny znak w tablicy programu
'Dlatego X = Znak ASCII * 5   32*5 bajtów da nam spację (dlatego w tablicy na początku jest dziura)
 
X = Char * 5
 
For I = 1 To 5                                              'dla jednego znaku zaladuj 5 bajtow
Reeks(c) = Lookup(x , Text_data)                            'bierz z tablicy
X = X + 1                                                   'dodawaj indeksy by sie przesuwac po tablicy
C = C + 1                                                   'dodawaj by układać bajty
Next I
Reeks(c) = 0
C = C + 1                                                   'zrob odstep (dodaj kolumne ale nie bierz zadnego bajtu)
Next Digit
End Sub Set_string
'---------------------
 
 
'show text
Sub Show_text
 
If Str_len > 4 Then
 
C = 1
   For R = 1 To Scroll_speed                                'scrolling speed
       Set Portb.0
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Char = C + L
       Portd = Reeks(char)
       Waitus 500                                           'ms 3
       C = C + 1
       Reset Portb.0
       For I = 1 To 30
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Char = C + L
       Portd = Reeks(char)
       Waitus 500                                           'ms 3
       Incr C
       Next I
       C = 1
   Next R
Incr L
 
If L > Col_len Then                                         '### TUTAJ DODANO ###
 L = 0
 Nowy_text = 1
End If
 
Else
For L = 0 To Col_len
C = 1
   For R = 1 To Scroll_speed
       Set Portb.0
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Portd = Reeks(c)
       Waitus 500                                           'ms 3                                             'to bym sprawdził bo obliczane jest na zadeklarowana prędkość
       C = C + 1
       Reset Portb.0
       For X = 1 To 30
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Portd = Reeks(c)
       Waitus 500                                           'ms 3                                             'to bym sprawdził bo obliczane jest na zadeklarowana prędkość
       C = C + 1
       Next X
       C = 1
   Next R
Next L
End If
End Sub Show_text
'---------------------
 
$include "znaki_matrycy.bas"

W razie czego daj znać jak to się zachowuje .

-

BARTek
Moja strona

Portret użytkownika marekszy

matryca LED

To jest właściwy kierunek,działa jak powinno

'*** START ***
Do
 
Str_text = "     TEMPERATURA_1"
Str_len = Len(str_text)                                     'oblicza ilość liter/znaków w stringu
Col_len = Str_len * 6                                       'kolumn tyle ile znaków *6 (5 kolumn na znak i 1 na odstęp)
Call Set_text
 
 Do
  Call Show_text
 Loop Until Nowy_text = 1
Nowy_text = 0
 
Str_text = "     TEMPERATURA_2"
Str_len = Len(str_text)                                     'oblicza ilość liter/znaków w stringu
Col_len = Str_len * 6                                       'kolumn tyle ile znaków *6 (5 kolumn na znak i 1 na odstęp)
Call Set_text
 
 Do
  Call Show_text
 Loop Until Nowy_text = 1
Nowy_text = 0
 
Str_text = "     TEMPERATURA_3"
Str_len = Len(str_text)                                     'oblicza ilość liter/znaków w stringu
Col_len = Str_len * 6                                       'kolumn tyle ile znaków *6 (5 kolumn na znak i 1 na odstęp)
Call Set_text
Do
 Call Show_text
Loop Until Nowy_text = 1
Nowy_text = 0
 
Loop
End
'*** KONIEC ***

Na końcu każdego napisu nie potrzeba spacji ,tekst kończy się po zniknięciu ostatniej litery,warunkiem są teksty różnej długości,wtedy pozostałe(te krótsze) trzeba wypełnić na końcu spacjami (tak jak w LCD czyścimy puste pola)bo inaczej dopisze nam to na końcu tekstu.
Jeszcze jak tu wcisnąć 3xDS18B20 na portB.3/4/5 i wyświetlić temperatury? W jaki sposób dokonać konwersji temperatury aby była możliwość wyświetlenia, czy tak samo jak dla LCD?

Portret użytkownika EDC

Odp. matryce LED

Myślę że tak jak dla Lcd z ta róznicą:

Str_text = "" 'czyszczenie calego stringa
'albo
Str_text = Space(0) ' wartosc zero zwraca pusty string , tu moga juz byc spacje
Str_text = "   " + Fusing (temp - nie pamietam teraz dokładnie) + "  "

Te działania może trzeba będzie rozbić na linie osobne albo rozdzielić dwukropkami.
Odstępy mozna tez robić Space(ilosc spacji) albo spróbować Spc(ilosc spacji) bo zajmuje mniej jak trzeba dać ich dużo.

W Bascom jest jeszcze dużo funkcji do działania na stringach. Można podmieniac litery, ale myślę że to zalezy co sie potrzebuje i jak długi jest string.

-

BARTek
Moja strona

Portret użytkownika marekszy

matryca LED

mam w pętli gł.

'********************************* START ***************************************
Do
 Str_text = "     TEMPERATURA_1_" + Fusing(t1 , "##.#") + "^C"
 Str_len = Len(str_text)                                    'oblicza ilość liter/znaków w stringu
 Col_len = Str_len * 6                                      'kolumn tyle ile znaków *6 (5 kolumn na znak i 1 na odstęp)
Call Set_text
 
 Do
  Call Show_text
 Loop Until Nowy_text = 1
 Nowy_text = 0
 
 Str_text = "     TEMPERATURA_2_" + Fusing(t2 , "##.#") + "^C"
 Str_len = Len(str_text)
 Col_len = Str_len * 6
 Call Set_text
 
 Do
  Call Show_text
 Loop Until Nowy_text = 1
 Nowy_text = 0
 
 Str_text = "     TEMPERATURA_3_" + Fusing(t3 , "##.#") + "^C"
 Str_len = Len(str_text)
 Col_len = Str_len * 6
 Call Set_text
Do
 Call Show_text
 Loop Until Nowy_text = 1
 Nowy_text = 0
 
Loop
End
'******************************* KONIEC ****************************************

i po zadaniu wartości dla T1/T2/T3 wyświetla wszystko ładnie tylko jeszcze jak dodać DS-y na trzech wejściach portB (3,4,5),za groma nie wychodzi.Mają być osobno,że po zamianie na inne dalej temperatury zostaną na swoich miejscach (bez adresowania).

Portret użytkownika EDC

Odp. matryce LED

Dim Ktory_ds As Byte
Dim T As Integer
Dim S As String * 5
Dim Temperatury(3) As String * 5
 
 
*** START ***
Do
 
Ktory_ds = 3
Gosub Pomiar_temp
Str_text = "     TEMPERATURA_1_" + Fusing(temperatury(1) , "##.#") + "^C"
 Str_len = Len(str_text)                                    'oblicza ilość liter/znaków w stringu
 Col_len = Str_len * 6                                      'kolumn tyle ile znaków *6 (5 kolumn na znak i 1 na odstęp)
Call Set_text
 
..itd i trzeba rozwazyć gdzie uzywać Fusing albo Format...ale dalej..
 
 
Loop
End
*** KONIEC ***
Pomiar_temp:
 
  1wreset Pinb , Ktory_ds                                   'dzialaj dla aktualnie ustawionego pinu
  1wwrite &HCC , 1 , Pinb , Ktory_ds
  1wwrite &HBE , 1 , Pinb , Ktory_ds
  T = 1wread(2 , Pinb , Ktory_ds)
  T = T * 10
  T = T / 16
  S = Str(t)
  Temperatury(ktory_ds - 2) = Format(s , "+0.0")            'zapisze temperatury w stringach od 1 do 3
 
  1wreset Pinb , Ktory_ds                                   'kaz przygotowac kolejny odczyt
  1wwrite &HCC , 1 , Pinb , Ktory_ds
  1wwrite &H44 , 1 , Pinb , Ktory_ds
 
Return

To co Ci będzie niepotrzebne wywal. Napisałem tak bo nie wiem co będzie wygodniejsze. Przed kazdym zawołaniem Suba Pomiar_temp wpisz tylko numer pinu do zmiennej Ktory_ds/ MOżna to potem po testach zautomatyzować przez Incr Ktory_ds i If Ktory_ds = 6 then Ktory_ds = 3, tylko teraz to testujesz wiec nie ma problemu wpisać to z palca.

-

BARTek
Moja strona

Portret użytkownika marekszy

matryca LED

Nie chce to czytać temperatury

'*******************************************************************************
$regfile = "M8def.dat"
$crystal = 16000000
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 32                                               ' default use 10 for the SW stack
$framesize = 40                                             ' default use 40 for the frame space
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portc = &B00000000 : Portc = &B00000000
Config Portd = &B11111111 : Portd = &B11111111
 
 
'******************************deklaracja zmiennych*****************************
 
Dim Char As Byte , C As Byte , Digit As Byte , L As Byte , I As Byte , Temp(2) As Byte , Temp2 As Byte
Dim Nowy_text As Byte                                       '### DODANO ###
Dim X As Word
Dim Str_temp As String * 1 , Reeks(250) As Byte , Str_text As String * 50 , Str_len As Byte , Col_len As Byte , R As Byte
Dim Tempmsb As Byte , Templsb As Byte , Tempstr As String * 2
Dim Scroll_speed As Byte
 
'********************************termometr*************************************
Dim Ktory_ds As Byte
Dim T As Integer
Dim S As String * 5
Dim Temperatury(3) As Single                                'String * 5
'******************************************************************************
 
Declare Sub Set_text
Declare Sub Show_text
Declare Sub Test_display
Call Test_display                                           'skocz do testu matrycy
Waitms 100
 
Scroll_speed = 4
 
'*******************************************************************************
 
'********************************* START ***************************************
Do
 
Ktory_ds = Pinb.3
Gosub Pomiar_temp
 
 Str_text = "     TEMPERATURA_1=" + Fusing(temperatury(1) , "##.#") + "^C"
 Str_len = Len(str_text)                                    'oblicza ilość liter/znaków w stringu
 Col_len = Str_len * 6                                      'kolumn tyle ile znaków *6 (5 kolumn na znak i 1 na odstęp)
Call Set_text
 
 Do
 
 Ktory_ds = Pinb.4
Gosub Pomiar_temp
 
  Call Show_text
 Loop Until Nowy_text = 1
 Nowy_text = 0
 
 Str_text = "     TEMPERATURA_2=" + Fusing(temperatury(2) , "##.#") + "^C"
 Str_len = Len(str_text)
 Col_len = Str_len * 6
 Call Set_text
 
 Do
 
 Ktory_ds = Pinb.5
Gosub Pomiar_temp
 
  Call Show_text
 Loop Until Nowy_text = 1
 Nowy_text = 0
 
 Str_text = "     TEMPERATURA_3=" + Fusing(temperatury(3) , "##.#") + "^C"
 Str_len = Len(str_text)
 Col_len = Str_len * 6
 Call Set_text
Do
 Call Show_text
 Loop Until Nowy_text = 1
 Nowy_text = 0
 
Loop
End
'******************************* KONIEC ****************************************
'**************************pomiar temp.*****************************************
Pomiar_temp:
 
  1wreset Pinb , Ktory_ds                                   'dzialaj dla aktualnie ustawionego pinu
  1wwrite &HCC , 1 , Pinb , Ktory_ds
  1wwrite &HBE , 1 , Pinb , Ktory_ds
  T = 1wread(2 , Pinb , Ktory_ds)
  T = T * 10
  T = T / 16
  S = Str(t)
  Temperatury(ktory_ds - 2) = Format(s , "+0.0")            'zapisze temperatury w stringach od 1 do 3
 
  1wreset Pinb , Ktory_ds                                   'kaz przygotowac kolejny odczyt
  1wwrite &HCC , 1 , Pinb , Ktory_ds
  1wwrite &H44 , 1 , Pinb , Ktory_ds
 
Return
'*******************************************************************************
'Test wszystkich diod
Sub Test_display
Portd = 255                                                 'wszystkie linie w ULN2803 w stan wysoki
For X = 1 To 31                                             'wykonaj 30 razy
       Set Portb.0                                          'kolejne instrukcje obsugują przesuniecie
       Toggle Portb.1                                       'stan wysoki i zaraz niski na tym pinie
       Toggle Portb.1
       Toggle Portb.2                                       'stan wysoki i zaraz niski na tym pinie
       Toggle Portb.2
Next X
End Sub Test_display
'*******************************************************************************
'Zamien tekst ze string na sekwencję bajtów
Sub Set_text
C = 1                                                       'zaczynamy od pierwszego znaku stringa
For Digit = 1 To Str_len                                    'tyle razy ile wynosi długosc stringa
Str_temp = Mid(str_text , Digit , 1)                        'wytnij jedna litere/znak ze stringa bedacy na pozycji Digit
Char = Asc(str_temp)                                        'uzyskaj numer tego znaku w tablicy ASCII
 
'W tablicy ASCII znaki sa poukładane. Znaki do numeru 32 nie wyświetlają się. Znak 32 to spacja.
'Cyfryzaczynają się od 48. 48 oznacza 0. Jesli chcesz na przykład 8 to dodaj 48 = 56. 56 oznacza 8
'Teraz jeśli na każdy znak potrzebujemy 5 bajtów by go wyświetlić to co piąty bajt oznacza kolejny znak w tablicy programu
'Dlatego X = Znak ASCII * 5   32*5 bajtów da nam spację (dlatego w tablicy na początku jest dziura)
 
X = Char * 5
 
For I = 1 To 5                                              'dla jednego znaku zaladuj 5 bajtow
Reeks(c) = Lookup(x , Text_data)                            'bierz z tablicy
X = X + 1                                                   'dodawaj indeksy by sie przesuwac po tablicy
C = C + 1                                                   'dodawaj by układać bajty
Next I
Reeks(c) = 0
C = C + 1                                                   'zrob odstep (dodaj kolumne ale nie bierz zadnego bajtu)
Next Digit
End Sub Set_string
'*******************************************************************************
'show text
Sub Show_text
 
If Str_len > 4 Then
 
C = 1
   For R = 1 To Scroll_speed                                'scrolling speed
       Set Portb.0
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Char = C + L
       Portd = Reeks(char)
       Waitus 950                                           'ms 3
       C = C + 1
       Reset Portb.0
       For I = 1 To 30
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Char = C + L
       Portd = Reeks(char)
       Waitus 950                                           'ms 3
       Incr C
       Next I
       C = 1
   Next R
Incr L
 
If L > Col_len Then                                         '### TUTAJ DODANO ###
 L = 0
 Nowy_text = 1
End If
 
Else
For L = 0 To Col_len
C = 1
   For R = 1 To Scroll_speed
       Set Portb.0
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Portd = Reeks(c)
       Waitus 950                                           'ms 3                                             'to bym sprawdził bo obliczane jest na zadeklarowana prędkość
       C = C + 1
       Reset Portb.0
       For X = 1 To 30
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Portd = Reeks(c)
       Waitus 950                                           'ms 3                                             'to bym sprawdził bo obliczane jest na zadeklarowana prędkość
       C = C + 1
       Next X
       C = 1
   Next R
Next L
End If
End Sub Show_text
'*******************************************************************************
 
'*******************************************************************************
$include "znaki_matrycy.bas"

Jeszcze Bascom woła o zmianę na single
Dim Temperatury(3) As Single                                'String * 5 

czy DS-y nie powinny mieć dodatkowo 750ms opóźnienia,temperaturę pokazuje cały czas 0,0
przy wpisaniu na stałe wartości
Temperatury(1) = 35
Temperatury(2) = 95
Temperatury(3) = 42

wyświetlanie jest prawidłowe

Portret użytkownika EDC

Odp. matryce LED

Teraz to ma szansę działać ;)

'*******************************************************************************
$regfile = "M8def.dat"
$crystal = 16000000
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 32                                               ' default use 10 for the SW stack
$framesize = 40                                             ' default use 40 for the frame space
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portc = &B00000000 : Portc = &B00000000
Config Portd = &B11111111 : Portd = &B11111111
 
 
'******************************deklaracja zmiennych*****************************
 
Dim Char As Byte , C As Byte , Digit As Byte , L As Byte , I As Byte , Temp(2) As Byte , Temp2 As Byte
Dim Nowy_text As Byte                                       '### DODANO ###
Dim X As Word
Dim Str_temp As String * 1 , Reeks(250) As Byte , Str_text As String * 50 , Str_len As Byte , Col_len As Byte , R As Byte
Dim Tempmsb As Byte , Templsb As Byte , Tempstr As String * 2
Dim Scroll_speed As Byte
Const Deelay = 950                                          '#### Zmieniasz tylko raz tutaj i zmienia sie w kodzie
'********************************termometr*************************************
Dim Ktory_ds As Byte
Dim T As Integer
Dim S As String * 5
Dim Temperatury(3) As String * 5
'******************************************************************************
 
Declare Sub Set_text
Declare Sub Show_text
Declare Sub Test_display
Call Test_display                                           'skocz do testu matrycy
Waitms 100
 
Scroll_speed = 4
 
'*******************************************************************************
 
'********************************* START ***************************************
Do
'--------------------
 Ktory_ds = 3
  Gosub Pomiar_temp
   Str_text = "     TEMPERATURA_1=" + Temperatury(1) + "^C"
     Call Set_text
 
   Do
    Call Show_text
   Loop Until Nowy_text = 1
   Nowy_text = 0
 
'----------------------
 Ktory_ds = 4
  Gosub Pomiar_temp
   Str_text = "     TEMPERATURA_2=" + Temperatury(2) + "^C"
    Call Set_text
 
   Do
    Call Show_text
   Loop Until Nowy_text = 1
   Nowy_text = 0
 
'----------------------
 Ktory_ds = 5
  Gosub Pomiar_temp
   Str_text = "     TEMPERATURA_3=" + Temperatury(3) + "^C"
     Call Set_text
 
   Do
    Call Show_text
   Loop Until Nowy_text = 1
   Nowy_text = 0
 
Loop
End
'******************************* KONIEC ****************************************
'**************************pomiar temp.*****************************************
Pomiar_temp:
 
  1wreset Pinb , Ktory_ds                                   'dzialaj dla aktualnie ustawionego pinu
  1wwrite &HCC , 1 , Pinb , Ktory_ds
  1wwrite &HBE , 1 , Pinb , Ktory_ds
  T = 1wread(2 , Pinb , Ktory_ds)
  T = T * 10
  T = T / 16
  S = Str(t)
     '### TU można dodac warunek, że tylko jesli jeśli prawidłowy odczyt to zapis do stringa
     'w razie błedu odczytu w stringu bedzie poprzednia wartość
  Temperatury(ktory_ds - 2) = Format(s , "+0.0")            'zapisze temperatury w stringach od 1 do 3
 
  1wreset Pinb , Ktory_ds                                   'kaz przygotowac kolejny odczyt
  1wwrite &HCC , 1 , Pinb , Ktory_ds
  1wwrite &H44 , 1 , Pinb , Ktory_ds
 
Return
'*******************************************************************************
'Test wszystkich diod
Sub Test_display
Portd = 255                                                 'wszystkie linie w ULN2803 w stan wysoki
For X = 1 To 31                                             'wykonaj 30 razy
       Set Portb.0                                          'kolejne instrukcje obsugują przesuniecie
       Toggle Portb.1                                       'stan wysoki i zaraz niski na tym pinie
       Toggle Portb.1
       Toggle Portb.2                                       'stan wysoki i zaraz niski na tym pinie
       Toggle Portb.2
Next X
End Sub Test_display
'*******************************************************************************
'Zamien tekst ze string na sekwencję bajtów
Sub Set_text
 Str_len = Len(str_text)                                    'oblicza ilość liter/znaków w stringu
  Col_len = Str_len * 6                                     'kolumn tyle ile znaków *6 (5 kolumn na znak i 1 na odstęp)
C = 1                                                       'zaczynamy od pierwszego znaku stringa
For Digit = 1 To Str_len                                    'tyle razy ile wynosi długosc stringa
Str_temp = Mid(str_text , Digit , 1)                        'wytnij jedna litere/znak ze stringa bedacy na pozycji Digit
Char = Asc(str_temp)                                        'uzyskaj numer tego znaku w tablicy ASCII
 
'W tablicy ASCII znaki sa poukładane. Znaki do numeru 32 nie wyświetlają się. Znak 32 to spacja.
'Cyfry zaczynają się od 48. 48 oznacza 0. Jesli chcesz na przykład 8 to dodaj 48 = 56. 56 oznacza 8
'Teraz jeśli na każdy znak potrzebujemy 5 bajtów by go wyświetlić to co piąty bajt oznacza kolejny znak w tablicy programu
'Dlatego X = Znak ASCII * 5   32*5 bajtów da nam spację (dlatego w tablicy na początku jest dziura)
 
X = Char * 5
 
For I = 1 To 5                                              'dla jednego znaku zaladuj 5 bajtow
Reeks(c) = Lookup(x , Text_data)                            'bierz z tablicy
X = X + 1                                                   'dodawaj indeksy by sie przesuwac po tablicy
C = C + 1                                                   'dodawaj by układać bajty
Next I
Reeks(c) = 0
C = C + 1                                                   'zrob odstep (dodaj kolumne ale nie bierz zadnego bajtu)
Next Digit
End Sub Set_string
'*******************************************************************************
'show text
Sub Show_text
 
If Str_len > 4 Then
 
C = 1
   For R = 1 To Scroll_speed                                'scrolling speed
       Set Portb.0
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Char = C + L
       Portd = Reeks(char)
       Waitus Deelay
       C = C + 1
       Reset Portb.0
       For I = 1 To 30
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Char = C + L
       Portd = Reeks(char)
       Waitus Deelay
       Incr C
       Next I
       C = 1
   Next R
Incr L
 
If L > Col_len Then
 L = 0
 Nowy_text = 1
End If
 
Else
For L = 0 To Col_len
C = 1
   For R = 1 To Scroll_speed
       Set Portb.0
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Portd = Reeks(c)
       Waitus Deelaay
       C = C + 1
       Reset Portb.0
       For X = 1 To 30
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Portd = Reeks(c)
       Waitus Deelay
       C = C + 1
       Next X
       C = 1
   Next R
Next L
End If
End Sub Show_text
'*******************************************************************************
 
'*******************************************************************************
$include "znaki_matrycy.bas"

Edytowano : Poprawiłem zauważone błędy (Numer DS`a) i wprowadziłem wspólną stała dla opóźnień. Możesz dobierać u góry w kodzie a zmienia się samo w czterech miejscach. Do tego przeniosłem obliczanie długości do suba Set_text.

-

BARTek
Moja strona

Portret użytkownika marekszy

matryce Led

trochę to kuleje,mierzy tylko temperaturę1,natomiast po przepięciu DS-a na pinb.4/pinb.5 bez wskazań,a tak wogle to pomiar strasznie powolny.

'********************************* START ***************************************
Do
'--------------------
 Ktory_ds = 3
  Gosub Pomiar_temp
   Str_text = "     TEMPERATURA_1=" + Temperatury(1) + "^C"
    Str_len = Len(str_text)                                 'oblicza ilość liter/znaków w stringu
      Col_len = Str_len * 6                                 'kolumn tyle ile znaków *6 (5 kolumn na znak i 1 na odstęp)
        Call Set_text
   Do
    Call Show_text
   Loop Until Nowy_text = 1
   Nowy_text = 0
'----------------------
 Ktory_ds = 3
  Gosub Pomiar_temp
   Str_text = "     TEMPERATURA_2=" + Temperatury(2) + "^C"
    Str_len = Len(str_text)
     Col_len = Str_len * 6
      Call Set_text
   Do
    Call Show_text
   Loop Until Nowy_text = 1
   Nowy_text = 0
 
'----------------------
 Ktory_ds = 3
  Gosub Pomiar_temp
   Str_text = "     TEMPERATURA_3=" + Temperatury(3) + "^C"
    Str_len = Len(str_text)
      Col_len = Str_len * 6
       Call Set_text
   Do
    Call Show_text
   Loop Until Nowy_text = 1
   Nowy_text = 0
 
Loop
End
'******************************* KONIEC ****************************************

Jutro do tego przysiądę i pokombinuję, dzisiaj już niestety nie mam czasu.

Portret użytkownika EDC

Odp. matryce LED

Zacznij od zerknięcia na poprawiony kod. Niektóre błędy byś mógł znaleźć sam :P

-

BARTek
Moja strona

Portret użytkownika marekszy

matryca LED

dzięki za radę,tak jak napisałem

Quote:
Jutro do tego przysiądę i pokombinuję, dzisiaj już niestety nie mam czasu

Nikt nie mówił,że będzie prosto,naprawdę lubię trochę się pobawić,większa satysfakcja i przy okazji nauka.

Portret użytkownika marekszy

matryca LED

Witam, postanowiłem do tego dołożyć zegar no i wyszły kolejne problemy.
W chwili obecnej przewija się czas i data, oraz trzy pomiary temperatury.
Teraz moje pytania:
-czy jest możliwość aby czas w postaci GG:MM (bez sekund)był wyświetlany bez przewijania np. przez 10s,a następnie dalej 3 temperatury (przewinięte) i znowu GG:SS itd.
-czy Mr w 74HC595 służy do czyszczenia rejestru, jeżeli tak to gdzie wstawić reset żeby nie trzeba było na końcach tekstów wstawiać spacji by wyrównać długości.
Jak to się da przebrnąć to już zostaną przyciski do ustawiania czasu.
Dołączam działający kod.

'*******************************************************************************
' 09.2015r działa 3 x pomiar 38% pamięci
'74HC595 Pc.3-Mr_srclr/Pb.0-Ds/Pb.1-SHCP/Pb.2-STCP
'ds1307 SCL-Pc.4,SDA-Pc.5
$regfile = "M8def.dat"
$crystal = 16000000
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 32                                               ' default use 10 for the SW stack
$framesize = 40                                             ' default use 40 for the frame space
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portc = &B00001000 : Portc = &B10001111
Config Portd = &B11111111 : Portd = &B11111111
'-------------------------------------------------------------------------------
 
'$lib "Ds1307clock.lib"                                      '"ds1307rtc.lib" modified lib
 
Config Sda = Portc.5
Config Scl = Portc.4
 
Const Ds1307w = &HD0                                        ' Addresses of Ds1307 clock
Const Ds1307r = &HD1
 
'definicja gdze trzymamy zmienne czas i data
Dim Weekday As Byte
 
Declare Sub Getdatetime
Declare Sub Settime
 
Config Clock = User                                         ' this will dim the bytes automatic
 
 
'Date$ = "15.09.27"
'Time$ = "01.15.00"
'------------------------------------------------------------------------------
Mr_srclr Alias Portc.3
 
'******************************deklaracja zmiennych*****************************
 
Dim Char As Byte , C As Byte , Digit As Byte , L As Byte , I As Byte , Temp(2) As Byte , Temp2 As Byte
Dim Nowy_text As Byte                                       '### DODANO ###
Dim X As Word
Dim Str_temp As String * 1 , Reeks(250) As Byte , Str_text As String * 50 , Str_len As Byte , Col_len As Byte , R As Byte
Dim Tempmsb As Byte , Templsb As Byte , Tempstr As String * 2
Dim Scroll_speed As Byte
 
'********************************termometr*************************************
Dim Ktory_ds As Byte
Dim T As Integer
Dim S As String * 5
Dim Temperatury As String * 5
'******************************************************************************
 
Declare Sub Set_text
Declare Sub Show_text
Declare Sub Test_display
Call Test_display                                           'skocz do testu matrycy
Waitms 100
 
Scroll_speed = 6                                            'tempo przewijania jak wieksza to wolniej
 
'*******************************************************************************
 
'********************************* START ***************************************
Do
 
'--------------------
   Str_text = "     " + Time$ + " " + Date$ + "  "
    Str_len = Len(str_text)                                 'oblicza ilość liter/znaków w stringu
      Col_len = Str_len * 6                                 'kolumn tyle ile znaków *6 (5 kolumn na znak i 1 na odstęp)
        Call Set_text
 
 
   Do
    Call Show_text
   Loop Until Nowy_text = 1
   Nowy_text = 0
'----------------------
 Ktory_ds = 0
  Gosub Pomiar_temp
   'Scroll_speed = 6
   Str_text = "     TEMPERATURA_1=" + Temperatury + "^C "
    Str_len = Len(str_text)
     Col_len = Str_len * 6
      Call Set_text
 
   Do
    Call Show_text
   Loop Until Nowy_text = 1
   Nowy_text = 0
'----------------------
 Ktory_ds = 1
  Gosub Pomiar_temp
   'Scroll_speed = 6
   Str_text = "     TEMPERATURA_2=" + Temperatury + "^C "
    Str_len = Len(str_text)
     Col_len = Str_len * 6
      Call Set_text
 
   Do
    Call Show_text
   Loop Until Nowy_text = 1
   Nowy_text = 0
 
'----------------------
 Ktory_ds = 2
  Gosub Pomiar_temp
  'Scroll_speed = 6
   Str_text = "     TEMPERATURA_3=" + Temperatury + "^C "
    Str_len = Len(str_text)
      Col_len = Str_len * 6
       Call Set_text
 
   Do
 
    Call Show_text
   Loop Until Nowy_text = 1
   Nowy_text = 0
 
Loop
End
'******************************* KONIEC ****************************************
'**************************pomiar temp.*****************************************
Pomiar_temp:
 'For Ktory_ds = 0 To 2
   'Waitms 750
  1wreset Pinc , Ktory_ds                                   'dzialaj dla aktualnie ustawionego pinu
  1wwrite &HCC , 1 , Pinc , Ktory_ds
  1wwrite &HBE , 1 , Pinc , Ktory_ds
  T = 1wread(2 , Pinc , Ktory_ds)
  T = T * 10
  T = T / 16
  S = Str(t)
     '### TU można dodac warunek, że tylko jesli jeśli prawidłowy odczyt to zapis do stringa
     'w razie błedu odczytu w stringu bedie poprzednia wartość
  Temperatury = Format(s , "+0.0")                          'zapisze temperatury w stringach od 1 do 3  Temperatury(ktory_ds - 2)
 
  1wreset Pinc , Ktory_ds                                   'kaz przygotowac kolejny odczyt
  1wwrite &HCC , 1 , Pinc , Ktory_ds
  1wwrite &H44 , 1 , Pinc , Ktory_ds
 
Return
 
 
'------------------------------------------------------------------------------
 
'funkcje do obslugi DS1307
Getdatetime:
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307w                                          ' send address
  I2cwbyte 0                                                ' start address in 1307
 
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307r                                          ' send address
  I2crbyte _sec , Ack
  I2crbyte _min , Ack                                       ' MINUTES
  I2crbyte _hour , Ack                                      ' Hours
  I2crbyte Weekday , Ack                                    ' Day of Week
  I2crbyte _day , Ack                                       ' Day of Month
  I2crbyte _month , Ack                                     ' Month of Year
  I2crbyte _year , Nack                                     ' Year
  I2cstop
  _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
  _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return
 
Setdate:
  _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307w                                          ' send address
  I2cwbyte 4                                                ' starting address in 1307
  I2cwbyte _day                                             ' Send Data to SECONDS
  I2cwbyte _month                                           ' MINUTES
  I2cwbyte _year                                            ' Hours
  I2cstop
Return
 
Settime:
  _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307w                                          ' send address
  I2cwbyte 0                                                ' starting address in 1307
  I2cwbyte _sec                                             ' Send Data to SECONDS
  I2cwbyte _min                                             ' MINUTES
  I2cwbyte _hour                                            ' Hours
  I2cstop
Return
 
'*******************************************************************************
'Test wszystkich diod
Sub Test_display
Portd = 255                                                 'wszystkie linie w ULN2803 w stan wysoki
For X = 1 To 31                                             'wykonaj 30 razy
       Set Portb.0                                          'kolejne instrukcje obsugują przesuniecie
       Toggle Portb.1                                       'stan wysoki i zaraz niski na tym pinie
       Toggle Portb.1
       Toggle Portb.2                                       'stan wysoki i zaraz niski na tym pinie
       Toggle Portb.2
Next X
End Sub Test_display
'*******************************************************************************
'Zamien tekst ze string na sekwencję bajtów
Sub Set_text
C = 1                                                       'zaczynamy od pierwszego znaku stringa
For Digit = 1 To Str_len                                    'tyle razy ile wynosi długosc stringa
Str_temp = Mid(str_text , Digit , 1)                        'wytnij jedna litere/znak ze stringa bedacy na pozycji Digit
Char = Asc(str_temp)                                        'uzyskaj numer tego znaku w tablicy ASCII
 
'W tablicy ASCII znaki sa poukładane. Znaki do numeru 32 nie wyświetlają się. Znak 32 to spacja.
'Cyfryzaczynają się od 48. 48 oznacza 0. Jesli chcesz na przykład 8 to dodaj 48 = 56. 56 oznacza 8
'Teraz jeśli na każdy znak potrzebujemy 5 bajtów by go wyświetlić to co piąty bajt oznacza kolejny znak w tablicy programu
'Dlatego X = Znak ASCII * 5   32*5 bajtów da nam spację (dlatego w tablicy na początku jest dziura)
 
X = Char * 5
 
For I = 1 To 5                                              'dla jednego znaku zaladuj 5 bajtow
Reeks(c) = Lookup(x , Text_data)                            'bierz z tablicy
X = X + 1                                                   'dodawaj indeksy by sie przesuwac po tablicy
C = C + 1                                                   'dodawaj by układać bajty
Next I
Reeks(c) = 0
C = C + 1                                                   'zrob odstep (dodaj kolumne ale nie bierz zadnego bajtu)
Next Digit
End Sub Set_string
'*******************************************************************************
'show text
Sub Show_text
 
If Str_len > 4 Then
 
C = 1
   For R = 1 To Scroll_speed                                'scrolling speed
       Set Portb.0
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Char = C + L
       Portd = Reeks(char)
       Waitus 500
       C = C + 1
       Reset Portb.0
       For I = 1 To 30
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Char = C + L
       Portd = Reeks(char)
       Waitus 500
       Incr C
       Next I
       C = 1
   Next R
Incr L
 
If L > Col_len Then                                         '### TUTAJ DODANO ###
 L = 0
 Nowy_text = 1
End If
 
Else
For L = 0 To Col_len
C = 1
   For R = 1 To Scroll_speed
       Set Portb.0
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Portd = Reeks(c)
       Waitus 500                                           'to bym sprawdził bo obliczane jest na zadeklarowana prędkość
       C = C + 1
       Reset Portb.0
       For X = 1 To 30
       Toggle Portb.1
       Toggle Portb.1
       Toggle Portb.2
       Toggle Portb.2
       Portd = Reeks(c)
       Waitus 500                                           'to bym sprawdził bo obliczane jest na zadeklarowana prędkość
       C = C + 1
       Next X
       C = 1
   Next R
Next L
End If
End Sub Show_text
'*******************************************************************************
 
'*******************************************************************************
$include "znaki_matrycy.bas"

pozdrawiam

Portret użytkownika gosc

witam

mam pytanie czy mozna bez problemu 2 razy powiekszyc matryce

Portret użytkownika gosc

Wyłuskanie znaku z tablicy znaku...?

Możecie mi wytłumaczyć po co jest ten fragment:

Quote:
X = Char * 5

podczas wypełniania tablicy kolumn?

Jego opis jest taki:

Quote:
'W tablicy ASCII znaki sa poukładane. Znaki do numeru 32 nie wyświetlają się. Znak 32 to spacja.
'Cyfryzaczynają się od 48. 48 oznacza 0. Jesli chcesz na przykład 8 to dodaj 48 = 56. 56 oznacza 8
'Teraz jeśli na każdy znak potrzebujemy 5 bajtów by go wyświetlić to co piąty bajt oznacza kolejny znak w tablicy programu
'Dlatego X = Znak ASCII * 5 32*5 bajtów da nam spację (dlatego w tablicy na początku jest dziura)

Dla przykładu litera A ma numer ASCII=65. W takim wypadku X=65*5 da nam indeks znaku=325, nie za bardzo rozumiem po co taka operacja? Przecież po odczycie:

Quote:
Char = Asc(str_temp)

w Char już mamy właściwy numer znaku do odczytu za pomocą Reeks(c) = Lookup(x , Text_data).
Po co więc to mnożenie
Quote:
X = Char * 5
???

Portret użytkownika gosc

forum

To forum chyba umarło, także ciężko uzyskać jakąkolwiek odpowiedź.
Mam nadzieję, że kiedyś zostanie reaktywowane, a informacje nie zmarnują się.

Pozdrawiam

www.umpc.pl

Portret użytkownika gosc

forum

To forum chyba umarło, także ciężko uzyskać jakąkolwiek odpowiedź.
Mam nadzieję, że kiedyś zostanie reaktywowane, a informacje nie zmarnują się.

Pozdrawiam

www.umpc.pl

Portret użytkownika gosc

FORUM

To forum chyba umarło, także ciężko uzyskać jakąkolwiek odpowiedź.
Mam nadzieję, że kiedyś zostanie reaktywowane, a informacje nie zmarnują się.

Pozdrawiam

www.umpc.pl

Portret użytkownika matrix

Re: forum chyba umarło

Umarło bo przeżywa tak ogromny atak botów że nikomu pewnie nie chce się tu wchodzić i odhaczać spamu jako przeczytane wiadomości.

Portret użytkownika mirley

Re: Strona

Wywaliłem mozliwość dodawania wpisów przez uzytkowników niezarejestrowanych. Zakładanie konta natomiast musi przejśc przez ręczne sprawdzenie danych .... nie ma innego dobrego sposobu aby z drupala w obecnej wersji połączyć z filtrem antyspamowym.... nie bedę walczył za stara stroną... bo nowa Cierpi na tym najbardziej i nie ma czasu na nowe projekty

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.