Autor Tema: ayuda con contador con displey de 7 seg y multiplexacion  (Leído 4731 veces)

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

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: ayuda con contador con displey de 7 seg y multiplexacion
« Respuesta #15 en: 13 de Febrero de 2013, 20:58:03 »
Cuando se define una función que retorna valor, se definen dos parametros fundamentales en su cabecera a saber:

El nombre de la función que también es una variable global.
Los argumentos de entrada, que son variables locales que se declaran entre los paréntesis que siguen al nombre de la función, en este lenguaje permite hasta cinco.

Por ejemplo:

'Función calcula cuadrado de un número:

Function x_sqr (_x as Word) as Word
   x_sqr = _x * _x
End Function

Por lo tanto se ha declarado una función que calcula el cuadrado de un número de longitud Word (16bit -> maximo 65535).
La función se llama x_sqr y devuelve el valor del cuadrado en la variable global x_sqr.
Esta función tiene un único argumento de entrada, llegándole el valor mediante una copia a través de la variable local _x de tipo Word.

Cuando la función es llamada mediante por ejemplo:

Dim cuadrado as Word
Dim numero as word

numero = 10
cuadrado = x_sqr (numero), el compilador hace internamente _x = numero para pasar el argumento a la función.

Devuelve x_sqr = 100 (10x10)

Otro ejemplo:

'Función calcula cuadrado de un numero y antes de volver de la fucnión hace una pausa:

Function x_sqr (_x as Word, _pause as Byte) as Word
   x_sqr = _x * _x
   Waitms _pause
End Function

Por lo tanto se ha declarado una función que calcula el cuadrado de un número de longitud Word (16bit -> maximo 65535) y luego hace una pausa.
La función se llama x_sqr y devuelve el valor del cuadrado en la variable global x_sqr.
Esta función tiene DOS argumentos de entrada, llegándole los valores mediante una copia a través de la variable local _x de tipo Word, para calcular el cuadrado y,
para hacer la pausa el valor le llega mediante una copia en la variable local _pause de tipo Byte.


Cuando la función es llamada mediante por ejemplo:

Dim cuadrado as Word
Dim numero as word

numero = 10
cuadrado = x_sqr (numero, 100), el compilador hace internamente _x = numero y _pause = 100, para pasar los argumentos a la función por riguroso orden de declaración.

Devuelve x_sqr = 100 (10x10)
Hace Waitms 100

En este otro caso para la misma función anterior:

Dim cuadrado as Word
Dim numero as word

numero = 10
cuadrado = x_sqr (100, numero), el compilador hace internamente _x = 100 y _pause = numero, para pasar los argumentos a la función por riguroso orden de declaración.

Devuelve 10000 (100x100)
Hace Waitms 10
« Última modificación: 13 de Febrero de 2013, 21:22:16 por dogflu66 »
Saludos desde Granada, España.

Desconectado RockLee_89

  • PIC16
  • ***
  • Mensajes: 140
Re: ayuda con contador con displey de 7 seg y multiplexacion
« Respuesta #16 en: 15 de Febrero de 2013, 13:29:42 »
Hola amigo dogflu66 creo que por fin le agarre la pata al estos ejemplos, no se como nunca me di cuenta, solo espero que me confirmes si estoy en lo correcto o sigo asiéndome menso y no le entiendo Por mas que le busco.
saludos    :P :P :-/ :-/ :P

Código: [Seleccionar]

uni=10
digito = _nmrbcd (uni,0 )  '''' lo que dice es ir ala funcion y pasar el valor de uni a _numero y 0 a _digito esto en unidades
portc = _nmr7seg (digito)

function  _nmrbcd (_nuero as word, _digito as byte) as long ''' _numero =10, _digito a 0
dim _nn as byte
for _nn=1 to _digito   '''' al ser _digito =0 salta el siclo for
_numero = _numero / 10
next _nn
_nmrbcd = _numero mod 10  '''' y ejecuta la sentencia mod sacando como resutado 0 que es el de la unidad
end function

function _nmr7seg (_numero as byte) as byte   ''''' cargar el valor de digito que es 0
_nmr7seg = lookup ( 0x3f, 0x06, 0x05........ ), _numero   ''''''' y saca el 1 valor de la tabla lookup y lo muestra en displey
end function


y en decenas es lo mismo
uni=10
digito = _nmrbcd (uni, 1)
portc = _nmr7seg (digito)

function  _nmrbcd (_nuero as word, _digito as byte) as long ''' _numero =10, _digito a 1
dim _nn as byte
for _nn=1 to _digito   ''''  entra al siclo for 1 vez al ser =1
_numero = _numero / 10  ''''' _numero =1
next _nn
_nmrbcd = _numero mod 10  '''' y ejecuta la sentencia mod sacando como resutado 0 que es el de la decenas
end function

function _nmr7seg (_numero as byte) as byte   ''''' cargar el valor de digito que es 1
_nmr7seg = lookup ( 0x3f, 0x06, 0x05........ ), _numero   ''''''' y saca el 2 valor de la tabla lookup y lo muestra en displey
end function





« Última modificación: 15 de Febrero de 2013, 13:48:29 por RockLee_89 »

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: ayuda con contador con displey de 7 seg y multiplexacion
« Respuesta #17 en: 15 de Febrero de 2013, 16:01:31 »
Totalmente correcto. :P
Saludos desde Granada, España.

Desconectado RockLee_89

  • PIC16
  • ***
  • Mensajes: 140
Re: ayuda con contador con displey de 7 seg y multiplexacion
« Respuesta #18 en: 15 de Febrero de 2013, 16:47:03 »
yupi gracias amigo dogflu66 por hecharme la mano con este ejemplo y aun mas por aguantarme tantas tonterias e insistencia mias

saludos