?? 51
字號:
#include <at89x52.h>
#include <DS1302.h>
//定義共陽極字型碼0123456789-
unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
unsigned char time[]={0,0,0,0,0,0,0,0};//用來儲存時間
unsigned char date[]={0,0,0,0,0,0,0,0};//用來儲存日期
SYSTEMTIME time1; //在ds1302.h文件中已經定義了一個名字為SYSTEMTIME的結構體,在這里我們定義一個變量名
//為time的SYSTEMTIME結構體
void delay(unsigned char i) //延時子程序
{
unsigned char j;
while((i--)!=0)
{
for(j=123;j>0;j--);
}
}
unsigned char button_time(n,x,y) //時鐘調整子程序
unsigned char n,x,y;
{
if(P3_2==0)
{
delay(50);
if(P3_2==0)
{
n++;
if(n==x)
n=0;
while(P1_7==0);
}
}
if(P3_3==0)
{
delay(50);
if(P3_3==0)
{
if(n==0)
n=y;
else
n--;
while(P3_3==0);
}
}
return n;
}
unsigned char button_date(n,x,y) //日期調整子程序
unsigned char n,x,y;
{
if(P3_2==0)
{
delay(50);
if(P3_2==0)
{
n++;
if(n==x)
n=1;
while(P3_2==0);
}
}
if(P3_3==0)
{
delay(50);
if(P3_3==0)
{
if(n==1)
n=y;
else
n--;
while(P3_3==0);
}
}
return n;
}
void display(second10,second1,minute10,minute1,hour10,hour1) //顯示子程序
unsigned char second10,second1,minute10,minute1,hour10,hour1;
{
P2=0xfe;
P0=dispcode[second10];//顯示秒的十位
delay(1);
P2=0xfd;
P0=dispcode[second1]; //顯示秒的個位
delay(1);
P2=0xfb;
P0=dispcode[10]; //顯示"-"
delay(1);
P2=0xf7;
P0=dispcode[minute10];//顯示分的十位
delay(1);
P2=0xef;
P0=dispcode[minute1]; //顯示分的個位
delay(1);
P2=0xdf;
P0=dispcode[10]; //顯示"-"
delay(1);
P2=0xbf;
P0=dispcode[hour10]; //顯示時的十位
delay(1);
P2=0x7f;
P0=dispcode[hour1]; //顯示時的個位
delay(1);
}
void main()
{
unsigned char flag;
Initial_DS1302(); //初始化DS1302這個時鐘芯片,
while(1)
{
DS1302_GetTime(&time1); //讀取時間參數
time[5]=(time1.Second)%10; //把秒的個位數據存入time[5]
time[4]=(time1.Second)/10; //把秒的十位數據存入time[4]
time[3]=(time1.Minute)%10; //把分的個位數據存入time[3]
time[2]=(time1.Minute)/10; //把分的十位數據存入time[2]
time[1]=(time1.Hour)%10; //把時的個位數據存入time[1]
time[0]=(time1.Hour)/10; //把時的十位數據存入time[0]
date[5]=(time1.Day)%10;
date[4]=(time1.Day)/10;
date[3]=(time1.Month)%10;
date[2]=(time1.Month)/10;
date[1]=(time1.Year)%10;
date[0]=(time1.Year)/10;
if(P3_5==0) //如果按下Time Start鍵一下,時鐘開始正常顯示時間,再按一下,顯示日期
{
delay(50);
if(P3_5==0)
{
flag++;
if(flag>1)
{
flag=0;
}
}
while(P3_5==0);
}
if(P3_4==0) //如果按下Time Set鍵一下,開始顯示日期,再按一下進入日期跟時鐘的調節模式
{
delay(50);
if(P3_4==0)
{
flag++;
if(flag>7)
{
flag=0;
}
}
while(P3_4==0);
}
switch(flag)
{
case 0:display(time[0],time[1],time[2],time[3],time[4],time[5]); //調用子函數display,把存入數組time的數據給顯示出來
break;
case 1:display(date[0],date[1],date[2],date[3],date[4],date[5]); //調用子函數display,把存入數組date的數據給顯示出來
break;
case 2:time1.Year=button_date(time1.Year,100,99); //調整年
DS1302_SetTime(0x8c,time1.Year);
display(date[0],date[1],10,10,10,10);
break;
case 3:time1.Month=button_date(time1.Month,13,12); //調整月
DS1302_SetTime(0x88,time1.Month);
display(10,10,date[2],date[3],10,10);
break;
case 4:time1.Day=button_date(time1.Day,32,31); //調整日
DS1302_SetTime(0x86,time1.Day);
display(10,10,10,10,date[4],date[5]);
break;
case 5:time1.Hour=button_time(time1.Hour,24,23); //調整時
DS1302_SetTime(0x84,time1.Hour);
display(time[0],time[1],10,10,10,10);
break;
case 6:time1.Minute=button_time(time1.Minute,60,59); //調整分
DS1302_SetTime(0x82,time1.Minute);
display(10,10,time[2],time[3],10,10);
break;
case 7:time1.Second=button_time(time1.Second,60,59); //調整秒
DS1302_SetTime(0x80,time1.Second);
display(10,10,10,10,time[4],time[5]);
break;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -