微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ZLG7290矩阵键盘控制forMSP40

ZLG7290矩阵键盘控制forMSP40

时间:11-27 来源:互联网 点击:

  1. tartaddr-读数据的首地址
  2. //返回值:读出的数据
  3. //功能:读数据到微控制器
  4. *************************************************************************/
  5. BYTERead_IIC_Random(BYTEstartaddr)
  6. {
  7. BYTEtemp;
  8. do
  9. {
  10. Start();
  11. SendToBus(CHIP);//选片地址
  12. if(BackAns())//从机的回答信息
  13. continue;
  14. SendToBus(startaddr);//选择芯片上的内在地址
  15. if(BackAns())
  16. continue;
  17. Start();
  18. SendToBus(CHIP+1);
  19. if(!BackAns())
  20. break;
  21. }
  22. while(1);
  23. temp=ReadFromBus();//从线上读数据
  24. NoAck();
  25. Stop();
  26. returntemp;
  27. }
  28. /*************************************************************************
  29. //名称:AckToBus()
  30. //参数:无
  31. //返回值:无
  32. //功能:向IIC发送应答信号
  33. *************************************************************************/
  34. voidAckToBus()
  35. {
  36. SDA_DOWN;
  37. IIC_delay();
  38. SCL_UP;
  39. IIC_delay();
  40. SCL_DOWN;
  41. IIC_delay();
  42. }
  43. /*************************************************************************
  44. //名称:NoAck()
  45. //参数:无
  46. //返回值:无
  47. //功能:向IIC发送应答信号
  48. *************************************************************************/
  49. voidNoAck()
  50. {
  51. SDA_UP;
  52. IIC_delay();
  53. SCL_UP;
  54. IIC_delay();
  55. SCL_DOWN;
  56. IIC_delay();
  57. }
  58. /*************************************************************************
  59. //名称:Write_IIC_Serious()
  60. //参数:data-待写数据的指针,startaddr-待写数据的起始地址,len-待写数据的长度
  61. //返回值:无
  62. //功能:连续写多个字
  63. *************************************************************************/
  64. voidWrite_IIC_Serious(char*data,BYTEstartaddr,BYTElen)
  65. {
  66. do
  67. {
  68. Start();
  69. SendToBus(CHIP);//选片地址
  70. if(BackAns())//从机的回答信息
  71. continue;
  72. SendToBus(startaddr);//选择芯片上的内在地址
  73. if(BackAns())
  74. continue;
  75. SendToBus(data[0]);//传输数据
  76. if(BackAns())
  77. continue;
  78. SendToBus(data[1]);
  79. if(!BackAns())
  80. break;
  81. }
  82. while(1);
  83. Stop();
  84. }
  85. /*************************************************************************
  86. //名称:Read_IIC_Curent()
  87. //参数:data-待读数据存放的指针,len-待读数据的长度
  88. //返回值:无
  89. //功能:连续读多个字
  90. *************************************************************************/
  91. voidRead_IIC_Curent(BYTE*data,BYTElen)
  92. {
  93. inti;
  94. Start();
  95. SendToBus(CHIP+1);
  96. BackAns();//放松读命令
  97. i=1;
  98. do
  99. {
  100. i++;
  101. data[i]=ReadFromBus();
  102. if(i
  103. AckToBus();
  104. else
  105. break;
  106. }
  107. while(1);
  108. Stop();
  109. }
  110. /*************************************************************************
  111. //名称:init_IIC()
  112. //参数:无
  113. //返回值:无
  114. //功能:初始化I2C
  115. *************************************************************************/
  116. voidinit_IIC()
  117. {
  118. P2IE|=BIT7;
  119. P2IES|=BIT7;
  120. P2IFG&=~0x80;
  121. _EINT();
  122. }
  123. /*************************************************************************
  124. //名称:zlg7290_cmd()
  125. //参数:cmd-待写入的命令
  126. //返回值:无
  127. //功能:ZLG7290纯指令发送
  128. *************************************************************************/
  129. voidzlg7290_cmd(unsignedcharcmd)
  130. {
  131. Write_IIC_Byte(cmd,0x07);
  132. return;
  133. }
  134. /*************************************************************************
  135. //名称:IsKeyDown()
  136. //参数:无
  137. //返回值:1-有键按下,0-无键按下
  138. //功能:ZLG7290纯指令发送
  139. *************************************************************************/
  140. charIsKeyDown()
  141. {
  142. chartemp;
  143. temp=0;
  144. temp=Read_IIC_Random(0x00);
  145. if(temp&0x01)
  146. {
  147. return1;
  148. }
  149. else
  150. {
  151. return0;
  152. }
  153. }
  154. /*************************************************************************
  155. //名称:ReadKey()
  156. //参数:无
  157. //返回值:读取的键值
  158. //功能:读取键值
  159. *************************************************************************/
  160. charReadKey()
  161. {
  162. returnRead_IIC_Random(0x01);
  163. }
  164. /*************************************************************************
  165. //名称:ReadCnt()
  166. //参数:无
  167. //返回值:连击次数
  168. //功能:读取连击次数
  169. *************************************************************************/
  170. charReadCnt()
  171. {
  172. returnRead_IIC_Random(0x02);
  173. }


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top