Seite 1 von 3

7 Led Gadget

Verfasst: 01.06.2005 21:56
von DROOPY
Easyly create a seven led gadget

Code: Alles auswählen

; PureBasic 3.93 
; Idea from Localmotion34 

; De préférence utilisez un gadget ayant un rapport de 11 * 13 ex 110 / 130

Structure SevenSegmentLed 
  x.l 
  y.l 
  width.l 
  height.l 
  Image.l 
  Gadget.l 
  value.l
  point.l
  color1.l 
  color2.l 
  BackgroundColor.l
EndStructure 

;{ Datasection
DataSection
Led:
; Segment a
Data.l 1,1,1,-1,6,0,1,1,-1,1,-6,0,-1,-1,0,0
; Segment g
Data.l 1,6,1,-1,6,0,1,1,-1,1,-6,0,-1,-1,0,0
; Segment d
Data.l 1,11,1,-1,6,0,1,1,-1,1,-6,0,-1,-1,0,0
; Segment f
Data.l 1,1,1,1,0,3,-1,1,-1,-1,0,-3,1,-1,0,0
; Segment b
Data.l 9,1,1,1,0,3,-1,1,-1,-1,0,-3,1,-1,0,0
; Segment e
Data.l 1,6,1,1,0,3,-1,1,-1,-1,0,-3,1,-1,0,0
; Segment c
Data.l 9,6,1,1,0,3,-1,1,-1,-1,0,-3,1,-1,0,0
; Point
Data.l 10,11,1,1,-1,1,-1,-1,1,-1,0,0
; Fin dessin Leds
Data.l 0,0

SegmentA:
Data.l 5,1
SegmentB:
Data.l 9,3
SegmentC:
Data.l 9,8
SegmentD:
Data.l 5,11
SegmentE:
Data.l 1,9
SegmentF:
Data.l 1,4
SegmentG:
Data.l 5,6
SegmentP:
Data.l 10,12

EndDataSection
;}

ProcedureDLL SevenSegmentLed(x,y,width,height,color1,color2,BackgroundColor) 
  
  ; Initialise the LinkedList the first call 
  Static Init 
  If Init=0 
    NewList SevenSegmentLedLList.SevenSegmentLed() 
  EndIf 
  Init=1 
  
  ; Fill the Structure 
  AddElement(SevenSegmentLedLList()) 
  SevenSegmentLedLList()\x=x 
  SevenSegmentLedLList()\y=y 
  SevenSegmentLedLList()\width=width 
  SevenSegmentLedLList()\height=height 
  SevenSegmentLedLList()\color1=color1 
  SevenSegmentLedLList()\color2=color2 
  SevenSegmentLedLList()\BackgroundColor=BackgroundColor
  SevenSegmentLedLList()\Image=CreateImage(#PB_Any,width,height) 
  
  PWidth.f=SevenSegmentLedLList()\width/11
  PHeight.f=SevenSegmentLedLList()\height/13
  
  
  ;/ Dessine les Leds
  UseImage(SevenSegmentLedLList()\Image)
  StartDrawing(ImageOutput())
  Box(0,0,SevenSegmentLedLList()\width,SevenSegmentLedLList()\height,SevenSegmentLedLList()\BackgroundColor)
  Restore  Led
  Repeat
    Read x
    Read y
    If x=0 And y=0 : Break : EndIf
    Repeat
      Read a
      Read b
      If a=0 And b=0 : Break : EndIf
      Line(x*PWidth,y*PHeight,a*PWidth,b*PHeight,color1)
      x=x+a : y=y+b
    ForEver
  ForEver
  StopDrawing()
  
  ; create the gadget & show the image 
  SevenSegmentLedLList()\Gadget=ImageGadget(#PB_Any,SevenSegmentLedLList()\x,SevenSegmentLedLList()\y,width,height,UseImage(SevenSegmentLedLList()\Image),#PB_Image_Border) 
  
  ; Return the gadget id 
  ProcedureReturn ListIndex(SevenSegmentLedLList()) 
  
EndProcedure 

ProcedureDLL SevenSegmentLedSet(id,value) 
  
  SelectElement(SevenSegmentLedLList(),id) 
  
  SevenSegmentLedLList()\value=value 
  
  PWidth.f=SevenSegmentLedLList()\width/11
  PHeight.f=SevenSegmentLedLList()\height/13
  
  ;/ Allume les Segments
  UseImage(SevenSegmentLedLList()\Image)
  StartDrawing(ImageOutput())
  
  ; Eteind les segments
  Restore SegmentA
  For n=1 To 8
    Read a
    Read b
    FillArea(a*PWidth,b*PHeight,SevenSegmentLedLList()\color1,SevenSegmentLedLList()\BackgroundColor)
  Next
  
  Select value
    Case 0
      temp.s="abcdef"
    Case 1
      temp="bc"
    Case 2
      temp="abged"
    Case 3
      temp="abgcd"
    Case 4
      temp="fbgc"
    Case 5
      temp="afgcd"
    Case 6
      temp="afedgc"
    Case 7
      temp="abc"
    Case 8
      temp="abcdefg"
    Case 9
      temp="abcdfg"
  EndSelect
  
  ; Gestion du point
  If SevenSegmentLedLList()\point=1
    temp+"p"
  EndIf
  
  
  For n=1 To Len(temp)
    Select Mid(temp,n,1)
      Case "a"
        Restore SegmentA
      Case "b"
        Restore SegmentB
      Case "c"
        Restore SegmentC
      Case "d"
        Restore SegmentD
      Case "e"
        Restore SegmentE
      Case "f"
        Restore SegmentF
      Case "g"
        Restore SegmentG
      Case "p"
        Restore SegmentP
     
    EndSelect
    
    
    Read a
    Read b
    
    FillArea(a*PWidth,b*PHeight,SevenSegmentLedLList()\color1,SevenSegmentLedLList()\color2)
  Next
  
    StopDrawing()
      
  SetGadgetState(SevenSegmentLedLList()\Gadget,UseImage(SevenSegmentLedLList()\Image)) 
  
EndProcedure 

ProcedureDLL SevenSegmentLedGet(id) 
  SelectElement(SevenSegmentLedLList(),id) 
  ProcedureReturn SevenSegmentLedLList()\value 
EndProcedure 

Procedure SevenSegmentLedEvent(id) 
  SelectElement(SevenSegmentLedLList(),id) 
  ProcedureReturn SevenSegmentLedLList()\Gadget 
EndProcedure  

Procedure SevenSegmentLedPoint(id,light)
  SelectElement(SevenSegmentLedLList(),id) 
  SevenSegmentLedLList()\point=light
EndProcedure



;/ Test 
OpenWindow(0,0,0,580,290,#PB_Window_SystemMenu|#PB_Window_ScreenCentered ,"7 Segment Led")
CreateGadgetList(WindowID(0))
SevenSegmentLed(10,10,220,260,8404992,16776960,10485760)
SevenSegmentLed(250,10,110,130,4227072,65280,4210688)
SevenSegmentLed(400,10,55,65,1118481,255,0)
SevenSegmentLed(455,10,55,65,1118481,255,0)
SevenSegmentLed(510,10,55,65,1118481,255,0)

For n= 0 To 9
  For i=1 To 4
    SevenSegmentLedSet(i,Random(9))
    SevenSegmentLedPoint(i,Random(1))
  Next i 
  
  SevenSegmentLedSet(0,n)
  
  Beep_(1000,25)
  Delay(500)
Next n

Verfasst: 01.06.2005 22:10
von Kekskiller
Nice.

Verfasst: 01.06.2005 22:45
von walker
Hi,

damit es auch unter Linux läuft, muß der Beep_ (dritt-letzte Zeile = Win-Api) entfernt und ein While Windowevent():Wend hinzugefügt werden. Siehe auch http://forums.purebasic.com/english/vie ... 1099#91099

cu
Ulf

Verfasst: 02.06.2005 17:08
von DarkDragon
7 LED :? Didn't hear of that before, you mean the 7 segment liquid crystal display ;) .

Verfasst: 02.06.2005 18:17
von DROOPY
No led was used in electronic before LCD

http://www.aaroncake.net/circuits/counter.htm

Verfasst: 02.06.2005 18:35
von DarkDragon
sure, but I don't know any tall LED O_o. Never seen a LED Display looking like an 7 segment display.

Verfasst: 02.06.2005 19:23
von traumatic
DarkDragon: /:->

Droopy: Nice code, thanks for sharing! :D

Verfasst: 02.06.2005 20:06
von RaVeN99
@DarkDragon: http://www.electronic-kits-and-projects ... /q3129.jpg
Hier nochmal n Bild wo son Bauteil verbaut iss...

@Droopy:
Good job!
Thx for sharing it ^^


Greetz
RaVeN

Verfasst: 03.06.2005 06:58
von mueckerich
@DarkDragon:
Never seen a LED Display looking like an 7 segment display.
:o Die Kids, kennen halt nur den neuen Kram. :twisted:

Tja mein Junge, in der rauhen Wirklichkeit :twisted: ist es so, das die 7-Segment LED wesentlich früher auf dem Markt waren als die LCD. Hatte mitte der 70er einen der ersten Taschenrechner von TI :o (damals sauteuer ca. 200 DM, und nur die 4 Grundrechenarten. Super HighTech!) geschenkt bekommen. Da war nur einen 7-Segment LED Anzeige vorhanden und LCD waren einfach unbekannt, die kamen erst später.

Verfasst: 03.06.2005 10:09
von DarkDragon
mueckerich hat geschrieben:@DarkDragon:
Never seen a LED Display looking like an 7 segment display.
:o Die Kids, kennen halt nur den neuen Kram. :twisted:

Tja mein Junge, in der rauhen Wirklichkeit :twisted: ist es so, das die 7-Segment LED wesentlich früher auf dem Markt waren als die LCD. Hatte mitte der 70er einen der ersten Taschenrechner von TI :o (damals sauteuer ca. 200 DM, und nur die 4 Grundrechenarten. Super HighTech!) geschenkt bekommen. Da war nur einen 7-Segment LED Anzeige vorhanden und LCD waren einfach unbekannt, die kamen erst später.
Stimmt 1971 konnte man erst richtig gute LCD's erstellen ;) Dank Schadt und Helfrich.