información lcd1602
/***************subrutina ds18b20*************************** ***/ p>
/**********subfunción de retardo ds18b20 (oscilador de cristal 12MHz)**********/
#include
sbit DQ=P1^2;
#define uchar unsigned char
void delay_18B20(unsigned int i)
{
while(i--);
}
/************función de inicialización ds18b20** ********** **********/
void Init_DS18B20(void)
{
carácter sin firmar x=0;
DQ = 1; //Reinicio de DQ
delay_18B20(8); //Ligero retraso
DQ = 0; tira DQ bajo
delay_18B20(80); //El retraso exacto es mayor que 480us
DQ = 1 //Sube el autobús
delay_18B20( 4);
x =DQ; //Después de un ligero retraso, si x=0, la inicialización es exitosa y si x=1, la inicialización falla
delay_18B20(20) ;
}
/****************ds18b20Leer un byte************** **/
unsigned char ReadOneChar(void)
{
uchar i=0;
uchar dat = 0; p>
for (i=8;i>0;i--) p>
{
DQ = 0; // Da señal de pulso
dat>>=1;
DQ = 1; // Da señal de pulso
if(DQ)
dat|=0x80;
retraso_18B20(4);
}
retorno(dat);
}
/******* *********ds18b20 escribe un byte*********** ******/
void WriteOneChar(uchar dat)
{
carácter sin firmar i=0;
para (i=8; i>0; i--)
{
DQ=0;
DQ=dat&0x01;
delay_18B20 (5);
DQ=1;
dat>> =1;
}
}
/***************Leer la temperatura actual de ds18b20*** *********/
ReadTemp(void)
{ float val;
uchar temp_value,value
carácter sin firmar a=0;
canal sin firmar
ar b=0;
unsigned char t=0;
Init_DS18B20();
WriteOneChar(0xCC); // Saltar lectura del número de secuencia y la columna operación número
WriteOneChar(0x44); // Iniciar conversión de temperatura
delay_18B20(100); // este mensaje es muy importante
Init_DS18B20();< / p>
WriteOneChar(0xCC); //Omitir la operación de lectura del número de serie
WriteOneChar(0xBE); //Leer el registro de temperatura, etc. (***9 registros pueden ser leer) Anterior Las dos son temperaturas
delay_18B20(100);
a=ReadOneChar() //Leer el bit bajo del valor de temperatura
b =ReadOneChar(); / /Lee el bit alto del valor de temperatura
temp_value=b<<4;
temp_value+=(a&0xf0)>>4;
value=a&0x0f;
val=temp_value+value;
return(val);
}
Lo anterior es el Controlador para DS18B20. Luego simplemente llame a la función directamente en el programa principal.
Las anteriores son llamadas en el programa principal, solo mira la de temperatura.
#include "reg51.h"
#include "18b20.h"
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="Bienvenido a" ;//Fecha de inicialización y día de la semana
uchar code table1[]="¡Nuestro sistema!";// Tiempo de inicialización
uchar code table2[]="La temperatura es:";//Tiempo de inicialización
//Los siguientes tres pines definen la pantalla LCD
sbit lcden = P2^2;
sbit lcdwrite=P2^1
sbit lcdrs=P2^0;
char wendu;
//Programa de retraso
void delay(uint z)
{ uint x,y
for(x=z;x>0;x-- )
for(y=110;y>0;y--);
}
//Comando de escritura LCD
void write_com(uchar com)
{
lcdrs=0
lcden=0
P0=com; >
p>
retraso(5);
lcden=1
retraso(5);
lcden=0; p>
}
//LCD escribir datos
void write_data(uchar da)
{ lcdrs=1;
lcden=0 ;
P0=da;
retraso(5);
lcden=1;
retraso(5);
lcden=0;
}
//Inicialización
void init()
{ p>
uchar num;
lcdwrite=0;
lcden=0;
write_com(0x38); //16*2 pantalla, 5 *Matriz de 7 puntos, datos de 8 bits
write_com(0x0c); //Mostrar cursor encendido y apagado
write_com(0x06); //Mover cursor
write_com(0x01 );//Borrar el contenido de la pantalla LCD
write_com(0x80);
for (num=0;num<10;num++)
{
p>
write_data(tabla[núm]);
retraso(5
}
write_com); (0x80x40);
for (num=0;num<11;num++)
{
write_data(table1[num]); p>
demora(5)
}
}
void write_wendu(uchar add, char da)
{
ucha
r shi,ge;
shi=da/10;
ge=da%10;
write_com(0x80x4add);
write_data(0x3shi);
write_data(0x3ge
}
//Función principal
void main ()
{
uchar num;
init();
retardo(2000);
delay(2000);
delay(2000);
write_com(0x01);//Borrar el contenido de la pantalla LCD
while(1)
{
write_com(0x80);
for (num=0;num<15;num++)
{
write_data(table2[num]);
retraso(5);
}
wendu = ReadTemp(
<); p> escribir_wendu(2,wendu);}
}