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

}

}

if(x==1&&DateTime[1]<59) DateTime[1]++; if(x==-1&&DateTime[1]>0) DateTime[1]--; break;

//---定时器0每秒刷新LCD显示----// void T0_INT() interrupt 1 {

TH0=-50000/256; TL0=-50000%6;

if(++tCount !=2) return;

tCount=0;//按指定格式生成待显示的日期时间串 Format_DateTime(DateTime[6],LCD_DSY_BUFFER1+5); Format_DateTime(DateTime[4],LCD_DSY_BUFFER1+8);

Format_DateTime(DateTime[3],LCD_DSY_BUFFER1+11); //星期strcpy(LCD_DSY_BUFFER1+13,WEEK[DateTime[5]-1]);//时分秒 Format_DateTime(DateTime[2],LCD_DSY_BUFFER2+5); }

//----------键盘中断(INT0)-------------// void EX_INT0() interrupt 0 {

if(K1==0) //选择调整对象(Y M D H M) {

DelayMS(10);

Format_DateTime(DateTime[1],LCD_DSY_BUFFER2+8); Format_DateTime(DateTime[0],LCD_DSY_BUFFER2+11); //显示年月日,星期,时分秒

Display_LCD_String(0x00,LCD_DSY_BUFFER1); Display_LCD_String(0x40,LCD_DSY_BUFFER2);

24

if(K1==0){

//while(K1==0);

if(Adjust_Index==-1||Adjust_Index==1) { }

Adjust_Index--;

if(Adjust_Index==5) Adjust_Index=4; LCD_DSY_BUFFER2[13]='[';

Adjust_Index=7;

LCD_DSY_BUFFER2[14]=Change_Flag[Adjust_Index]; //显示调节对象 }

else if(K2==0)

//加

LCD_DSY_BUFFER2[15]=']'; }

{ //while(K2==0);

DelayMS(10); if(K2==0)

DateTime_Adjust(1); }

else if(K3==0) { }

else if(K4==0) {

//while(K4==0); DelayMS(10);

//确定

DelayMS(10);//while(K3==0);

//减

if(K3==0)

DateTime_Adjust(-1);

25

}

}

if(K4==0){ SET_DS1302();

//将调整后的时间写入DS1302

LCD_DSY_BUFFER2[13]=' '; LCD_DSY_BUFFER2[14]=' '; LCD_DSY_BUFFER2[15]=' '; Adjust_Index=-1; }

void main() { Init_LCD(); }

26

//液晶初始化

IE=0x83; //允许INT0,T0中断,EA=1,,ET0=1,EX0=1 IP=0x01; //设置外部中断0为高级中断

IT0=0x01; //外部中断0为电平触发,低电平有效 TMOD=0x01; //设置定时器T0工作方式为方式1, TH0=-50000/256; TL0=-50000%6; TR0=1; while(1) {

//如果未执行调整操作则正常读取当前时间 }

if(Adjust_Index==-1) GetTime();

//启动定时器

//装入初始值,定时1秒