您的位置 首页 5G

ZLG7290矩阵键盘操控forMSP40

基于ZLG7290的矩阵键盘控制,适用于MSP430,采用中断模式查询按键。ZLG7290还具有数码管显示功能,本人水平有限,这里未能实现。[cpp]view

依据ZLG7290的矩阵键盘操控,适用于MSP430,选用中止形式查询按键。ZLG7290还具有数码管显现功用,自己水平有限,这儿未能完结。

[cpp]view plaincopyprint?

  1. /*****************************************************************
  2. //文件名:ZLG7290.c
  3. //描绘:该文件界说与ZLG7290有关的各种接口、函数,适用于MSP430F149
  4. //编写人:小邪@清水
  5. //版本号:1.01
  6. *****************************************************************/
  7. #include”msp430x14x.h”
  8. #include”ZLG7290.h”
  9. /*****************************************************************
  10. //关于接口的一些界说
  11. //需求依据实践使用做出改动
  12. *****************************************************************/
  13. #defineIIC_Enable!(P2IN&BIT2)
  14. #defineSCL_UPPORTDIR&=~SCL
  15. #defineSDA_UPPORTDIR&=~SDA
  16. #defineSCL_DOWNPORTDIR|=SCL
  17. #defineSDA_DOWNPORTDIR|=SDA
  18. #definePORTDIRP3DIR//设置为P3口
  19. #definePORTINP3IN
  20. #definePORTOUTP3OUT
  21. #defineSDABIT0//设置SDA为Px.0
  22. #defineSCLBIT1//设置SCL为Px.1
  23. #defineRESBIT2//设置RES为P2.7(对应430的中止)
  24. #defineCHIP0x70//ZLG7290的IIC地址
  25. /*************************************************************************
  26. //称号:IIC_delay()
  27. //参数:无
  28. //返回值:无
  29. //功用:完结IIC设置中所需求的延时
  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. //参数:要发送的数据
  50. //返回值:无
  51. //功用:向线上发送数据(SCL必须在进入函数前置为低)
  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. //参数:无
  72. //返回值:成功标志,若成功则为1,否则为0
  73. //功用:接纳应对信号
  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. //参数:无
  93. //返回值:无
  94. //功用:发送一个起始信号
  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. //参数:无
  111. //返回值:无
  112. //功用:发送一个中止信号
  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. //参数:data-待写入的数据,startaddr-待写入的首地址
  128. //返回值:无
  129. //功用:向线上写一个字节
  130. *************************************************************************/
  131. voidWrite_IIC_Byte(BYTEdata,BYTEstartaddr)
  132. {
  133. do
  134. {
  135. Start();
  136. SendToBus(CHIP);//选片地址
  137. if(BackAns())//从机的答复信息
  138. continue;
  139. SendToBus(startaddr);//挑选芯片上的内涵地址
  140. if(BackAns())
  141. continue;
  142. SendToBus(data);//传输数据
  143. if(!BackAns())
  144. break;
  145. }
  146. while(1);
  147. Stop();
  148. }
  149. /*************************************************************************
  150. //称号:ReadFromBus()
  151. //参数:无
  152. //返回值:读出的数据
  153. //功用:从线上读出数据
  154. *************************************************************************/
  155. BYTEReadFromBus()
  156. {
  157. inti,temp;
  158. temp=0;
  159. SDA_UP;//读取数据之前要把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. }

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部