第一范文网 - 专业文章范例文档资料分享平台

基于单片机的万年历设计

来源:用户分享 时间:2025/6/9 17:28:01 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

.

;..

flagset=1; // 设置标志位,表示在进行各种时间设置。 while(!kmenu); di();

switch(kmenunum) //定位光标闪烁点。 {

case 1: writecom(0x80+0x40+10); // 秒闪烁。 writecom(0x0f); // 开光标闪烁。 break;

case 2: writecom(0x80+0x40+7); // 分闪烁。 break;

case 3: writecom(0x80+0x40+4); // 时闪烁。 break;

case 4: writecom(0x80+10); //星期闪烁 . break;

case 5: writecom(0x80+7); //日闪烁 . break;

case 6: writecom(0x80+4); //月闪烁 . break;

case 7: writecom(0x80+1); //年闪烁 . break; case 8: kmenunum=0;

writecom(0x0c); // 取消光标闪烁。 flagset=0; //取消时间调节标志。

dswrite(0x8e,0x00); /* 允许写操作 */ dswrite(0x80,second/10*16+second); dswrite(0x82,minute/10*16+minute); dswrite(0x84,hour/10*16+hour); dswrite(0x8a,week/10*16+week); dswrite(0x86,day/10*16+day); dswrite(0x88,month/10*16+month); dswrite(0x8c,year/10*16+year); dswrite(0x8e,0x80); /* 禁止写操作 */ break; } } }

if(kmenunum!=0) //只有当功能键按下时 ,才检测增大 ,减小键 . {

if(kup==0) {

delay(5); if(kup==0) {

while(!kup);

送液晶显示 光标复位 .

;..

.

di();

switch(kmenunum) //根据功能键被按下的次数,调节相应数值。 {

case 1: second++;

if(second==60) second=0;

writetime(9,second);

writecom(0x80+0x40+10); // 因为,上面

break; //一次 ,光标后移一位 ,所以要将

case 2: minute++;

if(minute==60) minute=0;

writetime(6,minute); writecom(0x80+0x40+7); break; case 3: hour++;

if(hour==24) hour=0;

writetime(3,hour); writecom(0x80+0x40+4); break; case 4: week++;

if(week==8) week=1;

writeweek(week); writecom(0x80+11); break; case 5: day++;

if(day==32) day=1;

writenyr(6,day); writecom(0x80+7); break; case 6: month++;

if(month==13) month=1;

writenyr(3,month); writecom(0x80+4); break; case 7: year++;

if(year==100)

year=0;

.

;..

writenyr(0,year); writecom(0x80+1); break; } } }

if(kdown==0) {

delay(5); if(kdown==0) {

while(!kdown); di();

switch(kmenunum) //根据功能键被按次数调节相应数值 . {

case 1: second--;

if(second==-1) second=59;

writetime(9,second); writecom(0x80+0x40+10); break; case 2: minute--;

if(minute==-1) minute=59;

writetime(6,minute); writecom(0x80+0x40+7); break; case 3: hour--;

if(hour==-1) hour=23;

writetime(3,hour); writecom(0x80+0x40+4); break; case 4: week--;

if(week==0) week=7;

writeweek(week); writecom(0x80+11); break; case 5: day--;

if(day==0) day=31;

writenyr(6,day); writecom(0x80+7);

.

break; case 6: month--;

if(month==0) month=12;

writenyr(3,month); writecom(0x80+4); break; case 7: year--;

if(year==-1) year=99;

writenyr(0,year); writecom(0x80+1); break; } } } }

if(kalarm==0) // 检测闹钟调节键是否按下,此条if 语句与 if(kmenunum!=0)

{ // 在同一个层次。 delay(5);

if(kalarm==0) {

flagseta=~flagseta; while(!kalarm); di();

if(flagseta==0) //此时,退出闹钟设置,保存各相关数值。 {

flagset=0; //清除时间设置标志,在 if(kalarm==0) 这个 if 语句writecom(0x80+0x40)中,不用 flagset=1 这条语句来设置 //flagset 标志位,因为如果进行了闹钟时间的设置就会执行前面 if(kmenunum==0) 语句中的 flagset=1 这条语句。

writedata(' '); // 清除液晶上的 “ Ri闹钟调节标志。 ” writedata(' ');

writecom(0x0c); //取消光标闪烁

dswrite(0x8e,0x00); /* 允许写操作 */

dswrite(writealarmsecond,second/10*16+second); // 往 DS1302 中保存闹钟的时分秒值。

dswrite(writealarmminute,minute/10*16+minute); dswrite(writealarmhour,hour/10*16+hour); dswrite(0x8e,0x80); /* 禁止写操作 */ }

else //进入闹钟设置。 {

;..

搜索更多关于: 基于单片机的万年历设计 的文档
基于单片机的万年历设计.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c6aihy4x0b64mn0g1mmp04oweh0q6fq00oip_5.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top