Eléctronica - Display7seg

Iniciado por Myth.ck, 17 Noviembre 2008, 16:34 PM

0 Miembros y 1 Visitante están viendo este tema.

Myth.ck

Hola... Estoy desarrollando un programa para la visualización de números en display de 7 segmentos hechos con shapes...

1º Hice un SHAPE1(Index as integer), con la cual controladré cada segmento de dicho "display"
2ºIncluí dos procedimientos para el conteo ascendente y descendente.
3ºIncluí un botón de pause.

Bueno como verán ya se imaginaron todo el código y es algo sencillo.

El problema es que solo controlo una sola matriz:

Private Sub Tmr_Contar_Ascendente()
cnt=cnt+1
if cnt=999 then
   cnt=0
end if
unidades= (cnt\10)MOD 10 ' me otorga el valor de las unidades para el display
display7seg
End Sub

Ahora bien en la rutina display7seg hago un select case para unidades...

Como debería hacer para que por ejemplo si pondría
decenas=(cnt\10) MOD 100
Me las muestre en otro display (otra matriz) con las mismas propiedades? y no tener que hacer un select case decenas y describir cuales son los segmentos a encender?, a lo que me refiero es que con sólo los datos de unidades, decenas y centenas pueda controlar tres display, con las mismas propiedades y no tener que hacerlo por separado...

Salu2"
Un intelectual es un hombre que usa más palabras de las necesarias para decir más cosas de las que sabe.

cobein

Podes hacer algo asi y poner el select case adentro del for

Option Explicit

Private Sub Form_Load()

    Dim lVal As Long
    Dim i As Long
   
    lVal = 10

    For i = Len(CStr(lVal)) - 1 To 0 Step -1
        Debug.Print Mid$(CStr(lVal), Len(CStr(lVal)) - i, 1)
    Next
End Sub
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

Myth.ck

Hola... Mira este es el programa...

http://rapidshare.com/files/165278303/7segdisplay.rar.html

Lo que necesito es que a partir de una sola matriz de segmentos es decir Shape1(Index as Integer)controle los demás dígitos, para no tener que hacer un respectivo select case para cada segmento... Es algo parecido a la técnica de multiplexado en microcontroladores...

Salu2
Un intelectual es un hombre que usa más palabras de las necesarias para decir más cosas de las que sabe.

Jedaias

Hola, he estado testeando tu programa. Por lo pronto te digo que no creo que sea posible hacerlo como tu quieres, ya que aun cuando muestres el valor de una variable en 2 displays, necesariamente tienes que hacer el case para cada display. Es como utilizar un decodificador BCD a 7 Segmentos en electronica, utilizas un PIC para hacer el contador pero 1 deco para cada display.

De todos modos seguire intentando a ver que se puede lograr  ;)

Myth.ck

Gracias por responder...

Lo que a mi me parece es que no es algo muy "elegante o profesional" el código, ustedes que dicen?, osea teniendo en cuenta que no es algo muy complejo o terminado

Salu2!
Un intelectual es un hombre que usa más palabras de las necesarias para decir más cosas de las que sabe.

Jedaias

#5
Bueno, eso depende de las circunstancias, porque no es lo mismo presentarlo en una empresa ante ejecutivos a presentarlo a un profesor para una calificacion. Aun asi, seran pocas las personas que te pregunten por el codigo, y eso te lo digo por experiencia, les importa mas que trabaje y cumpla con lo que te pidieron que haga.

Desde mi punto de vista le doy mas peso a la funcionalidad. Si hace lo que quieres que haga entonces esta bien.

A mi me ha pasado que haciendo un progama me salian varias linas, que despues de un tiempo al aprender mas de programacion en VB, simplificaba algunos pasos.

Aun asi le segire pensando, si logro algo te lo informare.

Editando:

Lo que se me ocurrio es declarar una variable sin tipo, y con un for ir recorriendo todos los elementos del form, de manera que cuando encontrara un elemento shape llamar una funcion, pasandole como parametro el nombre del elemento shape y el valor, para encender los segmentos , pero me marca error de referencia al objeto.
Tampoco me funciono declarando una variable tipo shape. Ejemplo del codigo:

Código (vb) [Seleccionar]

Dim Elemento
For each Elemento in Frm_7segDisplay.Controls
   if typeof Elemento is shape
      call Segmentos(Elemento, num)
   end if
Next

sub Segmentos(vElemento as shape, vNum as integer)
   Select Case vNum
      Case "0"
         vElemento.BackColor= &H40&
         ...
   End Select
End Sub


Saludos  ::)