📄 timer_thermometer_12864.c
字号:
void LCD_Initializate(void)
{
Display_LCD_1();
Display_LCD_2();
Display_LCD_3();
Display_LCD_4();
Display_LCD_5();
Display_LCD_6();
}
//LCD时间信息初始化
void LCD_DateTime_Initializate(void)
{
DateTime_Display(pdt,0,1,0);
DateTime_Display(pdt,1,1,0);
DateTime_Display(pdt,2,1,0);
DateTime_Display(pdt,3,1,0);
DateTime_Display(pdt,4,1,0);
DateTime_Display(pdt,5,1,0);
DateTime_Display(pdt,6,1,0); //初如化时间信息
Tmp_Display();
}
//读键程序
unsigned char GetKey(void)
{ unsigned int i=0;
unsigned char keybuf=0;
if(P1!=0xff)
{
keybuf=P1;
if(keybuf!=0xff)
{
while((P1==keybuf)&&(i<0x6000)) i+=1;
if(i>101)
{ return keybuf;}
else return 0;
}
else return 0;
}
else return 0;
}
/*unsigned char GetKey(void)
{ unsigned char i=0;
unsigned char keybuf=0;
if(P1!=0x0ff)
{keybuf=P1;
while(P1==keybuf) ++i;
if(i>=20)
return keybuf;
else
return 0;
}
else return 0;
}*/
//时间设置程序
void DateTime_SetUp(void)
{
unsigned char i,key,leaptmp,back=0,dtn=0; //DTTMP number(dtn)为数组元素的序号,
unsigned int yeartmp;
for(i=0;i<7;i++)
DTTMP[i]=DTBUF[i]; //将DTBUF内的数据调入DTTMP中进行操作
pdt=DTTMP; //pointer setup
dp=0xff; //关中断中的显示调用,显示的控制权由此函数掌握
MSFLAG=20;
while((back==0)&&(MSFLAG!=0))
{
DateTime_Display(pdt,dtn,secf,0);//void DateTime_Display(unsigned char *arrayp,unsigned char sn,unsigned char fl,unsigned char k)
key=GetKey();
if(key!=0)
{ if(key==LEFT)
{DateTime_Display(pdt,dtn,1,0);
if(dtn==0) dtn=6;
else dtn=dtn-1;MSFLAG=20;}
else if(key==RIGHT)
{DateTime_Display(pdt,dtn,1,0);
if(dtn==6) dtn=0;
else dtn=dtn+1;MSFLAG=20;}
else if(key==UP)
{if(dtn==0)
if(DTTMP[dtn]==99) DTTMP[dtn]=0;
else DTTMP[dtn]+=1;
else if(dtn==1)
if(DTTMP[dtn]==12) DTTMP[dtn]=1;
else DTTMP[dtn]+=1;
else if(dtn==2)
{ yeartmp=DTTMP[dtn-2]+2000;
if((yeartmp%4==0&&yeartmp%100!=0)||(yeartmp%400==0)) leaptmp=1;
else leaptmp=0;
if((yeartmp%4==0&&yeartmp%100!=0)||(yeartmp%400==0)) leaptmp=1;
else leaptmp=0;
if(DTTMP[dtn]==28&&DTTMP[dtn-1]==2&&leaptmp==0)
DTTMP[dtn]=1;
else if(DTTMP[dtn]==29&&DTTMP[dtn-1]==2&&leaptmp==1)
DTTMP[dtn]=1;
else if(DTTMP[dtn]==30&&(DTTMP[dtn-1]==4||DTTMP[dtn-1]==6||DTTMP[dtn-1]==9||DTTMP[dtn-1]==11))
DTTMP[dtn]=1;
else if(DTTMP[dtn]==31) DTTMP[dtn]=1;
else DTTMP[dtn]+=1;
}
else if(dtn==3)
{if(DTTMP[dtn]==6)
DTTMP[dtn]=0;
else DTTMP[dtn]+=1;
}
else if(dtn==4)
if(DTTMP[dtn]==23) DTTMP[dtn]=0;
else DTTMP[dtn]+=1;
else if(dtn==5||dtn==6)
if(DTTMP[dtn]==59) DTTMP[dtn]=0;
else DTTMP[dtn]+=1;
MSFLAG=20;
}
else if(key==DOWN)
{if(dtn==0)
if(DTTMP[dtn]==0) DTTMP[dtn]=99;
else DTTMP[dtn]-=1;
else if(dtn==1)
if(DTTMP[dtn]==1) DTTMP[dtn]=12;
else DTTMP[dtn]-=1;
else if(dtn==2)
{ yeartmp=DTTMP[dtn-2]+2000;
if((yeartmp%4==0&&yeartmp%100!=0)||(yeartmp%400==0)) leaptmp=1;
else leaptmp=0;
if(DTTMP[dtn]==1&&DTTMP[dtn-1]==2&&leaptmp==0)
DTTMP[dtn]=28;
else if(DTTMP[dtn]==1&&DTTMP[dtn-1]==2&&leaptmp==1)
DTTMP[dtn]=29;
else if(DTTMP[dtn]==1&&(DTTMP[dtn-1]==4||DTTMP[dtn-1]==6||DTTMP[dtn-1]==9||DTTMP[dtn-1]==11))
DTTMP[dtn]=30;
else if(DTTMP[dtn]==1) DTTMP[dtn]=31;
else DTTMP[dtn]-=1;
}
else if(dtn==3)
{if(DTTMP[dtn]==0)
DTTMP[dtn]=6;
else DTTMP[dtn]-=1;
}
else if(dtn==4)
if(DTTMP[dtn]==0) DTTMP[dtn]=23;
else DTTMP[dtn]-=1;
else if(dtn==5||dtn==6)
if(DTTMP[dtn]==0) DTTMP[dtn]=59;
else DTTMP[dtn]-=1;
MSFLAG=20;
}
else if(key==ENTER)
{for(i=0;i<7;i++)
DTBUF[i]=DTTMP[i];
back=1;}
else if(key==CANCEL)
back=1;
}
}
Clean_Lcd();
LCD_Initializate();LCD_DateTime_Initializate();
dp=0; //开中断显示
pdt=DTBUF;
}
////////////////////////////////////
//中断服务程序
void Timer0(void)interrupt 1 using 0
{ unsigned int year,leap;
TH0=(65536-TCONST)/256;
TL0=(65536-TCONST)%256;
++TCOUNT;
if(TCOUNT==10)
{secf=0;
Second_Flash(0);} //秒闪
else if(TCOUNT==20)
{DTBUF[6]+=1; //秒单元
DateTime_Display(pdt,6,1,dp); //void DateTime_Display(unsigned char sn,unsigned char fl)
TCOUNT=0; //20*50MS计数器
MSFLAG--; //秒倒计时
secf=1; Second_Flash(1);
if(DTBUF[6]%10==0){LCD_Initializate();LCD_DateTime_Initializate();}
if(DTBUF[6]==60)
{DTBUF[5]+=1; DTBUF[6]=0;
DateTime_Display(pdt,6,1,dp); DateTime_Display(pdt,5,1,dp);
if(DTBUF[5]==60)
{DTBUF[4]+=1;DTBUF[5]=0;
DateTime_Display(pdt,5,1,dp);DateTime_Display(pdt,4,1,dp);
if(DTBUF[4]==24)
{DTBUF[4]=0; DTBUF[3]+=1; DTBUF[2]+=1;
DateTime_Display(pdt,4,1,dp); DateTime_Display(pdt,3,1,dp); DateTime_Display(pdt,2,1,dp);
if(DTBUF[3]==7)
DTBUF[3]=0; DateTime_Display(pdt,3,1,dp);
year=DTBUF[0]+2000;
if((year%4==0&&year%100!=0)||(year%400==0)) leap=1;
if(DTBUF[2]==29&&DTBUF[1]==2&&leap==0)
{DTBUF[2]=1; DTBUF[1]+=1; }
else if(DTBUF[2]==30&&DTBUF[1]==2&&leap==1)
{DTBUF[2]=1; DTBUF[1]+=1;}
else if(DTBUF[2]==31&&(DTBUF[1]==4||DTBUF[1]==6||DTBUF[1]==9||DTBUF[1]==11))
{DTBUF[2]=1; DTBUF[1]+=1;}
else if(DTBUF[2]==32)
{DTBUF[2]=1; DTBUF[1]+=1;}
if(DTBUF[1]==13)
{ DTBUF[1]=1; DTBUF[0]+=1;
DateTime_Display(pdt,1,1,dp); DateTime_Display(pdt,0,1,dp);
if(DTBUF[0]==100)
{DTBUF[0]=0; DateTime_Display(pdt,0,1,dp);
}
}
}
}
}
}
}
///////////////////////////////////////////////////////
void Main()
{ unsigned char a;
pdt=DTBUF;
IntRst(); //软件复位
Lcd_On(); //开显示
Clean_Lcd(); //清屏
LCD_Initializate();
LCD_DateTime_Initializate();
Lcd_Z(0); //设置Z地址为0
TMOD=0X01;
TH0=(65536-TCONST)/256;
TL0=(65536-TCONST)%256;
EA=1;
ET0=1;
TR0=1;
Tmp_Display();
while(1)
{ a=GetKey();
if(a==SETUP) DateTime_SetUp();
else if(a==CLEAR) //全屏刷新
{Clean_Lcd();
LCD_Initializate();
LCD_DateTime_Initializate();
Lcd_Z(0);
}
if(TCOUNT==13)Tmp_Display();
}
}
//Right_Bytes_DaSend( x, y, *loc,bytes)
//Left_Bytes_DaSend( x, y, *loc,bytes)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -