PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Funktion um Zahlen auf SAA1064 anzeigen zu lassen ?



Blamaster
21.11.2009, 14:33
Hi,

im Wiki gibts ja folgende Code um Zahlen an den SAA1064 zu schicken:



Sub Led_display(ziffer An Byte , Zahl As Byte)
I2cstart
I2cwbyte Rn_digi_slave_write
I2cwbyte Ziffer

Select Case Zahl
Case 0:
Segmente = &H3F
Case 1:
Segmente = &H06
Case 2:
Segmente = &H5B
Case 3:
Segmente = &H4F
Case 4:
Segmente = &H66
Case 5:
Segmente = &H6D
Case 6:
Segmente = &H7D
Case 7:
Segmente = &H07
Case 8:
Segmente = &H7F
Case 9:
Segmente = &H67

End Select

I2cwbyte Segmente
I2cstop
End Sub



Damit lässt sich ja auf dem Segment ZifferX die ZahlX von 0-9 ausgeben.

Ich habe die Schaltung mit 2 Segmenten aufgebaut nicht mit 4. Ich würde jetzt das ganze gerne so abändern, das ich eine Zahl von 0-99 an die Funktion übergeben kann und die Zahl dann direkt ausgegeben werden kann.

Allerdings hab ich in Bascom noch nie mit funktionen gearbeitet und mir ist auch noch nicht ganz klar wie sich das umsetzen lässt.

In einer Delphi Pc Software hätte ich das gaze jetzt so realisiert das die Zahl als String übergeben wird und der String mit einer maximalen Länge von 2 (01-99) dann in der funktion beim Beispiel von 23 in Wert1 = 2 und Wert2 = 3 geteilt wird, dann wieder zurück in ein integer gewandelt und dann einzeln übergeben.

Lässt sich das so auch irgendwie in Bascom realisieren ?

mfg Yannic

021aet04
21.11.2009, 14:53
Ich habe das gleiche Problem gehabt. Hier ist der Link
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=48539&highlight=modulo

Es ist in C geschrieben, sollte sich aber relativ einfach nach Bascom konvertieren lassen.

MfG Hannes

Richard
21.11.2009, 15:28
Einfach die Zahl in einem String wandeln und ausgeben.

Gruß Richard

Blamaster
21.11.2009, 18:02
Danke für die Tipps.

Richards Variante hört sich am leichtesten an.

Nur hab ich da gerade noch ein Problem mit:



Declare Sub Led_display_init()
Declare Sub Led_display(byval Zahl As Byte)

$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 20
$framesize = 40
$baud = 9600

Config Scl = Portc.0
Config Sda = Portc.1

Dim S_ausgabe As String * 2


Led_display_init

Do
Waitms 3000
Led_display 15
Loop

'Funktionen für 7 Segment

Sub Led_display_init()
I2cinit
I2cstart
I2cwbyte &H70
I2cwbyte 0
I2cwbyte &B0110110
I2cstop

Led_display 0

End Sub


Sub Led_display(zahl As Byte)
I2cstart
I2cwbyte &H70
I2cwbyte 1

S_ausgabe = Str(zahl)

I2cwbyte S_ausgabe
I2cstop
End Sub


Ich habs jetzt so versucht. Klappt allerdings nicht so wirklich. Was muss denn mit I2cwbyte 1 gemacht werden wenn ich den ganzen string mal angenommen (S_ausgabe=22) ausgeben lassen möchte. Irgendwie muss dabei ja segment 1 und segment 2 angesprochen werden können.