📄 clock.c
字号:
/*-----------------------------------------------------*
* A real time clock using AT89C4051 *
* This c file is created using Keil C compiler *
* *
* Designed By: Ajay Bhargav *
* E-mail: bhargav.ajay@gmail.com *
* ajay_bhargav@hotmail.com *
* website: http://www.rickeyworld.info *
*------------------------------------------------------*/
#include "LCD.H"
bit_8 code *days[]={"Sunday ","Monday ","Tuesday ","Wednesday","Thursday ","Friday ","Saturday "}; // days array
bit_8 code *mon[]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
bit_8 code *val[]={"0","1","2","3","4","5","6","7","8","9","10","11","12"}; // digit array
bit flag;
bit_8 month=1,date=1,hh,lmin,hmin,hsec,lsec,day=0,lyear=6,hyear=0,date_count;
/*-------------------------------
*** Main programe starts here ***
-------------------------------*/
void main()
{
bit_8 temp;
ENABLE_INT
ini();
cgrambuild();
sel_param=1;
chg_param_inc=1;
chg_param_dec=1;
month_select(month);
while(1)
{
month_select(month); // this will select month and dates
while(date<=date_count)
{
command(0xDE);
date_in(date);
command(0xE0);
data_in(" ");
data_in(mon[month-1]);
command(0xE4);
data_in(",");
data_in(val[hyear]);
data_in(val[lyear]);
for(hh=1;hh<=24;hh++)
{
command(0xD4);
data_in(days[day]);
if(hh<=12)
bdata_in(hh,0x81);
else
{
temp=hh-12;
bdata_in(temp,0x81);
}
if(hh<12||hh==24)
{
command(0xD1);
data_in("am");
}
else
{
command(0xD1);
data_in("pm");
}
for(hmin=0;hmin<=5;hmin++)
{
command(0x84);
data_in(" . ");
command(0xC4);
data_in(" . ");
big_data_in(hmin,0x87);
for(lmin=0;lmin<=9;lmin++)
{
big_data_in(lmin,0x89);
for(hsec=0;hsec<=5;hsec++)
{
command(0x8B);
data_in(".");
command(0xCB);
data_in(".");
big_data_in(hsec,0x8D);
for(lsec=0;lsec<=9;lsec++)
{
big_data_in(lsec,0x8F);
sec1();
if(_testbit_(flag))
set_clock();
}
}
}
}
if(hh==23&&lmin==0&&hmin==0)
{
day=day+1;
if(day==7)
day=0;
}
}
hh=1;
date=date+1;
}
month=month+1;
date=1;
if(month==13)
{
month=1;
lyear=lyear+1;
if(lyear==10)
{
lyear=0;
hyear=hyear+1;
}
}
}
}
/*-----------------------
-- Diaplaying the date --
-----------------------*/
void date_in(bit_8 a)
{
bit_8 j;
j=a/10;
data_in(val[j]);
j=a%10;
data_in(val[j]);
}
/*----------------------
*** one second delay ***
----------------------*/
void sec1()//can be fine tuned by changing the for loop values
{
bit_8 i,j;
TMOD=0x11;
for(i=0;i<75;i++)
_nop_();
for(i=0;i<7;i++)
{
TH1=0;
TH0=1;
TL1=0;
TL0=0;
TR1=1;
for(j=0;j<119;j++)
_nop_();
while(TF1!=1)
{
for(j=0;j<255;j++);
_nop_();
}
TF1=0;
TR0=1;
TR1=0;
while(TF0!=1)
{
for(j=0;j<120;j++)
_nop_();
}
TF0=0;
TR0=0;
}
}
/*---------------------
*** selecting month ***
---------------------*/
void month_select(bit_8 mon)
{
bit_8 year;
switch(mon)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
date_count=31;
break;
case 2:
year=hyear*10+lyear;
if(year%4==0)
date_count=29;
else
date_count=28;
break;
case 4:
case 6:
case 9:
case 11:
date_count=30;
break;
}
}
/*---------------------------------
*** Setting parameters of clock ***
---------------------------------*/
void clock_flag(void) interrupt 0
{
flag=1;
}
void set_clock(void)
{
bit_8 temp;
DISABLE_INT
command(1);
command(0x80);
data_in("Set");
command(0x8c);
data_in("Date");
command(0x0f);
command(0xc4);
date_in(date);
command(0xc6);
data_in("/");
if(month<=9)
data_in(val[0]);
data_in(val[month]);
command(0xc9);
data_in("/");
data_in(val[hyear]);
data_in(val[lyear]);
command(0xD4);
data_in("*Please Select Date*");
command(0xcb);
up2:while(chg_param_inc!=0&&chg_param_dec!=0&&sel_param!=0);
if(chg_param_inc==0)
{
lyear++;
if(lyear==10)
{
lyear=0;
hyear++;
}
command(0xca);
data_in(val[hyear]);
data_in(val[lyear]);
month_select(month);
command(0x10);
delay();
goto up2;
}
if(chg_param_dec==0)
{
lyear--;
if(lyear==-1)
{
lyear=9;
hyear--;
if(hyear==-1)
hyear=9;
}
command(0xca);
data_in(val[hyear]);
data_in(val[lyear]);
month_select(month);
command(0x10);
delay();
goto up2;
}
while(sel_param==0);
command(0xc8);
delay();
up1:while(chg_param_inc!=0&&chg_param_dec!=0&&sel_param!=0);
if(chg_param_inc==0)
{
month++;
if(month==13)
month=1;
command(0xc7);
if(month<=9)
data_in(val[0]);
data_in(val[month]);
month_select(month);
command(0x10);
delay();
goto up1;
}
if(chg_param_dec==0)
{
month--;
if(month==0)
month=12;
command(0xc7);
if(month<=9)
data_in(val[0]);
data_in(val[month]);
month_select(month);
command(0x10);
delay();
goto up1;
}
command(0xc5);
while(sel_param==0);
delay();
up: while(chg_param_inc!=0&&chg_param_dec!=0&&sel_param!=0);
if(chg_param_inc==0)
{
date++;
if(date>date_count)
date=1;
command(0xc4);
date_in(date);
command(0x10);
delay();
goto up;
}
if(chg_param_dec==0)
{
date--;
if(date==0)
date=date_count;
command(0xc4);
date_in(date);
command(0x10);
delay();
goto up;
}
while(sel_param==0);
command(0x01);
command(0xD6);
data_in("*Enter new time*");
command(0x80);
data_in("Set");
command(0x8c);
data_in("Time");
command(0xc4);
if(hh<=12)
{
if(hh<=9)
data_in(val[0]);
data_in(val[hh]);
}
else
{
temp=hh-12;
if(temp<=9)
data_in(val[0]);
data_in(val[temp]);
}
data_in(":");
data_in(val[hmin]);
data_in(val[lmin]);
command(0xca);
if(hh<12||hh==24)
{
data_in("am");
}
else
{
data_in("pm");
}
while(sel_param==0);
command(0xc5);
delay();
up3: while(chg_param_inc!=0&&chg_param_dec!=0&&sel_param!=0);
if(chg_param_inc==0)
{
hh++;
if(hh==25)
hh=1;
command(0xc4);
if(hh<=12)
{
if(hh<=9)
data_in(val[0]);
data_in(val[hh]);
}
else
{
temp=hh-12;
if(temp<=9)
data_in(val[0]);
data_in(val[temp]);
}
command(0xca);
if(hh<12||hh==24)
{
data_in("am");
}
else
{
data_in("pm");
}
command(0xc5);
delay();
goto up3;
}
if(chg_param_dec==0)
{
hh--;
if(hh==0)
hh=24;
command(0xc4);
if(hh<=12)
{
if(hh<=9)
data_in(val[0]);
data_in(val[hh]);
}
else
{
temp=hh-12;
if(temp<=9)
data_in(val[0]);
data_in(val[temp]);
}
command(0xca);
if(hh<12||hh==24)
{
data_in("am");
}
else
{
data_in("pm");
}
command(0xc5);
delay();
goto up3;
}
while(sel_param==0);
command(0xc8);
delay();
up4: while(chg_param_inc!=0&&chg_param_dec!=0&&sel_param!=0);
if(chg_param_inc==0)
{
lmin++;
if(lmin==10)
{
lmin=0;
hmin++;
if(hmin==6)
hmin=0;
}
command(0xc7);
data_in(val[hmin]);
data_in(val[lmin]);
command(0x10);
delay();
goto up4;
}
if(chg_param_dec==0)
{
lmin--;
if(lmin==-1)
{
lmin=9;
hmin--;
if(hmin==-1)
hmin=5;
}
command(0xc7);
data_in(val[hmin]);
data_in(val[lmin]);
command(0x10);
delay();
goto up4;
}
delay();
while(sel_param==0);
command(0x01);
command(0xD4);
data_in("*Please select Day*");
command(0x80);
data_in("Set");
command(0x8c);
data_in("Day");
command(0xc4);
data_in(days[day]);
delay();
up6: while(chg_param_inc!=0&&chg_param_dec!=0&&sel_param!=0);
if(chg_param_inc==0)
{
day++;
if(day==7)
day=0;
command(0xc4);
data_in(days[day]);
delay();
goto up6;
}
if(chg_param_dec==0)
{
day--;
if(day==-1)
day=6;
command(0xc4);
data_in(days[day]);
delay();
goto up6;
}
delay();
while(sel_param==0);
ini();
command(0xD4);
data_in(days[day]);
command(0xDE);
date_in(date);
command(0xE0);
data_in(" ");
data_in(mon[month-1]);
command(0xE4);
data_in(",");
data_in(val[hyear]);
data_in(val[lyear]);
if(hh<=12)
bdata_in(hh,0x81);
else
{
temp=hh-12;
bdata_in(temp,0x81);
}
if(hh<12)
{
command(0xD1);
data_in("am");
}
else
{
command(0xD1);
data_in("pm");
}
command(0x84);
data_in(" . ");
command(0xC4);
data_in(" . ");
big_data_in(hmin,0x87);
big_data_in(lmin,0x89);
command(0x8B);
data_in(".");
command(0xCB);
data_in(".");
big_data_in(hsec,0x8D);
big_data_in(lsec,0x8F);
delay();
ENABLE_INT
}
/*--------------------
*** Delay function ***
--------------------*/
void delay(void)//this delay is can be changed according to the
{ //speed requirement for the parameter values while changing.
bit_8 i,j;
TMOD=0x11;
for(i=0;i<2;i++)
{
TH1=0;
TH0=1;
TL1=0;
TL0=0;
TR1=1;
while(TF1!=1)
{
for(j=0;j<20;j++);
}
TF1=0;
TR0=1;
TR1=0;
while(TF0!=1)
{}
TF0=0;
TR0=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -