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

          新聞中心

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

          ZLG7290矩陣鍵盤(pán)控制forMSP40

          作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏
          基于ZLG7290的矩陣鍵盤(pán)控制,適用于MSP430,采用中斷模式查詢(xún)按鍵。ZLG7290還具有數(shù)碼管顯示功能,本人水平有限,這里未能實(shí)現(xiàn)。
          [cpp]view plaincopyprint?
          1. /*****************************************************************
          2. //文件名:ZLG7290.c
          3. //描述:該文件定義與ZLG7290有關(guān)的各種接口、函數(shù),適用于MSP430F149
          4. //編寫(xiě)人:小邪@清水
          5. //版本號(hào):1.01
          6. *****************************************************************/
          7. #include"msp430x14x.h"
          8. #include"ZLG7290.h"
          9. /*****************************************************************
          10. //關(guān)于接口的一些定義
          11. //需要根據(jù)實(shí)際應(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(對(duì)應(yīng)430的中斷)
          24. #defineCHIP0x70//ZLG7290的IIC地址
          25. /*************************************************************************
          26. //名稱(chēng):IIC_delay()
          27. //參數(shù):無(wú)
          28. //返回值:無(wú)
          29. //功能:完成IIC設(shè)置中所需要的延時(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. //名稱(chēng):SendToBus()
          49. //參數(shù):要發(fā)送的數(shù)據(jù)
          50. //返回值:無(wú)
          51. //功能:向線上發(fā)送數(shù)據(jù)(SCL必須在進(jìn)入函數(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. //名稱(chēng):BackAns()
          71. //參數(shù):無(wú)
          72. //返回值:成功標(biāo)志,若成功則為1,否則為0
          73. //功能:接收應(yīng)答信號(hào)
          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. //名稱(chēng):Start()
          92. //參數(shù):無(wú)
          93. //返回值:無(wú)
          94. //功能:發(fā)送一個(gè)起始信號(hào)
          95. *************************************************************************/
          96. voidStart()
          97. {
          98. PORTOUT&=(~SCL)&(~SDA);
          99. SCL_UP;
          100. IIC_delay();
          101. SDA_UP;
          102. IIC_delay();
          103. SDA_DOWN;//開(kāi)始位
          104. IIC_delay();
          105. SCL_DOWN;
          106. IIC_delay();
          107. }
          108. /*************************************************************************
          109. //名稱(chēng):Stop()
          110. //參數(shù):無(wú)
          111. //返回值:無(wú)
          112. //功能:發(fā)送一個(gè)停止信號(hào)
          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. //名稱(chēng):Write_IIC_Byte()
          127. //參數(shù):data-待寫(xiě)入的數(shù)據(jù),startaddr-待寫(xiě)入的首地址
          128. //返回值:無(wú)
          129. //功能:向線上寫(xiě)一個(gè)字節(jié)
          130. *************************************************************************/
          131. voidWrite_IIC_Byte(BYTEdata,BYTEstartaddr)
          132. {
          133. do
          134. {
          135. Start();
          136. SendToBus(CHIP);//選片地址
          137. if(BackAns())//從機(jī)的回答信息
          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. //名稱(chēng):ReadFromBus()
          151. //參數(shù):無(wú)
          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. 上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


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

          關(guān)閉