久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3779|回復: 1
收起左側

MAX30100溫度及ID功能測試單片機源程序

[復制鏈接]
ID:361580 發表于 2018-6-29 10:14 | 顯示全部樓層 |閱讀模式
MAX30100-TP.png

單片機源程序如下:
  1. //-------------------------------------------------------------------------------------//
  2. //程序名:          MAX30100測試程序                  
  3. //版本:            V2.0                                             
  4. //編寫者:          無錫日晨物聯科技                 
  5. //資料下載:       http://pan.baidu.com/s/1miNGWha
  6. //功能:            測試MAX30100的ID及溫度部分功能。
  7. //-------------------------------------------------------------------------------------//
  8. //RCWL-0530模塊與51接口連接:
  9. // 1:VCC   --〉   1.8V-5.5V電源
  10. // 2:SCL   --〉   P3.5
  11. // 3:SDA   --〉   P3.7
  12. // 4:INT   --〉   NC
  13. // 5:IRD   --〉   NC
  14. // 6:RD    --〉   NC
  15. // 7:GND   --〉   地
  16. //-------------------------------------------------------------------------------------//
  17. # include <reg52.h>
  18. # include <stdio.h>
  19. # include <intrins.h>
  20. //定義IIC接口
  21. sbit IIC_SCL    =P3^5;     //IIC的SCL
  22. sbit IIC_SDA    =P3^7;     //IIC的SDA
  23. bit  IIC_ACK;              //IIC的ACK
  24. int  rda;                  //IIC讀出
  25. //-------------------------------------------------------------------------------------//
  26. //函數:    delayms()
  27. //功能:    延時程序
  28. //-------------------------------------------------------------------------------------//
  29. void delayms(unsigned int ms)
  30. {
  31.         unsigned char i=100,j;
  32.         for(;ms;ms--)
  33.         {
  34.                 while(--i)
  35.                 {
  36.                         j=10;
  37.                         while(--j);
  38.                 }
  39.         }
  40. }
  41. //-------------------------------------------------------------------------------------//
  42. //函數:    void iic_start();
  43. //功能:    I2C總線開始
  44. //-------------------------------------------------------------------------------------//
  45. //   SCL   --- --- ___
  46. //   SDA   --- ___ ___
  47. void iic_start()
  48. {  
  49. IIC_SDA=1;
  50. _nop_();
  51. _nop_();
  52. IIC_SCL=1;         
  53. _nop_();
  54. _nop_();
  55. IIC_SDA=0;
  56. _nop_();
  57. _nop_();
  58. IIC_SCL=0;
  59. _nop_();
  60. _nop_();
  61. }
  62. //-------------------------------------------------------------------------------------//
  63. //函數:    void iic_stop();
  64. //功能:    I2C總線結束
  65. //需定義:
  66. //-------------------------------------------------------------------------------------//
  67. //   SCL   ___ --- ---
  68. //   SDA   ___ ___ ---
  69. void iic_stop()
  70. {  
  71. IIC_SCL=0;
  72. _nop_();
  73. _nop_();
  74. IIC_SDA=0;
  75. _nop_();
  76. _nop_();
  77. IIC_SCL=1;
  78. _nop_();
  79. _nop_();
  80. IIC_SDA=1;
  81. _nop_();
  82. _nop_();
  83. }
  84. //-------------------------------------------------------------------------------------//
  85. //函數:    void iic_sendbyte(unsigned char c);
  86. //功能:    發送 8_BIT 數據
  87. //-------------------------------------------------------------------------------------//
  88. void iic_sendbyte(unsigned char c)
  89. {
  90. unsigned char bitcnt;
  91. for(bitcnt=0;bitcnt<8;bitcnt++)
  92. {
  93. if((c<<bitcnt)&0x80)
  94. IIC_SDA=1;
  95. else
  96. IIC_SDA=0;
  97. _nop_();
  98. _nop_();
  99. IIC_SCL=1;
  100. _nop_();
  101. _nop_();
  102. IIC_SCL=0;
  103. }
  104. _nop_();
  105. _nop_();
  106. IIC_SDA=1;
  107. _nop_();
  108. _nop_();
  109. IIC_SCL=1;
  110. _nop_();
  111. _nop_();
  112. if(IIC_SDA==0)
  113. IIC_ACK=0;
  114. else
  115. IIC_ACK=1;
  116. IIC_SCL=0;
  117. _nop_();
  118. _nop_();
  119. }
  120. //-------------------------------------------------------------------------------------//
  121. //函數:    int iic_rcvbyte_nack();
  122. //功能:    接收 8_BIT 數據  最后ack信號
  123. //-------------------------------------------------------------------------------------//
  124. int iic_rcvbyte_nack()
  125. {
  126. unsigned char retc;
  127. unsigned char bitcnt;
  128. retc=0;
  129. IIC_SDA=1;
  130. for(bitcnt=0;bitcnt<8;bitcnt++)
  131. {
  132. _nop_();
  133. _nop_();
  134. IIC_SCL=0;
  135. _nop_();
  136. _nop_();
  137. IIC_SCL=1;
  138. _nop_();
  139. _nop_();
  140. retc=retc<<1;
  141. if(IIC_SDA==1)
  142. retc=retc+1;
  143. _nop_();
  144. _nop_();
  145. }
  146. //給出NACK信號
  147. _nop_();
  148. _nop_();
  149. IIC_SCL=0;
  150. _nop_();
  151. _nop_();
  152. IIC_SDA=1;
  153. _nop_();
  154. _nop_();
  155. IIC_SCL=1;
  156. _nop_();
  157. _nop_();
  158. IIC_SCL=0;
  159. _nop_();
  160. _nop_();
  161. return(retc);
  162. }
  163. //-------------------------------------------------------------------------------------//
  164. //函數:    int iic_rcvbyte_ack();
  165. //功能:    接收 8_BIT 數據 最后ack信號
  166. //-------------------------------------------------------------------------------------//
  167. int iic_rcvbyte_ack()
  168. {
  169. unsigned char retc;
  170. unsigned char bitcnt;
  171. retc=0;
  172. IIC_SDA=1;
  173. for(bitcnt=0;bitcnt<8;bitcnt++)
  174. {
  175. _nop_();
  176. _nop_();
  177. IIC_SCL=0;
  178. _nop_();
  179. _nop_();
  180. IIC_SCL=1;
  181. _nop_();
  182. _nop_();
  183. retc=retc<<1;
  184. if(IIC_SDA==1)
  185. retc=retc+1;
  186. _nop_();
  187. _nop_();
  188. }
  189. //給出ACK信號
  190. _nop_();
  191. _nop_();
  192. IIC_SCL=0;
  193. _nop_();
  194. _nop_();
  195. IIC_SDA=0;
  196. _nop_();
  197. _nop_();
  198. IIC_SCL=1;
  199. _nop_();
  200. _nop_();
  201. IIC_SCL=0;
  202. _nop_();
  203. _nop_();
  204. return(retc);
  205. }
  206. //-------------------------------------------------------------------------------------//
  207. //函數:      wr_max30100_one_data()
  208. //功能:      寫一位max30100數據
  209. //address:   芯片從地址
  210. //saddress:  寫寄存器地址
  211. //w_data:    待寫數據
  212. //-------------------------------------------------------------------------------------//
  213. void wr_max30100_one_data(int address,int saddress,int w_data )
  214. {
  215. _nop_();
  216. iic_start();
  217. _nop_();
  218. iic_sendbyte(address);
  219. _nop_();
  220. iic_sendbyte(saddress);
  221. _nop_();
  222. iic_sendbyte(w_data);
  223. _nop_();
  224. iic_stop();
  225. _nop_();
  226. }
  227. //-------------------------------------------------------------------------------------//
  228. //函數:      rd_max30100_one_data()
  229. //功能:      讀一位max30100數據
  230. //address:   芯片從地址
  231. //saddress:  讀寄存器地址
  232. //rda:       讀出的數據
  233. //-------------------------------------------------------------------------------------//
  234. void rd_max30100_one_data(int address,int saddress)
  235. {
  236. iic_start();
  237. _nop_();
  238. iic_sendbyte(address);
  239. _nop_();
  240. iic_sendbyte(saddress);
  241. _nop_();
  242. address=address+1;
  243. _nop_();
  244. iic_start();
  245. _nop_();
  246. iic_sendbyte(address);
  247. _nop_();
  248. rda=iic_rcvbyte_nack();
  249. _nop_();
  250. iic_stop();
  251. }
  252. //-------------------------------------------------------------------------------------//
  253. //函數:      主程序
  254. //功能:      讀max30100內部溫度
  255. //-------------------------------------------------------------------------------------//
  256. main()
  257. {
  258. double temp,temp1,temp2;
  259. //temp       測量溫度
  260. //temp1      30100整數部分溫度
  261. //temp2      30100小數部分溫度
  262. TMOD=0x21;                  
  263. SCON=0x50;
  264. TH1=0xFD;
  265. TL1=0xFD;
  266. TR1=1;                          
  267. TI=1;   
  268. //設置51的波特率為 9600 N 8 1
  269. //51主頻為11.0592MHz STC的MCU注意要選擇外部晶體振蕩
  270. while(1)
  271. {
  272. //復位芯片,設置模式
  273. wr_max30100_one_data(0xae,0x06,0x0b);  
  274. //讀芯片ID
  275. rd_max30100_one_data(0xae,0xff);            // 讀出芯片ID
  276. printf("MAX30100 ID =%d\n",rda);            // 串口顯示
  277. //點亮芯片LED
  278. wr_max30100_one_data(0xae,0x07,0x43);       // 設置電流,點亮LED
  279. delayms(10);   
  280. //溫度功能測試
  281. wr_max30100_one_data(0xae,0x09,0x66);       // 0X06地址B3位TEMP_EN置1
  282. delayms(50);                                // 等待溫度轉換完成,不等待,讀出數據有誤
  283. rd_max30100_one_data(0xae,0x16);            // 讀出溫度信號
  284. printf("temp1=%d\n",rda);                   // 串口顯示
  285. temp1=rda;
  286. rd_max30100_one_data(0xae,0x17);            // 讀出溫度小數部分數據
  287. printf("temp2=%d\n",rda);                   // 串口顯示
  288. temp2=rda;
  289. temp=temp1+(temp2*0.0625);                  // 計算溫度,小數部分最小溫度值0.0625
  290. printf("當前溫度=%.4f\n",temp);             // 串口顯示當前溫度
  291. delayms(100);  
  292. printf("\n");                               // 串口顯示當前溫度
  293. }
  294. }
復制代碼

所有資料51hei提供下載:
RCWL-0530(MAX30100心率-血氧模塊).pdf (654.72 KB, 下載次數: 37)
回復

使用道具 舉報

ID:489708 發表于 2019-3-13 09:58 | 顯示全部樓層
用個測心率的模塊,例程只有測溫度和查看ID,真的是XX狗了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久这里只有精品首页 | 欧美日韩视频一区二区 | 国产成人精品免高潮在线观看 | 亚洲高清一区二区三区 | 欧美午夜精品久久久久免费视 | 岛国在线免费观看 | 精品一区二区三区视频在线观看 | 久久国产一区二区三区 | 国产精品中文字幕一区二区三区 | 精品国产久 | 免费v片 | 成人性生交大片免费看r链接 | 欧美日韩综合精品 | 欧美日韩在线一区二区 | 精品免费国产视频 | 综合久久av | 欧洲精品在线观看 | 毛片一区二区三区 | 亚洲www啪成人一区二区 | gogo肉体亚洲高清在线视 | 日韩av电影院 | 国产免费一区 | 狠狠干在线 | 亚洲视频免费观看 | 高清色视频 | www久久av | 久久久久久久久91 | 久日精品 | 蜜桃黄网| 9久久婷婷国产综合精品性色 | 国产精品久久久久久久7电影 | 日韩三区 | 久久伊人操 | 一区二区三区视频在线观看 | 青青草华人在线视频 | 亚洲精品视频在线 | 日本不卡一区二区三区在线观看 | 欧美日韩在线精品 | 日韩一二三 | 国产a区 | 亚洲成人精品一区 |