Back

2011_P15

Viewing page version #4
(Restore this version) 

Modified: 2 April 2010, 10:43 PM   User: Lamba Bogdan  → LB

CEAS DIGITAL

Project Description

Proiectul presupune implementarea unui ceas digital pe placa EV/Z3. Proiectul este software, display-ul si interfata cu utilizatorul fiind cele de pe placa EV/Z3, si are urmatoarele functionalitati:

  • afisare ora si data in formatul mm:hh:ss  dd/mm/yyyy
  • setare ora si data
  • cronometru
  • alarma

 

Project Requirements

Data(yyyy:mm:dd) + Timezone + Ora (hh:mm:ss) + Cronometru(rezolutie milisecunde)

Trebuie sa aveti posibilitatea sa setati Data + Ora curenta si timezone-ul curent. Ma intereseaza cum generati milisecundele.

Pentru timezone trebuie sa aveti in vedere cum se schimba data + ora odata setat (cel putin 5 timezone-uri)

User Flow

Initial ceasul este oprit si trebuie apasata tasta “1” pentru pornite. Tasta “0” opreste ceasul.

Utilizatorul are posibilitatea de a seta ora si data folosind tastele “3” si “7” pentru incrementarea respectiv decrementarea unitatilor selectate cu tastele:

“C” –tasta pentru setare ora

“D” –tasta pentru setare minute

“E” –tasta pentru setare secunde

“A” –tasta pentru setare zi

“B” –tasta pentru setare luna

“F” –tasta pentru setare an

Required components

Fiind un proiect software, nu am folosit alte componente hardware inafara de piesele care sunt in incluse in placa EV/Z3.

In codul OpenWatcom am folosit urmatoarele functii din interfata “platform_io.h” :

ReadKey –pentru citirea tastei apasate, folosit la pornirea ceasului si setarea orei/datei

DisplayString –pentru afisarea formatului de data si ora pe display sub forma de string

Software Design

Codul a fost compilat cu OpenWatcom si este format din urmatoarele functii si algoritmi:

//functie pentru preluarea codului tastei apasate

char convertkey(int key){

static char cod[19]={'0','2','4','6','8','A','C','E','c','l','1','3','5','7','9','B','D','F','r'};

return cod[key];

}

 

//functie pentru convertire din int in char pentru afisare pe display-ul placii

char *convert (char *c, int n)

{c[0]=n/10+'0';

c[1]=n%10+'0';

return c;

}

 

//Algoritm pentru ceas si data

while(b=1)
{
kIo.Wait(1000);
sec=sec+1;
if(sec == 60)
{
sec = 0;
min=min+1;
if(min == 60)
{
min = 0;
hour=hour+1;
if(hour == 24)
{
hour = 0;
d=d+1;
if((d > 31)&&(m==1))
{d=1;
m=2;}
if((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
bisect=1 else bisect=0;
if ((bisect==1)&&(d>29)&&(m==2))
{d=1;
m=3;}
if ((bisect==0)&&(d>28)&&(m==2))
{d=1;
m=3;}
if((d > 31)&&(m==3))
{d=1;
m=4;}
if((d > 30)&&(m==4))
{d=1;
m=5;}
if((d > 31)&&(m==5))
{d=1;
m=6;}
if((d > 30)&&(m==6))
{d=1;
m=7;}
if((d > 31)&&(m==7))
{d=1;
m=8;}
if((d > 31)&&(m==8))
{d=1;
m=9;}
if((d > 30)&&(m==9))
{d=1;
m=10;}
if((d > 31)&&(m==10))
{d=1;
m=11;}
if((d > 30)&&(m==11))
{d=1;
m=12;}
if((d > 31)&&(m==12))
{d=1;
m=1;
y=y+1;}
}
}
}

 

//algoritm pentru setarea ceasului si a datei

while(1)
{

key=kIo.ReadKey();
c=convertkey(key);
if(c=='1') b=1; //pornire ceas
if(c=='0') b=0; //oprire ceas
if(c=='C') set=1; //tasta pentru setare ora
if(c=='D') set=2; //tasta pentru setare minute
if(c=='E') set=3; //tasta pentru setare secunde
if(c=='A') set=4; //tasta pentru setare zi
if(c=='B') set=5; //tasta pentru setare luna
if(c=='F') set=6; //tasta pentru setare an   
if(set==1)
{if(c=='7') h=h-1; //tasta "7" ("DEC(-)") decrementeaza unitatea selectata de "set"
else
if(c=='3') h=h+1;} //tasta "3" ("INC(+)") incrementeaza unitatea selectata de "set"
if(set==2)
{if(c=='7') m=m-1;
else
if(c=='3') m=m+1;}
if(set==3)
{if(c=='7') s=s-1;
else
if(c=='3') s=s+1;}
if(set==4)
{if(c=='7') d=d-1;
else
if(c=='3') d=d+1;}
if(set==5)
{if(c=='7') m=m-1;
else
if(c=='3') m=m+1;}
if(set==6)
{if(c=='7') y=y-1;
else
if(c=='3') y=y+1;}

}

//Algoritm pentru afisarea orei si datei in formatul “hh:mm:ss  dd/mm “

char *sir="hh:mm:ss dd/mm  ";

convert(&sir[0],hour);
convert(&sir[3],min);
convert(&sir[6],sec);
convert(&sir[9],d);
convert(&sir[12],m);
kIo.DisplayString(sir);

Results

O imagine de ansamblu a cum functioneaza proiectul, screenshoturi, filmulete cu proiectul functionand. Alte detalii care le credeti importante.

Download

Arhiva cu schema hardware + cod microcontroller + tot proiectul OpenWatcom.

Arhiva va contine 2 directoare (1 singur pentru proiecte doar software)

Hardware design - schema uC + codul folosit pentru a genera fisierul .HEX

Software design - template-ul Open Watcom folosit

Status

O pagina in care sa updatati saptamanal cum stati cu proiectul. Sa spuneti ziua in care ati realizat diferite componente

Eg

1 Mai - board finaly done

15 Mai - board working - starting to write EV/Z3 software part