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

📄 main.c

📁 本资料为基于单片机89C55+LCD12864的万年历
💻 C
📖 第 1 页 / 共 2 页
字号:
							if(ringtime[2]==0)
							{
								ringtime[2]=5;
								ringtime[3]=9;
							}
							else
							{
								ringtime[2]--;
								ringtime[3]=9;
							}
						}
						else	
							ringtime[3]--;
						play816(1,2,2,shuzi1[ringtime[2]],1);
						play816(1,3,2,shuzi1[ringtime[3]],1);
						break;

					}
					case 7:
					{
					   ringtime[4]=~(ringtime[4]);
					   if(ringtime[4]==0)
					   {
							play816(1,4,2,no,1);
						}
						else
							play816(1,4,2,yes,1);
						break;
					}
					default:;
				}	
			}
			if(keycode==0x11)  //按下设置键
			{
				fg=yearstype(2000+10*datastring[0]+datastring[1]);
				for(mm=0;mm<(10*datastring[2]+datastring[3]-1);mm++)
				{
					sum+=days_in_a_mon[fg][mm];	
				}
				sum+=10*datastring[4]+datastring[5];
				weekvalue=((2000+10*datastring[0]+datastring[1]-1)+(2000+10*datastring[0]+datastring[1]-1)/4-(2000+10*datastring[0]+datastring[1]-1)/100+(2000+10*datastring[0]+datastring[1]-1)/400+sum)%7;
				if(weekvalue==0)
					weekvalue=7;
				day_set(0);
				settime(ds1302_minute,16*datastring[8]+datastring[9]);
  				settime(ds1302_hour,16*datastring[6]+datastring[7]);
  				settime(ds1302_day,16*datastring[4]+datastring[5]);
  				settime(ds1302_month,16*datastring[2]+datastring[3]);
  				settime(ds1302_year,16*datastring[0]+datastring[1]);
  				settime(ds1302_week,weekvalue);
				init12864();
				clear12864();
				break;
			}
		}				
	}
	else if((keycode!=0)&&ringflag)
	{
		ringdelay=0;
		ringflag=0;
		ringout=0;
		ringoff=0;
	}
	TH0=(65536-7000)/256;
	TL0=(65536-7000)%256;
}

void ringcheck() interrupt 3
{
//		gettemperature(); //取温度存在temp数组中
		if(ringtime[4]&&ringoff)
		{
			if((10*datastring[6]+datastring[7])==(10*ringtime[0]+ringtime[1])&&(10*datastring[8]+datastring[9])==(10*ringtime[2]+ringtime[3]))
				ringflag=1;
			if(ringflag)
			{
				ringdelay++;
				ringout=1;
				if(ringdelay>=180)
				{
					ringdelay=0;
					ringflag=0;
					ringout=0;
					ringoff=0;
				}

			}
					
		}
		if((10*datastring[6]+datastring[7])!=(10*ringtime[0]+ringtime[1])||(10*datastring[8]+datastring[9])!=(10*ringtime[2]+ringtime[3])&&ringtime[4])
		{
			ringoff=1;
		}
		TH1=(65536-50000)/256;
		TL1=(65535-50000)%256;	
	
}

/***************************************************/




void main()
{
	uchar feq=0;
	uchar k1,k2,k11,k22,k33;
	uchar endrow=63,beginrow=1;
	uchar flag0=1;   				  
	uchar i,j,kk;
	ringout=0;
	choose12864(2);
	init12864();
	clear12864();
	disppc12864(pic);
	d1s(1);//显示欢迎画面20秒
	clear12864();
	init_ds1302();
  	init_time();

	TMOD=0x11;
	TH0=(65536-7000)/256;
	TL0=(65536-7000)%256;
	TH1=(65536-50000)/256;
	TL1=(65535-50000)%256;
	IP=0x02;
	EA=1;
	ET0=1;
	ET1=1;
	TR0=1;
	TR1=1;


	for(;;)
	{
	/************************时间显示部分***************************/
		gettime();	//时间日期数据保存在datastring里面		
		for(i=0;i<6;i++)
		{
			kk=0;
			for(j=i*16;j<i*16+16;j++)
			{
				datatemp[j]=shuzi1[datastring[i+6]][kk++];
			}	
		}
		for(i=0;i<12;)
		{
			for(j=i*8;j<i*8+8;j++)
				datatemp[j]=datatemp[j]|0x01;
			i=i+2;
		}
		datatemp[0]=0xff;
		datatemp[8]=0xff;
		datatemp[95]=0xff;
		datatemp[87]=0xff;
		play816(1,7,0,datatemp+80,0);
		play816(1,0,0,datatemp,0);
		play816(1,1,0,datatemp+16,0);
		play816(1,2,0,dian1,0);
		play816(1,3,0,datatemp+32,0);
		play816(1,4,0,datatemp+48,0);
		play816(1,5,0,dian1,0);
		play816(1,6,0,datatemp+64,0);
	 
/****************************************************************/
     	
/************************日期显示部分****************************/
	 		kk=0;
			for(i=0;i<16;i++)
			{
				datatemp[i]=shuzi1[2][kk++];
			}
			kk=0;
			for(i=16;i<32;i++)
			{
				datatemp[i]=shuzi1[0][kk++];
			}
			kk=0;
			for(i=32;i<48;i++)
			{
				datatemp[i]=shuzi1[datastring[0]][kk++];
			}
			kk=0;
			for(i=48;i<64;i++)
			{
				datatemp[i]=shuzi1[datastring[1]][kk++];
			}
			for(i=0;i<8;)
			{
				for(j=i*8;j<i*8+8;j++)
					datatemp[j]=datatemp[j]|0x01;
				i=i+2;
			} 
			datatemp[0]=0xff;
			datatemp[8]=0xff;	 
			play816(0,0,1,datatemp,0);
			play816(0,1,1,datatemp+16,0);
			play816(0,2,1,datatemp+32,0);
			play816(0,3,1,datatemp+48,0);
 		
			for(i=0;i<16;i++)
				datatemp[i]=shuzi1[datastring[2]][i];
			kk=0;
			for(i=16;i<32;i++)
				datatemp[i]=shuzi1[datastring[3]][kk++];
			kk=0;
			for(i=32;i<64;i++)
				datatemp[i]=yue[kk++];
			
			for(i=0;i<4;)
			{
				for(j=i*8;j<i*8+8;j++)
					datatemp[j]=datatemp[j]|0x01;
				i=i+2;
			}
			for(i=0;i<16;i++)
				datatemp[i+32]=datatemp[i+32]|0x01;
			datatemp[0]=0xff;
			datatemp[8]=0xff;  
			play816(0,0,2,datatemp,0);
			play816(0,1,2,datatemp+16,0);
			play1616(0,2,2,datatemp+32);
		
			for(i=0;i<64;i++)
				datatemp[i]=shuzi2[datastring[4]][i];
			for(i=0;i<16;i++)
				datatemp[i]=shuzi2[datastring[4]][i]|0x01;
			datatemp[0]=0xff;
			datatemp[16]=0xff;
			datatemp[32]=0xff;
			datatemp[48]=0xff;
			play1632(0,4,1,datatemp);
			for(i=0;i<64;i++)
				datatemp[i]=shuzi2[datastring[5]][i];
			for(i=0;i<16;i++)
				datatemp[i]=shuzi2[datastring[5]][i]|0x01;
			play1632(0,6,1,datatemp);	 		
	 
/**************************************************************** /

/****************************星期显示部分************************/
			for(i=0;i<64;i++)
				datatemp[i]=xingqi[i];
	   		if(datastring[12]==7)
	   		{
				kk=0;
				for(i=64;i<96;i++)
					datatemp[i]=shuzi3[10][kk++];
			}
			else
			{
				kk=0;
				for(i=64;i<96;i++)
					datatemp[i]=shuzi3[datastring[12]-1][kk++];
			}  

			for(i=0;i<6;)
			{	
				for(j=i*16;j<i*16+16;j++)
					datatemp[j]=datatemp[j]|0x01;
				i=i+2;
			}
			for(i=1;i<7;)
			{
				for(j=i*16;j<i*16+16;j++)
					datatemp[j]=datatemp[j]|0x80;
				i=i+2;
			}
			datatemp[0]=0xff;
			datatemp[16]=0xff;
			play1616(0,0,3,datatemp);
			play1616(0,2,3,datatemp+32);
			play1616(0,4,3,datatemp+64); 
	 
/****************************************************************/

/******************************温度显示**************************/
		gettemperature(); //取温度存在temp数组中
		for(i=0;i<16;i++)
			datatemp[i]=shuzi1[temp[0]][i];
		kk=0;
		for(i=16;i<32;i++)
			datatemp[i]=shuzi1[temp[1]][kk++];
		kk=0;
		for(i=32;i<48;i++)
			datatemp[i]=oc[kk++];
		for(i=0;i<6;)
			{
				for(j=i*8;j<i*8+8;j++)
					datatemp[j]=datatemp[j]|0x01;
				i=i+2;
			}
		datatemp[0]=0xff;
		datatemp[8]=0xff;
		play816(1,0,1,datatemp,0);
		play816(1,1,1,datatemp+16,0);
		play816(1,2,1,datatemp+32,0);
	 
/****************************************************************/

/***********************闹钟时间显示****************************/
	 	for(i=0;i<40;i++)
			datatemp[i]=alarm[i]|0x01;
		datatemp[0]=0xff;
		datatemp[39]=0xff;
		play88(1,3,2,datatemp);
		play88(1,4,2,datatemp+8);
		play88(1,5,2,datatemp+16);
		play88(1,6,2,datatemp+24);
		play88(1,7,2,datatemp+32);
	   if(ringtime[4])
	   {
			for(i=0;i<8;i++)
				datatemp[i]=shuzi4[ringtime[0]][i];
			kk=0;
			for(i=8;i<16;i++)
				datatemp[i]=shuzi4[ringtime[1]][kk++];
			kk=0;
			for(i=16;i<24;i++)
				datatemp[i]=dian2[kk++];
			kk=0;
			for(i=24;i<32;i++)
				datatemp[i]=shuzi4[ringtime[2]][kk++];
			kk=0;
			for(i=32;i<40;i++)
				datatemp[i]=shuzi4[ringtime[3]][kk++];
		}
		else
		{
			 for(i=0;i<40;i++)
			 	datatemp[i]=0xff;
		}
		datatemp[0]=0xff;
		datatemp[39]=0xff;
		play88(1,3,3,datatemp);
		play88(1,4,3,datatemp+8);
		play88(1,5,3,datatemp+16);
		play88(1,6,3,datatemp+24);
		play88(1,7,3,datatemp+32);
	 
/****************************************************************/

/***************************农历显示*****************************/
			nongli(2000+10*datastring[0]+datastring[1],10*datastring[2]+datastring[3],10*datastring[4]+datastring[5]);	
			//获得农历日期保存在datenong里
			if(datenong[0]==0)
				for(i=0;i<32;i++)
					 datatemp[i]=0x00;
			else
			for(i=0;i<32;i++)
				datatemp[i]=shuzi3[9][i];
			
			kk=0;
			for(i=32;i<64;i++)
				datatemp[i]=shuzi3[datenong[1]-1][kk++];
			kk=0;
			for(i=64;i<96;i++)
				datatemp[i]=yue[kk++];
			for(i=0;i<6;)
			{
				for(j=i*16;j<i*16+16;j++)
					datatemp[j]=datatemp[j]|0x01;
				i=i+2;
			}
			for(i=1;i<7;)
			{
				for(j=i*16;j<i*16+16;j++)
					datatemp[j]=datatemp[j]|0x80 ;
				i=i+2;
			}
			datatemp[0]=0xff;
			datatemp[16]=0xff;	
			play1616(0,6,3,datatemp);
			play1616(1,0,3,datatemp+32);
			play1616(1,2,3,datatemp+64); 
 		
			if(datenong[2]==0)
				for(i=0;i<32;i++)
					datatemp[i]=shuzi3[12][i];
			else if(datenong[2]==1)
				 for(i=0;i<32;i++)
					datatemp[i]=shuzi3[9][i];
			else if(datenong[2]==2)
				   for(i=0;i<32;i++)
						datatemp[i]=shuzi3[11][i];
			else if(datenong[2]==3)
			{
				for(i=0;i<32;i++)
					datatemp[i]=shuzi3[2][i];  
				kk=0;
				for(i=32;i<64;i++)
					datatemp[i]=shuzi3[9][kk++];
			}
		
			if(datenong[2]!=3)
			{
				kk=0;
				for(i=32;i<64;i++)
					datatemp[i]=shuzi3[datenong[3]-1][kk++];
				for(i=0;i<4;)
				{
					for(j=i*16;j<i*16+16;j++)
						datatemp[j]=datatemp[j]|0x01;
					i=i+2;
				}
			}
		
			for(i=1;i<5;)
			{
				for(j=i*16;j<i*16+16;j++)
					datatemp[j]=datatemp[j]|0x80;
				i=i+2;
			}	 
			datatemp[63]=0xff;
			datatemp[47]=0xff;	 
			play1616(1,4,3,datatemp);
			play1616(1,6,3,datatemp+32);
/*****************************************************************/

/*****************************节日显示****************************/	
		jieri(10*datastring[2]+datastring[3],10*datastring[4]+datastring[5],10*datenong[0]+datenong[1],10*datenong[2]+datenong[3]);
/*****************************************************************/

/***************************生肖显示*****************************/
			dispshengxiao(10*datastring[0]+datastring[1]);
/****************************************************************/
		chsfill(1,0,4,0xff);
		chsfill(1,0,5,0xff);
		chsfill(1,63,4,0xff);
		chsfill(1,63,5,0xff);
/************************滚动显示**************************/
		feq++;
		if(feq==3)
		{
			if(flag0==1)
			{
				for(i=1;i<endrow;i++)
				{
					chsfill(1,i,4,0x01);
					chsfill(1,i,5,0x00);
				}
				k1=0;
				k2=16;
				for(i=endrow;i<63;i++)
				{
					chsfill(1,i,4,zhizuo[k1++]);
					if((k1%16==0)&&(((k1/16)%2)==1))
						k1=k1+16;
					chsfill(1,i,5,zhizuo[k2++]);
					if((k2%16==0)&&(((k2/16)%2)==0))
						k2=k2+16;
				}
				endrow--;
				if(endrow==1)
				{
					flag0=0;
					k33=0;
					k11=0;
					k22=16;
				}
			}
			else if(flag0==0)
			{
				k33++;
				if(k33==1)
				{
					k11=0;
					k22=16;
				}
				else
				{
					k11++;
			 		k22++;
				}
				if((k11%16==0)&&(((k11/16)%2)==1))
					k11=k11+16;
				if((k22%16==0)&&(((k22/16)%2)==0))
					k22=k22+16;
				k1=k11;
				k2=k22;
				for(i=1;i<63;i++)
				{
					chsfill(1,i,4,zhizuo[k1++]);
					if((k1%16==0)&&(((k1/16)%2)==1))
						k1=k1+16;
					chsfill(1,i,5,zhizuo[k2++]);
					if((k2%16==0)&&(((k2/16)%2)==0))
						k2=k2+16;
				}
				if(k33==35)
				{
					flag0=2;
					endrow=63;
					beginrow=63;
					k33=0;
					k11=66;
					k22=82;
				}		
			}
			else if(flag0==2)
			{
				k33++;
				k11++;
			 	k22++;
				if((k11%16==0)&&(((k11/16)%2)==1))
					k11=k11+16;
				if((k22%16==0)&&(((k22/16)%2)==0))
					k22=k22+16;
				k1=k11;
				k2=k22;
				for(i=1;i<(63-k33);i++)
				{
					chsfill(1,i,4,zhizuo[k1++]);
					if((k1%16==0)&&(((k1/16)%2)==1))
						k1=k1+16;
					chsfill(1,i,5,zhizuo[k2++]);
					if((k2%16==0)&&(((k2/16)%2)==0))
						k2=k2+16;
				}
				beginrow--;
				for(i=beginrow;i<endrow;i++)
				{
					chsfill(1,i,4,0x01);
					chsfill(1,i,5,0x00);
				}
				if(k33==61)
				{
					flag0=1;
				}
			
			}
			feq=0;
		}		
/**********************************************************/		 
	}  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -