📄 led.c
字号:
{
uint8 WEEK[2];
LCD_Prints(" WEEK SETTING ",0);
LCD_Prints(" WEEK: ",0x40);
if((!KEY3)&&(TIMETYPE.Week<8)){KEY_Delay();TIMETYPE.Week++;i1=i2=0;}
else if(TIMETYPE.Week>7)TIMETYPE.Week=1;
if((!KEY4)&&(TIMETYPE.Week>1)){KEY_Delay();TIMETYPE.Week--;i1=i2=0;}
WEEK[0]=TIMETYPE.Week+'0';
WEEK[1]='\0';
LCD_Prints(WEEK,0x47);
}
void SET_HOUR()
{
uint8 HOUR[3];
LCD_Prints(" HOUR SETTING ",0);
LCD_Prints(" HOUR: ",0x40);
if((!KEY3)&&(TIMETYPE.Hour<24)){KEY_Delay();TIMETYPE.Hour++;i1=i2=0;}
else if(TIMETYPE.Hour>23)TIMETYPE.Hour=0;
if((!KEY4)&&(TIMETYPE.Hour>0)){KEY_Delay();TIMETYPE.Hour--;i1=i2=0;}
HOUR[0]=(TIMETYPE.Hour/10)+'0';
HOUR[1]=(TIMETYPE.Hour%10)+'0';
HOUR[2]='\0';
LCD_Prints(HOUR,0x47);
}
void SET_MINE()
{
uint8 MINE[3];
LCD_Prints(" MINE SETTING ",0);
LCD_Prints(" MINE: ",0x40);
if((!KEY3)&&(TIMETYPE.Mine<60)){KEY_Delay();TIMETYPE.Mine++;i1=i2=0;}
else if(TIMETYPE.Mine>59)TIMETYPE.Mine=0;
if((!KEY4)&&(TIMETYPE.Mine>0)){KEY_Delay();TIMETYPE.Mine--;i1=i2=0;}
MINE[0]=(TIMETYPE.Mine/10)+'0';
MINE[1]=(TIMETYPE.Mine%10)+'0';
MINE[2]='\0';
LCD_Prints(MINE,0x47);
}
void SET_SECOND()
{
uint8 SECOND[3];
LCD_Prints(" SECOND SETTING ",0);
LCD_Prints(" SECOND: ",0x40);
if((!KEY3)&&(TIMETYPE.Second<60)){KEY_Delay();TIMETYPE.Second++;i1=i2=0;}
else if(TIMETYPE.Second>59)TIMETYPE.Second=0;
if((!KEY4)&&(TIMETYPE.Second>0)){KEY_Delay();TIMETYPE.Second--;i1=i2=0;}
SECOND[0]=(TIMETYPE.Second/10)+'0';
SECOND[1]=(TIMETYPE.Second%10)+'0';
SECOND[2]='\0';
LCD_Prints(SECOND,0x48);
}
void Write_Time()
{
uint8 year,month,day,hour,mine,second,week;
year=((TIMETYPE.Year/10)<<4)|(TIMETYPE.Year%10);
month=((TIMETYPE.Month/10)<<4)|(TIMETYPE.Month%10);
day=((TIMETYPE.Day/10)<<4)|(TIMETYPE.Day%10);
week=TIMETYPE.Week;
hour=((TIMETYPE.Hour/10)<<4)|(TIMETYPE.Hour%10);
mine=((TIMETYPE.Mine/10)<<4)|(TIMETYPE.Mine%10);
second=((TIMETYPE.Second/10)<<4)|(TIMETYPE.Second%10);
RTC_Write_Byte(0x8e,0x00); //写入允许
RTC_Write_Byte(0x80,WRITE_SECOND|0x80);
RTC_Write_Byte(0x8e,0x80); //禁止写入
RTC_Write_Byte(0x8e,0x00); //写入允许
RTC_Write_Byte(WRITE_YEAR,year); //写入新的秒数
RTC_Write_Byte(WRITE_MONTH,month); //写入新的秒数
RTC_Write_Byte(WRITE_DAY,day); //写入新的秒数
RTC_Write_Byte(WRITE_HOUR,hour); //写入新的秒数
RTC_Write_Byte(WRITE_MINE,mine&0x7f); //写入新的秒数
RTC_Write_Byte(WRITE_WEEK,week); //写入新的秒数
RTC_Write_Byte(WRITE_SECOND,second);
RTC_Write_Byte(0x8e,0x00); //写入允许
RTC_Write_Byte(0x8E,0x80);
}
void SET_TIME()
{
uint8 i;
CurrentTime(&TIMETYPE);
while(1)
{
switch(i)
{
case 0:SET_YEAR();break;
case 1:SET_MONTH();break;
case 2:SET_DAY(); break;
case 3:SET_WEEK();break;
case 4:SET_HOUR();break;
case 5:SET_MINE();break;
case 6:SET_SECOND();break;
}
if(!KEY2){i++;KEY_Delay();i1=i2=0;}
if(i==7){i=0;Write_Time();break;}
i1++;
if(i1==10){i2++;i1=0;}
if(i2==100){i=0;Write_Time();break;}
}
}
void TIMESETTING()
{
if(!KEY1){LED_EN=1;SET_TIME();}
WORDNUMBER=0;
WORDNUM=0;
}
void LED_Ser(uint8 dat)
{
SBUF=dat;
while(TI==0);
TI=0;
}
void LED_Delay()
{
uint8 i,j;
for(i=0;i<11;i++)
for(j=0;j<16;j++);
}
void SET_STB()
{
Ser_STB=0;
Ser_STB=1;
}
void Disp_LED(uint8 *dat)
{
uint8 i;
uint16 tmp,tmp1,tmp2;
LED_EN=0;
LED_Y=0x01|0xf0;
if(WORDNUMBER==16)
{
WORDNUMBER=0;
WORDNUM++;
}
for(i=0;i<32;i+=2)
{
if((!KEY1)&&(!LCD_NO))TIMESETTING();
tmp1=(dat[i+1]|(uint16)(dat[i]<<8));
tmp2=(dat[i+33]|(uint16)(dat[i+32]<<8));
tmp=((tmp1<<WORDNUMBER)|tmp2>>(16-WORDNUMBER));
if(tmp2==0x55aa)WORDNUM=0;
LED_EN=0;
LED_Ser((uint8)(tmp));
LED_Ser((uint8)(tmp>>8));
SET_STB();
LED_Y=0x0f&(i/2);
LED_Delay();
LED_EN=1;
}
}
void Disp_LED1(uint8 *dat,uint8 *dat1)
{
uint8 i;
uint16 tmp,tmp1,tmp2;
LED_EN=0;
LED_Y=0x01|0xf0;
if(WORDNUMBER==16)
{
WORDNUMBER=0;
WORDNUM++;
}
for(i=0;i<32;i+=2)
{
if((!KEY1)&&(!LCD_NO))TIMESETTING();
tmp1=(dat[i+1]|(uint16)(dat[i]<<8));
tmp2=(dat1[i+1]|(uint16)(dat1[i]<<8));
tmp=((tmp1<<WORDNUMBER)|tmp2>>(16-WORDNUMBER));
LED_EN=0;
LED_Ser((uint8)(tmp));
LED_Ser((uint8)(tmp>>8));
SET_STB();
LED_Y=0x0f&(i/2);
LED_Delay();
LED_EN=1;
}
}
void Disp_Str_LED2(uint8 *dat,uint8 *dat1,uint8 *dat2)
{
uint8 i;
uint16 tmp,tmp1,tmp2;
LED_EN=0;
LED_Y=0x01|0xf0;
if(WORDNUMBER==16)
{
WORDNUMBER=0;
WORDNUM++;
}
for(i=0;i<32;i+=2)
{
if((!KEY1)&&(!LCD_NO))TIMESETTING();
tmp1=(dat1[i/2]|(uint16)(dat[i/2]<<8));
tmp2=(dat2[i+1]|(uint16)(dat2[i]<<8));
tmp=((tmp1<<WORDNUMBER)|tmp2>>(16-WORDNUMBER));
LED_EN=0;
LED_Ser((uint8)(tmp));
LED_Ser((uint8)(tmp>>8));
SET_STB();
LED_Y=0x0f&(i/2);
LED_Delay();
LED_EN=1;
}
}
void Disp_Str_LED4(uint8 *dat,uint8 *dat1,uint8 *dat2,uint8 *dat3)
{
uint8 i;
uint16 tmp,tmp1,tmp2;
LED_EN=0;
LED_Y=0x01|0xf0;
if(WORDNUMBER==16)
{
WORDNUMBER=0;
WORDNUM++;
}
for(i=0;i<32;i+=2)
{
if((!KEY1)&&(!LCD_NO))TIMESETTING();
tmp1=(dat1[i/2]|(uint16)(dat[i/2]<<8));
tmp2=(dat3[i/2]|(uint16)(dat2[i/2]<<8));
tmp=((tmp1<<WORDNUMBER)|tmp2>>(16-WORDNUMBER));
LED_EN=0;
LED_Ser((uint8)(tmp));
LED_Ser((uint8)(tmp>>8));
SET_STB();
LED_Y=0x0f&(i/2);
LED_Delay();
LED_EN=1;
}
}
void Disp_Str_LED_HZ(uint8 *dat,uint8 *dat1,uint8 *dat2)
{
uint8 i;
uint16 tmp,tmp1,tmp2;
LED_EN=0;
LED_Y=0x01|0xf0;
if(WORDNUMBER==16)
{
WORDNUMBER=0;
WORDNUM++;
}
for(i=0;i<32;i+=2)
{
if((!KEY1)&&(!LCD_NO))TIMESETTING();
tmp1=(dat[i+1]|(uint16)(dat[i]<<8));
tmp2=(dat2[i/2]|(uint16)(dat1[i/2]<<8));
tmp=((tmp1<<WORDNUMBER)|tmp2>>(16-WORDNUMBER));
LED_EN=0;
LED_Ser((uint8)(tmp));
LED_Ser((uint8)(tmp>>8));
SET_STB();
LED_Y=0x0f&(i/2);
LED_Delay();
LED_EN=1;
}
}
void LCD_DISP()
{
DATE[0]='2';
DATE[1]='0';
DATE[4]='/';
DATE[7]='/';
DATE[10]='W';
DATE[11]='e';
DATE[12]='e';
DATE[13]='k';
DATE[14]=':';
DATE[16]='\0';
TIME[2]=':';
TIME[5]=' ';
TIME[6]='T';
TIME[7]='e';
TIME[8]='m';
TIME[9]='p';
TIME[10]=':';
TIME[13]=0xdf;
TIME[14]='C';
TIME[15]=' ';
TIME[16]='\0';
}
void LCD_Disp_Time()
{
DATE[2]=TIMETYPE.Year/10+'0';
DATE[3]=TIMETYPE.Year%10+'0';
DATE[5]=TIMETYPE.Month/10+'0';
DATE[6]=TIMETYPE.Month%10+'0';
DATE[8]=TIMETYPE.Day/10+'0';
DATE[9]=TIMETYPE.Day%10+'0';
DATE[15]=TIMETYPE.Week+'0';
TIME[0]=TIMETYPE.Hour/10+'0';
TIME[1]=TIMETYPE.Hour%10+'0';
TIME[3]=TIMETYPE.Mine/10+'0';
TIME[4]=TIMETYPE.Mine%10+'0';
TIME[11]=Temp_Value/10+'0';
TIME[12]=Temp_Value%10+'0';
if(TEMP_ERR)
{
Temp_Value=0;
TIME[11]='E';
TIME[12]='R';
TIME[13]='R';
TIME[14]='0';
TIME[15]='R';
}
else
{
TIME[13]=0xdf;
TIME[14]='C';
TIME[15]=' ';
}
LCD_Prints(DATE,0);
LCD_Prints(TIME,0x40);
}
void main()
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
EA=1;
TR0=1;
ET0=1;
SCON=0;
LCD_INITIALIZE();
TEMP_INITIALIZE();
LCD_DISP();
while(1)
{
switch(WORDNUM)
{
case WORDNUU+0:Disp_Str_LED_HZ(&HZ[WORDNUU],&NUM[2],&NUM[0]);break;
case WORDNUU+1:Disp_Str_LED4(&NUM[2],&NUM[0],&NUM[TIMETYPE.Year/10],&NUM[TIMETYPE.Year%10]);break;
case WORDNUU+2:Disp_Str_LED2(&NUM[TIMETYPE.Year/10],&NUM[TIMETYPE.Year%10],&DATETMP[0]);break;
case WORDNUU+3:Disp_Str_LED_HZ(&DATETMP[0],&NUM[TIMETYPE.Month/10],&NUM[TIMETYPE.Month%10]);break;
case WORDNUU+4:Disp_Str_LED2(&NUM[TIMETYPE.Month/10],&NUM[TIMETYPE.Month%10],&DATETMP[1]);break;
case WORDNUU+5:Disp_Str_LED_HZ(&DATETMP[1],&NUM[TIMETYPE.Day/10],&NUM[TIMETYPE.Day%10]);break;
case WORDNUU+6:Disp_Str_LED2(&NUM[TIMETYPE.Day/10],&NUM[TIMETYPE.Day%10],&DATETMP[2]);break;
case WORDNUU+7:Disp_LED1(&DATETMP[2],&DATETMP[5]);break;
case WORDNUU+8:Disp_LED1(&DATETMP[5],&DATETMP[6]);break;
case WORDNUU+9:Disp_LED1(&DATETMP[6],&WEEK[TIMETYPE.Week-1]);break;
case WORDNUU+10:Disp_Str_LED_HZ(&WEEK[TIMETYPE.Week-1],&NUM[TIMETYPE.Hour/10],&NUM[TIMETYPE.Hour%10]);break;
case WORDNUU+11:Disp_Str_LED2(&NUM[TIMETYPE.Hour/10],&NUM[TIMETYPE.Hour%10],&DATETMP[3]);break;
case WORDNUU+12:Disp_Str_LED_HZ(&DATETMP[3],&NUM[TIMETYPE.Mine/10],&NUM[TIMETYPE.Mine%10]);break;
case WORDNUU+13:Disp_Str_LED2(&NUM[TIMETYPE.Mine/10],&NUM[TIMETYPE.Mine%10],&DATETMP[4]);break;
case WORDNUU+14:Disp_LED1(&DATETMP[4],&DATETMP[7]);break;
case WORDNUU+15:Disp_LED1(&DATETMP[7],&DATETMP[8]);break;
case WORDNUU+16:Disp_Str_LED_HZ(&DATETMP[8],&NUM[Temp_Value/10],&NUM[Temp_Value%10]);break;
case WORDNUU+17:Disp_Str_LED2(&NUM[Temp_Value/10],&NUM[Temp_Value%10],&DATETMP[9]);break;
case WORDNUU+18:Disp_LED1(&DATETMP[9],&DATETMP[10]);break;
case WORDNUU+19:Disp_LED1(&DATETMP[10],&DATETMP[11]);break;
case WORDNUU+20:Disp_LED1(&DATETMP[11],&HZ[0]);break;
case WORDNUU+21:WORDNUM=0;WORDNUMBER=0;break;
default:Disp_LED(&HZ[WORDNUM]);
}
if(WORDNUMBER==16)
{
TEMP_Read();
CurrentTime(&TIMETYPE);
LCD_Disp_Time();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -