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

📄 keyscan.h

📁 用proteus仿真的万年历.rar
💻 H
字号:
/***************************************************
* 标题:按键扫描和服务                             *
* 作者:Wujieflash                                 *
* 日期:2008年1月17日                              *
* 说明:当按键按下,选中的单元就会闪烁             *
***************************************************/
uch k=0;
//键盘初始化子程序
void keyinit()
{
	TRISD=0xff;
	PORTD=0x00;	
}
/*----------------------------------------------------------*/

//键盘扫描子程序
void KeyScan()
{
	int d;
	if(RD0==0)  //设置键按下
	{
		k++;    //选定入口值
		k=k%10;
	}
	while(1)
	{
		if(RD0==1)break;//等待按键松开
	}
	switch(k)//键盘服务入口
	{
		case 1://设置秒
		{
			d=R1302(0x81); //读取秒
			d=d/16*10+d%16;//转换为16进制
			second=flag;   //设置秒的闪烁标志
			minute=1;      //其余变量不闪烁
			hour=1;
			kaiguan=1;
			year=1;
			month=1;
			date=1;
			Naohour=1;
			Naominute=1;
			if(second==0)  //闪烁
			{
				Show8X16(0,111,noshu,1);
				Show8X16(0,119,noshu,1);
			}
			if(RD1==0)     //秒数值加1
			{
				d++;
				if(d>0x3b)d=0;// 大于59就为0
				d=d/10*16+d%10;
				W1302(0x80,d);//写入DS1302
				while(1)
				{
					if(RD1==1)break;//等待键松开
				}
			}
			if(RD2==0)//数值减1
			{
				d--;
				if(d<0)d=0x3b;//小于0就写59
				d=d/10*16+d%10;
				W1302(0x80,d);
				while(1)
				{
					if(RD2==1)break;
				}
			}
			break;
		}
		case 2://设置分
		{
			d=R1302(0x83);
			d=d/16*10+d%16;
			minute=flag;
			kaiguan=1;
			second=1;
			hour=1;
			year=1;
			month=1;
			date=1;
			Naohour=1;
			Naominute=1;
			if(minute==0)
			{
				Show8X16(0,96,noshu,1);
				Show8X16(0,88,noshu,1);
			}
			if(RD1==0)
			{
				d++;
				if(d>0x3b)d=0;
				d=d/10*16+d%10;
				W1302(0x82,d);
				while(1)
				{
					if(RD1==1)break;
				}
			}
			if(RD2==0)
			{
				d--;
				if(d<0)d=0x3b;
				d=d/10*16+d%10;
				W1302(0x82,d);
				while(1)
				{
					if(RD2==1)break;
				}
			}
			break;
		}
		case 3://设置时
		{
			d=R1302(0x85);
			d=d/16*10+d%16;
			hour=flag;
			kaiguan=1;
			second=1;
			minute=1;
			year=1;
			month=1;
			date=1;
			Naohour=1;
			Naominute=1;
			if(hour==0)
			{
				Show8X16(0,64,noshu,1);
				Show8X16(0,72,noshu,1);
			}
			if(RD1==0)
			{
				d++;
				if(d>0x17)d=0;
				d=d/10*16+d%10;
				W1302(0x84,d);
				while(1)
				{
					if(RD1==1)break;
				}
			}
			if(RD2==0)
			{
				d--;
				if(d<0)d=0x17;
				d=d/10*16+d%10;
				W1302(0x84,d);
				while(1)
				{
					if(RD2==1)break;
				}
			}
			break;
		}
		case 4://设置日期
		{
			d=R1302(0x87);
			d=d/16*10+d%16;
			date=flag;
			kaiguan=1;
			second=1;
			minute=1;
			year=1;
			month=1;
			hour=1;
			Naohour=1;
			Naominute=1;
			if(date==0)
			{
				Show16X32(2,24,noshu2);
				Show16X32(2,40,noshu2);
			}
			if(RD1==0)
			{
				d++;
				if(d>0x1f)d=1;
				d=d/10*16+d%10;
				W1302(0x86,d);
				while(1)
				{
					if(RD1==1)break;
				}
			}
			if(RD2==0)
			{
				d--;
				if(d<1)d=0x1f;
				d=d/10*16+d%10;
				W1302(0x86,d);
				while(1)
				{
					if(RD2==1)break;
				}
			}
			break;
		}
		case 5://设置月
		{
			d=R1302(0x89);
			d=d/16*10+d%16;
			month=flag;
			second=1;
			kaiguan=1;
			minute=1;
			year=1;
			hour=1;
			date=1;
			Naohour=1;
			Naominute=1;
			if(month==0)
			{
				Show8X16(2,2,noshu,0);
				Show8X16(2,10,noshu,0);
			}
			if(RD1==0)
			{
				d++;
				if(d>0x0c)d=1;
				d=d/10*16+d%10;
				W1302(0x88,d);
				while(1)
				{
					if(RD1==1)break;
				}
			}
			if(RD2==0)
			{
				d--;
				if(d<1)d=0x0c;
				d=d/10*16+d%10;
				W1302(0x88,d);
				while(1)
				{
					if(RD2==1)break;
				}
			}
			break;
		}
		
		case 6://设置年
		{
			d=R1302(0x8d);
			d=d/16*10+d%16;
			year=flag;
			kaiguan=1;
			second=1;
			minute=1;
			month=1;
			hour=1;
			date=1;
			Naohour=1;
			Naominute=1;
			if(year==0)
			{
				Show8X16(0,24,noshu,1);
				Show8X16(0,32,noshu,1);
			}
			if(RD1==0)
			{
				d++;
				if(d>0x63)d=0;
				d=d/10*16+d%10;
				W1302(0x8c,d);
				while(1)
				{
					if(RD1==1)break;
				}
			}
			if(RD2==0)
			{
				d--;
				if(d<0)d=0x63;
				d=d/10*16+d%10;
				W1302(0x8c,d);
				while(1)
				{
					if(RD2==1)break;
				}
			}
			break;
		}
		case 7://
		{
			kaiguan=flag;
			second=1;
			minute=1;
			year=1;
			hour=1;
			date=1;
			month=1;
			Naominute=1;
			Naohour=1;
			if(kaiguan==0)
			{
				Show8X16(4,111,noshu,1);
				Show8X16(4,119,noshu,1);
			}
			if(RD1==0)
			{
				kk++;
				kk=kk%2;
				if(kk==0)Show16X16(4,111,guan,1);
				if(kk==1)Show16X16(4,111,kai,1);
				while(1)
				{
					if(RD1==1)break;
				}
			}
			if(RD2==0)
			{
				kk--;
				kk=kk%2;
				if(kk==0)Show16X16(4,111,guan,1);
				if(kk==1)Show16X16(4,111,kai,1);
				while(1)
				{
					if(RD2==1)break;
				}
			}
			break;
		}
		case 8://设置闹钟的小时数
		{
			Naohour=flag;
			kaiguan=1;
			second=1;
			minute=1;
			year=1;
			hour=1;
			date=1;
			month=1;
			Naominute=1;
			if(Naohour==0)
			{
				Show8X16(4,64,noshu,1);
				Show8X16(4,72,noshu,1);
			}
			if(RD1==0)
			{
				Naoling_hour++;
				if(Naoling_hour>0x17)Naoling_hour=0;
				ChangeToLCD(4,64,Naoling_hour,1);
				while(1)
				{
					if(RD1==1)break;
				}
			}
			if(RD2==0)
			{
				Naoling_hour--;
				if(Naoling_hour<0)Naoling_hour=23;
				ChangeToLCD(4,64,Naoling_hour,1);
				while(1)
				{
					if(RD2==1)break;
				}
			}
			break;
		}
		case 9://设置闹钟的分钟数
		{
			Naominute=flag;
			kaiguan=1;
			second=1;
			minute=1;
			year=1;
			hour=1;
			date=1;
			month=1;
			Naohour=1;
			if(Naominute==0)
			{
				Show8X16(4,88,noshu,1);
				Show8X16(4,96,noshu,1);
			}
			if(RD1==0)
			{
				Naoling_minute++;
				if(Naoling_minute>0x3b)Naoling_minute=0;
				ChangeToLCD(4,88,Naoling_minute,1);
				while(1)
				{
					if(RD1==1)break;
				}
			}
			if(RD2==0)
			{
				Naoling_minute--;
				if(Naoling_minute<0)Naoling_minute=0x3b;
				ChangeToLCD(4,88,Naoling_minute,1);
				while(1)
				{
					if(RD2==1)break;
				}
			}
			break;
		}
		case 0://设置完毕,不闪烁
		{
			second=1;
			minute=1;
			month=1;
			hour=1;
			date=1;
			Naohour=1;
			Naominute=1;
			year=1;
			kaiguan=1;
			break;
		}
	}
}
/*-----------------------------------------------------------*/


⌨️ 快捷键说明

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