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

📄 ʦ

📁 液晶时钟程序及仿真图
💻
📖 第 1 页 / 共 2 页
字号:
					minute--;
					if(minute==255)
						minute=59;
					display_sfm(8,minute);
					write_com(0x80+0x40+8);				 //指针还原到分的个位
				}
				if(s1num==3)							   //时-
				{
					hour--;
					if(hour==255)
						hour=23;
					display_sfm(5,hour);
					write_com(0x80+0x40+5);				  //指针还原到时的个位
				}
				if(s1num==4)								//日-
				{
					date--;
					if(month!=2)	 
					{
						switch(month)
						{
							case 1:
							case 3:
							case 5:
							case 7:
							case 8:
							case 10:
							case 12:if(date==0)
									{
										date=31;
									}
									break;
							case 4:
							case 6:
							case 9:
							case 11:if(date==0)
									{
										date=30;
									}
									break;							
						}
						display_nyr(11,date);
						write_com(0x80+11);					    //指针还原到日的个位
					}
					else								
					{
						if(year%4==0)
						{
						 	if(date==0)											   //闰年29天
							{										
								date=29;			
						 	}
							else
							{
								if(date==0)
								{
									date=28;
								}
							}		
						}
						display_nyr(11,date);
						write_com(0x80+11);							 //指针还原到日的个位
					}
				}
				if(s1num==5)								//月-
				{
					month--;
					switch(month)
					{
						case 1:
						case 3:
						case 5:
						case 7:
						case 8:
						case 10:
						case 12:			break;
						case 0:	month=12;	break;
						case 4:
						case 6:
						case 9:
						case 11:	if(date==31)date=1;break;
						case 2:		if(year%4==0)
									{
										if(date>=30)date=1;
									}
									else
									{
										if(date>=29)date=1;
									}
					}										
					display_nyr(8,month);					
					write_com(0x80+11);					   //指针指向日的个位
					display_nyr(11,date);	
					write_com(0x80+8);					   //指针还原到月的个位
				}
				if(s1num==6)								//年-
				{
					year--;
					if(year==0)
						year=99;
					display_nyr(5,year);
					write_com(0x80+5);						//指针还原到年的个位
				}
				if(s1num==7)								//星期-
				{
					day--;
					if(day==0)
						day=7;
					display_week(13,day);
					write_com(0x80+13);						//指针还原到年的个位
				}
			}
		}			
	}
}

void alarm_keyscan()
{					
	if(moshi2==0)
	{
		if(s4==0)
		{
			delay(2);
			if(s4==0)
			{
				moshi1=1;
				moshi3=1;
				s4num++;
				flag=1;
				while(!s4);				 					
				if(s4num==1)
				{	
					if(flag2==0)
					{
						a_hour=read_ds(5);	  	  //读闹钟 时
						a_minute=read_ds(3);	  //读闹钟 分
						a_second=read_ds(1);	  //读闹钟 秒
						display_sfm(5,a_hour);
						display_sfm(8,a_minute); 
						display_sfm(11,a_second);
					}
					write_com(0x06);
					write_com(0x80);
					for(num=0;num<16;num++)		  //第一行显示“SET ALARM”
					{
						write_date(table2[num]);
						delay(1);
					}
					write_com(0x80+0x40+11); //指针指向 秒的个位
					write_com(0x0f);		 //开显示 开光标 开闪烁
					flag2=1;
				}		
				if(s4num==2)
				{
					write_com(0x80+0x40+8);	  //指针指向 分的个位
				}
				if(s4num==3)
				{
					write_com(0x80+0x40+5);	  //指针指向 时的个位
				}
				if(s4num==4)
				{
					s4num=0;
					write_com(0x0c);		  //开显示 无光标 不闪烁				
					write_ds(5,a_hour);		      	  //	时
					write_ds(3,a_minute);		      //	分
					write_ds(1,a_second);		      //	秒 								
					flag=0;
					flag2=0;
					moshi1=0;
					moshi3=0;				
					write_com(0x06);		  //指针加1
					write_com(0x80);		  //让第一行继续显示年月日
					for(num=0;num<16;num++)
					{
						write_date(table[num]);
						delay(1);
					}  
				}
			}
		} 
	}
	if(s4num!=0)
	{
		if(s2==0)
		{
			delay(2);
			while(!s2);
			if(s4num==1)
			{
				a_second++;
				if(a_second>=60)						 //秒+
					a_second=0;
				display_sfm(11,a_second);
				write_com(0x80+0x40+11);			//指针还原到秒的个位
			}																												 
			if(s4num==2)							 //分+
			{
				a_minute++;
				if(a_minute>=60)
					a_minute=0;
				display_sfm(8,a_minute);
				write_com(0x80+0x40+8);				 //指针还原到分的个位
			}				
			if(s4num==3)							   //时+
			{
				a_hour++;
				if(a_hour>=24)
					a_hour=0;
				display_sfm(5,a_hour);
				write_com(0x80+0x40+5);				  //指针还原到时的个位
			}
		}
		if(s3==0)
		{
			delay(2);
			while(!s3);
			if(s4num==1)
			{
				a_second--;
				if(a_second==255)						 //秒-
					a_second=59;
				display_sfm(11,a_second);
				write_com(0x80+0x40+11);			//指针还原到秒的个位
			}																												 
			if(s4num==2)							 //分-
			{
				a_minute--;
				if(a_minute==255)
					a_minute=59;													  
				display_sfm(8,a_minute);
				write_com(0x80+0x40+8);				 //指针还原到分的个位
			}				
			if(s4num==3)							   //时-
			{
				a_hour--;
				if(a_hour==255)
					a_hour=23;
				display_sfm(5,a_hour);
				write_com(0x80+0x40+5);				  //指针还原到时的个位
			}
		}
	}
}

void miaobiao_keyscan()
{
	if(moshi3==0)
	{
		if(s3==0)
		{
			delay(2);
			if(s3==0)
			{
				moshi1=1;
				moshi2=1;
				s3num++;
				flag=1;
				flag3=0;
				flag4=1;
				shu=0;
				TR0=0;
				while(!s3);
			    	write_com(0x06);
				write_com(0x80);
				for(num=0;num<16;num++)		  //第一行显示“MIAO BIAO”
				{
					write_date(table3[num]);
					delay(1);
				}
				write_com(0x06);
				write_com(0x80+0x40);
				for(num=0;num<16;num++)		  //第二行显示“00:00:00”
				{
					write_date(table4[num]);
					delay(1);
				}
				if(s3num==2)
				{	
					TR0=0;
					s3num=0;
					flag=0;
					flag3=1;
					flag4=0;
					moshi1=0;
					moshi2=0;
					write_com(0x06);		  //指针加1
					write_com(0x80);		  //让第一行继续显示年月日
					for(num=0;num<16;num++)
					{
						write_date(table[num]);
						delay(1);
					}  
					
				}
			}
		}
		if(s3num!=0)
		{
			if(s1==0)
			{
				delay(2);
				if(s1==0)
				{
					s1num++;
					if(s1num==1)
					{
						TR0=1;
					}
					if(s1num==2)
					{
						s1num=0;
						TR0=0;
					}
				}
			}
			if(s2==0)
			{
				delay(2);
				if(s2==0)
				{
					shu=0;
					TR0=0;
				}
			}
		}
	}
}

void BEEP()
{
	uchar i;
	for(i=0;i<100;i++)
	{
		beep=0;
		delay(1);
		beep=1;
		delay(1);
	}
	delay(100);
}
void main()
{
	lcd_init();
	ds_init();	
	set_time();
	set_alarm();
	interrupt_init();
	c=read_ds(0x0c);  //开闹钟给AIE引脚置高电平
	while(1)
	{
		time_keyscan();
		alarm_keyscan();
		miaobiao_keyscan();
		if(flag1==0)
			BEEP();		
		if(flag==0)
		{
			year=read_ds(9);
			month=read_ds(8);
			date=read_ds(7);
			day=read_ds(6);
			hour=read_ds(4); 	
			minute=read_ds(2);
			second=read_ds(0);		
			display_nyr(5,year);
			display_nyr(8,month);
			display_nyr(11,date);
			display_week(13,day); 
			display_sfm(5,hour);
			display_sfm(8,minute); 
			display_sfm(11,second);
		}
		if(flag3==0)
		{
			display_miaobiao(11);
		}
	}
}

void exter0() interrupt 0
{
		uchar c;
		flag1=0;
		tt=0;
		TR0=1;
		flag4=0;
		c=read_ds(0x0c);
}

void timer0() interrupt 1
{
	TH0=(65536-10000)/256;
	TL0=(65536-10000)%256;
	if(flag4==0)
	{
		tt++;
		if(tt==500)		 //响5秒
		{				   
			flag1=1;		 //不响
		}
		if(tt==1000)		 //停5秒
		{
			flag1=0;		 //响
			tt=0;
		}
	}
	shu++;
	if(shu==1000000)
		shu=0;
} 

⌨️ 快捷键说明

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