Te deseo mucha suerte, hacer una bascula no es nada facil, tienes que determinar la sensibilidad con la que va ha trabajar tu bascula ej: 10 Kg, que es lo que generalmnte trabaja una bascula camionera.
Yo trabaje mas o menos 5 años con equipos de pesaje y lo mejor es que compres un indicador de peso y se lo adecues a la celda, intente hacer el medidor, pero es muy inestable o queda con muy poca resolucion.
sin embargo aqui pongo el codigo para el lcd. no lo pude adjuntar no se como es asi que lo pego.
LIST p=16F873A ; Se emplea el PIC 16F873A
;-------------------------------- ETIQUETAS DEL PROGRAMA
INCLUDE P16F873A.INC ; Etiquetas genericas para los PIC 16f873A
RESUL EQU 0x20
TEMPO1 EQU 0x21
OFFSET EQU 0x22
LCD_VAR EQU 0x23
CONTADOR EQU 0X24
;-------------------------------- PROGRAMA PRINCIPAL
ORG 0 ; El programa comienza en la direcci¢n 0 y salta a la
goto INICIO ; direcci¢n 5 para sobrepasar el vector de interrupci¢n
ORG 5
INCLUDE lcd_cxx.ASM
INICIO
BSF STATUS,RP0
MOVLW 0X06
MOVWF ADCON1
BCF STATUS,RP0
call UP_LCD ; Configura el PIC para el uso del LCD
bsf STATUS,RP0 ; Selecci¢n del banco 1
movlw b'10000111'
movwf OPTION_REG ;Asigna preescaler al TMR0
bcf STATUS,RP0
call LCD_INI ;Inicializa el LCD
INICIO_1 call BORRA_Y_HOME
call DISPLAY_ON_CUR_OFF
movlw 0x80 ; Primera posici¢n de primera fila
call LCD_REG
movlw b'00000110' ; Entry Mode Set. Inc de cursor
call LCD_REG
clrf OFFSET ; Direcci¢n del mensaje
call MENS
call DISPLAY_ON_CUR_OFF
movlw 0xC0 ; Primera posici¢n de SEGUNDA fila
call LCD_REG
clrf OFFSET ; Direcci¢n del mensaje
CALL MENS1
BUCLE goto BUCLE ; El programa acaba en un bucle infinito
;RUTINA MENS: Esta rutina saca mensajes por la pantalla LCD,
;siendo el primer caracter aquel que esta en la posici¢n apuntada
;por OFFSET, y debiendo ser el ultimo 0x00
MENS clrf RESUL ;Inicializa contador de caracteres
MENS_1 movf OFFSET,W ;Coge el desplazamiento
addwf RESUL,W ;Calcula el caracter a coger
call DATOS ;Coge el caracter
iorlw 0 ;Actualiza flags
btfsc STATUS,2 ;Comprueba si es el £ltimo
return ;Si es el £ltimo vuelve
call LCD_DATO ;Visualiza el caracter
incf RESUL,F ;Incrementa contador de caracteres
movlw d'10'
movwf TEMPO1
goto MENS_1
;TABLA CON LOS DATOS A SACAR POR EL LCD
DATOS addwf PCL,1
retlw 'R' ; OFFSET = 0x00
retlw 'P'
retlw 'M'
retlw ':'
retlw ' '
retlw ' '
retlw ' '
retlw ' '
retlw 'T'
retlw 'E'
retlw 'M'
retlw ':'
retlw ' '
retlw ' '
retlw ' '
retlw ' '
retlw 0x00
MENS1 clrf RESUL ;Inicializa contador de caracteres
MENS_11 movf OFFSET,W ;Coge el desplazamiento
addwf RESUL,W ;Calcula el caracter a coger
call DATOS2 ;Coge el caracter
iorlw 0 ;Actualiza flags
btfsc STATUS,2 ;Comprueba si es el £ltimo
return ;Si es el £ltimo vuelve
call LCD_DATO ;Visualiza el caracter
incf RESUL,F ;Incrementa contador de caracteres
movlw d'10'
movwf TEMPO1
goto MENS_11
DATOS2 addwf PCL,1
retlw '0' ; OFFSET = 0x00
retlw '0'
retlw '0'
retlw ' '
retlw 'R'
retlw 'P'
retlw 'M'
retlw ' '
retlw '0'
retlw '0'
retlw '0'
retlw ' '
retlw 0F
retlw 'C'
retlw 0x00
END
Esta es la libreria
;LCD_CXX.ASM
;El conjunto de rutinas que se presentan a continuaci¢n permiten realizar
;las tareas b sicas de control del m¢dulo de visualizaci¢n LCD. Se emplean
;con los PIC 16f873a. En el programa principal se deber reservar memoria
;para el bloque de variables que utiliza el LCD del modo:
; LCD_VAR EQU dir_inicio_del_bloque
;BLOQUE DE ETIQUETAS
#define ENABLE bsf PORTA,2 ;Activa E
#define DISABLE bcf PORTA,2 ;Desactiva
#define LEER bsf PORTA,1 ;Pone LCD en Modo RD
#define ESCRIBIR bcf PORTA,1 ;Pone LCD en Modo WR
#define OFF_COMANDO bcf PORTA,0 ;Desactiva RS (modo comando)
#define ON_COMANDO bsf PORTA,0 ;Activa RS (modo datos)
CBLOCK LCD_VAR
LCD_TEMP_2 ;Inicio de las variables. Ser la primera direcci¢n libre
; disponible
LCD_TEMP_1
ENDC
;RUTINA UP_LCD: Con esta rutina se configura el PIC para que trabaje con el LCD.
UP_LCD bsf STATUS,RP0 ;Banco 1
clrf PORTB ;RB <0-7> salidas digitales
clrf PORTA ;RA <0-4> salidas digitales
bcf STATUS,RP0 ;Banco 0
OFF_COMANDO ;RS=0
DISABLE ;E=0
return
;RUTINA LCD_BUSY: Con esta rutina se chequea el estado del
;flag BUSY del m¢dulo LCD, que indica, cuando est activado, que el
;m¢dulo a£n no ha terminado el comando anterior. La rutina espera a
;que se complete cualquier comando anterior antes de retornar al
;programa principal, para poder enviar un nuevo comando.
LCD_BUSY LEER ;Pone el LCD en Modo RD
bsf STATUS,RP0
movlw H'FF'
movwf PORTB ;Puerta B como entrada
bcf STATUS,RP0 ;Selecciona el banco 0
ENABLE ;Activa el LCD
NOP
NOP
NOP
NOP
NOP
L_BUSY btfsc PORTB,7 ;Chequea bit de Busy
goto L_BUSY
DISABLE ;Desactiva LCD
bsf STATUS,RP0
clrf PORTB ;Puerta B salida
bcf STATUS,RP0
ESCRIBIR ;Pone LCD en modo WR
return
;RUTINA LCD_E: Se trata de una peque¤a rutina que se encarga de generar
;un impulso de 1æ s (para una frecuencia de funcionamiento de 4 Mhz)
;por la patita de salida de la Puerta A RA2, que se halla conectada
;a la se¤al E (Enable) del m¢dulo LCD. Con esta rutina se pretende activar
;al m¢dulo LCD.
LCD_E ENABLE ;Activa E
NOP
NOP
NOP
NOP
NOP
DISABLE ;Desactiva E
return
;RUTINA LCD_DATO: Es una rutina que pasa el contenido cargado en el
;registro W, el cual contiene un car cter ASCII, a la PUERTA B, para
;visualizarlo por el LCD o escribirlo en la CGRAM.
LCD_DATO OFF_COMANDO ;Desactiva RS (modo comando)
movwf PORTB ;Valor ASCII a sacar por PORTB
call LCD_BUSY ;Espera a que se libere el LCD
ON_COMANDO ;Activa RS (modo dato)
call LCD_E ;Genera pulso de E
return
;RUTINA LCD_REG: Rutina parecida a la anterior, pero el contenido de W
;ahora es el c¢digo de un comando para el LCD, que es necesario pasar
;tambi‚n a la PUERTA B para su ejecuci¢n.
LCD_REG OFF_COMANDO ;Desactiva RS (modo comando)
movwf PORTB ;C¢digo de comando
call LCD_BUSY ;LCD libre?.
call LCD_E ;S¡. Genera pulso de E.
return
;RUTINA LCD_INI: Esta rutina se encarga de realizar la secuencia de
;inicializaci¢n del m¢dulo LCD de acuerdo con los tiempos dados por
;el fabricante (15 ms). Se especifican los valores de DL, N y F,
;as¡ como la configuraci¢n de un interfaz de 8 l¡neas con el bus
;de datos del PIC, y 2 l¡neas de 16 caracteres de 5 x 7 pixels.
LCD_INI movlw 0x38
call LCD_REG ;C¢digo de instrucci¢n
call RETARDO ;Temporiza
movlw 0x38
call LCD_REG ;C¢digo de instrucci¢n
call RETARDO ;Temporiza
;movlw b'00111000'
;call LCD_REG ;C¢digo de instrucci¢n
;call RETARDO ;Temporiza
return
;RUTINA BORRA_Y_HOME: Borra el display y retorna el cursor a la posici¢n 0.
BORRA_Y_HOME movlw b'00000001' ;Borra LCD y Home.
call LCD_REG
return
;RUTINA DISPLAY_ON_CUR_OFF: Control del display y cursor.
;Activa el display y desactiva es cursor
DISPLAY_ON_CUR_OFF movlw b'00001100' ;LCD on, cursor off.
call LCD_REG
return
;RUTINA LCD_DELAY: Se trata de un rutina que implementa un retardo
;o temporizaci¢n de 5 ms XT 20 Mhz. Utiliza dos variables llamadas LCD_TEMP_1
;y LCD_TEMP_2, que se van decrementando hasta alcanzar dicho tiempo.
RETARDO MOVLW .5
MOVWF CONTADOR ;CANTIDAD DE VECCES QUE SE REPITE EL RETARDO
RETARDOT MOVLW .235 ;RETARDO DE 1 mS
MOVWF TMR0
EXPLORAR BTFSS INTCON,2
GOTO EXPLORAR
BCF INTCON,2
DECFSZ CONTADOR,F
GOTO RETARDOT
RETURN