El microcontrolador y DS18B20 utilizan LCD1602 para mostrar el programa c
/*main.c? ¿Consultarlo usted mismo? Cámbielo
#includelt;reg51.hgt;
#include"DS18B20_3.H" p>
p>
#define?uint?unsigned?int
#define?uchar?unsigned?char
uchar?a, miao, shi, fen, ri, yue, nian, semana, bandera, key1n, temp;
//flag se utiliza para leer el valor de temperatura en el archivo de encabezado y mostrar el valor de temperatura
#define? yh?0x80?// La posición inicial de la primera línea de la pantalla LCD, porque el primer D7 de la dirección de carácter LCD1602 es siempre 1 (100000000=80)
#define?er?0x80 0x40?/ /La posición inicial de la segunda línea de la pantalla LCD (porque la dirección de posición del primer carácter de la segunda línea es 0x40)
//La definición de conexión de pin entre la pantalla LCD y C51 (la línea de datos de la pantalla está conectada al puerto P0 de C51)
sbit?rs =P2^0;
sbit?en=P2^2;
sbit?rw=P2^ 1;?//Si rw está conectado a tierra en el hardware, no es necesario escribir esta oración y El rw=0 en la parte posterior
sbit?led=P2^6;?//Interruptor de retroiluminación LCD
//Definición de conexión de pin entre el chip de reloj DS1302 y C51
p>sbit?IO=P1^1;
sbit?SCLK=P1^0;
sbit?RST=P1^2;
sbit?ACC0=ACC^0;
sbit?ACC7=ACC^7;
/************************************************ **********************
Dispositivo de acumulación ACC=A
ACC.0=E0H?
ACC.0 es el bit 0 de ACC. Acc es un poco direccionable.
El acumulador ACC es una unidad de almacenamiento de 8 bits que se utiliza para almacenar datos. Sin embargo, esta unidad de almacenamiento tiene un estatus especial.
Es una unidad muy crítica en el microcontrolador y muchas operaciones deben realizarse a través de ACC. Al aprender instrucciones en el futuro,
A menudo se utiliza A para representar el acumulador. Pero hay algunas excepciones, por ejemplo, en la instrucción PUSH, se debe utilizar un nombre como ACC.
En términos generales, A representa el contenido del acumulador y ACC representa la dirección del acumulador.
?
****************************************** *********************/
//La definición de conexión de pin entre el botón de ajuste de tiempo y C51
sbit ? key1=P1^5; //Establecer clave
sbit?key2=P1^6; //Agregar clave
sbit?key3=P1^7; /p> p>
sbit?buzzer=P1^3; //Zumbador, accionado por el transistor 9012, sonido de bajo nivel del puerto
/************* ***** ********************************************** ****/
uchar?code?tab1[]={"20--?"};?//Caracteres fijos mostrados en el año
uchar?code?tab2 []={": : "}; //Caracteres fijos para la visualización de la hora
//Función de retardo, a menudo llamada más tarde
void?delay(uint?xms)//Delay función, con parámetros Función
{ uint?x, y; for(x=xms; xgt; 0; x--)
for(y=110; ygt; 0; y--) ;
}
/******** Función de comando de escritura LCD y función de escritura de datos, puede llamar ********* ****** en el futuro ***/
/*En este programa, las funciones relacionadas con la escritura de cristal líquido se llamarán en la función de DS1302, por lo que se debe colocar el programa de cristal líquido delante*/
write_1602com(uchar ?com)//****Función de comando de escritura LCD****
{ rs=0; establecer en el comando rw=0;?//La selección de lectura y escritura está configurada Para escribir P0=com; //Enviar datos demora(1) //Pulse el terminal de habilitación hacia arriba para prepararse para un retraso de flanco descendente válido; (1); en=0; //en cambia de alto a bajo, se genera un flanco descendente y la pantalla LCD ejecuta el comando
}
write_1602dat(uchar?dat) //***Función de escritura de datos en LCD****
{ rs=1; //La selección de datos/comando está configurada en datos rw=0;?//La selección de lectura y escritura está configurada en escritura P0=dat; //Enviar retraso de datos(1); en=1;?// en se establece en nivel alto para prepararse para el retraso del flanco descendente(1); , generando un flanco descendente, y el cristal líquido ejecuta el comando
}
lcd_init()//***Función de inicialización de LCD****
{ write_1602com(0x38); //Establece el modo de funcionamiento de la pantalla LCD, es decir: pantalla de 16*2 líneas, matriz de puntos de 5*7, datos de 8 bits write_1602com(0x0c); //Abre la pantalla sin mostrar el cursor write_1602com(0x06) ; //La pantalla completa no se mueve, el cursor se mueve automáticamente hacia la derecha write_1602com(0x01); //Borrar la pantalla write_1602com(yh 1); //Calendario Muestra el símbolo fijo comenzando desde la primera posición en la primera línea. for(a=0; alt; 14; a) { write_1602dat(tab1[a]); //Escribe la parte del símbolo fijo de la visualización del calendario en la pantalla LCD //delay (3 } write_1602com(er 2); //El tiempo muestra la posición de escritura del símbolo fijo, comenzando desde la segunda posición después de la visualización for(a=0; alt; 8; a) {
write_1602dat(tab2[a]); //Escribe el símbolo fijo del tiempo de visualización, dos dos puntos //delay(3); *******************sobre************************/
/ *** *************Subfunciones relacionadas con DS1302************************/
void?write_byte(uchar? dat)//Escribe un byte
{ ACC=dat=1; for(a=8; agt; 0; a--) {
IO=ACC0;
SCLK=0;
SCLK=1;
ACC=ACCgt;gt;1; p>}
uchar?read_byte()//Leer un byte
{ RST=1; for(a=8; agt; 0; a--) {
ACC7= IO;
SCLK=1;
SCLK=0;
ACC=ACCgt;gt;1 } retorno?(ACC );
}
//------------------------------- -------------- ---
void?write_1302(uchar?add, uchar?dat)//Escribir función en el chip 1302, especificar dirección de escritura, datos
{ RST=0; SCLK= 0; RST=1; escribir_byte(agregar); escribir_byte(dat); p>uchar?read_1302(uchar?add)//Desde 1302 Función de lectura de datos, especifique la dirección de origen de datos de lectura
{ uchar?temp=0; RST=0; add); temp=read_byte(); SCLK=1; return(temp);
}
uchar?BCD_Decimal(uchar?bcd)//código BCD función decimal, entrada BCD, retorno decimal
{ uchar?Decimal;decimal=bcdgt;gt;4; return(Decimal=Decimal*10 (bcdamp;=0x0F));
}
//--- ----------------------------------
void?ds1302_init()?// Subfunción de inicialización del chip 1302 (2010-01-07, 12:00:00, semana 4)
{
RST= 0;
SCLK=0;
write_1302(0x8e, 0x00);?//¿Permitir escritura, desactivar protección contra escritura?
//write_1302(0x80, 0x00);?//Escribe el registro de segundos 80H en DS1302 Escribe los segundos datos iniciales 00
//write_1302(0x82, 0x00); //Escribe los datos de minutos iniciales 00 en el registro de minutos de escritura interno DS1302 82H
//write_1302(0x84, 0x12); //Escribe el registro de horas en DS1302;
El registro 84H escribe los datos de la hora inicial 12
//write_1302(0x8a, 0x04); //Escribe los datos de la semana inicial 4 en el registro semanal de escritura interno DS1302 8aH
//write_1302( 0x86, 0x07); //Escribe los datos de la fecha inicial 07 en el registro de fecha de escritura interno DS1302 86H
//write_1302(0x88, 0x01); //Escribe los datos del mes inicial en el registro de mes de escritura interno DS1302 88H 01
//write_1302(0x8c, 0x10); //Escribe los datos del año inicial 10 en el registro de año de escritura interno DS1302 8cH
write_1302(0x8e, 0x80);?//Abrir protección contra escritura
}
//---------------------------------- -- ---
//Subfunción de visualización de temperatura
void?write_temp(uchar?add, uchar?dat)//Escribe datos de temperatura en la pantalla LCD y especifica la posición de visualización< / p>
{ uchar?gw, sw; gw=dat10; //Obtener los dígitos individuales sw=dat/10; //Obtener las decenas de dígitos write_1602com(er add); file 0x80 0x40 write_1602dat(0x30 sw); //El número 30 obtiene el código de visualización LCD1602 del número write_1602dat(0x30 gw); //El número 30 obtiene el código de visualización LCD1602 del número write_1602dat(0xdf); símbolo circular que muestra la temperatura, 0xdf es el código de dirección de este símbolo en la biblioteca de caracteres LCD write_1602dat(0x43);?//muestra el símbolo "C", 0x43 es el código de dirección de C mayúscula en la biblioteca de caracteres LCD p>
}
//----------------------------------- -
//Subfunción de visualización de horas y minutos segundos
void?write_sfm(uchar?add, uchar?dat)//Escribe horas, minutos y segundos en LCD, con pantalla adición de posición y visualización de datos, dos parámetros
{ uchar?gw, sw; gw=dat10; //Obtener los dígitos de las unidades sw=dat/10; //Obtener los dígitos de las decenas write_1602com(er add); //er es el valor especificado en el archivo de encabezado 0x80 0x40 write_1602dat(0x30 sw ); //El número 30 obtiene el código de visualización LCD1602 del número write_1602dat(0x30 gw); //El número 30 obtiene el código de visualización LCD1602 del número
}
//--- ----------------------------- -----
//Subfunción de visualización de año, mes y día
void?write_nyr(uchar?add, uchar?dat)//Escribe el año, mes y día a la pantalla LCD, incluido el sumando de posición de visualización y los datos de visualización, dos parámetros
{ uchar?gw , sw; gw=dat10 //Obtener los dígitos de las unidades sw=dat/10; dígitos write_1602com(yh add); //Establece la posición de visualización en la primera posición add write_1602dat(0x30 sw);/ /El número 30 obtiene el código de visualización LCD1602 del número write_1602dat(0x30 gw); el numero
Código de visualización 1602
}
//------------------------------ -- -------------
void?write_week(uchar?week)//Función de escritura semanal
{ write_1602com(yh 0x0c); /Semana La posición de visualización de los caracteres switch(week) {
case?1: write_1602dat('M'); //Cuando el número de semana es 1, se muestra
write_1602dat ('O');
write_1602dat('N');
romper;
caso?2: write_1602dat('T'); cuando los datos de la semana son 2
write_1602dat('U');
write_1602dat('E');
break;
case?3: write_1602dat(' W'); //Se muestra cuando los datos de la semana son 3
write_1602dat('E');
write_1602dat('D'); p>
break;
case?4: write_1602dat('T'); //Se muestran los datos de la semana 4
write_1602dat('H'); p>
write_1602dat('U ');
break;
case?5: write_1602dat('F'); //Se muestra cuando los datos de la semana son 5 p>
write_1602dat('R' );
write_1602dat('I');
romper;
caso?6: write_1602dat('S '); //Cuando los datos de la semana son 6, se muestran
write_1602dat('T');
write_1602dat('A');
break;
case?7: write_1602dat('S'); //Se muestra cuando los datos de la semana son 7
write_1602dat('U');
write_1602dat(' N');
romper ;
}
}
//************ ******Funciones relacionadas con el escaneo de teclado**** *******************
void?keyscan()
{ if(key1==0)//--- ------------key1 es la tecla de función (tecla de configuración) --------------- ----- { delay(9); //Retraso, usado para eliminar la fluctuación if(key1==0)//Confirma la pulsación de la tecla nuevamente después del retraso {
buzzer=0; el timbre sonará una vez brevemente
delay (20);
buzzer=1; while(!key1n; if(key1n==9)
key1n=1; //Establece la clave segundos, minuto, hora, semana, día, mes, año, retorno, 8 funciones de bucle switch(key1n) { case?1:?TR0=0; //Cerrar temporizador //TR1= 0; write_1602com(er 0x09); // Configure el botón para que se presione una vez y el cursor se mostrará en la segunda posición
w
rite_1602com(0x0f); //Establece el cursor en flash
temp=(miao)/10*16 (miao)10; //Los segundos datos se escriben en DS1302
write_1302( 0x8e, 0x00);
write_1302(0x80, 0x80|temp); //miao
write_1302(0x8e, 0x80);
romper caso?2 : write_1602com (er 6); //Presione 2 veces para mostrar el cursor en la posición fen //write_1602com(0x0f); break; case?3:?write_1602com(er 3); //Presione 3 veces, shi //write_1602com (0x0f); break ; case?4:?write_1602com(yh 0x0e); //Presione 4 veces, semana //write_1602com(0x0f); case?5:?write_1602com(yh 0); ri // write_1602com(0x0f); break; case?6:?write_1602com(yh 0x07); //Presione 6 veces, yue //write_1602com(0x0f); Presione 7 veces, nian //write_1602com(0x0f); break; case?8: write_1602com(0x0c); //Presione hasta la octava vez, configure el cursor para que no parpadee TR0=1; )/ 10*16 (miao)10; write_1302(0x8e, 0x00); write_1302(0x80, 0x00|temp); //los datos miao se escriben en DS1302 write_1302(0x8e, 0x80); ? } } }
//---------------------------------Agregar clave2-- ----- --------------------- if(key1n!=0)//Cuando se presiona la tecla1 a continuación.
Solo será efectivo si presionas las siguientes teclas nuevamente (el número de pulsaciones de teclas no es igual a cero) { if(key2==0)//Ajusta la tecla { delay(10); if(key2==0) {
buzzer=0;/ /El timbre suena una vez brevemente
delay(20);
buzzer=1; while(!key2); key1n) { case?1:miao; //configuración Presione la tecla una vez y ajuste los segundos if(miao==60)
miao=0; //Si el segundo excede 59, agregue 1 para restablecer a cero write_sfm(0x08, miao); //Configura la pantalla LCD "más" los segundos establecidos en la posición correcta temp=(miao)/10*16 (miao)10 //Convierte el código decimal a DCB requerido por DS1302;
write_1302 (0x8e, 0x00) ;?//¿Permitir escritura, desactivar protección contra escritura?
write_1302(0x80, temp);?//Escribir el segundo código BCD de datos ajustado en el segundo registro de escritura 80H en DS1302
write_1302(0x8e, 0x80);? //Activar la protección contra escritura write_1602com(er 0x09); //Porque el modo de configuración de la pantalla LCD es mover automáticamente el cursor a justo después de escribir los datos, por lo que debe especificar return //write_1602com(0x0b); break ; case?2: fen ; if(fen==60)
fen=0; ; // Deje que la pantalla LCD muestre la temperatura de datos de minutos establecida "más" en la posición correcta =(fen)/10*16 (fen)10; //Convierta el decimal al código DCB requerido por DS1302
write_1302 (0x8e, 0x00); //¿Permitir escritura, desactivar la protección contra escritura?
write_1302(0x82, temp); //Escribir el código BCD de subdatos ajustado en el registro de escritura interno DS1302 82H
write_1302(0x8e, 0x80); //Activa la protección contra escritura write_1602com(er 6); //Debido a que el modo de configuración del cristal líquido es agregar uno automáticamente después de escribir los datos, aquí se vuelve a escribir en la posición original. ; case?3: shi; if (shi==24)
shi=0; write_sfm(2, shi); //Deja que la pantalla LCD muestre "más" los datos de la hora establecida en la posición correcta temp. =(shi)/10*16 (shi)10; //Convertir decimal a DS1302 Código DCB requerido
write_1302(0x8e, 0x00); //¿Permitir escritura, deshabilitar protección contra escritura?
write_1302(0x84, temp); //Escribe el registro horario 84H en DS1302 Escribe el código BCD de datos horarios ajustados
write_1302(0x8e, 0x80); //Abre la protección contra escritura write_1602com(er 3); /Debido a que el modo LCD está configurado para escribir datos, el puntero aumenta automáticamente Uno, por lo que el cursor necesita regresar case?4: semana si(semana==8)
semana=1;
write_1602com(yh 0x0C); //Especifica' la posición de visualización de datos semanales después de agregar '
write_week(week); //Especifica el contenido de visualización de datos semanales
temp. =(semana)/10*16 (semana)10 // Convertir decimal a DS1302;
Código DCB requerido
write_1302(0x8e, 0x00); //¿Permitir escritura, deshabilitar protección contra escritura?
write_1302(0x8a, temp); //Escribir el registro semanal 8aH en DS1302. código BCD de datos semanales ajustado
write_1302(0x8e, 0x80); //Activar la protección contra escritura
write_1602com(yh 0x0e); //Porque el modo de configuración de la pantalla LCD es escribir después. al ingresar los datos, el puntero aumenta automáticamente en uno, por lo que el cursor debe volver a romperse case?5: ri if(ri==32)
ri=1; ; //Deje que la pantalla LCD muestre "más" los datos de fecha establecidos en la posición correcta temp=(ri)/10*16 (ri)10; //Convierta el decimal al código DCB requerido por DS1302
write_1302 (0x8e, 0x00); //Se permite la escritura, la protección contra escritura está prohibida
write_1302(0x86, temp); //Escribe el código BCD de datos de fecha ajustados en el registro de fecha de escritura 86H en DS1302
write_1302(0x8e, 0x80); //Activar la protección contra escritura write_1602com(yh 10); //Debido a que el modo de configuración de la pantalla LCD es agregar uno automáticamente después de escribir datos, es necesario devolver el cursor en caso de interrupción; ?6: yue; if (yue==13)
yue=1; write_nyr(6,yue);//Deja que la pantalla LCD muestre los datos del mes establecido "más" en la posición correcta temp=( yue)/10* 16 (yue)10; //Convierte el código decimal al código DCB requerido por DS1302
write_1302(0x8e, 0x00); //Permite la escritura, prohíbe la protección contra escritura
write_1302(0x88, temp); //Escribe el código BCD de datos del mes ajustado en el registro de escritura del mes 88H en DS1302
write_1302(0x8e, 0x80); //Abre la protección contra escritura write_1602com(yh 7); / Debido a que la pantalla LCD está configurada, el puntero aumenta automáticamente en uno después de escribir, por lo que el cursor debe volver a romperse case?7: nian; , nian); // Corrige la pantalla LCD La posición muestra "más" los datos del año establecido
temp=(nian)/10*16 (nian)10 //Convierte el decimal al código DCB requerido por DS1302
write_1302(0x8e, 0x00); //Escritura permitida, protección contra escritura prohibida
write_1302(0x8c, temp); //Escribe el código BCD de datos del año ajustado en el registro del año. 8cH en DS1302
write_1302(0x8e, 0x80); //Activar la protección contra escritura write_1602com(yh 4); //Debido a que el modo de configuración de la pantalla LCD es agregar uno automáticamente después de escribir datos, el cursor necesita para ser devuelto a break; } } } //------------------Disminuir clave key3, consulte el comentario 'Agregar clave' para cada función de oración----- ---------- if( key3==0) { delay(10); //Ajusta el retardo y elimina la fluctuación if(key3==0) {
buzzer=0; /El timbre sonará una vez brevemente
delay(20);
buzzer=1;
hile(!key3); switch(key1n) {
case?1: miao--;
if(miao==-1) miao=59; Cuando llega a -1, automáticamente se convierte en 59 write_sfm(0x08, miao); //Muestra los nuevos segundos después del cambio en la posición correcta de la pantalla LCD
temp=(miao)/10*16 ( miao)10; //Convertir decimal a código DCB requerido por DS1302
write_1302(0x8e, 0x00);?//¿Permitir escritura, prohibir protección contra escritura?
write_1302(0x80, temp) );?/ /Escriba el segundo código BCD de datos ajustado en el segundo registro de escritura 80H en DS1302
write_1302(0x8e, 0x80);?//Abra la protección contra escritura write_1602com(er 0x09);//Porque el se establece el modo del cristal líquido Después de escribir los datos, el puntero aumenta automáticamente en uno, aquí se vuelve a escribir en la posición original //write_1602com(0x0b);
case?2: fen- -;
if(fen==-1) fen=59; write_sfm(5, fen); temp=(fen)/10*16 (fen)10; por DS1302
write_1302(0x8e, 0x00); //¿Permitir escritura, deshabilitar protección contra escritura?
write_1302(0x82, temp); //Escribe el código BCD ajustado en el registro de escritura. 82H en DS1302
p>write_1302(0x8e, 0x80); //Abrir protección contra escritura write_1602com(er 6); //Debido a que el modo de configuración de la pantalla LCD es para escribir datos, el puntero aumenta automáticamente en uno. , aquí se vuelve a escribir en la posición original break ;
case?3: shi--;
if(shi==-1) shi=23; shi); temp=(shi)/10* 16 (shi)10; //Convertir decimal al código DCB requerido por DS1302
write_1302(0x8e, 0x00); //¿Permitir escritura, deshabilitar protección contra escritura?
write_1302(0x84, temp); //Escribe el código BCD de datos de hora ajustados en el registro de hora de escritura 84H en DS1302
write_1302(0x8e, 0x80); write_1602com(er 3); //Debido a la configuración El modo LCD es que después de escribir datos, el puntero aumenta automáticamente en uno, por lo que el cursor debe volver a detenerse;
caso?4: semana- -;
if(week==0)week=7;
write_1602com(yh 0x0C); //Especifique la posición de visualización de datos semanales después de 'agregar'
write_week(week); //Especifica el contenido de visualización de datos semanales
p>temp=(week)/10*16 (week)10 //Convierte el decimal al código DCB requerido por DS1302 p>
write_1302(0x8e, 0x00); //Permitir escritura, prohibir escritura ¿Protección?
write_1302(0x8a, temp); //Escribir el código BCD de datos semanales ajustado en la semana de escritura interna de DS1302. registrar 8aH
write_1302(0x8e, 0x80); // Activar protección contra escritura
write_1602co);
m(yh 0x0e); //Debido a que el modo de configuración de la pantalla LCD es incrementar automáticamente el puntero en uno después de escribir datos, el cursor debe regresar a pausa;
case?5: ri--;
if(ri==0) ri=31; write_nyr(9,ri); temp=(ri)/10*16 (ri)10; //Convierte el código decimal al DCB requerido por DS1302
write_1302(0x8e, 0x00); //Permitir escritura, prohibir protección contra escritura
write_1302(0x86, temp); //Escribir el código BCD de datos de fecha ajustados en el registro de fecha de escritura 86H en DS1302
write_1302(0x8e, 0x80); //Activar la protección contra escritura write_1602com(yh 10); //Debido a que el modo de configuración de la pantalla LCD es agregar uno automáticamente después de escribir datos, el cursor debe se devuelve descanso
case?6:yue--;
if(yue==0) yue=12; write_nyr(6,yue); 10*16 (yue )10; //Convierte el código decimal a DCB requerido por DS1302
write_1302(0x8e, 0x00); //Permite la escritura, prohíbe la protección contra escritura
write_1302(0x88). , temp);/ /Escribe el código BCD de datos del mes ajustado en el registro de escritura del mes 88H en DS1302
write_1302(0x8e, 0x80); //Abre la protección contra escritura write_1602com(yh 7); el modo de configuración de la pantalla LCD es Después de escribir datos, el puntero aumenta automáticamente en uno, por lo que el cursor debe volver a detenerse;?
caso?7: nian-- if(nian==-1) nian=99; write_nyr(3, nian temp=(nian)/10*16 (nian)10; //Convierte el código decimal al DCB requerido por DS1302
write_1302(0x8e, 0x00); /Permitir escritura, prohibir protección contra escritura
p>write_1302(0x8c, temp); //Escribir el código BCD de datos del año ajustado en el registro de año de escritura interno DS1302 8cH
write_1302(0x8e, 0x80); //Activar la protección contra escritura write_1602com (yh 4); //Debido a que el modo de configuración del cristal líquido es aumentar automáticamente el puntero en uno después de escribir los datos, el cursor debe regresarse para romperse; }
}
/ /-------------------------------- --
void?init()?//Temporizador, función de configuración del contador
{ TMOD=0x11;?//Especifique el modo de funcionamiento del temporizador/contador como 3 TH0= 0; //Los cuatro bits superiores del temporizador T0=0 TL0=0; //Temporizador Los cuatro bits inferiores de T0=0 EA=1 //El sistema permite interrupciones abiertas ET0=1;?//Permitir la interrupción T0 TR0; =1;?//Habilitar interrupciones e iniciar el temporizador
}
//********************* ***Función principal************************ ******
//****** ************************************************** **
void?main()
{ lcd_init(); //Llamar a la subfunción de inicialización de la pantalla LCD
ds1302_init();?//Llame a la subfunción de inicialización init() del reloj DS1302; //Llame a la subfunción de configuración del contador de tiempo led=0;?//Encienda la fuente de alimentación de la retroiluminación de la pantalla LCD
buzzer=0; //El timbre suena una vez durante mucho tiempo
delay(80);
buzzer=1; en un bucle infinito: {
keyscan();//Llamar a la subfunción de escaneo del teclado
}
}
void ?timer0()?interrupt?1//Obtener y mostrar el calendario y la hora
{ //Init_DS18B20(); //Subfunción de inicialización del sensor de temperatura DS18b2, flag=ReadTemperature() en el archivo de encabezado ; //Envía el resultado de la función devuelto al ejecutar el archivo de encabezado 18b2 a la variable FLAG, utilizada para la visualización
//Lee siete datos de segundos, horas, minutos, semana, mes y año (el registro de lectura). de DS1302 es diferente del registro de escritura): miao?=?BCD_Decimal(read_1302(0x81)); fen ?=?BCD_Decimal(read_1302(0x83)); shi=?BCD_Decimal(read_1302(0x85)); read_1302(0x87)); yue?=?BCD_Decimal(read_1302(0x89)); nian=BCD_Decimal(read_1302 (0x8d)); semana=BCD_Decimal(read_1302(0x8b)); //Mostrar datos de temperatura, segundos, horas y minutos: write_temp(12, flag); //Muestra la temperatura, comenzando desde el carácter 12 de la segunda línea write_sfm(8, miao); //Segundos, comenzando desde el carácter 8 de la segunda línea (muestra la subfunción en minutos y segundos). cuando se llama) write_sfm(5, fen); //Minutos, comenzando desde el quinto carácter en la segunda línea Comienza a mostrar write_sfm(2, shi); //Hora, comenzando desde el segundo carácter en la segunda línea. datos de mes y año: write_nyr(9, ri); //Fecha, comenzando desde el segundo carácter de la segunda línea. Comienza a mostrarse después de 9 caracteres write_nyr(6, yue); en la segunda línea write_nyr(3, nian); //Año, comienza a mostrarse después del tercer carácter en la segunda línea write_week(week);
}