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

📄 key_swit.h

📁 这是我用ds12887+12864+遥控器写的程序希望能够多多交流qq519212866
💻 H
字号:
//闹钟调节与时间调节共用一个k3键,用switch语句,按键已是非常的稳定,已调试OK
//闹钟的定时到时间时,蜂鸣器会响,此时可以按k1~k4任意键清除闹钟
//完成日期:200
//设计人:佘望胜
void keyscan()
{
	//---------------------------------------------按任意按键关闭闹钟函数-------------------------------------------//
	if(flag0==1) 
	{
		if(k1==0)  
			{
				delay_ms(5); //延时5ms,按键去抖动
				if(k1==0)
				{
				while(!k1); //等待k1键
				Sound_ir();
				flag0=0;    //flag0标志清0
				}
			}
		if(k2==0)   
			{
				delay_ms(5); //延时5ms,按键去抖动
				if(k2==0)
				{
				while(!k2);  //等待k2键
				Sound_ir();
				flag0=0;     //flag0标志清0
				}
			}
		if(k3==0)  
			{
				delay_ms(5); //延时5ms,按键去抖动
				if(k3==0)
				{
				while(!k3);    //等待k3键
				Sound_ir();
				flag0=0;       //flag0标志清0
				}
			}
		if(k4==0)  
			{
				delay_ms(5); //延时5ms,按键去抖动
				if(k4==0)
				{
				while(!k4);    //等待k4键
				Sound_ir();
				flag0=0;       //flag0标志清0
				}
			}
	}
	//-----------------------------------------------年 月 日 星期 时 分 秒 循环切换开始---------------------------------//
	if(k3==0)  //------------------------------------------------k3键开始-------------------------------------------------------//
	{
		delay_ms(5); //延时5ms,按键去抖动
		if(k3==0)
		{
			num1++;	   //k3键循环的次数加加
			write_command(0x0c);  //先关闭光标闪烁,避免显示屏上不需要的地方也会瞬间显示光标
			flag0=0;   //flag0清除标志位
			flag1=1;   //flag1标志位置1
			while(!k3);
			switch(num1)  //k3键每按一次,蜂鸣器就会响一声函数时调用了(Sound_ir();)
			{
				case 1: write_command(0x8f);	//第三行显示秒的位置 
						write_command(0x0f);		//显示光标开
						break;    
				case 2: write_command(0x8d);	 //第三行显示分的位置
						write_command(0x0f);		 //显示光标开
						break;    
				case 3: write_command(0x8b);	 //第三行显示时的位置
						write_command(0x0f);		 //显示光标开
						break;     
				case 4: write_command(0x97);	  //第二行显示星期的位置
						write_command(0x0f);	  //显示光标开
						break;     
				case 5: write_command(0x92);   	//第二行显示日的位置 
						write_command(0x0f);	//显示光标开
						break;    
				case 6: write_command(0x90);   //第二行显示月的位置
						write_command(0x0f);   //显示光标开
						break;    
				case 7: write_command(0x81);	//第一行显示年的位置
						write_command(0x0f);	//显示光标开
						break;     
				case 8: write_command(0x9f);  //第四行显示闹钟秒的位置
						write_command(0x0f);		  //显示光标开
						break;   
				case 9: write_command(0x9d);  //第四行显示闹钟分的位置
						write_command(0x0f); 		  //显示光标开
						break;   
				case 10: write_command(0x9b);   //第四行显示闹钟时的位置
						write_command(0x0f); 		   //显示光标开
						break;    
				case 11: 
					    ds887_write_date(5,ahour);    //设置的 闹钟 时 写入887
					    ds887_write_date(3,aminute);  //设置的 闹钟 分 写入887
					    ds887_write_date(1,asecond);  //设置的 闹钟 秒 写入887
						ds887_write_date(9,year);    //设置的 年 写入887
						ds887_write_date(8,month);   //设置的 月 写入887
						ds887_write_date(7,date);    //设置的 日 写入887
						ds887_write_date(6,week);    //设置的 星期 写入887 
						ds887_write_date(4,hour);    //设置的 时 写入887
						ds887_write_date(2,minute);  //设置的 分 写入887
						ds887_write_date(0,second);  //设置的 秒 写入887
						write_command(0x0c);  //显示光标关	
						flag1=0;   //清除标志位
						Sound_ir();
						num1=0; break;   //num1就清为0         			
				default:break;
			}

		}
	}//------------------------------------------k3键结束---------------------------------------------------//

	//-----------------------------年 月 日 星期  时 分 秒 闹钟时 分 秒调整函数开始----------------------//
	if(num1!=0)
		{
			//---------------------------------------------------------k2键 加函数开始--------------------------------------------//
			if(k2==0)
			{
				delay_ms(5); //延时5ms,按键去抖动
				if(k2==0)    //按键加
				{
					while(!k2);  //如果此处不加分号,调节按钮时,时间加的飞快
					Sound_ir();
					switch(num1)  //调用的是k3键循环的次数
						{
						case 1: 	second++;   //当k2键按下,second开始++
									if(second==60)   //如果second等于60,
									second=0;        //那么second就等于0   【下面的以此类推】
									write_12864add_three(7,second);      //设置后的数据要刷新12864屏,地址是屏的第三行位置6,数据是秒
									write_command(0x8f);			  //设置要调节的地址,这一步必须放在此处
									break; 
						case 2:		minute++;
									if(minute==60)
									minute=0;
									write_12864add_three(5,minute);      //设置后的数据要刷新12864屏,地址是屏的第三行位置3,数据是分
									write_command(0x8d);			  //设置要调节的地址,这一步必须放在此处
									break;  
						case 3:		hour++;
									if(hour==24)
									hour=0;
									write_12864add_three(3,hour);      //设置后的数据要刷新12864屏,地址是屏的第三行位置0,数据是时
									write_command(0x8b);		    	//设置要调节的地址,这一步必须放在此处
									break;  
						case 4:		week++;
									if(week==8)
									week=1;
									write_12864add_two(7,week);      //设置后的数据要刷新12864屏,地址是屏的第二行位置14,数据是星期
									write_command(0x97);			  //设置要调节的地址,这一步必须放在此处
									break;   
						case 5:		date++;
									if(date==32)
									date=1;
									write_12864add_two(2,date);      //设置后的数据要刷新12864屏,地址是屏的第二行位置8,数据是日
									write_command(0x92);			 //设置要调节的地址,这一步必须放在此处
									break;   
						case 6:		month++;
									if(month==13)
									month=1;
									write_12864add_two(0,month);      //设置后的数据要刷新12864屏,地址是屏的第二行位置5,数据是月
									write_command(0x90);			  //设置要调节的地址,这一步必须放在此处
									break;  
						case 7:		year++;
									if(year==100)
									year=0;
									write_12864add_one(1,year);      //设置后的数据要刷新12864屏,地址是屏的第一行位置2,数据是年
									write_command(0x81);			 //设置要调节的地址,这一步必须放在此处
									break;   
						case 8:		asecond++;
									if(asecond==60)
									asecond=0;
									write_12864add_four(7,asecond);      //设置后的数据要刷新12864屏,地址是屏的第二行位置14,数据是闹钟秒
									write_command(0x9f);				 //设置要调节的地址,这一步必须放在此处 
									break;  
						case 9:		aminute++;
									if(aminute==60)
									aminute=0;
									write_12864add_four(5,aminute);      //设置后的数据要刷新12864屏,地址是屏的第二行位置11,数据是闹钟分
									write_command(0x9d);				 //设置要调节的地址,这一步必须放在此处
									break;   
						case 10:	ahour++;
									if(ahour==24)
									ahour=0;
									write_12864add_four(3,ahour);      //设置后的数据要刷新12864屏,地址是屏的第二行位置8,数据是时
									write_command(0x9b);			   //设置要调节的地址,这一步必须放在此处
									break;   
						case 11:	num1=0; break;
					default:break;
						}
				}
			}
		}	//-------------------------------------------------k2键 加结束-----------------------------------------------//
	//-------------------------------------------------k1键 减开始-----------------------------------------------//
	if(num1!=0)
		{
			if(k1==0)
			{
				delay_ms(5); //延时5ms,按键去抖动
				if(k1==0)    //按键加
				{
					while(!k1);  //如果此处不加分号,调节按钮时,时间减的飞快
					Sound_ir();
					switch(num1)    //调用的是k3键循环的次数
						{
						case 1: 	second--;       //当k2键按下,second开始--,同时蜂鸣器会响一声
									if(second==-1)  //如果second等于-1?									second=59;      //那么second就等于59   【下面的以此类推】
									write_12864add_three(7,second);      //设置后的数据要刷新12864屏,地址是屏的第三行位置6,数据是秒
									write_command(0x8f);			  //设置要调节的地址,这一步必须放在此处
									break; 
						case 2:		minute--;
									if(minute==-1)
									minute=59;
									write_12864add_three(5,minute);      //设置后的数据要刷新12864屏,地址是屏的第三行位置3,数据是分
									write_command(0x8d);			  //设置要调节的地址,这一步必须放在此处
									break;
						case 3:		hour--;
									if(hour==-1)
									hour=23;
									write_12864add_three(3,hour);      //设置后的数据要刷新12864屏,地址是屏的第三行位置0,数据是时
									write_command(0x8b);		    	//设置要调节的地址,这一步必须放在此处
									break;
						case 4:		week--;
									if(week==0)
									week=7;
									write_12864add_two(7,week);      //设置后的数据要刷新12864屏,地址是屏的第二行位置14,数据是星期
									write_command(0x97);			  //设置要调节的地址,这一步必须放在此处
									break; 
						case 5:		date--;
									if(date==0)
									date=31;
									write_12864add_two(2,date);      //设置后的数据要刷新12864屏,地址是屏的第二行位置8,数据是日
									write_command(0x92);			 //设置要调节的地址,这一步必须放在此处
									break; 
						case 6:		month--;
									if(month==0)
									month=12;
									write_12864add_two(0,month);      //设置后的数据要刷新12864屏,地址是屏的第二行位置5,数据是月
									write_command(0x90);			  //设置要调节的地址,这一步必须放在此处
									break;
						case 7:		year--;
									if(year==-1)
									year=99;
									write_12864add_one(1,year);      //设置后的数据要刷新12864屏,地址是屏的第一行位置2,数据是年
									write_command(0x81);			 //设置要调节的地址,这一步必须放在此处
									break; 
						case 8:		asecond--;
									if(asecond==-1)
									asecond=59;
									write_12864add_four(7,asecond);      //设置后的数据要刷新12864屏,地址是屏的第二行位置14,数据是闹钟秒
									write_command(0x9f);				 //设置要调节的地址,这一步必须放在此处 
									break;  
						case 9:		aminute--;
									if(aminute==-1)
									aminute=59;
									write_12864add_four(5,aminute);      //设置后的数据要刷新12864屏,地址是屏的第二行位置11,数据是闹钟分
									write_command(0x9d);				 //设置要调节的地址,这一步必须放在此处
									break;  
						case 10:	ahour--;
									if(ahour==-1)
									ahour=23;
									write_12864add_four(3,ahour);      //设置后的数据要刷新12864屏,地址是屏的第二行位置8,数据是时
									write_command(0x9b);			   //设置要调节的地址,这一步必须放在此处 
									break; 
						case 11:	num1=0; break;
					default:break;
						}
				}
			}
		}//-----------------------------年 月 日 星期  时 分 秒 闹钟时 分 秒调整函数结束---------------------//
}    //--------------------------------------------按键扫描结束----------------------------------------------//















































































⌨️ 快捷键说明

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