Red de conocimiento del abogados - Ley de patentes - Curso diseño de reloj electrónico para microcontrolador 89c51

Curso diseño de reloj electrónico para microcontrolador 89c51

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define LCD1602_FLAG

#define LCD1602_PORT P0

sbit lcd1602_rs=P2^0;

sbit lcd1602_e=P2^2 ;

sbit lcd1602_rw=P2^1;

sbit lcd1602_busy=P0^7;

sbit key_ch=P3^5;

sbit key_add=P3^6;

sbit key_minus=P3^7;

uchar i,sec,min,h,fecha,mes,bandera;

uint año;

uchar *chgstr[7]={" ?","sec","min","hora","fecha","min","año"};

uchar j,k,m,n,o,p;

tabla de códigos uchar[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

uchar timestr[10],datestr[10];

void init();

void delay(uint);

void time_display();

void date_display();

void control();

void time();

/*

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

* Nombre de la función: lcd1602_CheckBusy( )

* Función: consulta de estado

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

*/

void lcd1602_CheckBusy()

{

hacer

{

lcd1602_busy=1;

lcd1602_rs=0;

lcd1602_rw=1;

lcd1602_e=0;

lcd1602_e=1;

}

mientras(lcd1602_busy);

}

/*

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

* Nombre de la función: lcd1602_WriteCmd( )

* Función: escribir comando

* Parámetro de entrada: palabra de comando

* Parámetro de salida: Ninguno

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

*/

void lcd1602_WriteCmd(const uchar cmd)

{

lcd1602_CheckBusy();

lcd1602_

rs=0;

lcd1602_rw=0;

lcd1602_e=1;

LCD1602_PORT=cmd;

lcd1602_e=0; p>

}

/*

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

* Nombre de la función: lcd1602_WriteData()

* Función de la función: Escribir datos

* Parámetro de entrada: c--datos a escribir

* Parámetro de salida: Ninguno

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

*/

void lcd1602_WriteData(const uchar c)

{

lcd1602_CheckBusy();

lcd1602_rs=1;

lcd1602_rw=0;

lcd1602_e=1;

p>

LCD1602_PORT=c;

lcd1602_e=0;

}

/*

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

* Nombre de la función: lcd1602_Init()

* Función: Inicializar LCD

* Parámetros de entrada: Ninguno

* Parámetros de salida : Ninguno

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

*/

void lcd1602_Init()

{

lcd1602_WriteCmd(0x38); El modo de visualización es de 8 bits, 2 líneas, matriz de puntos de 5*7

lcd1602_WriteCmd(0x0c); //display enable,flag enable,flash enable,

lcd1602_WriteCmd(0x06); //bandera se mueve hacia la derecha, la pantalla no se mueve

lcd1602_WriteCmd(0x01); //borrar pantalla

}

/*

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

* Nombre de la función: lcd1602_Display()

* Función: Visualización de caracteres

* Parámetro de entrada: ptr - carácter o puntero de cadena

* Parámetro de salida: Ninguno

* Nota: Los usuarios pueden llamarlo de las siguientes maneras:

* 1) lcd1602_Display("¡Hola, mundo!");

* ? 2) Tipo de almacenamiento INT8U txt[]= "Cadena a mostrar";

* ?O tipo de almacenamiento INT8U txt[]={'t','x' ,'t',..,'\0'};

* ?INT8U *ptr;

* ?ptr=&txt;

* ?lcd1602_Display (ptr);

* ?o lcd1602_Display(txt );

* ?o lcd1602_Display(&txt

);

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

*/

void lcd1602_Display(const uchar *ptr,uchar line,uchar xaddr)

{

uchar datos i=0;

uchar *datos q;

q=ptr;

cambiar(línea)

{

caso 0:

lcd1602_WriteCmd(0x8xaddr);

while(q!=NULL && (*q!='\ 0') && i <16)

{

lcd1602_WriteData(*q);

q++;

i++;

}

descanso;

caso 1:

lcd1602_WriteCmd(0xcxaddr);

mientras(q!= NULL && (*q !='\0') && i<16)

{

lcd1602_WriteData(*q);

q++;

i++ ;

}

romper;

}

}

void main()

{

lcd1602_Init();

init();

mientras(1)

{

time_display();

fecha_display();

control();

}

}

void init()

{

i=0;

seg=0;

min=30;

h=7;

fecha=17;

mes=10;

año=2017;

bandera=0;

EA=1;

ET0=1;

TMOD=0x01;

TH0=(65536- 50000)/256;

TL0=(65536-50000)%256;

TR0=1;

}

retraso nulo (uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y =110;y>0;y--);

}

void time_display()

{

timestr[7] =0x3seg%10;

timestr[6]=0x3seg/10;

timestr[5]=':';

timestr[ 4]=0x3min%10;

timestr[3]=0x3min/10;

timestr[2]=':';

timestr[1]=0x3h%10;

timestr[0]=0x3h/10;

timestr[8]=0;

lcd1602_Display(timestr,1,3);

}

void date_display(

)

{

datestr[9]=0x3fecha%10;

datestr[8]=0x3fecha/10;

datestr[7]=':';

datesr[6]=0x3mes%10;

datestr[5]=0x3mes/10;

datesr[4]=':';

datesr[3]=0x3año%10;

datesr[2]=0x3año/10%10 ;

datesr[1]=0x3año/100%10;

datesr[0]=0x3año/1000;

lcd1602_Display(datesr, 0,2);

}

control de vacío()

{

if(!key_ch)

{

retraso(5);

if(!key_ch)

{

bandera++;

TR0=0;

if(flag==7)

{flag=0;TR0=1;lcd1602_Init();}

lcd1602_Display(chgstr[ bandera],1,12);

}

}

mientras(!key_ch);

if(flag==1&&key_add ==0)

{

mientras(!key_add);

seg++;

if(sec==60)

sec=0;

}

if(flag==1&&key_minus==0)

{

mientras (!key_minus);

seg--;

if(sec==-1)

sec=59;

}

if(flag==2&&key_add==0)

{

mientras(!key_add);

min++;

si(min==60)

min=0;

}

si(bandera==2&&key_minus==0)

{

mientras(!key_minus);

min--;

if(min==-1)

min=59;

}

if(flag==3&&key_add==0)

{

mientras(!key_add) ;

h++;

si(h==24)

h=0;

}

if(flag==3&&key_minus==0)

{

mientras(!key_minus);

h--;

si (h==-1)

h=23;

}

if(flag==4&&key_add==0)

{

mientras(!key_add);

fecha++;

if(fecha==29)

if((año%4 !=0)&&(mes==2))

fecha=

1;

if(fecha==30)

if((año%4==0)&&(mes==2))

fecha= 1;

if(fecha==31)

if((mes==4)||(mes==6)||(mes==9)||( mes==11))

fecha=1;

if(fecha==32)

if((mes==1)||(mes ==3)||(mes==5)||(mes==7)||(mes==8)||(mes==10)||(mes==12))

fecha=1;

}

if(flag==4&&key_minus==0)

{

mientras(!key_minus );

if(fecha>1)fecha--;

}

if(flag==5&&key_add==0)

{

mientras(!key_add);

mes++;

if(mes==13)

mes=1;

}

if(flag==5&&key_minus==0)

{

mientras(!key_minus);

mes--;

if(mes==0)

mes=12;

}

if(bandera= =6&&key_add==0)

{

mientras(!key_add);

año++;

if(año==99)

año=1;

}

if(flag==6&&key_minus==0)

{

mientras(!key_minus);

año--;

if(año==0)

año=99;

}

}

void T0_rpt() interrupción 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

i++;

tiempo();

}

nulo tiempo()

{

si(i==20)

{

i=0;

seg++;

if(seg==60)

{

seg=0;

min++;

si(min==60)

{

min=0;

h++;

si(h==24 )

{

h=0;

min=0;

seg=0;

fecha++ ;

if(fecha==29)

if((año%4!=0)&&(mes==2))

{

fecha=1;

mes++;

si(mes==13)

{

mes=1 ;

año++;

}

}

if(fecha

==30)

if((año%4==0)&&(mes==2))

{

fecha=1;

mes++;

if(mes==13)

{

mes=1;

año++;

}

}

if(fecha==31)

if((mes==4)||(mes== 6)||(mes==9)||(mes==11))

{

fecha=1;

mes++;

if(mes==13)

{

mes=1;

año++;

}

}

if(fecha==32)

if((mes==1)||(mes==3)||(mes==5) ||(mes==7)||(mes==8)||(mes==10)||(mes==12))

{

fecha= 1;

mes++;

si(mes==13)

{

mes=1;

año++;

}

}

}

}

}

}

}