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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8198|回復: 12
收起左側

51單片機驅動AHT10溫濕度傳感器 源程序資料

  [復制鏈接]
ID:808655 發表于 2020-7-28 00:52 | 顯示全部樓層 |閱讀模式
        在網上找遍了,都沒有找到使用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.png
所有資料51hei提供下載:
51單片機驅動AHT10溫濕度傳感器.zip (3.71 MB, 下載次數: 304)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:59363 發表于 2020-9-1 09:23 | 顯示全部樓層
我也是根據這個改的,沒讀出數據,希望你這個能行
回復

使用道具 舉報

ID:293108 發表于 2020-9-15 13:29 | 顯示全部樓層
很不錯,后期我也多上傳些程序給大家。
回復

使用道具 舉報

ID:272119 發表于 2020-9-20 22:25 | 顯示全部樓層
樓主,請問用你的AHT10驅動代碼讀數非正常跳動,溫度在吹口氣數值升到250+攝氏度緩慢回到10-50一個大致穩定數字,濕度從0到1000%一直非規則跳變.這是第一個驅動了芯片的代碼,終于看到了些許希望,謝謝!
回復

使用道具 舉報

ID:272119 發表于 2020-9-20 22:30 | 顯示全部樓層
附件是我用STC15W408AS驅動 0.91寸OLED的全部代碼.目前還是AHT10沒有完整驅動起來,但芯片是工作了的,因為讀數隨溫度變化很靈敏變化,只是讀數不是準確的.

Keil 5 工程.rar

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

STC15W408AS驅動 0.91寸OLED的全部代碼

回復

使用道具 舉報

ID:784607 發表于 2020-12-19 13:33 | 顯示全部樓層
為什么我燒了 也接了線沒反應
回復

使用道具 舉報

ID:138247 發表于 2021-1-22 18:55 | 顯示全部樓層

謝謝樓主分享,正在搞這個傳感器。。。
回復

使用道具 舉報

ID:482246 發表于 2022-4-10 17:19 | 顯示全部樓層
溫度值大概是對的,較穩定 ,但濕度總是從60多遞減到0附近又從60多遞減
回復

使用道具 舉報

ID:218360 發表于 2022-6-8 16:38 | 顯示全部樓層
下載學習下看看,按照這個寫下CHT8305溫濕度
回復

使用道具 舉報

ID:1070668 發表于 2023-4-16 10:36 | 顯示全部樓層
做好了
055.jpg
回復

使用道具 舉報

ID:933399 發表于 2024-1-12 20:07 | 顯示全部樓層


謝謝樓主分享,正在搞這個傳感器。。。
回復

使用道具 舉報

ID:160746 發表于 2024-12-16 16:23 | 顯示全部樓層
希望這個有用
回復

使用道具 舉報

ID:160746 發表于 2024-12-16 16:23 | 顯示全部樓層
下載下來測試下,看看有沒有用
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 偷拍第一页 | 日韩在线欧美 | 国产在线播放一区二区三区 | 国产成人jvid在线播放 | 日韩中文在线视频 | 国产乱一区二区三区视频 | 99精品国自产在线 | 中文字幕在线视频一区二区三区 | 午夜视频一区 | 婷婷综合| 国产成人在线一区二区 | 99久久婷婷| 亚洲逼院 | 91网在线播放 | 五月天国产 | 国产ts人妖系列高潮 | 黄色网址在线免费观看 | 国产精品1 | 伊人精品在线 | 爱爱无遮挡 | 亚洲成人一区二区 | 成人精品一区二区 | 欧美成人免费 | 日本一区二区不卡 | a级在线| 日日干夜夜操 | 日日夜夜天天 | 日日摸夜夜爽人人添av | 国产小视频自拍 | 人人澡人人射 | 中文字幕 欧美 日韩 | 国产精品99久久久久久动医院 | 成人性视频免费网站 | 91亚洲国产 | 性色网站 | 成人av免费网站 | 国产精品久久久久久中文字 | 美女黄视频网站 | www.亚洲一区二区三区 | 久久精品国产一区二区电影 | 欧美jizzhd精品欧美巨大免费 |