📄 scankey.c
字号:
/******************键扫描子程序***************/
void Scankey(void)
{
uchar aj;
TOP = 1; //读下行4健
MID = 1;
BOM = 0;
Delay_us(8);
KEY1 = (P2^0XF0)&0XF0; //求反,有键相应位1,并保存键值
KEY1 = KEY1>>4;
MID = 0; //读中行4健
BOM = 1;
Delay_us(8);
aj = (P2^0XF0)&0XF0; //求反,有键相应位1,并保存键值
KEY1 = KEY1+aj;
TOP = 0; //读上行4健
MID = 1;
Delay_us(8);
KEY2 = (P2^0XF0)&0XF0; //求反,有键相应位1,并保存键值
KEY2 = KEY2>>4;
}
/*****************键后处理*******************/
void Kprec(void)
{
uint x,temp;
temp=KEY2; //键前沿检出
x = KEY2^LKEY2; //上次本次键不同为1
KEY2 = x&KEY2; //且本次为1即键前沿
LKEY2 = temp; //本次键值替代上次
temp = KEY1;
x = KEY1^LKEY1; //上次本次键不同为1
KEY1 = x&KEY1; //且本次为1即键前沿
LKEY1 = temp; //本次键值替代上次
}
/**************键设定模块,上限9,下限0******************/
void WORK1(void)
{
uchar temp,temp1;
if(DSFL&0X02) //赋值变量送显缓,并取出闪烁位的值
{
temp = DSBUF2;
}
else
{
temp = DSBUF1;
}
if(DSFL&0X01)
{
temp1 = temp&0X0F;
}
else
{
temp1 = (temp&0XF0)>>4;
}
if(temp1==0)
{
K2 = 0; //闪烁位值0则清K2键
}
else if(temp1==9)
{
K1 = 0; //闪烁位值0则清K1键
}
if(K1)
{
if(DSFL&0X01) //有K1键则闪烁位加1
{
temp += 0X01;
}
else
{
temp += 0X10;
}
}
if(K2)
{
if(DSFL&0X01) //有K2键则闪烁位减1
{
temp -= 0X01;
}
else
{
temp -= 0X10;
}
}
if(DSFL&0X02) //改变数据后送回显缓
{
DSBUF2 = temp;
}
else
{
DSBUF1 = temp;
}
if(K3)
{
DSFL++; //有K3键则闪烁位移位
if(DSFL&0X08) //赋值完?
{
DSFL = 0; //转实时时钟模块设置
HOUR = DSBUF1;
MIN = DSBUF2;
STA = 0X00; //转实时时钟模块设置
}
}
else
{
STA = 0X01; //保持时钟设定设置
HOUR = DSBUF1;
MIN = DSBUF2;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -