Hola , prueba esto...
Device = 16F877 'Usamos el pic16f877a
Xtal = 4 'Con un cristal de 4 mhz
'Definimos la conexión del lcd
LCD_DTPin = PORTB.4
LCD_RSPin = PORTB.0
LCD_ENPin = PORTB.1
LCD_Interface = 4 'Interface de 4 bit
LCD_Lines = 2
LCD_Type = 0
'Definimos parámetros del A/D/C
Adin_Res = 10 'Resolución de 10 bits
Adin_Tad = frc 'RC osc
Adin_Stime = 50 'Tiempo de muestreo de 50us
PORTB_PULLUPS = ON ' Enable PORTB pull-ups
'Declaramos variables
dim Btnvar as byte ' Pulsadores
Dim Estado As Byte 'Variable para controlar menús
Dim Dato As Word 'Variable para almacenar el resultado
Dim Dato2 As Word
Dim Completos As Byte 'Caracteres completos a la izquierda de la barra
Dim Completos2 As Byte
Dim Muestra As Byte 'Resultado para mostrar en la barra
Dim Muestra2 As Byte
Dim Parcial As Byte 'ASCII code para los caracteres en la barra parcial
Dim Parcial2 As Byte
Dim Pad As Byte 'Número de espacios vacios a la derecha de la barra
Dim Pad2 As Byte
Dim Graves As Byte
Symbol SW1 = PORTb.4 ' Interruptor Set
'Conectamos la entrada analógica a porta.0 (RA0)
TRISB.4 = 1 'RB2 como entrada
TRISD.0 = 1
TRISD.1 = 1
TRISE = %11111111 'Todo el puerto es entrada
ADCON1 = %10000010 'Seteo el puerto Analogico
DelayMS 500 'Espero medio segundo
'Cargamos los caracteres especiales en la CGRAM del lcd
'El blanco a $0 hace que la gráfica trabaje más rápidamente
Print $FE,64,Rep $0\8 'Cargo un caracter vacío
Print $0,Rep $10\6,$0 'Cargo el caracter I
Print $0,Rep $14\6,$0 'Cargo el caracter II
Print $0,Rep $15\6,$0 'Cargo el caracter III
Cls 'Limpio el display
'Inicializamos las variables
Estado = 1
Graves = 30
Lazo: 'Comienza el lazo de funcionamiento
button sw1,0,255,250,Btnvar,0,Estados
delayms 200:estado = estado + 1
' If PORTB.4 = 0 Then
' Estado = Estado + 1
If Estado > 2 Then
Estado = 1
End If
' End If
Estados:
Select Estado
Case 1
'Cls 'Limpio el display
Dato = ADIn 6 'Leemos la entrada PORTE.1 y PORTE.2
Dato2 = ADIn 7
Dato = (Dato */ 500) >> 2 'Es lo mismo que (Dato * 500)/1024
Dato2 = (Dato2 */ 500) >> 2
Muestra = (Dato / 10.
+ 1 'Escala de 0-500 para 48(16*3) segmentos de la barra
Muestra2 = (Dato2 / 10.
+ 1
GoSub Barra 'Actualizamos la barra
GoTo Lazo 'Cerramos el lazo
Case 2
'Cls 'Limpio el display
If PORTD.0 = 1 Then
Graves = Graves + 1
If Graves > 59 Then
Graves = 59
Print At 1, 1, " Graves Max"
DelayMS 1000
End If
DelayMS 20
End If
If PORTD.1 = 1 Then
Graves = Graves - 1
If Graves < 0 Then
Graves = 0
Print At 1, 1, " Graves Min"
DelayMS 1000
End If
DelayMS 20
End If
'1234567890123456
Print At 1, 1, " Graves ", Dec2 Graves, " "
Muestra = (Graves / 1.26) 'Escala de 0-500 para 48(16*3) segmentos de la barra
GoSub Barra2 'Actualizamos la barra
GoTo Lazo 'Cerramos el lazo
End Select
Barra:
Completos = (Muestra Min 44) / 3 'Calculamos el número de caracteres completos (III)
Completos2 = (Muestra2 Min 44) / 3
Parcial = (Muestra Min 44) // 3 'Calculamos el ASCII code para los caracteres parciales
Parcial2 = (Muestra2 Min 44) // 3
Pad = 14 - Completos 'Número de espacios para mostrar (ancho)
Pad2 = 14 - Completos2
Print At 1,1, Rep $03\Completos, Parcial, Rep " "\Pad, "L" 'Mostrar la barra en la segunda línea
Print At 2,1, Rep $03\Completos2, Parcial2, Rep " "\Pad2, "R"
Return 'Regreso a donde salí
Barra2:
Completos = (Muestra Min 48) / 3 'Calculamos el número de caracteres completos (III)
Parcial = (Muestra Min 48) // 3 'Calculamos el ASCII code para los caracteres parciales
Pad = 15 - Completos 'Número de espacios para mostrar (ancho)
Print At 2,1, Rep $03\Completos, Parcial, Rep " "\Pad 'Mostrar la barra en la segunda línea
Return 'Regreso a donde salí