×
嵌入式 > 嵌入式开发 > 详情

矩阵键盘控制forMSP430

发布时间:2020-08-28 发布时间:
|
  1. /*****************************************************************
  2. //文件名:Keypad.c
  3. //描述:该文件定义与矩阵键盘有关的各种接口、函数,适用于MSP430F149
  4. //编写人:小邪@清水
  5. //版本号:1.01
  6. *****************************************************************/
  7. #include
  8. #include"12864.h"
  9. ucharkeyPressed;//按键是否被按下:1--是,0--否
  10. ucharkeyval;//存放键值
  11. ucharkeyFlag;//按键是否已放开:1--是,0--否
  12. //设置键盘逻辑键值与程序计算键值的映射
  13. //12313(enter)
  14. //45614(up)
  15. //78915(down)
  16. //11(.)012(back)16(clear)
  17. ucharkey_Map[]={1,2,3,13,4,5,6,14,7,8,9,15,11,0,12,16};
  18. /*************************************************************************
  19. //名称:InitKeypad
  20. //参数:延时的时间n
  21. //返回值:无
  22. //功能:初始化矩阵键盘的IO口
  23. *************************************************************************/
  24. voidInitKeypad(void)
  25. {
  26. P1DIR=0xf0;//P1.0~P1.3设置为输入状态,P1.4~P1.7设置为输出状态
  27. P1OUT|=0xf0;//P1.4~P1.7输出高电平
  28. keyFlag=0;
  29. keyPressed=0;
  30. keyval=0;
  31. }
  32. /*************************************************************************
  33. //名称:CheckKey
  34. //参数:无
  35. //返回值:无
  36. //功能:扫描矩阵键盘,获取键值
  37. *************************************************************************/
  38. voidCheckKey(void)
  39. {
  40. ucharrow,col,tmp1,tmp2;
  41. tmp1=0x80;
  42. for(row=0;row<4;row++)//行扫描
  43. {
  44. P1OUT=0xf0;//P1.4~P1.7输出全1
  45. P1OUT-=tmp1;//P1.4~p1.7输出四位中有一个为0
  46. tmp1>>=1;
  47. if((P1IN&0x0f)<0x0f)//是否P1IN的P1.0~P1.3中有一位为0
  48. {
  49. tmp2=0x01;//tmp2用于检测出那一位为0
  50. for(col=0;col<4;col++)//列检测
  51. {
  52. if((P1IN&tmp2)==0x00)//是否是该列,等于0为是
  53. {
  54. keyval=key_Map[row*4+col];//获取键值
  55. return;//退出循环
  56. }
  57. tmp2<<=1;//tmp2右移1位
  58. }
  59. }
  60. }
  61. }
  62. /*************************************************************************
  63. //名称:delay
  64. //参数:无
  65. //返回值:无
  66. //功能:延时15ms的时间,用于消抖
  67. *************************************************************************/
  68. voiddelay()
  69. {
  70. uinttmp;
  71. for(tmp=12000;tmp>0;tmp--);
  72. }
  73. /*************************************************************************
  74. //名称:KeyEvent
  75. //参数:无
  76. //返回值:无
  77. //功能:检测按键,获取键值
  78. *************************************************************************/
  79. voidKeyEvent(void)
  80. {
  81. uchartmp;
  82. P1OUT&=0x00;//设置P1OUT全为0,等待按键输入
  83. tmp=P1IN;//获取p1IN
  84. if((keyPressed==0x00)&&((tmp&0x0f)<0x0f))//如果有键按下
  85. {
  86. keyPressed=1;//如果有按键按下,设置keyPressed标识
  87. delay();//消除抖动
  88. CheckKey();//调用checkKey(),获取键值
  89. }
  90. elseif((keyPressed==1)&&((tmp&0x0f)==0x0f))//如果按键已经释放
  91. {
  92. keyPressed=0;//清除keyPressed标识
  93. keyFlag=1;//设置keyFlag标识
  94. }
  95. else
  96. {
  97. keyval=17;
  98. }
  99. }


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM入门篇之(一)概念