Paso 4: El programa
A continuación se pega el programa en. Básicamente puede seguir cómo funciona leyendo los comentarios del programa. Programadores más experimentados probablemente sabrá cómo escribir código más simple y más eficiente. Qué puedo decir, este es mi primer intento, y parece que funciona.
' *** TemperatureSensor.bas ***
' Este programa se ejecuta en un PICAXE - 20 X 2 a 4MHz que lee la temperatura de un
' Sensor de temperatura DS18B20 y envía a una pantalla de LCD de 16 x 2 compatible con HD44780.
'
' Desarrollado por Simon Carter 10 de marzo de 2013.
' *** Constantes ***
símbolo EnablePin = C.7 ' pin Enable del LCD conectado a C.7
símbolo RegSelPin = C.4 ' LCD Register Selelect pin conectado a C.4
símbolo TempPin = C.1 ' datos del sensor de temperatura conectado a C.1
' *** Variables ***
char el símbolo = b0 ' carácter a LCD
Índice de símbolo = b1 ' utiliza como contador en bucles para el siguiente
símbolo grados centígrados = b2 ' el valor recibido del sensor DS18B20
símbolo intgval = b3 ' utiliza para mantener temporalmente cada valor entero extraído el número recibido del sensor
símbolo degflag = b4 ' una bandera que se utiliza cuando se trabaja con rangos de temperatura negativa. 0 = intervalo positivo, 1 = negativo gama
símbolo degf = b5 ' utilizado para la celebración de grados farenheight valores
' *** Directivas ***
#com 3' especificar el puerto de descarga
#picaxe 20 x 2' especificar procesador
#no_data ' ahorrar tiempo descargando
#terminal de ' desactivar la ventana de terminal
' *** Tabla ***
Mesa 0, ("la temperatura")
' *** Programa principal ***
dirsB = % 11111111' fijado todos los pines de portB como salidas
dirsC = % 10111001' set C.6 y C.2, C.1 como entradas
pullup % 00000010' C.6 activar resistencia pullup interna
' *** Inicializar el LCD ***
pausa pausa 200' 200 mS para la inicialización del LCD según especificaciones del HD44780
char = 56' configuración de 8 bits, 2 líneas y pantalla de 5 X 8
GoSub CmdLCD ' enviar instrucciones al LCD
char = 12' pantalla on, cursor off
GoSub CmdLCD ' enviar instrucciones al LCD
char = 1' visualización clara, casa ir a la línea 1 de pantalla LCD
GoSub CmdLCD ' enviar instrucciones al LCD
esperar 1
' *** Enviar texto - "Temperatura" a la línea 1 de la pantalla LCD ***
índice = 0 a 15
ReadTable index, char ' leer los caracteres de texto en la tabla
GoSub TxtLCD ' enviar el texto en la tabla a LCD
índice siguiente
' *** Bucle principal - leer sensor DS18B20 ***
hacer
char = 194' mover el cursor al comienzo de la línea dos
GoSub CmdLCD ' envía la instrucción al LCD
readtemp TempPin, degc ' leer el valor de temperatura recibido del sensor DS18B20 en pin C1.0
800' pausa pausa > 750 mS para sensor según especificaciones del DS18B20
' grados centígrados = 24 insert prueba valores de temperatura aquí para ver el código de la función
degflag = 0' reiniciar el indicador a 0 es decir, asumir con temperatura positiva
GoSub BelowZeroC ' busque debajo de temperaturas bajo cero
GoSub IntgOnly ' Extracto de 10 y de 1 enteros de datos DS18B20
GoSub DegCsign ' generar señal de deg C
GoSub CheckFlag ' comprobar si las temperaturas en el rango negativo y ajustar el valor de grados centígrados
GoSub BelowZeroF ' busque debajo de temperaturas bajo cero
GoSub DegFsign ' busque debajo de temperaturas bajo cero
' generar señal de grados F
lazo
' *** Subrutinas ***
CmdLCD:
baja RegSelPin ' configurar el LCD para un byte de comando
Goto LoadLCD
TxtLCD: ' configurar LCD bytes de texto
RegSelPin alta
LoadLCD:; ejecutar los bytes de carga en pantalla LCD
outpinsB = char ' carga el byte en outpinsB
pulsout EnablePin, 1' carga bytes en LCD
volver
LoadIntgLCD: ' ejecutar carga temperatura bytes de texto que se ha convertido a un entero
alta RegSelPin ' configurar LCD bytes de texto
outpinsB = intgval ' bytes en outpinsB de carga
pulsout EnablePin, 1' ejecutar bytes de carga en pantalla LCD
volver
IntgOnly: ' extraer de 100, de 10 y de 1 enteros de datos DS18B20
Índice = paso 2 a 0 -1 ' índice para extraer entero cientos primero luego entero 10 entonces 1
que intgval = grados centígrados índice de Cave ' función uso cavar para extraer números enteros
Si intgval = 0 e índice = 2 entonces que intgval = % 00100000 ' en blanco de cualquier líder "0" en pantalla
else if intgval = 0 then que intgval = % 00110000' convertir enteros a códigos de caracteres LCD
else if intgval = 1 entonces que intgval = % 00110001
else if intgval = 2 entonces que intgval = % 00110010
else if intgval = 3 entonces que intgval = % 00110011
else if intgval = 4 entonces que intgval = % 00110100
else if intgval = 5 entonces que intgval = % 00110101
else if intgval = 6 entonces que intgval = % 00110110
else if intgval = 7 entonces que intgval = % 00110111
else if intgval = 8 entonces que intgval = % 00111000
else if intgval = 9 entonces que intgval = % 00111001
endif
GoSub LoadIntgLCD ' ejecutar la carga temperatura bytes de texto que se ha convertido a un entero
índice siguiente
volver
DegCsign: ' crear grados C texto en pantalla
intgval = % 11011111' set carácter a LCD al código de carácter de "Grado"
GoSub LoadIntgLCD ' enviar caracteres a la LCD
intgval = % 01000011' set carácter a enviar al LCD a "C" código de carácter para centígrados
GoSub LoadIntgLCD ' enviar caracteres a la LCD
intgval = % 00100000' set carácter a LCD a "" código de carácter para un espacio antes del valor farenheight
GoSub LoadIntgLCD ' enviar caracteres a la LCD
volver
DegFsign: ' crear grados F texto en pantalla
intgval = % 11011111' set carácter a LCD al código de carácter de "Grado"
GoSub LoadIntgLCD ' enviar caracteres a la LCD
intgval = % 01000110' set carácter a enviar al LCD a "F" código de carácter para Farenheight
GoSub LoadIntgLCD ' enviar caracteres a la LCD
volver
intgval = % 00100000' set carácter a LCD a "" código de carácter para un espacio después de farenheight valor para borrar cuando menos signo utilizado
GoSub LoadIntgLCD ' enviar caracteres a la LCD
intgval = % 00100000' set carácter a LCD a "" código de carácter para un espacio después de farenheight valor para borrar cuando intgval > 100 usada
GoSub LoadIntgLCD ' enviar caracteres a la LCD
DegFcalc: ' derivar Farenheight valor positivo Farenheight lecturas
grado c = grados centígrados * 9 / 5 + 32' calcular valor Farenheight del centígrado
GoSub IntgOnly ' Iniciar proceso para la extracción de 100, de 10 y de 1 enteros para Farenheight valor
de depuración
volver
DegFcalcPos: ' derivar Farenheight valor positivo Farenheight lecturas cuando Celsius es negativo
grado c = grados centígrados * 9/5' calcular valor Farenheight del centígrado
grados centígrados = 32-degc ' calcular valor Farenheight del centígrado
GoSub IntgOnly ' Iniciar proceso para la extracción de 100, de 10 y de 1 enteros para Farenheight valor
volver
DegFcalcNeg: ' derivar Farenheight valor negativo Farenheight lecturas
grado c = grados centígrados * 9/5-32' calcular valor Farenheight del centígrado
GoSub IntgOnly ' Iniciar proceso para la extracción de 100, de 10 y de 1 enteros para Farenheight valor
volver
MinusSign:
intgval = "-" ' carácter enviará "signo menos" código de caracteres a la LCD
GoSub LoadIntgLCD
volver
BelowZeroC: ' busque por debajo de cero grados C
Seleccione caso degc
0 caso a 125' ignorar este caso - temperatura en el rango positivo normal
caso 129 de 183' el caso celsius en el rango negativo envía un carácter de signo de menos a LCD
grados centígrados = grados centígrados-128 ' correcto para el DSDS18B20 establecer MSB en "1" o 128 para menos condición de temperatura
degflag = 1' set flag que indica la condición de temperatura negativa
GoSub MinusSign ' el caso celsius en el rango negativo envía un carácter de signo de menos a LCD
endselect
volver
BelowZeroF:
Seleccione caso degc
0 caso a 124' ignorar este caso - temperatura en el rango positivo normal
GoSub DegFcalc
caso 129 a 146' el caso c solamente en la gama menos
grados centígrados = grados centígrados-128 ' correcto para el DSDS18B20 establecer MSB en "1" o 128 para menos temperatura conditio
GoSub DegFcalcPos
caso 147 de 183' el caso farenheight en la gama menos enviar un carácter de signo de menos a LCD
grados centígrados = grados centígrados-128 ' correcto para el DSDS18B20 establecer MSB en "1" o 128 para menos condición de temperatura
GoSub MinusSign ' el caso farenheight en la gama menos enviar un carácter de signo de menos a LCD
GoSub DegFcalcNeg
endselect
volver
CheckFlag:
Si degflag = 1 entonces que degc = grados centígrados + 128' Reset la corrección de la DSDS18B20 configuración de MSB a «1» o 128 para menos condición de temperatura
endif
volver