新聞中心

矩陣鍵盤(pán)控制forMSP430

作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏
  1. /*****************************************************************
  2. //文件名:Keypad.c
  3. //描述:該文件定義與矩陣鍵盤(pán)有關(guān)的各種接口、函數(shù),適用于MSP430F149
  4. //編寫(xiě)人:小邪@清水
  5. //版本號(hào):1.01
  6. *****************************************************************/
  7. #include
  8. #include"12864.h"
  9. ucharkeyPressed;//按鍵是否被按下:1--是,0--否
  10. ucharkeyval;//存放鍵值
  11. ucharkeyFlag;//按鍵是否已放開(kāi):1--是,0--否
  12. //設(shè)置鍵盤(pán)邏輯鍵值與程序計(jì)算鍵值的映射
  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. //名稱(chēng):InitKeypad
  20. //參數(shù):延時(shí)的時(shí)間n
  21. //返回值:無(wú)
  22. //功能:初始化矩陣鍵盤(pán)的IO口
  23. *************************************************************************/
  24. voidInitKeypad(void)
  25. {
  26. P1DIR=0xf0;//P1.0~P1.3設(shè)置為輸入狀態(tài),P1.4~P1.7設(shè)置為輸出狀態(tài)
  27. P1OUT|=0xf0;//P1.4~P1.7輸出高電平
  28. keyFlag=0;
  29. keyPressed=0;
  30. keyval=0;
  31. }
  32. /*************************************************************************
  33. //名稱(chēng):CheckKey
  34. //參數(shù):無(wú)
  35. //返回值:無(wú)
  36. //功能:掃描矩陣鍵盤(pán),獲取鍵值
  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輸出四位中有一個(gè)為0
  46. tmp1>>=1;
  47. if((P1IN&0x0f)<0x0f)//是否P1IN的P1.0~P1.3中有一位為0
  48. {
  49. tmp2=0x01;//tmp2用于檢測(cè)出那一位為0
  50. for(col=0;col<4;col++)//列檢測(cè)
  51. {
  52. if((P1IN&tmp2)==0x00)//是否是該列,等于0為是
  53. {
  54. keyval=key_Map[row*4+col];//獲取鍵值
  55. return;//退出循環(huán)
  56. }
  57. tmp2<<=1;//tmp2右移1位
  58. }
  59. }
  60. }
  61. }
  62. /*************************************************************************
  63. //名稱(chēng):delay
  64. //參數(shù):無(wú)
  65. //返回值:無(wú)
  66. //功能:延時(shí)15ms的時(shí)間,用于消抖
  67. *************************************************************************/
  68. voiddelay()
  69. {
  70. uinttmp;
  71. for(tmp=12000;tmp>0;tmp--);
  72. }
  73. /*************************************************************************
  74. //名稱(chēng):KeyEvent
  75. //參數(shù):無(wú)
  76. //返回值:無(wú)
  77. //功能:檢測(cè)按鍵,獲取鍵值
  78. *************************************************************************/
  79. voidKeyEvent(void)
  80. {
  81. uchartmp;
  82. P1OUT&=0x00;//設(shè)置P1OUT全為0,等待按鍵輸入
  83. tmp=P1IN;//獲取p1IN
  84. if((keyPressed==0x00)&&((tmp&0x0f)<0x0f))//如果有鍵按下
  85. {
  86. keyPressed=1;//如果有按鍵按下,設(shè)置keyPressed標(biāo)識(shí)
  87. delay();//消除抖動(dòng)
  88. CheckKey();//調(diào)用checkKey(),獲取鍵值
  89. }
  90. elseif((keyPressed==1)&&((tmp&0x0f)==0x0f))//如果按鍵已經(jīng)釋放
  91. {
  92. keyPressed=0;//清除keyPressed標(biāo)識(shí)
  93. keyFlag=1;//設(shè)置keyFlag標(biāo)識(shí)
  94. }
  95. else
  96. {
  97. keyval=17;
  98. }
  99. }

  100. 上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: 矩陣鍵盤(pán)控制MSP43

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉