基于51单片机的电子日历Word格式.docx
- 文档编号:22777245
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:20
- 大小:17.62KB
基于51单片机的电子日历Word格式.docx
《基于51单片机的电子日历Word格式.docx》由会员分享,可在线阅读,更多相关《基于51单片机的电子日历Word格式.docx(20页珍藏版)》请在冰豆网上搜索。
//扬声器
beep=1;
voidstart()//24c02开始信号
SDA=1;
delay0();
SCL=1;
SDA=0;
voidstop()//24c02停止信号
voidrespons()//应答
uchari;
while((SDA==1)&
&
(i<
250))
i++;
SCL=0;
voidinit()//I2c初始化
voidwrite_byte(uchardate)//写一个字节
uchari,temp;
temp=date;
for(i=0;
i<
8;
i++)
{
temp=temp<
<
1;
SDA=CY;
}
ucharread_byte()//读一个字节
uchari,k;
k=(k<
1)|SDA;
returnk;
voidwrite_add(ucharaddress,uchardate)//指定地址写一个字节
start();
write_byte(0xa0);
respons();
write_byte(address);
write_byte(date);
stop();
ucharread_add(ucharaddress)//指定地址读一个字节
uchardate;
write_byte(0xa1);
date=read_byte();
returndate;
voidwrite_com(ucharcom)//液晶写命令函数
LCD_RS=0;
LCD_RW=0;
LCD_EP=0;
P0=com;
LCD_EP=1;
delay(5);
LCD_EP=0;
voidwrite_date(uchardate)//液晶写数据函数
LCD_RS=1;
P0=date;
voidwrite_sfm(ucharadd,uchardate)//写时分秒函数
ucharshi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+shi);
write_date(0x30+ge);
voidwrite_nyr(ucharadd,uchardate)//写年、月、日函数
charshi,ge;
write_com(0x80+add);
voidwrite_week(charwe)//写星期函数
write_com(0x80+12);
switch(we)
case1:
write_date('
M'
);
delay0();
write_date('
O'
delay0();
N'
break;
case2:
T'
U'
E'
case3:
W'
D'
case4:
H'
case5:
F'
R'
I'
case6:
S'
A'
case7:
}
voidinit1()//初始化函数
second=0;
minute=0;
hour=0;
init();
write_com(0x38);
//初始化1602液晶
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
//设置显示初始坐标
write_com(0x80+0x40+2);
//写出时间显示部分的两个冒号
:
'
write_com(0x80+0x40+5);
write_com(0x80+4);
//写出日期显示部分的两个-号
-'
write_com(0x80+7);
second=read_add
(1);
//首次上电从24C02读取出存储的数据
minute=read_add
(2);
hour=read_add(3);
day=read_add(5);
week=read_add(4);
mouth=read_add(6);
year2=read_add(7);
write_sfm(6,second);
//分别送去液晶显示
write_sfm(3,minute);
write_sfm(0,hour);
write_nyr(0,year1);
write_nyr(2,year2);
write_nyr(8,day);
write_nyr(5,mouth);
write_week(week);
voidkeyscan()
{intyear=year1*100+year2;
if(s1==0)
if(s1==0)
{
s1num++;
while(!
s1);
di();
switch(s1num)
{//光标显示位置
case1:
TR0=0;
write_com(0x80+0x40+6);
write_com(0x0f);
break;
case2:
write_com(0x80+0x40+3);
write_com(0x80+0x40+0);
case4:
break;
write_com(0x80+8);
case6:
write_com(0x80+5);
case7:
write_com(0x80+2);
case8:
s1num=0;
TR0=1;
}
if(s1num!
=0)
if(s2==0)
delay(5);
if(s2==0)
s2);
di();
switch(s1num)
{
case1:
second++;
if(second==60)
second=0;
write_sfm(6,second);
write_com(0x80+0x40+6);
write_add(1,second);
break;
case2:
minute++;
if(minute==60)
minute=0;
write_sfm(3,minute);
write_com(0x80+0x40+3);
write_add(2,minute);
case3:
hour++;
if(hour==24)
hour=0;
write_sfm(0,hour);
write_com(0x80+0x40+0);
write_add(3,hour);
break;
case4:
week++;
if(week>
7)
week=1;
write_week(week);
write_add(4,week);
case5:
day++;
if(year%4==0||(year%100==0&
year%400==0))//判断是否为闰年
if(day>
mouth_1[mouth-1])//判断是否大于当前月的天数,是则将天数置1
day=1;
}
elseif(day>
mouth_0[mouth-1])//不是闰年,判断是否大于当前月的天数,是则置1
day=1;
write_nyr(8,day);
write_add(5,day);
case6:
mouth++;
if(mouth>
12)
mouth=1;
write_nyr(5,mouth);
write_add(6,mouth);
case7:
year2++;
if(year2>
99)
{
year2=0;
year1++;
write_nyr(0,year1);
write_add(8,year1);
write_nyr(2,year2);
write_add(7,year2);
}
}
if(s3==0)
s3);
{
second--;
if(second<
0)
second=59;
write_sfm(6,second);
case2:
minute--;
if(minute<
minute=59;
write_sfm(3,minute);
write_com(0x80+0x40+3);
case3:
hour--;
if(hour<
hour=23;
write_sfm(0,hour);
write_com(0x80+0x40+0);
case4:
week--;
if(week==0)
week=7;
case5:
day--;
if(year%4==0||(year%100==0&
if(day==0)
day=mouth_1[mouth-1];
elseif(day==0)
day=mouth_0[mouth-1];
mouth--;
if(mouth==0)
mouth=12;
case7:
year2--;
if(year2<
year2=99;
year1--;
write_add(7,year1);
voidmain()
init1();
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
IE=0x82;
TR0=1;
while
(1)
keyscan();
voidtime0()interrupt1
intyear=year1*100+year2;
if(++count==20)
{
count=0;
second++;
if(second==60)
second=0;
minute++;
if(minute==60)
minute=0;
hour++;
if(hour==24)
hour=0;
day++;
week++;
week=1;
write_week(week);
write_add(4,week);
year%400==0))//判断是否为闰年
mouth_1[mouth-1])//判断天数是否大于当前这个月的天数,是则将天数置1
{
day=1;
mouth++;
if(mouth>
{
mouth=1;
year2++;
if(year2>
100)
year1++;
write_nyr(0,year1);
}
write_nyr(2,year2);
write_nyr(5,mouth);
write_nyr(8,day);
elseif(day>
mouth_0[mouth-1])
mouth++;
{mouth=1;
if(year2==100)
{
}
write_add(7,year2);
write_nyr(5,mouth);
write_add(6,mouth);
write_nyr(8,day);
write_add(5,day);
write_add(3,hour);
write_add(2,minute);
write_add(1,second);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 电子 日历