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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11739|回復: 7
收起左側

GY906紅外測溫單片機程序_Keil 附MLX90614英文資料

  [復制鏈接]
ID:382607 發表于 2020-7-26 23:22 | 顯示全部樓層 |閱讀模式
程序已經經過測試,正常運行,并且能夠通過GY906讀取溫度數據。
下為程序代碼截圖:
2020-07-26_232056.png

MLX90614英文資料
51hei.png

單片機源程序如下:
  1. #include "reg52.h"
  2. #include "intrins.h"

  3. //************************************
  4. #define  uint  unsigned int
  5. #define  uchar unsigned char
  6. #define  Nack_counter  10

  7. //************** 端口定義**************
  8. //LCD 控制線接口
  9. uchar flag1;
  10. sbit  LCD_RS=P2^7;
  11. sbit  LCD_EN=P2^6;
  12. //GY906 端口定義
  13. sbit  SCL=P2^0;// 時鐘線
  14. sbit  SDA=P2^1;// 數據線

  15. //************ 數據定義****************
  16. bdata uchar flag;//可位尋址數據
  17. sbit bit_out=flag^7;
  18. sbit bit_in=flag^0;
  19. uchar DataH,DataL,Pecreg;
  20. //************ 函數聲明*****************************************
  21. void   IIC_Start();                 //GY906 發起始位子程序
  22. void   IIC_Stop();                 //GY906發結束位子程序
  23. uchar  GY906_RX_Byte(void);              //GY906 接收字節子程序
  24. void   GY906_tx_Bit(void);             //GY906發送位子程序
  25. void   GY906_TX_Byte(uchar dat_byte);     //GY906 接收字節子程序
  26. void   GY906_rx_Bit(void);           //GY906接收位子程序
  27. void   delay(uint N);              //延時程序
  28. uint   memread(void);             // 讀溫度數據
  29. void   LcdInit(void);        //LCD 初始化子程序
  30. void   LcdCheckBusy(void);         //LCD 判斷忙子程序
  31. void   LcdWriteCmd(uchar cmd);     //LCD 寫命令子程序
  32. void   LcdWriteData(uchar dat);       //LCD 寫數據子程序
  33. void   display(uint Tem);           // 顯示子程序
  34. //*************主函數*******************************************
  35. void main()
  36. {
  37.         uint Tem;
  38.         //函數部分
  39.         SCL=1;SDA=1;_nop_();
  40.         _nop_();_nop_();_nop_();
  41.         SCL=0;
  42.         delay(1000);
  43.         SCL=1;
  44.         LcdInit();
  45.         while(1)
  46.         {
  47.          Tem=memread();
  48.          display(Tem);
  49.          delay(20);
  50.         }
  51. }
  52. //*********輸入轉換并顯示*********
  53. void display(uint Tem)
  54. {
  55. uint T,a,b;
  56. T=Tem*2;
  57.   LcdWriteCmd(0x01);//清屏
  58. if(T>=27315)
  59. {
  60.    T=T-27315;
  61.    a=T/100;
  62.    b=T-a*100;
  63. //---------------------------
  64.    if(a>=100)
  65.    {
  66.     LcdWriteData(0x30+a/100);
  67.     a=a%100;
  68.     LcdWriteData(0x30+a/10);
  69.     a=a%10;
  70.     LcdWriteData(0x30+a);
  71.    }
  72.    else if(a>=10)
  73.    {
  74.     LcdWriteData(0x30+a/10);
  75.     a=a%10;
  76.     LcdWriteData(0x30+a);
  77.    }
  78.    else
  79.    {
  80.     LcdWriteData(0x30+a);
  81.    }
  82.    LcdWriteData(0x2e);// 顯示點
  83.    //---------------------------
  84.   if(b>=10)
  85.   {
  86.     LcdWriteData(0x30+b/10);
  87. //    b=b%10;
  88. //    LcdWriteData(0x30+b);
  89.   }
  90.   else
  91.   {
  92.     LcdWriteData(0x30);
  93. //    LcdWriteData(0x30+b);
  94.   }
  95. }
  96. //==========
  97. else
  98. {
  99.   T=27315-T;
  100.   a=T/100;
  101.     b=T-a*100;
  102.   LcdWriteData(0x2d);
  103. //--------------------------
  104.   if(a>=10)
  105.   {
  106.     LcdWriteData(0x30+a/10);
  107.     a=a%10;
  108.     LcdWriteData(0x30+a);
  109.   }
  110.   else
  111.   {
  112.     LcdWriteData(0x30+a);
  113.   }
  114.   LcdWriteData(0x2e);//顯示點
  115. //--------------------------
  116.   if(b>=10)
  117.   {
  118.     LcdWriteData(0x30+b/10);
  119.     b=b%10;
  120.     LcdWriteData(0x30+b);
  121.   }
  122.   else
  123.   {
  124.     LcdWriteData(0x30);
  125.     LcdWriteData(0x30+b);
  126.   }
  127. }
  128. }

  129. //************************************
  130. void IIC_Start(void)
  131. {
  132.    SDA=1;
  133.    _nop_();_nop_();_nop_();_nop_();_nop_();
  134.    SCL=1;
  135.    _nop_();_nop_();_nop_();_nop_();_nop_();
  136.    SDA=0;
  137.    _nop_();_nop_();_nop_();_nop_();_nop_();
  138.    SCL=0;
  139.    _nop_();_nop_();_nop_();_nop_();_nop_();
  140. }
  141. //------------------------------
  142. void IIC_Stop(void)
  143. {

  144.    SCL=0;
  145.    _nop_();_nop_();_nop_();_nop_();_nop_();
  146.    SDA=0;
  147.    _nop_();_nop_();_nop_();_nop_();_nop_();
  148.    SCL=1;
  149.    _nop_();_nop_();_nop_();_nop_();_nop_();
  150.    SDA=1;
  151. }
  152. //--------- 發送一個字節---------
  153. void  GY906_TX_Byte(uchar dat_byte)
  154. {
  155.    char i,n,dat;
  156.    n=Nack_counter;
  157. TX_again:
  158.    dat=dat_byte;
  159.    for(i=0;i<8;i++)
  160.    {
  161.      if(dat&0x80)
  162.       bit_out=1;
  163.      else
  164.       bit_out=0;
  165.      GY906_tx_Bit();
  166.      dat=dat<<1;
  167.    }
  168.    
  169.       GY906_rx_Bit();
  170.    if(bit_in==1)
  171.    {
  172.     IIC_Stop();
  173.     if(n!=0)
  174.     {n--;goto Repeat;}
  175.     else
  176.      goto exit;
  177.    }
  178.    else
  179.     goto exit;
  180. Repeat:
  181.     IIC_Start();
  182.     goto TX_again;
  183. exit: ;
  184. }
  185. //-----------發送一個位---------
  186. void  GY906_tx_Bit(void)
  187. {
  188.   if(bit_out==0) SDA=0;
  189.   else SDA=1;
  190.   _nop_();
  191.   SCL=1;
  192.   _nop_();_nop_();_nop_();_nop_();
  193.   _nop_();_nop_();_nop_();_nop_();
  194.   SCL=0;
  195.   _nop_();_nop_();_nop_();_nop_();
  196.   _nop_();_nop_();_nop_();_nop_();
  197. }
  198. //---------- 接收一個字節--------
  199. uchar GY906_RX_Byte(void)
  200. {
  201.   uchar i,dat;
  202.   dat=0;
  203.   for(i=0;i<8;i++)
  204.   {
  205.     dat=dat<<1;
  206.     GY906_rx_Bit();
  207.     if(bit_in==1)
  208.      dat=dat+1;
  209.   }
  210.   GY906_tx_Bit();
  211.   return dat;
  212. }

  213. //---------- 接收一個位----------
  214. void GY906_rx_Bit(void)
  215. {
  216.   SDA=1;bit_in=1;
  217.   SCL=1;
  218.   _nop_();_nop_();_nop_();_nop_();
  219.   _nop_();_nop_();_nop_();_nop_();
  220.   bit_in=SDA;
  221.   _nop_();
  222.   SCL=0;
  223.   _nop_();_nop_();_nop_();_nop_();
  224.   _nop_();_nop_();_nop_();_nop_();
  225. }
  226. //------------ 延時--------------
  227. void delay(uint N)
  228. {
  229.   uint i;
  230.   for(i=0;i<N;i++)
  231.      _nop_();
  232. }
  233. //------------------------------
  234. uint memread(void)
  235. {
  236.   IIC_Start();
  237.   GY906_TX_Byte(0xB4);  //Send SlaveAddress ==============================
  238.   //GY906_TX_Byte(0x00);
  239.   GY906_TX_Byte(0x07);  //Send Command
  240.   //------------
  241.   IIC_Start();
  242.   GY906_TX_Byte(0x01);
  243.   bit_out=0;
  244.   DataL=GY906_RX_Byte();
  245.   bit_out=0;
  246.   DataH=GY906_RX_Byte();
  247.   bit_out=1;
  248.   Pecreg=GY906_RX_Byte();
  249.   IIC_Stop();
  250.   return(DataH*256+DataL);
  251. }
  252. //******************LCD 顯示子函數***********************

  253. /*********************************************************/
  254. // 液晶顯示初始化
  255. /*********************************************************/
  256. void LcdInit(void)        // 初始化LCD
  257. {
  258.    LcdWriteCmd(0x01);
  259.    LcdWriteCmd(0x0c);
  260.    LcdWriteCmd(0x06);
  261.    LcdWriteCmd(0x38);
  262. }

  263. void LcdCheckBusy(void) //LCD 忙標志判斷
  264. {
  265.         flag1=0x80;
  266. ……………………

  267. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
GY906_紅外測溫.zip (4.12 MB, 下載次數: 304)
回復

使用道具 舉報

ID:284488 發表于 2020-7-27 08:50 | 顯示全部樓層
感謝樓主分享,不知有沒有電路圖可分享,謝謝啦!
回復

使用道具 舉報

ID:587076 發表于 2020-9-5 18:55 | 顯示全部樓層
電路圖加一
回復

使用道具 舉報

ID:818452 發表于 2020-9-14 11:17 來自手機 | 顯示全部樓層
加上電路原理圖吧,樓主
回復

使用道具 舉報

ID:582255 發表于 2020-10-2 22:48 | 顯示全部樓層
請問一下樓主,這個用的是什么樣顯示
回復

使用道具 舉報

ID:899147 發表于 2022-4-17 14:52 | 顯示全部樓層
T= (DataH:DataL)*0.02-273.15
回復

使用道具 舉報

ID:899147 發表于 2022-4-17 14:53 | 顯示全部樓層
T= (DataH:DataL)*0.02-273.15
回復

使用道具 舉報

ID:1017106 發表于 2022-4-19 22:03 | 顯示全部樓層
如果單片機使用stc8f2k64s4,延遲該怎么改呢?改了很久不能用
求助
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 人人操日日干 | 国产精品一区二区福利视频 | 日操夜操 | 91国产精品 | 亚洲高清视频在线 | 天天影视色综合 | 日韩在线看片 | 国产精品福利在线观看 | 成人小视频在线观看 | 毛片a级 | 欧美在线a| 91在线观看视频 | 成年人黄色一级毛片 | 国产在线精品一区二区 | 久久国产精品-国产精品 | 亚洲欧美中文字幕在线观看 | 国产极品车模吞精高潮呻吟 | 欧美成年网站 | 一级h片| 成人免费视频 | 欧美一区二区三区在线观看视频 | 成人午夜在线 | 中文字幕在线免费 | 国产真实乱对白精彩久久小说 | 欧美在线视频观看 | 91精品国产高清久久久久久久久 | 欧美精品欧美精品系列 | 成人综合视频在线观看 | 国产成人精品综合 | 涩涩鲁亚洲精品一区二区 | 亚洲精品一区二区冲田杏梨 | 国产精品国产精品 | 日韩精品一区二区三区中文字幕 | 久久综合爱 | 亚洲精品大片 | 91色在线| 久热中文字幕 | 精品视频在线免费观看 | 9999精品视频 | 日本二区 | 欧美成人精品一区二区男人看 |