proyecto para interesados
pues bindo como esta el temarios en este campo y que muchos estais con el microcode pic basic o similares voy a postear un programa que me curre ace un tiempo de un cronometro cuentra atras.
si quereis montarlo seguro que tendreis que adactar algunas osillas segun sea la display (aun asi esta todo indicado. saviendo un poco e programar el pic casi que poreis daros cuenta como aceros el circuitp y bueno biendo que ya pille como se mete el codigo en una ventana sin que machaque las tabulaciones (alludan mucho para leer el codigo la verad) el programa no es una marabilla pero es mio y me mola. lol [CODE]define osc (4) tiempo var word mseg var word memo var byte b0 var memo.0 b1 var memo.1 b2 var memo.2 b3 var memo.3 incodigo var byte b7 var incodigo.0 codigo var byte contador var byte cont var byte minuto var byte tem1 var byte tem2 var byte tem3 var byte display var byte [14] digitos var byte [6] clear intcon = %00000000 ON INTERRUPT GOTO relog trisa=16 trisb=0 porta=0 portb=255 display [0]=%00000010 ' 0 display [1]=%11110010 ' 1 display [2]=%00100100 ' 2 display [3]=%01100000 ' 3 display [4]=%11010000 ' 4 display [5]=%01001000 ' 5 display [6]=%00001000 ' 6 display [7]=%11100000 ' 7 display [8]=%00000000 ' 8 display [9]=%11000000 ' 9 display [10]=%11111110 ' display [11]=%00000010 ' - display [12]=%10111000 ' n display [13]=%10000000 ' A display [14]=%10010000 ' H ' ' 4 ' +++++ ' 5 + + 3 ' + 1 + ' +++++ ' 6 + + 2 ' + + ' +++++ ' 7 ' iniciar: option_reg = %10000111 low porta.0 tiempo=9000 memo=0 ' ' establece el tiempo cuenta atras y activacion ' programa: gosub descomponer gosub mostrar high porta.2 if porta.2=0 and b1=0 and tiempo>3000 then tiempo=tiempo-3000:b1=1 if porta.2=1 then b1=0 codigo=codigo+1 if codigo=32 then codigo=0 low porta.2: low porta.3 if porta.2=1 and b2=0 and tiempo<54000 then tiempo=tiempo+3000:b2=1 if porta.2=0 then b2=0 if porta.3=0 then goto programa ' ' activacion cuenta atras ' incodigo=codigo gosub descomponercod incodigo=0 for tem3=0 to 30 low porta.3 gosub mostrar if porta.3=0 then programa next tem3 pause 250 while porta.3=1 GOSUB mostrar low porta.3 wend intcon = %10100000 tmr0=60 ' ' entra en la cuenta atras ' cuentatras: while porta.0=0 if b3=1 then gosub descomponer ' descomponemos el tiempo al reducirse gosub mostrar if porta.4=0 then high porta.0 ' fallo pulso y activacion low porta.2 if porta.2=1 then introcucir_cod ' introducir codigo high porta.2:high porta.3 if porta.2=0 then introcucir_cod ' introducir codigo if porta.3=0 and b0=0 then ' muestra codigo una vez un tiempo incodigo=codigo gosub descomponercod incodigo=0 b0=1 for tem3=0 to 19 gosub mostrar pauseus 50 next tem3 endif wend ' fin intcon=0 gosub descomponer for contador=0 to 200 gosub mostrar pause 10 next contador goto iniciar ' ' canvia la pantalla para introducir el codigo ' introcucir_cod: contador=40 b7=porta.2 b1=1 b2=1 repeat ' se mantiene un tiempo en la pantalla desactivacion high porta.2 if porta.2=0 and b2=0 then b2=1 incodigo=incodigo<<1 b7=0 contador=40 endif if porta.2=1 then b2=0 low porta.2:low porta.3 if porta.2=1 and b1=0 then b1=1 incodigo=incodigo<<1 b7=1 contador=40 endif if porta.2=0 then b1=0 gosub descomponercod gosub mostrar if porta.3=1 then incodigo=incodigo<<3 incodigo=incodigo>>3 if incodigo=codigo then intcon = %00000000 pause 2000 goto iniciar endif option_reg= option_reg-2 contador=1 endif if option_reg=129 then high porta.0 intcon=0 incodigo=0 contador=1 endif contador=contador-1 until contador=0 incodigo=0 goto cuentatras ' ' descomponer los caracteres minutos y milisegundos ' descomponer: minuto=TIEMPO/600 MSEG=TIEMPO-(minuto*600) digitos[0]=mseg//10 mseg=mseg/10 digitos[1]=mseg//10 digitos[2]=mseg/10 digitos[3]=minuto//10 digitos[4]=minuto/10 digitos[5]=%00000110 return ' ' descomponer el codigo aleatorio ' descomponercod: tem3=incodigo for tem1=0 to 4 digitos[tem1]=b7 incodigo=incodigo>>1 next tem1 digitos[5]=%00001000 incodigo=tem3 return ' ' ´mostrar caracteres en la pantalla display ' mostrar: for tem1=0 to 50 for tem2=0 to 5 pauseus 5 high porta.1 portb=display[digitos[tem2]] pauseus 120 portb=display[10] low porta.1 next tem2 low porta.1 portb=255 next tem1 return ' ' interruccion timer decenas milisegundos ' DISABLE relog: tmr0=60 cont=cont+1 if cont=2 then cont=0 tiempo=tiempo-1 b3=1 endif if tiempo=0 then high porta.0 intcon = %00000000 endif intcon.2=0 RESUME ENABLE [/CODE] [youtube]MWF8ys2GJvo[/youtube]list=UUnXOv8AwhsVEdkU1k4DL5bA&index=15 pongamos que esta sria una practica con un circuito de esperimentos que me curr ace un tiempo (mucho jugo le saque y sigo sacando a ese cacharro) un saludo ala comunidad |
y bueno mi ueva insoladora. el reloj de descuento es casi que lo mismo de ese programa modificando pocacosa.
list=UUnXOv8AwhsVEdkU1k4DL5bA&index=14 |
La franja horaria es GMT +2. Ahora son las 03:38. |
Powered por vBulletin™ Version 3.8.10
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.
Traducido por vBsoporte - vBulletin en español
ZackYFileS - Foros de Debate