按鍵掃描驅動程序

unsigned char key,key_h,kpush;
unsigned int key_l;

//按鍵連接到p1.0、p1.1、p1.2

void int_t0(void) interrupt 1 {
unsigned char dd,i;
TL0=TL0+30;TH0=0xfb; //800
/* 按鍵判別 */
if ((P1&0x7)==0x7) {
  if ((key_l>30)&&(key_l<800)&&(key_h>30)) {  //釋放按鍵,如果之前按鍵時間少於1秒,讀入鍵值
   key=kpush;
  }
  if ((++key_h)>200) key_h=200;
  key_l=0;
  if (key>=0x80) key=0;       //如果之前的按鍵爲長按1秒,清除鍵值
} else {
  kpush=P1&0x7;
  key_l++;
  if ((key_l>800)&&(key_h>30)) {     //如果按鍵超過1秒,鍵值加0x80標誌長按鍵
   key=kpush|0x80;
   key_h=0;
   key_l=0;
  }
}
}
void main(void) {
TMOD=0x1;TR0=1;ET0=1;EA=1;
while (1) {
  while (!key) {}
  switch (key) {
  case 1:break;
  case 2:break;
  }
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章