📄 keyscan.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 + -