Documente Academic
Documente Profesional
Documente Cultură
pentru control
1
Cuprins:
2
Capitolul 1. Proiectare hardware
Date de proiectare:
Sa se realizeze un ceas digital cu ajutorul microcontrolerului 8051.
In acest ceas digital să se afișeze data si ora.
De asemenea să ajusta data și ora după cum doriţi.
3
Capitolul 2. Proiectare software
4
delay(40);
en=0;
}
void main()
{
int h,m,s,y,mo,d,y1,y2,y3,y4,mo1,mo2,d1,d2,h1,h2,m1,m2,s1,s2,i,j,k;
unsigned char array[]={'0','1','2','3','4','5','6','7','8','9'};
command(0x38); //codul de comanda LCD pentru 2 linii si matrice 5*7
command(0x0c);
command(0x06); //codul de comanda LCD pentru cursoare incremental (deplasare cursorul la
dreapta)
while(1)
{
y=2018; //incepand cu anul 2018
while(y>=2018)
{
for(mo=1;mo<=12;mo++)
{
if(mo==1) //conditie pentru luna ianuarie
{
d=31;
}
else if(mo==2) //conditie pentru luna februarie
{
if((y%4)==0) //conditie pentru anul bisect
{
d=29;
}
else
{
d=28;
}
}
else if(mo==3) //conditie pentru luna martie
{
d=31;
}
else if(mo==4) //conditie pentru luna aprilie
{
d=30;
}
else if(mo==5) //conditie pentru luna mai
{
d=31;
}
else if(mo==6) //conditie pentru luna iunie
{
d=30;
}
else if(mo==7) //conditie pentru luna iulie
{
5
d=31;
}
else if(mo==8) //conditie pentru luna august
{
d=31;
}
else if(mo==9) //conditie pentru luna septembrie
{
d=30;
}
else if(mo==10) //conditie pentru luna octombrie
{
d=31;
}
else if(mo==11) //conditie pentru luna noiembrie
{
d=30;
}
else if(mo==12) //conditie pentru luna decembrie
{
d=31;
}
for(i=1;i<=d;i++)
{
for(h=0;h<=23;h++) //conditie pentru ore intr-o zi
{
for(m=0;m<=59;m++) //conditie pentru minute intr-o
ora
{
for(s=0;s<=59;s++) //conditie pentru secunde intr-
un minut
{
y1=y/1000;
6
lcddisplaydata(array[d2]);
command(0x84); //comanda LCD pentru a cincea pozitie din prima linie
lcddisplaydata('-');
command(0x86); //comanda LCD pentru a saptea pozitie din prima linie
lcddisplaydata(array[mo1]);
lcddisplaydata(array[mo2]);
command(0x89); //comanda LCD pentru a zecea pozitie din prima linie
lcddisplaydata('-');
command(0x8b); //comanda LCD pentru a douasprezecea din prima linie
lcddisplaydata(array[y1]);
lcddisplaydata(array[y2]);
lcddisplaydata(array[y3]);
lcddisplaydata(array[y4]);
command(0xc0); //comanda LCD pentru prima pozitie din a doua linie
lcddisplaydata(array[h1]);
lcddisplaydata(array[h2]);
command(0xc4); //comanda LCD pentru a patra pozitie din a doua linie
lcddisplaydata(':');
command(0xc6); //comanda LCD pentru a sasea pozitie din a doua linie
lcddisplaydata(array[m1]);
lcddisplaydata(array[m2]);
command(0xca); //comanda LCD pentru a unsprezecea pozitie din a doua
linie
lcddisplaydata(':');
command(0xcc); //comanda LCD pentru a treisprezecea pozitie din a doua
linie
lcddisplaydata(array[s1]);
lcddisplaydata(array[s1]);
delay(100);
if(p==0) //comutator pentru cresterea orelor
{
h++; //conditie pentru a seta ore
s=-1; //a doua resetare la zero dupa eliberarea comutatorului h+
+
if(h==24) //daca h = 24 atunci orele încep de la zero
{
h=0;
s=-1;
}
}
else if(q==0) //comutator pentru scaderea minutelor
{
if(m>0) //daca minutul este mai mare decât zero
{
m--; //minutul este redus la zero
s=-1; //dupa eliberarea butonului de micsorare a minutului
secunda se initializeaza de la zero
}
}
else if(r==0) //comutator pentru scaderea orelor
{
7
if(h>0) //daca ora este mai mare decat zero
{
h--; //ora este redus pana la zero
s=-1; //dupa eliberarea butonului de micsorare a ora
secunda se initializeaza de la zero
}
}
else if(l==0) //comutator pentru cresterea minutelor
{
m++;
s=-1;
if(m>60) //daca minutele depasesc 60 atunci incep din nou de la zero
{
m=0;
s=-1;
}
}
else if(t==0) //comutator pentru cresterea zilelor
{
i++;
if(i>31) //daca zilele depasesc 31 atunci incep din nou de la zero
{
i=0;
}
}
else if(u==0) //comutator pentru scaderea zilelor
{
if(i>0) //scade zilele pana la zero
{
i--;
}
}
else if(w==0) //comutator pentru cresterea lunilor
{
mo++;
if(mo>12) //daca lunile depasesc 12 atunci încep din nou de la zero
{
mo=0;
}
}
else
{
h=h;
m=m;
i=i;
mo=mo;
}
command(0x82); //pentru a porni ecranul LCD de la pozitia a treia a primei
linii
command(0x06); //pentru a seta ecranul LCD in modul de intrare
}
8
}
}
}
}
}
}
}
9
Capitolul 3. Rezultatul simulării
10