色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          矩陣鍵盤控制forMSP430

          作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏
          1. /*****************************************************************
          2. //文件名:Keypad.c
          3. //描述:該文件定義與矩陣鍵盤有關(guān)的各種接口、函數(shù),適用于MSP430F149
          4. //編寫人:小邪@清水
          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è)置鍵盤邏輯鍵值與程序計(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. //名稱:InitKeypad
          20. //參數(shù):延時(shí)的時(shí)間n
          21. //返回值:無(wú)
          22. //功能:初始化矩陣鍵盤的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. //名稱:CheckKey
          34. //參數(shù):無(wú)
          35. //返回值:無(wú)
          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輸出四位中有一個(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. //名稱: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. //名稱: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)鍵詞: 矩陣鍵盤控制MSP43

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉