📄 quan.c
字号:
void Init_T0(void)
{
TMOD=0x01; //定时器T0,工作模式1//
TH0=0x3c; //50ms//
TL0=0xb0;
EA=1;
ET0=1;
TR0=1;
}
/**************************************************************************************************/
////////////////////////////////////////////////////
///// 函数名: 闪烁信号产生子函数 //////
///// 函数功能: 用定时中断方式产生闪烁信号 //////
///// 调用: 无 //////
///// 函数参数: 无 //////
///// 返回值: 无 //////
////////////////////////////////////////////////////
void T0_flash(void) interrupt 1 // 中断程序,产生时钟秒信号 //
{
TR0=0;
fla_cou++;
if(fla_cou==10) //闪烁间隔为50ms*10次=500ms//
{
flash=!flash;
fla_cou=0;
}
TH0=0x3c; //50ms//
TL0=0xb0;
TR0=1;
}
/**************************************************************************************************/
////////////////////////////////////////////////////
///// 函数名: 时间闪烁子函数 //////
///// 函数功能: 选择确定闪烁位等待调整 //////
///// 调用: Add(); //////
///// 函数参数: 无 //////
///// 返回值: 无 //////
////////////////////////////////////////////////////
void FlashKey(void) //闪烁子函数//
{
if(P2_5==0)
{
while(P2_5==0)
Refresh();
n++;
}
if(n==8) n=0;
if(n!=1) K1=1;
if(n!=2) K2=1;
if(n!=3) K3=1;
if(n!=4) K4=1;
if(n!=5) K5=1;
if(n!=6) K6=1;
if(n!=7) K7=1;
switch(n)
{
case 0:KT=0;break;
case 1:K1=flash;hms=year;KT=1;break; //hms为调时临时变量,需要调整某位时则先把其初始值放到hms中//
case 2:K2=flash;hms=month;KT=1;break;
case 3:K3=flash;hms=date;KT=1;break;
case 4:K4=flash;hms=hour;KT=1;break;
case 5:K5=flash;hms=min;KT=1;break;
case 6:K6=flash;hms=sec;KT=1;break;
case 7:K7=flash;hms=day;KT=1;break;
}
tiaoshi();
}
/*********************************************************************************************************/
////////////////////////////////////////////////////
///// 函数名: 时间调整子函数 //////
///// 函数功能: 对闪烁位进行调整(加减一) //////
///// 调用: SetTime();Refresh(); //////
///// 函数参数: 无 //////
///// 返回值: 无 //////
////////////////////////////////////////////////////
void tiaoshi(void) //调时子函数//
{
signed char item,max,mini;
unsigned char ye;
item=(hms/16)*10+hms%16;
ye=(year/16)*10+year%16;
if(P2_6==0) //按P2_6键进行时间加调整//
{
while(P2_6==0)
Refresh();
if(KT==1) //检验可调标志位KT//
{
item++;
if(n==1) {max=99; mini=0;} //根据n不同,返回给不同的位: n=1 -> 返回给年位//
if(n==2) {max=12; mini=1;} // n=2 -> 返回给月位//
if((n==3)&(ye%4)) {max=28; mini=1;} //不闰年2月28天 依次类推 //
if(!(ye%4)&(n==3)) {max=29; mini=1;} // 闰年2月29天
if((n==3)&((month==0x01)|(month==0x03)|(month==0x05)|(month==0x07)|(month==0x08)|(month==0x10)|(month==0x12)))
{max=31; mini=1;} //1,3,5,7,8,10,12月31天
if((n==3)&((month==0x04)|(month==0x06)|(month==0x09)|(month==0x11)))
{max=30; mini=1;} //4,6,9,11月满30天
if(n==4) {max=23; mini=0;} // 24小时制 //
if(n==5) {max=59; mini=0;}
if(n==6) {max=59; mini=0;}
if(n==7) {max=7; mini=1;}
if(item>max)
item=mini;
hms=(item/10)*16+item%10;
switch(n)
{
case 1:year=hms;break; //根据n不同,返回给不同的位: n=1 -> 返回给年位 //
case 2:month=hms;break; // n=2 -> 返回给月位 //
case 3:date=hms;break; // n=3 -> 返回给日位 //
case 4:hour=hms;break; // n=4 -> 返回给小时位//
case 5:min=hms;break; // 依次类推 //
case 6:sec=hms;break;
case 7:day=hms;break;
}
Curtime[0] = sec;
Curtime[1] = min;
Curtime[2] = hour;
Curtime[3] = date;
Curtime[4] = month;
Curtime[5] = day;
Curtime[6] = year;
SetTime(&Curtime[0]); // 将调整过后的时间值写入DS1302 //
}
}
if(P2_7==0) //按P2_7键进行时间减调整//
{
while(P2_7==0)
Refresh();
if(KT==1) //检验可调标志位KT//
{
item--;
if(n==1) {max=99; mini=0;} //根据n不同,返回给不同的位: n=1 -> 返回给年位//
if(n==2) {max=12; mini=1;} // n=2 -> 返回给月位//
if((n==3)&(ye%4)) {max=28; mini=1;} //不闰年2月28天 依次类推 //
if(!(ye%4)&(n==3)) {max=29; mini=1;} // 闰年2月29天
if((n==3)&((month==0x01)|(month==0x03)|(month==0x05)|(month==0x07)|(month==0x08)|(month==0x10)|(month==0x12)))
{max=31; mini=1;} //1,3,5,7,8,10,12月31天
if((n==3)&((month==0x04)|(month==0x06)|(month==0x09)|(month==0x11)))
{max=30; mini=1;} //4,6,9,11月满30天
if(n==4) {max=23; mini=0;} // 24小时制 //
if(n==5) {max=59; mini=0;}
if(n==6) {max=59; mini=0;}
if(n==7) {max=7; mini=1;}
if(item<mini)
item=max;
hms=(item/10)*16+item%10;
switch(n)
{
case 1:year=hms;break; //根据n不同,返回给不同的位: n=1 -> 返回给年位 //
case 2:month=hms;break; // n=2 -> 返回给月位 //
case 3:date=hms;break; // n=3 -> 返回给日位 //
case 4:hour=hms;break; // n=4 -> 返回给小时位//
case 5:min=hms;break; // 依次类推 //
case 6:sec=hms;break;
case 7:day=hms;break;
}
Curtime[0] = sec;
Curtime[1] = min;
Curtime[2] = hour;
Curtime[3] = date;
Curtime[4] = month;
Curtime[5] = day;
Curtime[6] = year;
SetTime(&Curtime[0]); // 将调整过后的时间值写入DS1302 //
}
}
}
/********************************************************************************************************/
/*******************************************************************************************************/
////////////////////////////////////////////////////
///// 函数名: 时钟初始化子函数 //////
///// 函数功能: 对所有时钟程序变量初始化 //////
///// 调用: Init_T0(); //////
///// 函数参数: 无 //////
///// 返回值: 无 //////
////////////////////////////////////////////////////
void Init_Clock(void)
{
K1=1; K2=1; K3=1; K4=1; K5=1;
K6=1; K7=1; KT=0; n=0;
Init_T0();
}
/*******************************************************************************************///时钟部分// ↑
////////////////////////////////////////////////////
///// 函数名: 刷新显示子函数 //////
///// 函数功能: 即时刷新时钟数据进行显示 //////
///// 调用: InputCommand();DisplayChar(); //////
///// 函数参数: 无 //////
///// 返回值: 无 //////
////////////////////////////////////////////////////
void Refresh(void)
{
unsigned int t;
GetTime();
CS1=1;CS2=0;
if(K2)
{ sz_disp16(2,8,shuzi[month&0x0f]); // 月份位 //
sz_disp16(2,0,shuzi[month>>4]); }
else
{ hz_disp16(2,0,kongbai2); }
if(K3)
{ sz_disp16(2,40,shuzi[date&0x0f]); // 日期位 //
sz_disp16(2,32,shuzi[date>>4]); }
else
{ hz_disp16(2,32,kongbai2); }
if(K4)
{ sz_disp16(4,8,shuzi[hour&0x0f]); // 小时位 //
sz_disp16(4,0,shuzi[hour>>4]); } // 十时位 //
else
{ hz_disp16(4,0,kongbai2); }
if(K5)
{ sz_disp16(4,32,shuzi[min&0x0f]); // 分钟位 //
sz_disp16(4,24,shuzi[min>>4]); } // 十分位 //
else
{ hz_disp16(4,24,kongbai2); }
if(K6) // 秒位 十秒位 //
{ sz_disp16(4,56,shuzi[sec&0x0f]); // 秒位 //
sz_disp16(4,48,shuzi[sec>>4]); } // 十秒位 //
else
{ hz_disp16(4,48,kongbai2); }
CS1=0;CS2=1;
if(K1)
{ sz_disp16(0,8,shuzi[year&0x0f]); // 年份位 //
sz_disp16(0,0,shuzi[year>>4]); }
else
{ hz_disp16(0,0,kongbai2); }
if(K7)
{ hz_disp16(2,48,xingqi[(day&0x0f)-1]); }
else
{ hz_disp16(2,48,kongbai2); }
t=ReadTemperature();
sz_disp16(4,16,shuzi[(t/100)]);
sz_disp16(4,24,shuzi[((t%100)/10)]);
sz_disp16(4,40,shuzi[(t%10)]);
}
/*-----------------------------状态判断于提示------------------------*/
void State(void)
{
if(KT==1)
{
CS1=1;CS2=0;
hz_disp16(6,0,she);
hz_disp16(6,16,ding);
if(n==1)
{
hz_disp16(6,32,kongbai2);
hz_disp16(6,48,nian);
}
if(n==2)
{
hz_disp16(6,48,yue);
}
if(n==3)
{
hz_disp16(6,48,xq7);
}
if(n==4)
{
hz_disp16(6,48,shi);
}
if(n==5)
{
hz_disp16(6,48,fen);
}
if(n==6)
{
hz_disp16(6,48,miao);
}
if(n==7)
{
hz_disp16(6,32,xing);
hz_disp16(6,48,qi);
}
CS1=0;CS2=1;
hz_disp16(6,0,kongbai2);
hz_disp16(6,32,kongbai2);
hz_disp16(6,16,jia);
hz_disp16(6,48,jian);
}
else
{
days();
}
}
/*------------------------------主函数---------------------------------*/
main()
{
Init_Clock() ;
init_lcd();
Disp_Img(FirstPage);
delays(1000);
delays(1000);
Clr_Scr();
StartMsg();
delays(1000);
delays(1000);
Clr_Scr();
ClockMsg();
while(1)
{
Refresh();
FlashKey();
State();
delays(80);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -