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

📄 wannianli.c

📁 3208LED电子钟的程序及编译文件
💻 C
📖 第 1 页 / 共 3 页
字号:
				TR0 = 0;
				Beeplll();
				for(a=0;a<6;a++){
					if(OK_Key == 0 || int_Key == 0 || Add_Key == 0 || Add2_Key == 0){
						b = 200;
						v = read_clock(0x83);//按键停止后设置分=V,可防止松开键后再次响
					}	
					display ();//正常扫描显示驱动
				}		
			}
			BEEP_bit = 0;
			ET0 = 1;//关定时器中断(停止显示切换)
			TR0 = 1;
		}else{
			display ();//正常扫描显示驱动
			if(v != read_clock(0x83)){//当分不再是闹钟的分时,则设置V是211 不会有冲突
				v = 0xfe;
			}
		}	
/**********************************************************************************************/	
		if(MENU == 0) {//时钟显示,主画面
			if(OK_Key == 0){//OK键 全部LED点亮 测试用
				for(bn=0;bn<32;bn++){//		
					Ledplay[bn] = 0xff;//将数据放入显示缓冲区
				}
			}
			if(Add_Key == 0){//按+键显示LOGO “DOYOUNG”	    
				bn = 0;a=0;
				clearRAM();//清空显示缓冲区数据
				timecount = 41;//将显示切换值调到41,使开机画面停留2秒
				while(DoYoung[a] != 0x99){//显示画面“DOYOUNG”		
					Ledplay[bn] = DoYoung[a];//
					a++;//换下一个提取字节	
					bn++;//换下一个显示缓冲字节			
				}
			}
			if(Add2_Key == 0){//按-键显示版本号 V3.0
				bn = 0;a=0;
				clearRAM();//清空显示缓冲区数据
				timecount = 41;//将显示切换值调到41,使开机画面停留2秒
				while(V30[a] != 0x99){//显示开机画面“ALARM”		
					Ledplay[bn] = V30[a];//将二维数组中的一组数据放入显示缓冲区
					a++;//换下一个提取字节	
					bn++;//换下一个显示缓冲字节			
				}
			}
			if(int_Key == 0){//接MENU键 进入设置菜单			
				DelayM(20);//去抖			
				if(int_Key == 0){
				key_off ();//等待键放开
				ET0 = 0;//关定时器中断(停止显示切换)
				TR0 = 0;
				MENU++;//MENU菜单切换值加1 跳入菜单项目
				Beep_set();//调时提示音			
				}
			}		
		}
/**********************************************************************************************/	
		if(MENU >0 && MENU < 9){//ALARM1~8 闹钟设置菜单	
			bn = 0;a=0;	
			clearRAM();//清空显示缓冲区数据	
			while(ALARM[a] != 0x99){//显示开机画面“ALARM”			
				Ledplay[bn] = ALARM[a];//将二维数组中的一组数据放入显示缓冲区	
				a++;//换下一个提取字节		
				bn++;//换下一个显示缓冲字节				
			}
			putin(MENU);//显示闹钟组号	
			if(OK_Key == 0){//确定进入此号闹钟				
		 		DelayM(20);//去抖				
		 		if(OK_Key == 0){	
					key_off ();//等待键放开	
		 			Beep_set();//调时提示音				
					a = MENU;
					MENU = 200;
					b = 200;
				}	
		 	}	
			MENUadd1 ();//菜单加1	
			MENUexit ();//	
		}
/**********************************************************************************************/	
		if(MENU == 200){//闹钟调时设置项 	
			uchar y = 0;
			bn = 0;//显示位累加寄存器清零(从头开始写入显示缓冲区)	
			clearRAM();//清空显示缓冲区数据	
			switch (b){//显示设置项的说明
				case 200:			
					while(Mode[y] != 0x99){//显示开机画面“MODE”				
						Ledplay[bn] = Mode[y];//将二维数组中的一组数据放入显示缓冲区	
						y++;//换下一个提取字节		
						bn++;//换下一个显示缓冲字节				
					}
					putin(read_clock(0xc3+a*6));//根据闹钟组号读出设置值
					break;//		
				case 201:
					bn = 0;	
					clearRAM();//清空显示缓冲区数据	
					while(A[y] != 0x99){//显示			
						Ledplay[bn] = A[y];//将二维数组中的一组数据放入显示缓冲区	
						y++;//换下一个提取字节		
						bn++;//换下一个显示缓冲字节				
					}	
					putin(read_clock(0xc3+a*6+2)/16);//显示(十位)		
					putin(read_clock(0xc3+a*6+2)%16);//显示(个位)		
					putin(24);//显示“时”表示		
					break;//		
				case 202:			
					bn = 0;	
					clearRAM();//清空显示缓冲区数据	
					while(A[y] != 0x99){//显示			
						Ledplay[bn] = A[y];//将二维数组中的一组数据放入显示缓冲区	
						y++;//换下一个提取字节		
						bn++;//换下一个显示缓冲字节				
					}	
					putin(read_clock(0xc3+a*6+4)/16);//显示分(十位)		
					putin(read_clock(0xc3+a*6+4)%16);//显示分(个位)		
					putin(25);//显示“分”表示		
					break;//		
			}
			if(OK_Key == 0){//确定进入此号闹钟			
				DelayM(20);//去抖				
				if(OK_Key == 0){	
					key_off ();//等待键放开	
					Beep_set();//调时提示音
					b++;//设置下一项
					if(b>202){ b = 200;}
				}	
			}
			Set_time(b,a);
			MENUexit ();	
		}
/**********************************************************************************************/	
		if(MENU == 9){//TIME 调时设置项	
			bn = 0;a=0;	
			clearRAM();//清空显示缓冲区数据	
			while(Time[a] != 0x99){//显示开机画面“ALARM”			
				Ledplay[bn] = Time[a];//将二维数组中的一组数据放入显示缓冲区	
				a++;//换下一个提取字节		
				bn++;//换下一个显示缓冲字节				
			}	
			MENUadd1 ();//菜单加1	
			MENUexit ();	
		 	if(OK_Key == 0){				
		 		DelayM(20);//去抖				
		 		if(OK_Key == 0){	
					key_off ();//等待键放开	
		 			Beep_set();//调时提示音				
		 			MENU = 100;	
					a = 1;	
		 		}	
			 }	
		}
/**********************************************************************************************/	
		if(MENU == 100){//TIME 调时设置项 	
			uchar y = 0;	
			bn = 0;//显示位累加寄存器清零(从头开始写入显示缓冲区)	
			clearRAM();//清空显示缓冲区数据	
			while(T[y] != 0x99){//显示开机画面“ALARM”			
				Ledplay[bn] = T[y];//将二维数组中的一组数据放入显示缓冲区	
				y++;//换下一个提取字节		
				bn++;//换下一个显示缓冲字节				
			}	
			switch (a){//显示设置项的说明		
				case 1:			
					putin(read_clock(0x8d)/16);//显示年(十位)		
					putin(read_clock(0x8d)%16);//显示年(个位)		
					putin(20);//显示“年”表示		
					break;//		
				case 2:			
					putin(read_clock(0x89)/16);//显示(十位)		
					putin(read_clock(0x89)%16);//显示(个位)		
					putin(21);//显示“月”表示		
					break;//		
				case 3:			
					putin(read_clock(0x87)/16);//显示(十位)		
					putin(read_clock(0x87)%16);//显示(个位)		
					putin(22);//显示“日”表示		
					break;//		
				case 4:			
					putin(23);//显示“周”表示		
					putin(read_clock(0x8b)+9);//显示(个位)		
					break;//		
				case 5:			
					putin(read_clock(0x85)/16);//显示(十位)		
					putin(read_clock(0x85)%16);//显示(个位)		
					putin(24);//显示“时”表示		
					break;//		
				case 6:			
					putin(read_clock(0x83)/16);//显示分(十位)		
					putin(read_clock(0x83)%16);//显示分(个位)		
					putin(25);//显示“分”表示		
					break;//		
			}		
			Set_time(a,0);		
			MENUexit ();		
		 	if(OK_Key == 0){					
		 		DelayM(20);//去抖					
		 		if(OK_Key == 0){		
					key_off ();//等待键放开		
		 			Beep_set();//调时提示音					
		 			a++; if(a>6){ a = 1;}		
		 		}		
			}		
		}	
/**********************************************************************************************/	
		if(MENU == 10){//正点报时设置		
			bn = 0;a=0;	
			clearRAM();//清空显示缓冲区数据	
			while(POINT[a] != 0x99){//显示开机画面“POINT”			
				Ledplay[bn] = POINT[a];//将二维数组中的一组数据放入显示缓冲区	
				a++;//换下一个提取字节		
				bn++;//换下一个显示缓冲字节				
			}	
			MENUadd1 ();//菜单加1	
			MENUexit ();	
		 	if(OK_Key == 0){				
		 		DelayM(20);//去抖				
		 		if(OK_Key == 0){	
					key_off ();//等待键放开	
		 			Beep_set();//调时提示音				
		 			MENU = 101;	
					a = 0;	
		 		}	
			}	
		}
/**********************************************************************************************/		
		if(MENU == 101){//正点报时 设置项 	
			uchar y = 0;	
			bn = 0;//显示位累加寄存器清零(从头开始写入显示缓冲区)	
			clearRAM();//清空显示缓冲区数据	
			while(Pp[y] != 0x99){//显示			
				Ledplay[bn] = Pp[y];//将二维数组中的一组数据放入显示缓冲区	
				y++;//换下一个提取字节		
				bn++;//换下一个显示缓冲字节				
			}	
			write_clock(0x8e,0x00);//允许写操作	
				switch (a){//显示设置项的说明	
					case 0: break;	
					case 1:	write_clock(0xc2,0x07);write_clock(0xc4,0x19);break;//设置正点报时为>7 <19,即8到18点	
					case 2:	write_clock(0xc2,0x07);write_clock(0xc4,0x20);break;//	
					case 3:	write_clock(0xc2,0x07);write_clock(0xc4,0x21);break;//	
					case 4:	write_clock(0xc2,0x07);write_clock(0xc4,0x22);break;//	
					case 5:	write_clock(0xc2,0x07);write_clock(0xc4,0x23);break;//	
					case 6:	write_clock(0xc2,0);write_clock(0xc4,0x23);break;//	
					case 7:	write_clock(0xc2,0);write_clock(0xc4,0);break;//	
				}	
				write_clock(0x8e,0x80);//禁止写操作	
				putin(read_clock(0xc3)%16);//显示开始时间	
				putin(18);//	
				putin(read_clock(0xc5)/16);//显示结束(十位)	
				putin(read_clock(0xc5)%16);//显示结束(个位)	
				MENUexit ();	
		 		if(OK_Key == 0){				
		 			DelayM(20);//去抖				
		 			if(OK_Key == 0){	
						key_off ();//等待键放开	
		 				Beep_set();//调时提示音				
		 				a++; if(a>7){ a = 1;}	
		 			}	
				}	
		}
/**********************************************************************************************/		
		if(MENU == 11){//闹钟总开关		
			bn = 0;a=0;	
			clearRAM();//清空显示缓冲区数据	
			while(ONOFF[a] != 0x99){//显示			
				Ledplay[bn] = ONOFF[a];//将二维数组中的一组数据放入显示缓冲区	
				a++;//换下一个提取字节		
				bn++;//换下一个显示缓冲字节				
			}	
			MENUadd1 ();//菜单加1	
			MENUexit ();	
			if(OK_Key == 0){				
		 		DelayM(20);//去抖				
		 		if(OK_Key == 0){	
					key_off ();//等待键放开	
		 			Beep_set();//调时提示音				
		 			MENU = 102;	
		 		}	
			 }	
		}
/**********************************************************************************************/	
		if(MENU == 102){//闹钟总开关		
			bn = 0;a=0;	
			clearRAM();//清空显示缓冲区数据	
			if(read_clock(0xc7) == 1){	
				while(Aon[a] != 0x99){//显示			
					Ledplay[bn] = Aon[a];//将二维数组中的一组数据放入显示缓冲区	
					a++;//换下一个提取字节		
					bn++;//换下一个显示缓冲字节				
				}	
			}else{	
				while(Aoff[a] != 0x99){//显示			
					Ledplay[bn] = Aoff[a];//将二维数组中的一组数据放入显示缓冲区	
					a++;//换下一个提取字节		
					bn++;//换下一个显示缓冲字节				
				}	
			}	
		 	if(OK_Key == 0){					
		 		DelayM(20);//去抖					
		 		if(OK_Key == 0){		
					key_off ();//等待键放开		
		 			Beep_set();//调时提示音		
					write_clock(0x8e,0x00);//允许写操作		
					if(read_clock(0xc7) == 1){					
		 				write_clock(0xc6,0);			
					}else{					
		 				write_clock(0xc6,1);			
					}		
		 			write_clock(0x8e,0x80);//禁止写操作		
				}		
			}		
			MENUexit ();				
		}	
	}
}
/**********************************************************************************************/
//DoYoung.net 电子技术 --创造独立资源	
/**********************************************************************************************/	


⌨️ 快捷键说明

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