国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

ELEOK

標題: 51單片機矩陣鍵盤掃描函數 參考代碼 [打印本頁]

作者: eng    時間: 2021-6-24 00:12
標題: 51單片機矩陣鍵盤掃描函數 參考代碼
鍵盤掃描代碼:
  1. void IO_KeyScan(void)
  2. {
  3. u8 j;
  4. j = IO_KeyState1; //保存上一次狀態
  5. P7 = 0xf0; //X低,讀Y
  6. IO_KeyDelay();
  7. IO_KeyState1 = P7 & 0xf0;
  8. P7 = 0x0f; //Y低,讀X
  9. IO_KeyDelay();
  10. IO_KeyState1 |= (P7 & 0x0f);
  11. IO_KeyState1 ^= 0xff; //取反
  12. if(j == IO_KeyState1) //連續兩次讀相等
  13. {
  14. j = IO_KeyState;
  15. IO_KeyState = IO_KeyState1;
  16. if(IO_KeyState != 0) //有鍵按下
  17. {
  18. F0 = 0;
  19. if(j == 0) F0 = 1; //第一次按下
  20. else if(j == IO_KeyState)
  21. {
  22. if(++IO_KeyHoldCnt >= 20) //1秒后重鍵
  23. {
  24. IO_KeyHoldCnt = 18;
  25. 28
  26. F0 = 1;
  27. }
  28. }
  29. if(F0)
  30. {
  31. j = T_KeyTable[IO_KeyState >> 4];
  32. if((j != 0) && (T_KeyTable[IO_KeyState& 0x0f] != 0))
  33. {
  34. KeyCode = (u8)(((j - 1) * 4 )+ (T_KeyTable[IO_KeyState &
  35. 0x0f]) ); //計算鍵碼,17~32 + 16
  36. }
  37. }
  38. }
  39. else IO_KeyHoldCnt = 0;
  40. }
  41. P7 = 0xff;
  42. }
復制代碼
主函數
  1. void main(void)
  2. {
  3. IO_init(); //IO口初始化
  4. LCD_Init();//液晶屏初始化
  5. delay1ms(10);
  6. LCD_Clear(WHITE);//清屏白底
  7. UartInit(); //串口初始化
  8. UartSendStr("按鍵測試\r\n");
  9. KeyCode = 0; //給用戶使用的鍵碼, 1~16有效
  10. IO_KeyState = 0;
  11. IO_KeyState1 = 0;
  12. IO_KeyHoldCnt = 0;
  13. Gui_StrCenter(0,16,RED,BLUE,"KEY 測試程序",16,1);//居中顯示
  14. Show_Str(20,56,BLUE,YELLOW,"KeyCode:",16,0);
  15. //循環
  16. while(1)
  17. {
  18. IO_KeyScan();
  19. if(KeyCode>0)
  20. {
  21. UartSendStr("pressed");
  22. LCD_ShowNum(100,56,KeyCode,2,16);
  23. }
  24. KeyCode=0;
  25. delay1ms(100);
  26. }
  27. }
復制代碼







歡迎光臨 ELEOK (http://m.afoofa.cn/) Powered by Discuz! X5.0