三个独立按键S2/S3/S4手动设置报警距离,S4是设置键,S2是加键,S3是减键;按一下S4可以进行报警距离设置,按一次S2报警距离就会增加1cm,按一次S3报警距离就会减小1cm。下面是有关按键的程序,没有看懂,希望指教
/********************独立按键程序*****************/
uchar key_scan; //按键值
void key() //独立按键程序
{
static uchar key_new;
key_can = 20; //按键值还原
P2 |= 0x07;
if((P2 & 0x07) != 0x06) //按键按下
{
delay_1ms(1); //按键消抖动
if(((P2 & 0x07) != 0x07) && (key_new == 1))
{ //确认是按键按下
key_new = 0;
switch(P2 & 0x07)
{
case 0x05: key_can = 1; break; //得到k2键值
case 0x04: key_can = 2; break; //得到k3键值
case 0x02: key_can = 3; break; //得到k4键值
}
}
}
else
key_new = 1;
}
/****************按键处理显示函数***************/
void key_with()
{
if(key_can == 1) //设置键
{
menu_1 ++;
if(menu_1 >= 2)
{
menu_1 = 0;
smg_i = 3; //只显示3位数码管
}
if(menu_1 == 1)
{
smg_i = 4; //只显示4位数码管
}
}
if(menu_1 == 1) //设置报警
{
if(key_can == 2)
{
set_d ++ ; //加1
if(set_d > 400)
set_d = 400;
}
if(key_can == 3)
{
set_d -- ; //减1
if(set_d <= 1)
set_d = 1;
}
dis_smg[0] = smg_du[set_d % 10]; //取小数显示
dis_smg[1] = smg_du[set_d / 10 % 10] ; //取个位显示
dis_smg[2] = smg_du[set_d / 100 % 10] & 0xdf ; //取十位显示
dis_smg[3] = smg_du[10]; //a
}
}
|