Red de conocimiento informático - Aprendizaje de código fuente - Programa y esquema de reloj electrónico inteligente utilizando ds1302 y funciones clave de tubo digital o pantalla LCD

Programa y esquema de reloj electrónico inteligente utilizando ds1302 y funciones clave de tubo digital o pantalla LCD

#include "reg51.h"

#include "intrins.h"

#define set_sec(x) (ds1302_write(0x80,x))//Definición de macro, escribir segundos de reloj

#define get_sec() (ds1302_read(0x81)) //Macro, leer segundos del reloj

#define set_min(x) (ds1302_write(0x82, x)) //Macro, el valor mínimo del reloj de escritura

#define get_min() (ds1302_read(0x83)) //Macro, el valor mínimo del reloj de lectura

#define get_min() (ds1302_read (0x83) )) //Macro, leer minutos del reloj

#define get_min() (ds1302_read(0x83))

#define set_hour(x) (ds1302_write(0x84, x) ) //Macro, escribe la hora del reloj

#define get_hour() (ds1302_read(0x85)amp; 0x7F) //Macro, lee la hora del reloj

#define get_hour() (ds1302_read ( 0x85)amp; 0x7F) //Macro, leer la hora del reloj

#define get_min() (ds1302_read(0x85))amp;0x7F)

{key_v=key_s; p>

if((key_vamp;0x04)==0x00)

{key_sel=0x00;

ds1302_write(0x8e, 0x00);

ds1302_write (0x80, 0x80);

ds1302_hour=ds1302_read(0x85);

ds1302_min=ds1302_read(0x83);

hour_da=(ds1302_hourgt; gt; 4) *10 (ds1302_ houramp; 0x0f);

min_da=(ds1302_mingt; gt; 4)*10 (ds1302_minamp; 0x0f); ** ********************** Bit de visualización normal cero

flash_min=1 //**************; ****** ** bit de posición del flash dividido

do

{key_s=key_scan();

if(key_s^key_v)

{delayNS (10);

key _s=key_scan();

if(key_s^key_v)

{key_v=key_s;

if((key_vamp;0x04)==0x00)

key_sel=0x01;

si no((key_vamp;0x02)==0x01)

si no ((key_va

mp amplificador 0x02)==0x00)

{min_da;

if(min_da==0x3c)

min_da=0x00;

ds1302_min=((min_da/10)lt;lt;4)|(min_da10);

ds1302_write(0x82, ds1302_min);

}

más if((key_vamp;0x01)==0x00)

{min_da--;

if(min_da==0xff)

min _da=0x00;

ds1302_min=((min_da/10)lt; lt; 4)|(min_da10);

ds1302_write(0x82, ds1302_min); >

}

}

}mientras(key_sel==0x00);

flash_min=0

flash_hour=1;

hacer

{key_s=key_scan();

if(key_s^key_v)

{ retrasoNS(10);

key_s=key_scan();

if(key_s^key_v)

{key_v=key_s;

if((key_vamp;0x04 )==0x00)

key_sel=0x00;

else if((key_vamp;0x02)==0x00)

{hora_da;

if(hora_da==0x18)

hora_da=0x00;

ds1302_hora=((hora_da/ 10)lt;lt;4)|(hora_da10);

ds1302_write(0x84, ds1302_hour);

}

else if((key_vamp;0x01)==0x00)

{hour_da--;

if(hora_da==0xff)

hora_da=0x00;

ds1302_hora=((hora_da/10)lt;lt;4)|(hora_da10);

ds1302_write(0x84, ds1302_ hora

}

}

}

}

}

}mientras(key_sel==0x01);

//********************* ************************************** ******** **

flash_bit=1

ds1302_write(0x80, 0x00);

ds1302_write(0x8e, 0x80

}< /p); >

}

}

}

//****************** ** *******************

***********************************

// Interrupción programada

p>

void timer0_read_1302() usa 1

{unsigned char i, disp_code_data, read_min, read_hour

TR0=0

TH0=0xec; ;

TL0=0x78;

disp_ off_bit();

disp_bit

if(flash_bit)//visualización normal

{

if(disp_bit==0x01)

{disp_code_data=show_char[disp_data[ 0]]

send_595(disp_code_data);

ml=0;

}

si(disp_bit==0x02)

{if(read_secamp;0x01)

disp_code _data=show_char[disp_data[1]]&0x7f;

else

disp_code_data=show_char[disp_data[1]];

send_595 (disp_code_data);

mh=0

}

si(disp_bit==0x03)

{disp_code_data= show_char[ disp_data[2];

send_595(disp_code_data);

hl=0

}

si(disp_bit= =0x04; )

{disp_bit=0x00;

disp_code_data=show_char[disp_data[3]];

send_595( disp_code_data);

hh =0;

}

if(read_1302_500ms ==100)

{read_1302_500ms=0x00;

read_sec=ds1302_read( 0x81 ) ;

read_min=ds1302_read(0x83);

read_hour=ds1302_read(0x85);

disp_data[0]=read_hourgt;gt;4;

disp_data[1]= read_houramp;0x0f;

disp_data[2]=read_mingt;gt;4;

disp_data[3]=read_minamp;0x0f;

}

}

más ////**** ******************* ** *************************** Visualización de flash en pantalla

{if(flash_min)//***** **********************

********************* Puntuación de flash de pantalla

{if (flash_min_cpl)//************ ** ************************* Cambio de flash de pantalla

{if(disp_bit==0x01)

{disp_code_data =show_char[disp_data[0]];

send_595(disp_code_data);

ml=0;

}

else if( disp_bit==0x02)

{disp_code_data=show_char[disp_data[1]];

send_595(disp_code_data);

mh=0;

}

else if(disp_bit==0x03)

{disp_code_data=show_char[disp_data[2]];

send_595( disp_code_data);

hl=0

if(read_secamp; 0x01)

{mh=0;

dp=0;

}

más

{mh=1

dp=1

}

else if(disp_bit==0x04)

{disp_bit=0x00;

disp_code_data=show_char[disp_data[3]];

send_595( disp_code_data);

hh=0

}

if(read_1302_500ms ==100)

{read_1302_500ms=0x00; p>

read_sec=ds1302_read(0x81);

read_min=ds1302_read(0x83);

read_hour=ds1302_read(0x85);

disp_data[0 ]=read_hourgt; gt;4;

disp_data[1]=read_houramp;0x0f;

disp_data[2]=read_mingt;gt;4;

disp_data [3] =read_minamp;0x0f;

flash_min_cpl=0;

}

}

más

{if( disp_bit==0x01)

{disp_code_data=show_char[disp_data[0]];

send_595(disp_code_data);

ml =0;

}

más si(disp_bit==0x02)

{disp_code_data=(show_char[disp_data[1]])amp;0x7f;

send_595(disp_ code_data);

mh=0;

//dp=0

}

si(disp_bit==0x03)

{disp_code_data= 0xff;

send_595(disp_code_data);

hl=0;

if(read_secamp;0x01)

{mh=0 ;

dp=0;

}

más

{mh=1

dp=1 ;

}

}

si no (disp_bit==0x04)

{disp_bit=0x00;

disp_code_data=0xff;

send_595(disp_code_data);

hh=0

}

if(read_1302_500ms ==100)

{read_1302_500ms=0x00;

read_sec=ds1302_read(0x81);

read_min=ds1302_read(0x83);

read_hour=ds1302_read ( 0x85);

disp_data[0]=read_hourgt;gt;4;

disp_data[1]=read_houramp;0x0f;

disp_data [2]= read_mingt ;gt;4;

disp_data[3]=read_minamp;0x0f;

flash_min_cpl=1;

}

}< / p>

}

else if(flash_ hour)//************************ en pantalla flash

{if(flash_hour_cpl)//****************** en pantalla flash flip

{if(disp_bit==0x01)

{disp_code_ data=show_char[disp_data[0]];

send_595(disp_code_data);

ml=0

}<; /p>

else if(disp_bit==0x02)

{disp_code_ data=show_char[disp_data[1]];

send_595(disp_code_data);

mh=0;

}

else if(disp_bit==0x03)

{disp_code_ data=show_char[disp_data[2]]; p>

send_595(disp_code_data);

hl=0;

if(read_secamp;0x01)

{mh=0;

dp=0;

}

más

{mh=1;

p=1;

}

}

si(disp_bit==0x04)

{disp_bit=0x00;

disp_code_data= show_char[disp_data[3]];

send_595(disp_code_data

hh=0

}

if(read_1302_500ms ==100)

{read_1302_ 500ms=0x00;

read_sec=ds1302_read(0x81);

read_min=ds1302_read(0x83);

read_hour=ds1302_read(0x85);

disp_data[0]=read_hourgt;gt;4;

disp_data[1]=read_houramp;0x0f;

p>

disp_data[2]=read_mingt;gt;4;

disp_data[3]=read_minamp;0x0f;

flash_hour_cpl=0;

}

}

else//flash_disp_hour_cpl

{if(disp_bit==0x01)

{disp_code_data= 0xff;

send_595(disp_code_data);

ml=0;

}

else if(disp_bit==0x02)

{disp_code_data=0xff;

send_595( disp_code_data

mh=0

}

si no; (disp_bit==0x03 )

{disp_code_data=show_char[disp_data[2]];

send_595( disp_code_data

hl=0; >

if (read_secamp; 0x01)

{mh=0;

dp=0

}

else<; /p>

{mh=1;

dp=1;

p> }

}

si( disp_bit==0x04)

{disp_bit=0x00;

disp_code_data=show_char[disp_data[3]]

for(i=0; ilt; 8 .i )

{Si_595=(bit)(disp_code_dataamp;0x80);

CLK_595=0;

_nop_();

CLK_595=1;

disp_code_datalt;lt;=1;

}

LD_595=0

_nop_(); /p>

LD_595=1;

CLK_595=1

h;

h=0;

}

if(read_1302_500ms ==100)

{read_1302_500ms=0x00

read_sec=ds1302_read(0x81

read_min=ds1302_read(0x83);

read_hour=ds1302_read(0x85);

disp_data[0]=read_hourgt;gt; p> p>

disp_data[1]=read_houramp;0x0f;

disp_data[2]=read_mingt;gt;4;

disp_data [3]=read_minamp;0x0f;

p>

flash_hour_cpl=1;

}

}

}

}

TR0= 1;

}

//*********************** ** ******* *******************************************

/* Escribe datos en la dirección especificada por ds1302*/

/*====================== ======== ============*/

//********************* *********** **************************************** **********

void ds1302_write(dirección de caracteres sin firmar, datos de caracteres sin firmar DS1302)

{

recuento de caracteres sin firmar;

ds1302_sclk=0;

_nop_();

ds1302_rst=1;

_nop_();

for(count=8; countgt; 0; count --)

{

ds1302_sclk=0

_nop_()

;

ds1302_io=address amp; 0x01; //envía el bit bajo primero (envía la dirección al ds1302)

dirección gt;=1; //prepárate para enviar el siguiente bit

ds1302_sclk=1;

}

for(count=8; countgt; 0; count--)

{

ds1302_ sclk=0;

_nop_();

ds1302_io=DS1302_datum amp; //Enviar datos a ds1302

DS1302_datum amp;gt; gt;=1; //Prepárate para enviar el siguiente bit

ds1302_ sclk=1

}

ds1302_rst=0; > _nop_();

}

////

/////////////////////////////////////////////

/ * Leer los datos en la dirección especificada en ds1302 datos en la dirección*/

/*========================= ====== ===============*/

carácter sin firmar ds1302_read(dirección de carácter sin firmar)

{

recuento de caracteres sin firmar ;

ds1302_sclk=0

_nop_()

ds1302_rst=1

_nop_(); ;

for(count=8; countgt; 0; count--)

{

ds1302_sclk=0

_nop_( );

ds1302_io=address amp; 0x01; //Envía el bit alto primero (envía la dirección a ds1302)

dirección amp;gt;=1; el siguiente bit<

ds1302_sclk=1;

}

DS1302_datum=0

for(count=8; countgt; 0 ; contar--)

{

ds1302_sclk=0;

_nop_( );

DS1302_datum gt;

if( ds1302_io==1)

DS1302_datum |=0x80; //leer datos de ds1302

ds1302_sclk=1;

}

ds1302_rst= 0;

_nop_();

return DS1302_datum; //devuelve datos leídos

}

/////// //////////////////////////////////////////

/* Programa de inicialización */

/*============================= ============== ===*/

void ds1302_initialization()

{

ds1302_rst=0;

set_enable();

set_charge(0xA9); //Escribir registro de carga

set_sec(get_sec()amp; 0x7F); p>

}

//****************************** *******

//key_scan

unsigned char key_scan()

{unsigned char key_number

key_number=0x00; p> número_clave|=Conjunto_claves

número_clavelt;lt;=1;

número_clave|=Clave

_reduce;

key_numberlt;lt;=1;

key_number|=Key_increase;

return(key_number);

}

//************************************

//************************************

/ Retraso

void delayNS(unsigned char ms)

{unsigned char i;

while(ms--)

for(i=0; ilt ;120 ;i);

}