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

標題: 51單片機驅動AHT10溫濕度傳感器 源程序資料 [打印本頁]

作者: 紫強    時間: 2020-7-28 00:52
標題: 51單片機驅動AHT10溫濕度傳感器 源程序資料
        在網上找遍了,都沒有找到使用51單片機驅動AHT10傳感器的程序
        
        耗時一天半,結合

        https://blog.csdn.net/Freedom1314520/article/details/104557480

        給的思路和手冊寫完了程序
        
        但是注意這篇博客的程序有點問題,最后處理數據的時候會發生截斷,小則損失精度,大則丟失數據,                        
        這里要用浮點來處理數據,然后乘以100或1000來轉換為整型,從而保留小數位。

        (之前沒意識到這個問題,數據丟失,我以為沒讀到,就從通信協議開始一個一個函數重新梳理了一遍,        

        浪費比較長的時間……)
        如有問題,歡迎指正。

                                                        --2020.7.28 ZIQ

單片機源程序如下:
  1. #include "AHT10.h"
  2. #include "LCD1602.h"
  3. #include "IIC.h"
  4. #include "Delay.h"
  5. //軟復位
  6. void AHT10_RST()     
  7. {
  8.         IIC_start();
  9.         IIC_write_byte(AHT10_Wr);
  10.         IIC_Get_ack();                                //接收應答
  11.         IIC_write_byte(0xba);        //發送軟復位指令
  12.         IIC_Get_ack();                                //接收應答
  13.         IIC_stop();
  14. }
  15. //觸發測量
  16. void AHT10_Mea()               
  17. {
  18.         IIC_start();
  19.         IIC_write_byte(AHT10_Wr);
  20.         IIC_Get_ack();                                //接收應答
  21.         IIC_write_byte(0xac);        //觸發測量指令
  22.         IIC_Get_ack();                                //接收應答
  23.         IIC_write_byte(0x33);        //指令參數
  24.         IIC_Get_ack();                                //接收應答
  25.         IIC_write_byte(0x00);
  26.         IIC_Get_ack();                                //接收應答
  27.         IIC_stop();
  28. }
  29. //讀取AHT10狀態字
  30. unsigned char AHT10_Status()         
  31. {
  32.         unsigned char byte_first;
  33.         IIC_start();
  34.         IIC_write_byte(AHT10_Rd);
  35.         IIC_Get_ack();                                //接收應答
  36.         byte_first = IIC_read_byte();        //接收數據
  37.         IIC_NACK();                                                                                //非應答,不再接收后續數據
  38.         IIC_stop();
  39.         return byte_first;
  40. }
  41. //判斷AHT10校準使能        
  42. unsigned char AHT10_CalEN(){
  43.         unsigned char val = 0;
  44.         val = AHT10_Status();
  45.         if((val & 0x08) == 0x08)                //bit[3]為校準位,1位已校準,0位未校準
  46.                 return 1;
  47.         else
  48.                 return 0;
  49. }
  50. //初始化
  51. void AHT10Init(){
  52.         IIC_start();
  53.         IIC_write_byte(AHT10_Wr);
  54.         IIC_Get_ack();                                //接收應答
  55.   IIC_write_byte(0xe1);        //初始化指令
  56.         IIC_Get_ack();                                //接收應答
  57.   IIC_write_byte(0x08);        //初始化參數
  58.         IIC_Get_ack();                                //接收應答
  59.   IIC_write_byte(0x00);
  60.         IIC_Get_ack();                                //接收應答
  61.         IIC_stop();
  62. }
  63. //初始化并判斷是否校準
  64. void AHT10_Init()      
  65. {
  66.         Delay_ms(45);        //上電時等待45毫秒
  67.         AHT10Init();                //嘗試初始化
  68.         while(AHT10_CalEN() == 0)//如果未校準,則復位,再此嘗試初始化,直到校準完成
  69.         {        //注意,如果初始化未完成會死循環,此時請檢查接線是否存在問題或傳感器是否損壞
  70.                 AHT10_RST();                //復位
  71.                 Delay_ms(25);        //復位時間不超過20ms
  72.                 AHT10Init();
  73.         }
  74. }
  75. //讀取數據并處理返回
  76. void AHT10_Read_Data(unsigned int *T,unsigned int *S) //濕度和溫度數據
  77. {                                                                                                                                                                                                                //例如溫度2251,為22.51攝氏度,濕度30211,為30.211%
  78.         unsigned char Data[6] = {0};//讀入六個字節數據,第一個狀態字,后面兩個半字節為濕度數據,最后為溫度數據
  79.         unsigned long retudata = 0;        //使用一個long int類型來處理數據
  80.         unsigned char n = 0;                                //讀忙計數,防止一直忙碌造成死循環
  81.         AHT10_Mea();                        //開始測量
  82.         Delay_ms(80);                        //延時等待至少75毫秒        
  83.         while(((AHT10_Status() & 0x80) == 0x80))        //讀忙,如果忙碌則等待,超過300ms則退出
  84.         {
  85.                 Delay_ms(3);
  86.                 n++;
  87.                 if(n >= 100)break;
  88.         }
  89.   IIC_start();                        
  90.         IIC_write_byte(AHT10_Rd);                                //寫入讀數據指令
  91.         IIC_Get_ack();                                //接收應答
  92.         for(n = 0;n < 6;n++){
  93.                 Data[n] = IIC_read_byte();                //狀態數據
  94.                 if(n < 5){
  95.                         IIC_ACK();                //應答
  96.                 }        
  97.                 else{
  98.                         IIC_NACK();                //第五次,非應答,讀取完畢
  99.                 }               
  100.         }
  101.         IIC_stop();        
  102.         retudata = 0;
  103.         retudata += Data[1];                                //原始濕度數據合成
  104.         retudata = (retudata<<8) + Data[2];
  105.         retudata = ((retudata<<8) + Data[3])>>4;
  106.         //retudata = retudata & 0x000fffff;
  107.         *S = (retudata*1000.0/1024.0/1024.0)*1000;//數據精確到三位小數
  108.         
  109.         retudata = 0;                                //原始溫度數據合成
  110.         retudata = ((Data[3] & 0x0f)<<8)|Data[4];
  111.         retudata = (retudata<<8)|Data[5];
  112.         //retudata = retudata & 0x000fffff;
  113.         *T = (retudata*100.0*200.0/1024.0/1024.0 - 50.0*100);        //數據精確到兩位小數        
  114.         
  115.         }
  116.                         
復制代碼

所有資料51hei提供下載:
51單片機驅動AHT10溫濕度傳感器.zip (3.71 MB, 下載次數: 304)


作者: miskel    時間: 2020-9-1 09:23
我也是根據這個改的,沒讀出數據,希望你這個能行
作者: chentang    時間: 2020-9-15 13:29
很不錯,后期我也多上傳些程序給大家。
作者: qq603599910    時間: 2020-9-20 22:25
樓主,請問用你的AHT10驅動代碼讀數非正常跳動,溫度在吹口氣數值升到250+攝氏度緩慢回到10-50一個大致穩定數字,濕度從0到1000%一直非規則跳變.這是第一個驅動了芯片的代碼,終于看到了些許希望,謝謝!
作者: qq603599910    時間: 2020-9-20 22:30
附件是我用STC15W408AS驅動 0.91寸OLED的全部代碼.目前還是AHT10沒有完整驅動起來,但芯片是工作了的,因為讀數隨溫度變化很靈敏變化,只是讀數不是準確的.

Keil 5 工程.rar

82.88 KB, 下載次數: 29, 下載積分: 黑幣 -5

STC15W408AS驅動 0.91寸OLED的全部代碼


作者: 1124030180    時間: 2020-12-19 13:33
為什么我燒了 也接了線沒反應
作者: plj213    時間: 2021-1-22 18:55

謝謝樓主分享,正在搞這個傳感器。。。
作者: iloveyou51    時間: 2022-4-10 17:19
溫度值大概是對的,較穩定 ,但濕度總是從60多遞減到0附近又從60多遞減
作者: 打雜的    時間: 2022-6-8 16:38
下載學習下看看,按照這個寫下CHT8305溫濕度
作者: wwj112    時間: 2023-4-16 10:36
做好了

055.jpg (1.47 MB, 下載次數: 86)

055.jpg

作者: jk2337    時間: 2024-1-12 20:07


謝謝樓主分享,正在搞這個傳感器。。。
作者: edwinhero    時間: 2024-12-16 16:23
希望這個有用
作者: edwinhero    時間: 2024-12-16 16:23
下載下來測試下,看看有沒有用




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美伊人影院 | 午夜免费视频 | 午夜小视频免费观看 | 九九九视频 | 福利视频网站 | 91久久北条麻妃一区二区三区 | 久久9999久久 | 国产精品一区二区在线观看 | 成人一区二区三区在线观看 | 国产成人av在线 | 欧美精品一区在线发布 | a级片播放| 成人av网站在线观看 | 欧美性视频在线播放 | 日韩视频一区二区在线 | 国产女人与拘做受视频 | 伊人久久精品一区二区三区 | 久久久成人精品 | 日韩中文一区 | 免费h在线 | 一区二区三区影院 | 中文字幕亚洲精品在线观看 | 精品一二三区视频 | 欧美a级网站 | 成人免费观看男女羞羞视频 | 看a网站| 亚洲国产黄 | 黄网站免费在线观看 | 99精品久久久久久中文字幕 | 亚洲一区二区三区在线播放 | 成人在线免费网站 | 成人影院在线 | 亚洲精品电影在线观看 | 亚洲午夜精品视频 | 波多野结衣中文字幕一区二区三区 | 精品久久九九 | 欧美a在线 | 天天操一操 | 玖玖视频免费 | 成人免费精品视频 | 中文字幕在线一区 |