⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led.c

📁 51的万年历程序
💻 C
📖 第 1 页 / 共 2 页
字号:
{
	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 + -