您的位置 首页 观点

矩阵键盘操控forMSP430

*****************************************************************文件名:Keypadc描述:该文件定义与矩阵键盘有关的各种接口、函

  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. }

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/guandian/257262.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部