Red de conocimientos turísticos - Conocimientos sobre calendario chino - El microcontrolador y DS18B20 utilizan LCD1602 para mostrar el programa c

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>

#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

}

//----------------------------------- -

//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');

break;

case?4: write_1602dat('T'); //Se muestran los datos de la semana 4

write_1602dat('H');

write_1602dat('U ');

break;

case?5: write_1602dat('F'); //Se muestra cuando los datos de la semana son 5

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

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);

}

onocimientos turísticos All Rights Reserved.