电子万年历时间可调节.docx
- 文档编号:3000924
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:20
- 大小:48.43KB
电子万年历时间可调节.docx
《电子万年历时间可调节.docx》由会员分享,可在线阅读,更多相关《电子万年历时间可调节.docx(20页珍藏版)》请在冰豆网上搜索。
电子万年历时间可调节
电子万年历,时间可调
程序
#include
#include
unsignedchara,miao,shi,shi1,shi2,fen,fen1,fen2,ri,ri1,ri2,yue,yue1,yue2,nian,nian1,nian2,key1n,week,flag,wendu,x,temp,year1=2,year2=0;
#include
#include
sbitP28=P1^0;
sbitE1=P1^5;
sbitE2=P1^6;
sbitE3=P1^7;
sbitkey1=P3^4;
sbitkey2=P3^5;
sbitkey3=P3^6;
sbitkey4=P3^7;
TEMPDATAm_TempData;
ucharm=0,m1=0,m2=0,m3=0,m4=0,m5=0,m6=0,m7=0,m8=0,m9=0,m10=0,m11=0,m12=0,m13=0;
unsignedcharcodedispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
unsignedcharcodepoint[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//带小数点数的代码
voiddisplay(ucharx);
voidxianshiwendu();
voidReadTime()
{
miao=BCD_Decimal(read_1302(0x81));
fen=BCD_Decimal(read_1302(0x83));
shi=BCD_Decimal(read_1302(0x85));
ri=BCD_Decimal(read_1302(0x87));
yue=BCD_Decimal(read_1302(0x89));
nian=BCD_Decimal(read_1302(0x8d));
week=BCD_Decimal(read_1302(0x8b))-1;
}
ucharkey1scan()
{
if(key1==0)//---------------key1为功能键(设置键)--------------------
{
delayms(10);//延时,用于消抖动
if(key1==0)//延时后再次确认按键按下
{
m++;
if(m==14)m=1;
while
(1)
{display(m);xianshiwendu();if(key1==1)break;}
}
}
if(key4==0)
{
delayms(10);//延时,用于消抖动
if(key4==0)//延时后再次确认按键按下
{
m=0;
while
(1)
{display(m);xianshiwendu();if(key1==1)break;}
}
}
returnm;
}
voidkey2scan(ucharn)
{
if(n!
=0)//当key1按下以下。
再按以下键才有效(按键次数不等于零)
{
if(key2==0)//上调键
{
delayms(10);
if(key2==0)
{
while
(1){display(m);xianshiwendu();if(key2==1)break;}
switch(n)
{
case1:
year1++;if(year1==10)year1=0;//设置键按动1次,调nian
break;
case2:
year2++;if(year2==10)year2=0;break;
case3:
nian1=nian/10;
nian1++;if(nian1==10)nian1=0;
temp=nian1*16+(nian)%10;//十进制转换成DS1302要求的DCB码
write_1302(0x8e,0x00);//允许写,禁止写保护
write_1302(0x8c,temp);//向DS1302内写年份寄存器8cH写入调整后的年份数据BCD码
write_1302(0x8e,0x80);//打开写保护
break;
case4:
nian2=nian%10;
nian2++;if(nian2==10)nian2=0;
temp=nian/10*16+nian2;//十进制转换成DS1302要求的DCB码
write_1302(0x8e,0x00);//允许写,禁止写保护
write_1302(0x8c,temp);//向DS1302内写年份寄存器8cH写入调整后的年份数据BCD码
write_1302(0x8e,0x80);//打开写保护
break;
case5:
yue1=yue/10;
yue1++;if(yue1==2)yue1=0;
temp=yue1*16+(yue)%10;//十进制转换成DS1302要求的DCB码
write_1302(0x8e,0x00);//允许写,禁止写保护
write_1302(0x88,temp);//向DS1302内写月份寄存器88H写入调整后的月份数据BCD码
write_1302(0x8e,0x80);//打开写保护
break;
case6:
yue2=yue%10;
yue2++;if(yue/10==1){if(yue2==3)yue2=0;}if(yue/10==0){if(yue2==10)yue2=0;}
temp=yue/10*16+yue2;//十进制转换成DS1302要求的DCB码
write_1302(0x8e,0x00);//允许写,禁止写保护
write_1302(0x88,temp);//向DS1302内写月份寄存器88H写入调整后的月份数据BCD码
write_1302(0x8e,0x80);//打开写保护
break;
case7:
ri1=ri/10;
ri1++;if(yue==2){if(ri1==3)ri1=0;}if(yue!
=2){if(ri1==4)ri1=0;}
temp=ri1*16+(ri)%10;//十进制转换成DS1302要求的DCB码
write_1302(0x8e,0x00);//允许写,禁止写保护
write_1302(0x86,temp);//向DS1302内写日期寄存器86H写入调整后的日期数据BCD码
write_1302(0x8e,0x80);//打开写保护
break;
case8:
ri2=ri%10;
ri2++;if(ri2==10)ri2=0;
temp=(ri/10)/10*16+ri2;//十进制转换成DS1302要求的DCB码
write_1302(0x8e,0x00);//允许写,禁止写保护
write_1302(0x86,temp);//向DS1302内写日期寄存器86H写入调整后的日期数据BCD码
write_1302(0x8e,0x80);//打开写保护
break;
case9:
shi1=shi/10;
shi1++;
if(shi1==3)shi1=0;
temp=shi1*16+(shi)%10;//十进制转换成DS1302要求的DCB码
write_1302(0x8e,0x00);//允许写,禁止写保护
write_1302(0x84,temp);//向DS1302内写小时寄存器84H写入调整后的小时数据BCD码
write_1302(0x8e,0x80);//打开写保护
break;
case10:
shi2=shi%10;
shi2++;
if(shi/10==2)
{
if(shi2==5)shi2=0;
}
elseif(shi2==10)shi2=0;
temp=shi/10*16+shi2;//十进制转换成DS1302要求的DCB码
write_1302(0x8e,0x00);//允许写,禁止写保护
write_1302(0x84,temp);//向DS1302内写小时寄存器84H写入调整后的小时数据BCD码
write_1302(0x8e,0x80);//打开写保护
break;
case11:
fen1=fen/10;
fen1++;if(fen1==6)fen1=0;
temp=fen1*16+(fen)%10;//十进制转换成DS1302要求的DCB码
write_1302(0x8e,0x00);//允许写,禁止写保护
write_1302(0x82,temp);//向DS1302内写分寄存器82H写入调整后的分数据BCD码
write_1302(0x8e,0x80);//打开写保护
break;
case12:
fen2=fen%10;
fen2++;if(fen2==10)fen2=0;
temp=fen/10*16+fen2;//十进制转换成DS1302要求的DCB码
write_1302(0x8e,0x00);//允许写,禁止写保护
write_1302(0x82,temp);//向DS1302内写分寄存器82H写入调整后的分数据BCD码
write_1302(0x8e,0x80);//打开写保护
break;
case13:
week++;
if(week==8)week=1;
temp=(week)/10*16+(week)%10;//十进制转换成DS1302要求的DCB码
write_1302(0x8e,0x00);//允许写,禁止写保护
write_1302(0x8a,temp);//向DS1302内写周寄存器8aH写入调整后的周数据BCD码
write_1302(0x8e,0x80);//打开写保护
break;
}
}
}
}
}
voidkey3scan(ucharn)
{
if(n!
=0)//当key1按下以下。
再按以下键才有效(按键次数不等于零)
{
if(key3==0)//上调键
{
delayms(10);
if(key3==0)
{
while
(1){display(m);xianshiwendu();if(key3==1)break;}
switch(n)
{
case1:
year1--;if(year1==(0-1))year1=9;//设置键按动1次,调nian
break;
case2:
year2--;if(year2==(0-1))year2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 万年历 时间 调节