Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Myth.ck en 17 Noviembre 2008, 16:34 pm



Título: Eléctronica - Display7seg
Publicado por: Myth.ck en 17 Noviembre 2008, 16:34 pm
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"


Título: Re: Eléctronica - Display7seg
Publicado por: cobein en 17 Noviembre 2008, 22:54 pm
Podes hacer algo asi y poner el select case adentro del for

Código:
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


Título: Re: Eléctronica - Display7seg
Publicado por: Myth.ck en 19 Noviembre 2008, 12:04 pm
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


Título: Re: Eléctronica - Display7seg
Publicado por: Jedaias en 21 Noviembre 2008, 18:17 pm
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  ;)


Título: Re: Eléctronica - Display7seg
Publicado por: Myth.ck en 21 Noviembre 2008, 19:03 pm
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!


Título: Re: Eléctronica - Display7seg
Publicado por: Jedaias en 21 Noviembre 2008, 19:34 pm
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
  1. Dim Elemento
  2. For each Elemento in Frm_7segDisplay.Controls
  3.   if typeof Elemento is shape
  4.      call Segmentos(Elemento, num)
  5.   end if
  6. Next
  7.  
  8. sub Segmentos(vElemento as shape, vNum as integer)
  9.   Select Case vNum
  10.      Case "0"
  11.         vElemento.BackColor= &H40&
  12.         ...
  13.   End Select
  14. End Sub
  15.  

Saludos  ::)