aver si me sale bien el pasar el codigo..
Código: vueltas var word
serial var byte ' defive bit para enviar serial
hbit var serial.bit0 ' se usa pava invertir un caracter verticalmente
lbit var serial.bit7
estado Var byte '
newdigito var estado.bit0
autoincli var estado.bit1
fijarletre var estado.bit2
temp1 var byte
temp2 var byte
temp3 var byte
reten var byte
'
' variables control infrarrojo
contador var word
pulso var byte
boton var byte
casilla var byte
codigo var byte [6]
'
' variables control barridos led
CLKcolumna var byte
compensa var byte
columna var byte
sector var byte
'
' variables dedicadas al letrero
mcaracter var byte
caracter var byte ' asc 256
digitot var byte [5]
digito var byte [5]
caracters var byte [32] ' la cantidad de caracteres maximo a mostrar
funciones var byte [32] ' 2 led, 3bit memoria y 3bit inferiores controla RGB
vertical var funciones.bit3 ' invierte el barido del digito para la vertical
horizontal var funciones.bit4 ' invierte los bytes para la orizontal
invertir var funciones.bit5 ' memoria para invertir el byte del digito
'
'
status=%00000000
option_reg=%00000101 ' configuracion de interruciones primarias
intcon=%00000000 ' configuracion de estatado de interrucciones primarias
pie1=%00000000 ' configuracion de interruciobes perineales
pir1=%00000000 ' estado de las interrucciones perineales
pcon=%00000000 ' configuracion del encendido
eecon1=%10000000 ' configuracion de etado de la eepron
osctune=%00001100 ' configuracion calibrado fino del oscilador
osccon=%01110001 ' configuracion del oscilador
t1con=%00110100 ' conpiguracion temporizador 1, TMR1
t2con=%00011000 ' configuracion temporizador 2, TMR2
cmcon1=%00000000 ' configuracion del comparador por TMR1
ccp1con=%00000000 ' configuracion del registro de control ccp1
cmcon0=%00000011 ' configuracion del comparador operacional
vrcon=%10001111 ' configuracion del voltage de referencia del comparador
adcon0=%10000000 ' configuracion de las entradas analogicas
ansel=%00010000 ' ajuste de las entradas analogicas
'
'eedat=0 ' bariable que lertura o guardado de la eepron
'eeadr=0 ' direccion donde se almacena en la eepron maximo 255
'
' definicion de puerto gpio
'
gpio=%001110 ' define los bit del puerto
trisio=%001110 ' define los bit del puerto entrada o salida
wpu=%000000 ' define los pull up del puerto
ioc=%000000 ' define como marca de interruccion los bit del puerto
'
' carga las variables iniciales
'
clear
estado=%00000001
mcaracter=0
CLKcolumna=100
for casilla=0 to 31
temp1=casilla+170
temp2=casilla+206
read temp1,caracters[casilla]
read temp2,funciones[casilla]
next casilla
read 130,estado
'
tmr0=80
'
ON INTERRUPT GOTO interrucciones
intcon=%11000000
'
'
'
' programa principal
'
programa:
'if gpio.3=0 then gosub infrarrojos
'if boton>0 then gosub tecla
if newdigito=1 then gosub leer_digito
goto programa
'
' carca el digito
'
leer_digito:
select case caracter
' de la eepron
case is >14
temp2=caracters[caracter]-15 ' se ajusta el desplazamiento de caracter
temp2=temp2*5
for temp1=0 to 4 ' carga el caracter de la eepron
temp3=temp2+temp1
read temp3,digitot[temp1]
if gpio.3=0 then return
next temp1
case 0
' 0
DISABLE INTERRUPT ' desavilito interruciones (ahorra codigo)
digitot[0]=%00111110
digitot[1]=%01010001
digitot[2]=%01001001
digitot[3]=%01000101
digitot[4]=%00111110
ENABLE INTERRUPT ' avilito interruciones lo mismo para el resto caracteres
case 1
' 1
DISABLE INTERRUPT
digitot[0]=%00000000
digitot[1]=%01000010
digitot[2]=%01111111
digitot[3]=%01000000
digitot[4]=%00000000
ENABLE INTERRUPT
case 2
' 2
DISABLE INTERRUPT
digitot[0]=%01000010
digitot[1]=%01100001
digitot[2]=%01010001
digitot[3]=%01001001
digitot[4]=%01000110
ENABLE INTERRUPT
case 3
' 3
DISABLE INTERRUPT
digitot[0]=%00100001
digitot[1]=%01000001
digitot[2]=%01000101
digitot[3]=%01001011
digitot[4]=%00110001
ENABLE INTERRUPT
case 4
' 4
DISABLE INTERRUPT
digitot[0]=%00011000
digitot[1]=%00010100
digitot[2]=%00010010
digitot[3]=%01111111
digitot[4]=%00010000
ENABLE INTERRUPT
case 5
' 5
DISABLE INTERRUPT
digitot[0]=%00100111
digitot[1]=%01000101
digitot[2]=%01000101
digitot[3]=%01000101
digitot[4]=%00111001
ENABLE INTERRUPT
case 6
' 6
DISABLE INTERRUPT
digitot[0]=%00111100
digitot[1]=%01001010
digitot[2]=%01001001
digitot[3]=%01001001
digitot[4]=%00110000
ENABLE INTERRUPT
case 7
' 7
DISABLE INTERRUPT
digitot[0]=%00000001
digitot[1]=%00000001
digitot[2]=%01110001
digitot[3]=%00001101
digitot[4]=%00000011
ENABLE INTERRUPT
case 8
' 8
DISABLE INTERRUPT
digitot[0]=%00110110
digitot[1]=%01001001
digitot[2]=%01001001
digitot[3]=%01001001
digitot[4]=%00110110
ENABLE INTERRUPT
case 9
' 9
DISABLE INTERRUPT
digitot[0]=%00000110
digitot[1]=%01001001
digitot[2]=%01001001
digitot[3]=%00101001
digitot[4]=%00011110
ENABLE INTERRUPT
case 10
' .
DISABLE INTERRUPT
digitot[0]=%00000000
digitot[1]=%01100000
digitot[2]=%01100000
digitot[3]=%00000000
digitot[4]=%00000000
ENABLE INTERRUPT
case 11
' :
DISABLE INTERRUPT
digitot[0]=%00000000
digitot[1]=%00110110
digitot[2]=%00110110
digitot[3]=%00000000
digitot[4]=%00000000
ENABLE INTERRUPT
case 11
' /
DISABLE INTERRUPT
digitot[0]=%01100000
digitot[1]=%00110000
digitot[2]=%00011000
digitot[3]=%00001100
digitot[4]=%00000110
ENABLE INTERRUPT
case 12
' .
DISABLE INTERRUPT
digitot[0]=%00000000
digitot[1]=%00011100
digitot[2]=%00100010
digitot[3]=%01000001
digitot[4]=%00000000
ENABLE INTERRUPT
case 13
' .
DISABLE INTERRUPT
digitot[0]=%00000000
digitot[1]=%00000000
digitot[2]=%11111111
digitot[3]=%00000000
digitot[4]=%00000000
ENABLE INTERRUPT
case 14
' .
DISABLE INTERRUPT
digitot[0]=%00000000
digitot[1]=%00000000
digitot[2]=%00000000
digitot[3]=%00000000
digitot[4]=%00000000
ENABLE INTERRUPT
end select
'
'if ajusverti=1 then
' if caracter>12 then
' orizontal=1
' else
' orizontal=0
' endif
'endif
'
if horizontal=1 then ' ajusta la direccion que muestra el caracter horizontal
SWAP digitot[0],digitot[4]
swap digitot[1],digitot[3]
endif
'
if invertir=1 then ' invierte los bit del digito
digitot[0]=255-digitot[0]
digitot[1]=255-digitot[1]
digitot[2]=255-digitot[2]
digitot[3]=255-digitot[3]
digitot[4]=255-digitot[4]
endif
newdigito=0
return
'
'
' control de interrucciones
'
'
DISABLE
interrucciones:
'
' interruccion comparador (sensor magnetico)
'
if caracter>2 then
pie1.3=1 ' si a pasado dos digitos actiba la interrucion del iman
if pir1.3=1 then ' detecta el iman y ajusta
pie1.3=0 ' se apaga, evita el tiempo que pasa el iman)
if sector>153 then ' ajusto el interbalo de los sectores
clkcolumna=clkcolumna-3 ' aumento e tiempo para desbordar tmr0
else
clkcolumna=clkcolumna+1 ' disminullo el desbordaiento tmr0
endif
if fijarletre=1 then ' inicia el texto al detectar el iman
columna=0
sector=0
newdigito=1
endif
goto salto
endif
endif
'
' interruccion tmr0 (barrido led)
' envia el byte via serial al 74hc595
'
if intcon.2=1 then
tmr0=clkcolumna ' paso el intervalo de columnas para interruccion tmr0
intcon.2=0
if sector<210 then sector=sector+1 ' cuenta y limita los sectores
'
' contador de columna y carga digito
select case columna
case 5 ' espacio entre digitos
columna=6
digito[columna]=%11111111 ' apaga los led
caracter=caracter+1 '
' if fijarletre=1 then columna=5 ' evita que inicie el letrero
if caracter>32 then caracter=0 ' inicia el letrero
' compara sectores y caracteres opcion rodar, fija, o dormir
'
case 6
columna=0
newdigito=1 ' marca para acrgar un nuevo digito
digito[0]=digitot[0]
digito[1]=digitot[1] ' paso digito de bufer a digito mostrar
digito[2]=digitot[2]
digito[3]=digitot[3]
digito[4]=digitot[4]
case else ' incrementa 1 columna
columna=columna+1
end select
'
' carga la columna del caracter y alineamiento vertical al hc595
serial=digito[columna]
gpio.4=0 ' prepara la carga clkce
for temp3=0 to 7
gpio.0=0 ' clk
if vertical=0 then ' para invertir el texto verticalmente
gpio.5=hbit ' incorpora bit serial, data out
serial=serial<<1 'desplado byte para ingresar el siguiente bit
else
gpio.5=Lbit '
serial=serial>>1
endif
gpio.0=1 ' clk
next temp3
' carga seleccion de color y 2 led estra
serial=funciones[caracter]
for temp3=0 to 7
gpio.0=0 ' clk
gpio.5=hbit ' incorpora dato serial
serial=serial<<1 ' desplado byte para ingresar el siguiente bit
gpio.0=1 ' clk carga el bit en la matric serial
next temp3
gpio.4=1 ' carga el byte a la matric 16bit serial
endif
return
salto:
resume
enable
'
' datos de la eepron
'
data @0 ' 0
' A , 1
data %01111100
data %00010010
data %00010001
data %00010010
data %01111100
' B , 2
data %01111111
data %01001001
data %01001001
data %01001001
data %00110110
' C , 3
data %00111110
data %01000001
data %01000001
data %01000001
data %00100010
' D , 4
data %01111111
data %01000001
data %01000001
data %00100010
data %00011100
' E , 5
data %01111111
data %01001001
data %01001001
data %01001001
data %01000001
' F , 6
data %01111111
data %00001001
data %00001001
data %00001001
data %00000001
' G , 7
data %00111110
data %01000001
data %01001001
data %01001001
data %00111010
' H , 8
data %01111111
data %00001000
data %00001000
data %00001000
data %01111111
' I , 9
data %00000000
data %01000001
data %01111111
data %01000001
data %00000000
' J , 10
data %00000000
data %00100000
data %01000001
data %00111111
data %00000001
' K , 11
data %01000001
data %00100010
data %00010100
data %00001000
data %01111111
' L , 12
data %00000000
data %01000000
data %01000000
data %01000000
data %01111111
' M , 13
data %01111111
data %00000010
data %00001100
data %00000010
data %01111111
' N , 14
data %01111111
data %00000100
data %00001000
data %00010000
data %01111111
' Ñ , 15
data %01111100
data %00001001
data %00010001
data %00100001
data %01111100
' O , 16
data %00111110
data %01000001
data %01000001
data %01000001
data %00111110
' P , 17
data %01111111
data %00001001
data %00001001
data %00001001
data %00000110
' Q , 18
data %00111110
data %01000001
data %01010001
data %00100001
data %01011110
' R , 19
data %01111111
data %00001001
data %00011001
data %00101001
data %01000110
' S , 20
data %00100110
data %01001001
data %01001001
data %01001001
data %00110010
' T , 21
data %00000001
data %00000001
data %01111111
data %00000001
data %00000001
' U , 22
data %00111111
data %01000000
data %01000000
data %01000000
data %00111111
' V , 23
data %00011111
data %00100000
data %01000000
data %00100000
data %00011111
' W , 24
data %00111111
data %01000000
data %00111000
data %01000000
data %00111111
' X , 25
data %01100011
data %00010100
data %00001000
data %00010100
data %01100011
' Y , 24
data %00000011
data %00000100
data %01111000
data %00000100
data %00000011
' Z , 25
data %01100001
data %01010001
data %01001001
data %01000101
data %01000011
' Ü , 26
data %00111101
data %01000000
data %01000000
data %01000001
data %00111100
' . , 27
data %00000000
data %00110000
data %00110000
data %00000000
data %00000000
' @ , 28
data %00111110
data %01000001
data %01011101
data %01010101
data %00011110
' , 29
data %00100011
data %00010011
data %00001000
data %11000010
data %11000001
' , 30
data %00000100
data %00000010
data %01111111
data %00000010
data %00000100
' , 31
data %00100000
data %01000110
data %01010000
data %01000110
data %00100000
' , 32
data %00001110
data %00111111
data %01111110
data %00111111
data %00001110
'
' caracteres del letrero
'
data @170
data 14,0,1,2,3,4,5,6
data 7,8,9,14,14,13,13,13
data 13,13,14,17,18,19,22,23
data 24,43,29,32,32,30,40,41
'
' caracteres del letrero
'
data @206
data 41,41,41,41,41,41,41,41
data 44,44,44,44,44,44,44,44
data 43,43,43,43,43,43,43,43
data 133,133,133,133,133,133,133,133
este programa todavia no esta provado aunque otro otro un poco mas cutre si y funcionaba bien..... con muchas comillas y pocas posivilidades (aparte de comer mucho codigo) este en parte de las interrucciones se puede mejorar mucho que lo miro y me parece bastante cutre y mejorable. aver como voy adelantando el proyecto..
La verdad, como no hace una pequeña ventana dentro del cuadro de texto. madre lo que ocupa todo por la sarta caracteres a definir y todafia falta mucho que hacer. compilado compilada esta parte con 851 lineas de codigo para el pic si se mejora y cimplifica la parte de interruciones seguro seran unos 40-70 procesos menos.
El programa esta escrito para micro studio picbasic
Proseguire subiendo un video y fallas cuando lo prueve. (seguro necestara arreglos) pongamos que esto solo seria el motor para mostrar los caracteres.
y espero por alguna vez en la vida despues de 12 años en foros de electronica tener una critica constructiva no quedar envoliados y alo mucho ver casi un corta y pega de partes de mi codigo y replanteo por otro lado.
un saludo |