微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > cortex-m0用外设4*4的键盘接入后按下键在cortex-m0的显示器显示

cortex-m0用外设4*4的键盘接入后按下键在cortex-m0的显示器显示

时间:10-02 整理:3721RD 点击:

用外设4*4的键盘接入后按下键在cortex-m0的显示器显示相应按键信息
按键信息如下
**********
1 2 3 A
4 5 6 B
7 8 9 C
* 0 # D
*********
最好有代码,谢谢了,有急用!

3*3的键盘操作方式 参考一下吧

  1. #include <lpc17xx.h>
  2. #include "key.h"

  3. #define KEY_ROW1_PIN                25       
  4. #define KEY_ROW2_PIN                24
  5. #define KEY_ROW3_PIN                23
  6. #define KEY_COL1_PIN                20
  7. #define KEY_COL2_PIN                21
  8. #define KEY_COL3_PIN                22

  9. uint32_t key_count = 0;

  10. KEY_STATE key_state = KEY_NULL;
  11. KEY_STATE key_state_new = KEY_NULL;
  12. KEY_STATE key_state_old = KEY_NULL;
  13. /*----------------------------------------------------------------------------
  14.   read key Pins
  15. *----------------------------------------------------------------------------*/
  16. KEY_STATE readkey(void)
  17. {       
  18.         uint8_t KEY_H = 0, KEY_L = 0;
  19.         uint32_t key;
  20.         uint32_t i=0;
  21.        
  22.         LPC_GPIO0->FIODIR &=  ~((1<<20)|(1<<21)|(1<<22));  
  23.         LPC_GPIO0->FIODIR |=  (1<<KEY_ROW1_PIN)|(1<<KEY_ROW2_PIN)|(1<<KEY_ROW3_PIN);   
  24.         LPC_GPIO0->FIOCLR |=  (1<<KEY_ROW1_PIN)|(1<<KEY_ROW2_PIN)|(1<<KEY_ROW3_PIN);   
  25.         for(i=0;i<200;i++);
  26.         key = LPC_GPIO0->FIOPIN & ((1<<20)|(1<<21)|(1<<22));
  27.         key = key >> 20;
  28.         if( key < 7 )
  29.         {
  30.                 switch(key){
  31.                         case 3:
  32.                                 KEY_H = 0;
  33.                                 break;
  34.                         case 5:
  35.                                 KEY_H = 1;
  36.                                 break;
  37.                         case 6:
  38.                                 KEY_H = 2;
  39.                                 break;
  40.                         default:
  41.                                 KEY_H = 0;
  42.                                 break;
  43.                 }
  44.                
  45.                
  46.                 LPC_GPIO0->FIODIR &=  ~((1<<KEY_ROW1_PIN)|(1<<KEY_ROW2_PIN)|(1<<KEY_ROW3_PIN));
  47.                 LPC_GPIO0->FIODIR |=  (1<<20)|(1<<21)|(1<<22);   
  48.           LPC_GPIO0->FIOCLR |=  (1<<20)|(1<<21)|(1<<22);
  49.                
  50.                 for(i=0;i<200;i++);
  51.                
  52.                 key = LPC_GPIO0->FIOPIN &((1<<KEY_ROW1_PIN)|(1<<KEY_ROW2_PIN)|(1<<KEY_ROW3_PIN));
  53.                 key = key >> KEY_ROW3_PIN;
  54.                 if( key < 7 )
  55.                         {
  56.                                 switch(key){
  57.                                         case 3:
  58.                                                 KEY_L = 1;
  59.                                                 break;                               
  60.                                         case 5:
  61.                                                 KEY_L = 4;
  62.                                                 break;
  63.                                         case 6:
  64.                                                 KEY_L = 7;
  65.                                                 break;
  66.                                         default:
  67.                                                 KEY_L = 0;
  68.                                            KEY_H = 0;
  69.                                                 break;
  70.                                 }
  71.       }
  72.                        
  73.                         key_state_new = (KEY_STATE)(KEY_H+KEY_L);
  74.                        
  75.                         if( key_state_old != key_state_new)
  76.                         {
  77.                                 key_count++;
  78.                                 if( key_count >= 10)
  79.                                 {
  80.                                         key_count = 0;
  81.                                         key_state_old = key_state_new;
  82.                                         key_state = key_state_new;                                       
  83.                                 }
  84.                         }
  85.                 }
  86.                 else
  87.                 {       
  88.                                 key_state_old = KEY_NULL;
  89.                 }
  90.                
  91.                 return key_state;
  92. }

  93. void setkey(KEY_STATE state)
  94. {
  95.         key_state = state;
  96. }

复制代码

相当于你给每一个按键都分配了一个功能,就是按键检查和串口显示问题,自己多多查查资料,可以解决的。扫描按键现在示例多得很。

十分感谢了!我记下了谢谢您!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top