📄 keyscan.h
字号:
/***************************************************
* 标题:按键扫描和服务 *
* 作者:Wujieflash *
* 日期:2008年1月17日 *
* 说明:当按键按下,选中的单元就会闪烁 *
***************************************************/
uch k=0;
//键盘初始化子程序
void keyinit()
{
TRISD0=1;
TRISD0=1;
TRISD0=1;
}
/*----------------------------------------------------------*/
//键盘扫描子程序
void KeyScan()
{
int d;
if(RD0==0) //设置键按下
{
k++; //选定入口值
k=k%8;
}
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;
year=1;
month=1;
date=1;
day=1;
if(second==0) //闪烁
{
Show8X16_2(0,111,noshu);
Show8X16_2(0,119,noshu);
}
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;
second=1;
hour=1;
year=1;
month=1;
date=1;
day=1;
if(minute==0)
{
Show8X16_2(0,96,noshu);
Show8X16_2(0,88,noshu);
}
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;
second=1;
minute=1;
year=1;
month=1;
date=1;
day=1;
if(hour==0)
{
Show8X16_2(0,64,noshu);
Show8X16_2(0,72,noshu);
}
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;
second=1;
minute=1;
year=1;
month=1;
hour=1;
day=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;
minute=1;
year=1;
hour=1;
date=1;
day=1;
if(month==0)
{
Show8X16(2,2,noshu);
Show8X16(2,10,noshu);
}
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(0x8b);
d=d/16*10+d%16;
day=flag;
second=1;
minute=1;
year=1;
hour=1;
date=1;
month=1;
if(day==0)
{
Show16X16_3(6,40,noshu3);
}
if(RD1==0)
{
d++;
if(d>0x07)d=1;
d=d/10*16+d%10;
W1302(0x8a,d);
while(1)
{
if(RD1==1)break;
}
}
if(RD2==0)
{
d--;
if(d<1)d=0x07;
d=d/10*16+d%10;
W1302(0x8a,d);
while(1)
{
if(RD2==1)break;
}
}
break;
}
case 7://设置年
{
d=R1302(0x8d);
d=d/16*10+d%16;
year=flag;
second=1;
minute=1;
month=1;
hour=1;
date=1;
day=1;
if(year==0)
{
Show8X16_2(0,24,noshu);
Show8X16_2(0,32,noshu);
}
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 0://设置完毕,不闪烁
{
second=1;
minute=1;
month=1;
hour=1;
date=1;
day=1;
year=1;
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -