标题:
单片机电子时钟程序
[打印本页]
作者:
flowwater
时间:
2017-7-6 00:33
标题:
单片机电子时钟程序
采用的一本教材上的算法,原封不动,没有修改,仅供学习使用,侵删。
下载:
电子时钟.docx
(12.77 KB, 下载次数: 6)
2017-7-6 00:33 上传
点击文件名下载附件
源代码
下载积分: 黑币 -5
#include<reg51.h>
#include<LCD1602.H>
#include<DS1302.h>
#include<reg51.h>
#define uchar unsigned char
#define unit unsigned int
bit key_flag1=0,key_flag2=0;
SYSTEMTIME adjusted;
uchar sec_add=0,min_add=0,hou_add=0,day_add=0,mon_add=0,yea_add=0,wee_add=0;
uchar data_alarm[7]={0};
int key_scan()
{
int i=0;
uint temp;
P1=0xf0;
temp=P1;
if(temp!=0xf0)
{
i=1;
}
else
{
i=0;
}
return i;
}
uchar key_value()
{
uint m=0,n=0,temp;
uchar value;
uchar v[4][3]={'2','1','0','5','4','3','8','7','6','b','a','9'} ;
P1=0xfe;temp=P1;if(temp!=0xfe)m=0;
P1=0xfd;temp=P1;if(temp!=0xfd)m=1;
P1=0xfb;temp=P1;if(temp!=0xfb)m=2;
P1=0xf7;temp=P1;if(temp!=0xf7)m=3;
P1=0xef;temp=P1;if(temp!=0xef)n=0;
P1=0xdf;temp=P1;if(temp!=0xdf)n=1;
P1=0xbf;temp=P1;if(temp!=0xbf)n=2;
value=v[m][n];
return value;
}
void adjust(void)
{
if(key_scan()&&key_flag1)
switch(key_value())
{
case'0':sec_add++;break;
case'1':min_add++;break;
case'2':hou_add++;break;
case'3':day_add++;break;
case'4':mon_add++;break;
case'5':yea_add++;break;
case'6':wee_add++;break;
default:break;
}
adjusted.Second+=sec_add;
adjusted.Minute+=min_add;
adjusted.Hour+=hou_add;
adjusted.Day+=day_add;
adjusted.Month+=mon_add;
adjusted.Year+=yea_add;
adjusted.Week+=wee_add;
if(adjusted.Second>59)
{
adjusted.Second=adjusted.Second%60;
adjusted.Minute++;
}
if(adjusted.Minute>59)
{
adjusted.Minute=adjusted.Minute%60;
adjusted.Hour++;
}
if(adjusted.Hour>23)
{
adjusted.Hour=adjusted.Hour%24;
adjusted.Day++;
}
if(adjusted.Day>31)
adjusted.Day=adjusted.Day%31+1;
if(adjusted.Month>12)
adjusted.Month=adjusted.Month%12+1;
if(adjusted.Year>100)
adjusted.Year=adjusted.Year%100;
if(adjusted.Week>7)
adjusted.Week=adjusted.Week%7;
}
void changing(void) interrupt 0
{
if(key_flag1)
key_flag1=0;
else
key_flag1=1;
}
void main()
{
uint i;
uchar p1[]="D:",p2[]="T:";
SYSTEMTIME T;
EA=1;
EX0=1;
IT0=1;
EA=1;
EX1=1;
IT1=1;
init1602();
Initial_DS1302();
while(1)
{
write_com(0x80);
write_string(p1,2);
write_com(0xc0);
write_string(p2,2);
DS1302_GetTime(&T);
adjusted.Second=T.Second;
adjusted.Minute=T.Minute;
adjusted.Hour=T.Hour;
adjusted.Week=T.Week;
adjusted.Day=T.Day;
adjusted.Month=T.Month;
adjusted.Year=T.Year;
adjusted.Week=T.Week;
for(i=0;i<12;i++)
{
adjusted.DateString[i]=T.DateString[i];
adjusted.TimeString[i]=T.TimeString[i];
}
adjust();
DateToStr(&adjusted);
TimeToStr(&adjusted);
write_com(0x82);
write_string(adjusted.DateString,11);
write_com(0xc2);
write_string(adjusted.TimeString,8);
delay(10);
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1