新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ZLG7290矩陣鍵盤控制forMSP40

ZLG7290矩陣鍵盤控制forMSP40

作者: 時間:2016-11-27 來源:網(wǎng)絡(luò) 收藏
基于ZLG7290的矩陣鍵盤控制,適用于MSP430,采用中斷模式查詢按鍵。ZLG7290還具有數(shù)碼管顯示功能,本人水平有限,這里未能實現(xiàn)。
[cpp]view plaincopyprint?
  1. /*****************************************************************
  2. //文件名:ZLG7290.c
  3. //描述:該文件定義與ZLG7290有關(guān)的各種接口、函數(shù),適用于MSP430F149
  4. //編寫人:小邪@清水
  5. //版本號:1.01
  6. *****************************************************************/
  7. #include"msp430x14x.h"
  8. #include"ZLG7290.h"
  9. /*****************************************************************
  10. //關(guān)于接口的一些定義
  11. //需要根據(jù)實際應(yīng)用做出改變
  12. *****************************************************************/
  13. #defineIIC_Enable!(P2IN&BIT2)
  14. #defineSCL_UPPORTDIR&=~SCL
  15. #defineSDA_UPPORTDIR&=~SDA
  16. #defineSCL_DOWNPORTDIR|=SCL
  17. #defineSDA_DOWNPORTDIR|=SDA
  18. #definePORTDIRP3DIR//設(shè)置為P3口
  19. #definePORTINP3IN
  20. #definePORTOUTP3OUT
  21. #defineSDABIT0//設(shè)置SDA為Px.0
  22. #defineSCLBIT1//設(shè)置SCL為Px.1
  23. #defineRESBIT2//設(shè)置RES為P2.7(對應(yīng)430的中斷)
  24. #defineCHIP0x70//ZLG7290的IIC地址
  25. /*************************************************************************
  26. //名稱:IIC_delay()
  27. //參數(shù):無
  28. //返回值:無
  29. //功能:完成IIC設(shè)置中所需要的延時
  30. *************************************************************************/
  31. voidIIC_delay()
  32. {
  33. inti;
  34. i=0xff;
  35. while(i)
  36. {
  37. i--;
  38. _NOP();
  39. }
  40. i=0xff;
  41. while(i)
  42. {
  43. i--;
  44. _NOP();
  45. }
  46. }
  47. /*************************************************************************
  48. //名稱:SendToBus()
  49. //參數(shù):要發(fā)送的數(shù)據(jù)
  50. //返回值:無
  51. //功能:向線上發(fā)送數(shù)據(jù)(SCL必須在進入函數(shù)前置為低)
  52. *************************************************************************/
  53. voidSendToBus(BYTEm)
  54. {
  55. BYTEi;
  56. for(i=0;i<8;i++)
  57. {
  58. if(m&0x80)
  59. SDA_UP;
  60. else
  61. SDA_DOWN;
  62. SCL_UP;
  63. IIC_delay();
  64. SCL_DOWN;
  65. m<<=1;
  66. }
  67. return;
  68. }
  69. /*************************************************************************
  70. //名稱:BackAns()
  71. //參數(shù):無
  72. //返回值:成功標(biāo)志,若成功則為1,否則為0
  73. //功能:接收應(yīng)答信號
  74. *************************************************************************/
  75. BYTEBackAns()
  76. {
  77. BYTEflag;
  78. SDA_UP;
  79. IIC_delay();
  80. SCL_UP;
  81. flag=0;
  82. IIC_delay();
  83. if((PORTIN&SDA))
  84. {
  85. flag=1;
  86. }
  87. SCL_DOWN;
  88. returnflag;
  89. }
  90. /*************************************************************************
  91. //名稱:Start()
  92. //參數(shù):無
  93. //返回值:無
  94. //功能:發(fā)送一個起始信號
  95. *************************************************************************/
  96. voidStart()
  97. {
  98. PORTOUT&=(~SCL)&(~SDA);
  99. SCL_UP;
  100. IIC_delay();
  101. SDA_UP;
  102. IIC_delay();
  103. SDA_DOWN;//開始位
  104. IIC_delay();
  105. SCL_DOWN;
  106. IIC_delay();
  107. }
  108. /*************************************************************************
  109. //名稱:Stop()
  110. //參數(shù):無
  111. //返回值:無
  112. //功能:發(fā)送一個停止信號
  113. *************************************************************************/
  114. voidStop()
  115. {
  116. SDA_DOWN;
  117. IIC_delay();
  118. SCL_UP;//停止位
  119. IIC_delay();
  120. SDA_UP;
  121. IIC_delay();
  122. SCL_DOWN;
  123. IIC_delay();
  124. }
  125. /*************************************************************************
  126. //名稱:Write_IIC_Byte()
  127. //參數(shù):data-待寫入的數(shù)據(jù),startaddr-待寫入的首地址
  128. //返回值:無
  129. //功能:向線上寫一個字節(jié)
  130. *************************************************************************/
  131. voidWrite_IIC_Byte(BYTEdata,BYTEstartaddr)
  132. {
  133. do
  134. {
  135. Start();
  136. SendToBus(CHIP);//選片地址
  137. if(BackAns())//從機的回答信息
  138. continue;
  139. SendToBus(startaddr);//選擇芯片上的內(nèi)在地址
  140. if(BackAns())
  141. continue;
  142. SendToBus(data);//傳輸數(shù)據(jù)
  143. if(!BackAns())
  144. break;
  145. }
  146. while(1);
  147. Stop();
  148. }
  149. /*************************************************************************
  150. //名稱:ReadFromBus()
  151. //參數(shù):無
  152. //返回值:讀出的數(shù)據(jù)
  153. //功能:從線上讀出數(shù)據(jù)
  154. *************************************************************************/
  155. BYTEReadFromBus()
  156. {
  157. inti,temp;
  158. temp=0;
  159. SDA_UP;//讀取數(shù)據(jù)之前要把SDA拉高
  160. IIC_delay();
  161. for(i=0;i<8;i++)
  162. {
  163. SCL_UP;
  164. IIC_delay();
  165. temp<<=1;
  166. if(PORTIN&SDA)
  167. temp|=0x01;
  168. else
  169. temp&=0xfe;
  170. SCL_DOWN;
  171. IIC_delay();
  172. }
  173. returntemp;
  174. }

  175. 上一頁 1 2 下一頁

關(guān)鍵詞: ZLG7290矩陣鍵盤控制MSP4

評論


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

關(guān)閉