Red de conocimiento del abogados - Ley de patentes - Solicitud de uso del microcontrolador 74LS273 para diseñar el informe de diseño del curso de reloj de computadora LED

Solicitud de uso del microcontrolador 74LS273 para diseñar el informe de diseño del curso de reloj de computadora LED

He utilizado cristales líquidos ds1302 y 1602 combinados con un sensor de temperatura ds18b20. Los tres botones se pueden usar para ajustar la hora, el año, el mes y el día, que se simulan en proteus.

Los resultados experimentales se muestran en la figura

¿El código del lenguaje C es el siguiente? #include #include #define?uchar?unsigned ?char uchar?miao ,fen,xiaoshi,ri,yue,nian,tem,lsb,msb,pushtime; uchar?code?x[]="?20?/?/?"; "?:?: ?"?; sbit?RS=P1^0;

sbit?ES=P1^1;

sbit?clk=P3^2;

sbit ?IO=P3^7;

sbit?reset=P3^0;

sbit?key1=P1^4;

sbit ?key2=P1^ 5;

sbit?key3=P1^6;

sbit?DQ=P1^7;

void?key();

void?delay(uchar?z) //Retraso 4ms

{

uchar?x,y;

for(x =0;x

for(y=0;y<110;y++);

}

void?delayus(uchar? z)// 10us

{

uchar?i;

for(i=0;i

{

_nop_();

}

}

fecha nula(uchar?dat)

{

?RS=1;

?P2=dat;

?EN=1;

?delay(1);

?ES=0;

?delay(1);?

}

void?write_com(uchar?com)

{

?RS=0;

?P2=com;

?ES=1;

?retraso(1 );

?ES=0;

?retraso(1);

}

void?init( )

{

uchar?i;

?EN=0;

write_com(0x38);

write_com(0x0c );

write_com(0x06); write_com(0x01);

write_com(0x80);

for(i=0;i< 11;i++)

{

fecha(x[i]);

}

write_com(0x80x40);

for(i=0;i<11;i++)

{

fecha(x1[i]);

}

clk=0;

IO=0;

reset=0;

}

void?write1 (uchar?x ) ?//Escribe un bit

{

IO=x;

clk=0;

clk= 1;

p>

}

uchar?read1() //Leer un dígito

{

uchar?x;

clk =1;

clk=0;

_nop_();

x=IO;

return?x;

}

void?writebyte(uchar?date) //Escribe un byte

{

uchar?i,x;

for(i=0;i<8;i++)

{

x=fecha%2;

fecha=fecha>>1;

write1(x);

}

}

uchar?readbyte()?//Leer un byte

{

uchar?i,x,date;

fecha=0;

for(i=0;i<8;i++)

{

x=read1();

x=x<

fecha=fecha+x;

}

regreso?fecha;

}

uchar?read(uchar?addr)

{

uchar?fecha;

reset=1;

writebyte(addr);

fecha=readbyte();

reset= 0;

retorno?fecha;

}

void?write(uchar?addr,uchar?date)

{

restablecer=1;

escribirbyte(dirección);

escribirbyte(fecha);

restablecer=0;

}

void?key()

{

uchar?gewei,shiwei,x;

if(key1= =0 )

{

delay(3);//Retraso de rebote del software de 12 ms

if(key1==0)

{

pushtime++;

while(key1==0);

}

}

cambiar(pushtime)

{

case?0:

romper;

case?1: //Modificar puntos

escribir(0x80,0x80);

escribir_com(0x80x47);

escribir_com(0x0f);

if(key2= =0)

{

retraso(3);

if(key2==0)

{

gewei= fen&0x0f ?//Obtener el dígito de las unidades

shiwei=(fen&0x70)>>4 //Obtener el dígito de las decenas

x=gewei+10* shiwei;

x++;

if(x==60)

{

x=0;

}

gewei=x%10;

shiwei=x/10;

fen=(shiwei<<4)+gewei; //Recuperar los puntos

write(0x82,fen ?//Modificar los puntos en 3102

write_com(0x80x40) +6);//Modificar los minutos en pantalla

date(shiwei+0x30);?

write_com(0x80x47);

fecha (gewei+0x30);

while(key2==0

}

}

if(key3==); 0 )

{

retraso(3);

if(key3==0)

{

gewei=fen&0x0f ?//Obtener el dígito de las unidades

shiwei=(fen&0x70)>>4; //Obtener el dígito de las decenas

x=gewei +10*shiwei;

x--;

si(x==255)

{

x=59;

}

gewei=x%10;

shiwei=x/10;

fen=(shiwei<<4)+gewei ; //Recuperar minutos

write(0x82,fen ?//Modificar el minuto en 3102

write_com(0x80x46);//Modificar la dirección del minuto

date(shiwei+0x30);?//Modificar la puntuación

write_com(0x80x47);//Modificar la subdirección

fecha (gewei+0x30); // Modificar puntuación

while(key3==0

}

}

break;

case ?2: ?//Modificar hora

write_com(0x80x44);

if(key2==0)

{

retraso(3);

if(key2==0)

{

gewei=xiaoshi&0x0f; //Obtener las unidades de la hora

shiwei=(xiaoshi&0x30)>>4; //Obtener las decenas de la hora

x=gewei+10*shiwei;

x++;

si(x==24)

{

x=0;

}

gewei=x%10;

shiwei=x/10;

xiaoshi=(shiwei<<4)+gewei; //Obtener la hora nuevamente

write(0x84,xiaoshi); ?//Modificar la hora en 3102

write_com(0x80x43);//Modificar la hora en pantalla

fecha(shiwei+0

x30);?

write_com(0x80x44);

fecha(gewei+0x30);

while(key2==0); /p>

}

}

if(key3==0)

{

retraso(3);

if(key3==0)

{

gewei=xiaoshi&0x0f ?//Obtener el dígito de las unidades de la hora

shiwei =( xiaoshi&0x30)>>4; //Obtener las decenas de la hora

x=gewei+10*shiwei;

x--;

if(x= =255)

{

x=23;

}

gewei=x%10;

shiwei=x/10;

xiaoshi=(shiwei<<4)+gewei; //Obtener la hora nuevamente

write(0x84,xiaoshi ?/ /Modificar en 3102 Hora

write_com(0x80x43);//Modificar la dirección de la hora

date(shiwei+0x30);?//Modificar la puntuación

write_com( 0x80x44);//Modificar dirección de hora

date(gewei+0x30); //Modificar puntuación

while(key3==0)

}

}

descanso;

caso?3:

write_com(0x810) ;//Fecha de modificación

if(key2==0)

{

retraso(3);

if(key2= =0)

{

gewei=ri&0x0f;//Obtener el dígito de las unidades del día

shiwei=(ri&0x30)>>4; Obtén las decenas del día

x=gewei+10*shiwei;

x++;

if(x==32)

{

x=0;

}

gewei=x%10;

shiwei=x/10;

ri=(shiwei< <4)+gewei; //Obtener el día nuevamente

write(0x86,ri ?//Modificar el día en 3102

write_com(0x89);//Modificar el día en la pantalla

date(shiwei+0x30);?

write_com(0x810);

fecha(gewei+0x30);

while(key2==0

}

}

if(key3); ==0)

{

retraso(

3);

if(key3==0)

{

gewei=ri&0x0f;//Obtener el dígito de las unidades del día

shiwei=(ri&0x70)>>4; //Obtener el décimo dígito del día

x=gewei+10*shiwei;

x--;

if(x==255)

{

x=31;

}

gewei=x%10 ;

shiwei=x/10;

ri=(shiwei<<4)+gewei; //Recupera el día

write(0x86,ri ?//Modificar el día en 3102

write_com(0x89);//Modificar la dirección del día

date(shiwei+0x30);?//Modificar los minutos y días

write_com(0x810);//Modificar la dirección del día

date(gewei+0x30); //Modificar el número del día

while (clave3==0);

}

}

descanso;

caso?4:

write_com(0x87);//Modificar mes

if(key2==0)

{

delay(3);

if(key2==0)

{

gewei=yue&0x0f ?//Obtener el dígito de las unidades del mes

shiwei=(yue&0x10) >>4; //Obtener las decenas del mes

x=gewei+10*shiwei;

x++;

if(x==13 )

{

x=0;

}

gewei=x%10;

shiwei= x/10;

yue=( shiwei<<4)+gewei; //Obtener el mes nuevamente

write(0x88,yue);//Modificar el mes en 3102

write_com(0x86);/ /Modificar el mes en pantalla

date(shiwei+0x30);?

write_com(0x87) ;

fecha(gewei+0x30);

while(key2==0

}

}

);

if(key3==0)

{

retraso(3);

if(key3==0)

{

gewei=yue&0x0f;// Obtener el dígito de las unidades del mes

shiwei=(yue&0x10)>> //Obtener el dígito de las decenas del mes

p>

x=gewei+10*shiwei;

x--;

if(x==0)

> {

x=12;

}

gewei=x%10;

shiwei=x/10;

yue=(shiwei<<4)+gewei; //Obtener el mes nuevamente

write(0x88,yue ?//Modificar el mes en 3102

write_com (0x86);//Modificar la dirección mensual

date(shiwei+0x30);?//Modificar el número de meses

write_com(0x87);/ /Modificar la dirección mensual

date(gewei+0x30); //Modificar el número de meses

while(key3==0);

}

}

break;

case?5:

write_com(0x84);//Modificar año

if(key2== 0)

{

retraso(3);

if(key2==0)

{

gewei=nian&0x0f;//Obtener las unidades del año

shiwei=(nian&0x70)>>4;/Obtener las decenas del año

x=gewei+10*shiwei ;

x++;

if(x==100)

{

x=0;

}

gewei=x%10;

shiwei=x/10;

nian=(shiwei< <4)+gewei; //Obtener el año nuevamente

write(0x8c,nian ?//Modificar el año en 3102

write_com(0x83);// Modificar los minutos en pantalla

date(shiwei+0x30);?

write_com(0x84);

date(gewei+0x30);

mientras(clave2==0)

}

}

si(clave3==0)

{

retraso(3) ;

if(key3==0)

{

gewei=nian&0x0f; Obtener el dígito de las unidades del año

shiwei =(nian&0x70)>>4 //Obtener el décimo dígito del año

x=gewei+10*shiwei;

x--;

si( x==255)

{

x=99;

}

gewei=x%10;

shiwei=x/10;

nian=(shiwei<<4)+gewei; //Obtener el año nuevamente

write(0x8c,nian); ?//Modificar 3102 El año intermedio

wr

ite_com(0x83);//Modificar la dirección del año

date(shiwei+0x30);?//Modificar el año

write_com(0x84);//Modificar la dirección del año

date(gewei+0x30); //Modificar el número de años

while(key3==0

}

}

descanso;

caso?6:

pushtime=0;

write_com(0x0c);

escribir (0x80,0x00);

romper;

}

}

void?resettem()

{

DQ=1;//restablecimiento de temperatura

_nop_();

_nop_();

DQ=0;

demoraus(60); //Retraso 480-960us 600us

DQ=1;

demoraus(6);//15 -60us

retraso(20);//tiempo de respuesta hasta 80ms

DQ=1;

_nop_();

_nop_();

}

void?temwrite1(uchar?x)

{

DQ=0;

_nop_( );

_nop_();//2us

DQ=x;

delayus(7);//70us

DQ =1;

_nop_();

_nop_();

}

void?temwritebyte(uchar ?fecha)

{

uchar?i,x;

for(i=0;i<8;i++)

{

x=fecha%2;

fecha=fecha>>1;

temwrite1(x);

}

}

uchar?temread1()

{

uchar?x;

DQ=0;

_nop_();

_nop_();//2us

DQ=1;

_nop_();

_nop_() ;

_nop_();//3us

x=DQ;

delayus(6);//60us

DQ= 1;

_nop_();

_nop_();//2us

return?x;

}

uchar?temreadbyte()

{

uchar?i,date,x;

date=0;

para (i=0;i<8;i++)

{

x=temread1();

x=x<

fecha=fecha+x;

}

retorno?fecha;

}

nulo? main()

{

uchar?gewei,shiwei;

init

();

escribir_com(0x815);

fecha(0xdf);

escribir(0x84,0x10);

while(1)

{

if(pushtime==0)

{

/*Medir el tiempo*/

miao=read(0x81);?//Cuenta regresiva

gewei=miao&0x0f;

shiwei=miao&0x70;

shiwei=shiwei>>4 ;

write_com(0x80x49);//Modificar la dirección de segundos

date(shiwei+0x30); //Modificar los segundos

write_com ( 0x80x410); //Modificar segunda dirección

date(gewei+0x30); //Modificar segundos

fen=read(0x83); /p>

gewei=fen&0x0f;

shiwei=fen&0x70;

shiwei=shiwei>>4;

write_com(0x80x46) ;//Modificar la subdirección

date(shiwei+0x30); //Modificar la puntuación

write_com(0x80x47);//Modificar la subdirección

date(gewei+0x30); //Modificar la puntuación

xiaoshi=read(0x85); //Leer la hora

gewei=xiaoshi&0x0f;

shiwei =xiaoshi&0x30;

shiwei=shiwei>>4;

write_com(0x80x43);//Modificar la dirección horaria

date(shiwei+0x30 ); //Modificar la hora

write_com(0x80x44);//Modificar la dirección de la hora

date(gewei+0x30) ; //Modificar la hora

nian=read(0x8d); //Leer el año

gewei=nian&0x0f;

shiwei=nian&0xf0;

shiwei=shiwei>>4 ;

write_com(0x83);//Modificar la dirección del año

date(shiwei+0x30); //Modificar el año

write_com(0x84 ); //Modificar la dirección del año

date(gewei+0x30); //Modificar el año

yue=read( 0x89); //Leer el mes

gewei=yue&0x0f;

shiwei=yue&0xf0;

shiwei=shiwei>>4;

write_com(0x86);//Modificar dirección mensual

date(shiwei+0x30); //Modificar el número de meses

write_com(0x87);// Modificar la dirección del mes

fecha(gewei+0x

30); //Modificar el número de meses

yue=read(0x87); //Leer el día

gewei=yue&0x0f;

shiwei=yue&0xf0 ;

shiwei=shiwei>>4;

write_com(0x89);//Modificar la dirección del día

date(shiwei+0x30); /Modificar el número de días

write_com(0x810);//Modificar la dirección del día

date(gewei+0x30); //Modificar el número de días

/*Medir temperatura*/

resettem();

temwritebyte(0xcc);

temwritebyte(0x44);

while(DQ==0);

resettem();

temwritebyte(0xcc);

temwritebyte(0xbe);

lsb=temreadbyte();

msb=temreadbyte();

tem=(lsb>>4)+(msb<<4);

gewei=tem%10;

shiwei=tem/10;

write_com(0x814);

fecha(gewei+0x30);

write_com(0x813);

fecha(shiwei+0x30);

}

clave(); p> }

}