基于单片机的万年历设计 下载本文

void writedata(uchar dat) //液晶写数据函数。 { }

void writetime(uchar add,uchar dat) // 液晶刷新时分秒。 { }

void writenyr(uchar add,uchar dat) // 液晶刷新日期。 {

//0 为年, 3 为月, 6 为日。

//3为时的开始位置,6 为分, 9 为秒。

lcdrs=1;// 置为写入数据 lcddata=dat;// 送入数据 delay(1); lcden=1; delay(1); lcden=0;

uchar shi,ge; shi=dat/10; ge=dat;

writecom(0x80+0x40+add); writedata(0x30+shi); writedata(0x30+ge);

uchar shi,ge; shi=dat/10;

编辑版word

}

ge=dat; writecom(0x80+add); writedata(0x30+shi); writedata(0x30+ge);

void writeweek(uchar week) // 液晶星期几显示函数。 {

writecom(0x80+9); //从第一行隔十三个字符后开始写星期 switch(week) {

case 1: writedata('M');

writedata('O'); writedata('N'); break;

case 2: writedata('T');

writedata('U'); writedata('E'); break;

case 3: writedata('W');

writedata('E'); writedata('D'); break;

编辑版word

}

}

case 4: writedata('T');

writedata('H'); writedata('U'); break;

case 5: writedata('F');

writedata('R'); writedata('I'); break;

case 6: writedata('S');

writedata('A'); writedata('T'); break;

case 7: writedata('S');

writedata('U'); writedata('N'); break;

void keyscan() // 键盘扫描函数。 {

if((flagalarm==1)||(flagevent==1)) // 如果闹钟在响或者有事件提醒,任意键

停止闹钟响或者取消事件提醒

编辑版word

{ }

if(kmenu==0) //检测功能键。 {

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

kmenunum++; // 记录功能键按下次数。 if(flagseta==1) // 检测是否在进行闹钟设置。

if(kmenunum==4) kmenunum=1; // 因为进行闹钟设置时,只调

if((kmenu==0)||(kup==0)||(kdown==0)||(kalarm==0)||(kevent==0)) { }

delay(5);

if((kmenu==0)||(kup==0)||(kdown==0)||(kalarm==0)||(kevent==0)) { }

while(!(kmenu&&kup&&kdown&&kalarm&&kevent)); di();

flagalarm=0; // 清除闹钟标志。 flagevent=0; // 清除事件提醒标志。

节时分秒,所以, kmenunum 只能等于 1,2,3。

编辑版word