else //进入闹钟设置。 {
s=dsread(readalarmsecond)/16*10+dsread(readalarmsecond); /*
读取DS1302 中保存的闹钟时分秒原始值,转化为十进制数存进 s,m,h 保存,用以后面判断闹钟时间是否到达。*/
m=dsread(readalarmminute)/16*10+dsread(readalarmminute); h=dsread(readalarmhour)/16*10+dsread(readalarmhour); second=s; //把闹钟时间的十进制数据传送给变量
second,minute,hour,用以调节其值。
}
if(kevent==0) // 检测事件提醒调节键是否按下,此条 if 语句与
}
}
minute=m; hour=h;
writecom(0x80+0x40);
writedata('R'); // 液晶显示闹钟调节标志。 writedata('i');
writetime(3,hour); // 送液晶显示闹钟时间。 writetime(6,minute); writetime(9,second);
if(kmenunum!=0)
编辑版word
置
{
// 在同一个层次。
delay(5); if(kevent==0) {
flagsseta=~flagsseta; while(!kevent); di();
if(flagsseta==0) //此时,退出事件提醒设置,保存各相关数值。 {
flagset=0; //清除时间设置标志,在 if(kevent==0) 这个 if 语句 writecom(0x80+9);// 中,不用 flagset=1 这条语句来设置
//flagset 标志位,因为 ,如果进行了事件提醒时间的设
//,就会执行前面 if(kmenunum==0) 语句中的 flagset=1 这条语
句。
writedata(' '); writedata(' ');
writecom(0x0c); //取消光标闪烁 dswrite(0x8e,0x00); /* 允许写操作 */
dswrite(writeeventyear,year/10*16+year); // 往 DS1302 中保
writedata(' '); // 清除液晶上的 “ Ti 事件提醒调节标志。 ”
存事件提醒的年月日值。
编辑版word
}
dswrite(writeeventmonth,month/10*16+month); dswrite(writeeventday,day/10*16+day); dswrite(0x8e,0x80); /* 禁止写操作 */
else //进入事件提醒设置。 {
yy=dsread(readeventyear)/16*10+dsread(readeventyear); /* 读取
DS1302 中保存的事件提醒年月日原始值,转化为十进制数存进 yy,mm,dd 保存,用以后面判断事件提醒时间是否到达。*/
mm=dsread(readeventmonth)/16*10+dsread(readeventmonth); dd=dsread(readeventday)/16*10+dsread(readeventday); year=yy; //把事件提醒时间的十进制数据传送给变量
hour,day,month,week用以调节其值。
month=mm; day=dd;
writecom(0x80+9);
writedata('T'); // 液晶显示事件提醒设置标志。 writedata('i'); writedata(' ');
writenyr(0,year);// 送液晶显示事件提醒时间。 writenyr(3,month);
writenyr(6,day);
编辑版word
}
}
}
}
void dswritebyte(uchar d)// 往 DS1302 写入一个字节。 {
uchar i; ACC=d; for(i=8;i>0;i--) {
dsdata=ACC0;
dsclk=1; /*为什么这里时钟先为 1 后为 0,因为 dsclk 初始化为 0,而,
每次循环
最后 ,都将其置 0,这样就形成一个从 0 开始的上升沿 ,恰好满足 ds1302
写数据在上升沿, 但是 , }
uchar dsreadbyte() //从 DS1302 读出一个字节。 {
时钟必须从 0 开始的要求 */ dsclk=0; ACC=ACC>>1; }
编辑版word