MSP430 单片机矩阵键盘程序

[复制链接]
1130|10
 楼主| dirtwillfly 发表于 2015-12-21 19:28 | 显示全部楼层 |阅读模式
基于io中断实现的矩阵键盘程序
  1. #include <MSP430X44X.H>
  2. unsigned char Key_Num=0 ;
  3. void time_delay(void) ;
  4. void Display_Num(void) ;
  5. void Key_Process(void) ;
  6. void main()
  7. {
  8. WDTCTL = WDTPW + WDTHOLD ; //停止看门狗
  9. P4OUT = 0X00 ;
  10. P4DIR |= 0X08 ;

  11. P1DIR = 0X00 ; //将P1定义为输入
  12. P1DIR |= 0X0E ; //将P1.1~P1.3定义为输出
  13. P1OUT = 0X00 ; //P1.1~P1.3输出为0

  14. P1IE = 0X00 ;
  15. P1IES = 0X00 ;
  16. P1IFG = 0X00 ;

  17. P1IE |= 0X0E ; //P1允许中断
  18. P1IES |= 0X0E ;
  19. _EINT() ; //系统中断允许
  20. while(1) ;

  21. }
  22. #pragma vector = PORT1_VECTOR
  23. __interrupt void port1(void)
  24. {
  25. time_delay () ; //软件消抖
  26. if((P1IN&0XF0) != 0XF0 ) //有键按下
  27. {
  28. Key_Process () ;
  29. P1IFG = 0X00 ;
  30. P1OUT = 0X0E ;
  31. Display_Num () ;

  32. }
  33. }

  34. void time_delay (void)
  35. {
  36. unsigned int i =1 ;
  37. while (i--) ;
  38. }
  39. void Display_Num(void)
  40. {
  41. P4OUT = 0X08 ;
  42. }

  43. void Key_Process(void)
  44. {
  45. P1OUT=0XEF; //P1.4 OUT 0
  46. if((P1IN & 0X02) == 0X00) Key_Num = 1 ;
  47. if((P1IN & 0X04) == 0X00) Key_Num = 2 ;
  48. if((P1IN & 0X08) == 0X00) Key_Num = 3 ;
  49. P1OUT=0XDF; //P1.5 OUT 0
  50. if((P1IN & 0X02) == 0X00) Key_Num = 4 ;
  51. if((P1IN & 0X04) == 0X00) Key_Num = 5 ;
  52. if((P1IN & 0X08) == 0X00) Key_Num = 6 ;
  53. P1OUT=0XBF; //P1.6 OUT 0
  54. if((P1IN & 0X02) == 0X00) Key_Num = 7 ;
  55. if((P1IN & 0X04) == 0X00) Key_Num = 8 ;
  56. if((P1IN & 0X08) == 0X00) Key_Num = 9 ;
  57. P1OUT=0X7F; //P1.7 OUT 0
  58. if((P1IN & 0X02) == 0X00) Key_Num = 10 ;
  59. if((P1IN & 0X04) == 0X00) Key_Num = 11 ;
  60. if((P1IN & 0X08) == 0X00) Key_Num = 12 ;
  61. }


i1mcu 发表于 2015-12-21 22:23 | 显示全部楼层
这个应该有解释。
i1mcu 发表于 2015-12-21 22:24 | 显示全部楼层
好像有几个io口实现这么多输入的帖子。
dongbaohui 发表于 2015-12-23 10:48 | 显示全部楼层
居然在中断中消抖,这不是个好习惯。
 楼主| dirtwillfly 发表于 2015-12-23 19:49 | 显示全部楼层
dongbaohui 发表于 2015-12-23 10:48
居然在中断中消抖,这不是个好习惯。

是的
309030106 发表于 2015-12-26 21:36 | 显示全部楼层
矩阵键盘用中断的话会不会太占用中断资源了
houjiakai 发表于 2015-12-29 22:54 | 显示全部楼层
矩阵键盘的消抖太难了
houjiakai 发表于 2015-12-29 22:56 | 显示全部楼层
使用adc最好了。
houjiakai 发表于 2015-12-29 22:56 | 显示全部楼层
选好效率比较高的。
intetnet 发表于 2016-3-22 09:47 | 显示全部楼层
矩阵键盘用定时器中断检测会比较好,定时器每个10ms中断一次,检测按键,如果连续监测4次以上都是一个按键值,就可以调用按键处理函数了
外方爱 发表于 2016-3-22 09:49 | 显示全部楼层
直接用ADI的键盘解析芯片多好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎进入TI MCU论坛      21ic TI技术交流1群:61549143(已满),  21ic TI技术交流2群:311421422 我的博客:http://blog.timcu.com/

1199

主题

35121

帖子

1122

粉丝
快速回复 在线客服 返回列表 返回顶部