三個獨立按鍵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
}
}
|