欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 9045|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)驅(qū)動(dòng)AHT10溫濕度傳感器 源程序資料

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
        在網(wǎng)上找遍了,都沒有找到使用51單片機(jī)驅(qū)動(dòng)AHT10傳感器的程序
        
        耗時(shí)一天半,結(jié)合

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

        給的思路和手冊(cè)寫完了程序
        
        但是注意這篇博客的程序有點(diǎn)問題,最后處理數(shù)據(jù)的時(shí)候會(huì)發(fā)生截?cái)啵t損失精度,大則丟失數(shù)據(jù),                        
        這里要用浮點(diǎn)來處理數(shù)據(jù),然后乘以100或1000來轉(zhuǎn)換為整型,從而保留小數(shù)位。

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

        浪費(fèi)比較長的時(shí)間……)
        如有問題,歡迎指正。

                                                        --2020.7.28 ZIQ

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

所有資料51hei提供下載:
51單片機(jī)驅(qū)動(dòng)AHT10溫濕度傳感器.zip (3.71 MB, 下載次數(shù): 304)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:59363 發(fā)表于 2020-9-1 09:23 | 只看該作者
我也是根據(jù)這個(gè)改的,沒讀出數(shù)據(jù),希望你這個(gè)能行
回復(fù)

使用道具 舉報(bào)

板凳
ID:293108 發(fā)表于 2020-9-15 13:29 | 只看該作者
很不錯(cuò),后期我也多上傳些程序給大家。
回復(fù)

使用道具 舉報(bào)

地板
ID:272119 發(fā)表于 2020-9-20 22:25 | 只看該作者
樓主,請(qǐng)問用你的AHT10驅(qū)動(dòng)代碼讀數(shù)非正常跳動(dòng),溫度在吹口氣數(shù)值升到250+攝氏度緩慢回到10-50一個(gè)大致穩(wěn)定數(shù)字,濕度從0到1000%一直非規(guī)則跳變.這是第一個(gè)驅(qū)動(dòng)了芯片的代碼,終于看到了些許希望,謝謝!
回復(fù)

使用道具 舉報(bào)

5#
ID:272119 發(fā)表于 2020-9-20 22:30 | 只看該作者
附件是我用STC15W408AS驅(qū)動(dòng) 0.91寸OLED的全部代碼.目前還是AHT10沒有完整驅(qū)動(dòng)起來,但芯片是工作了的,因?yàn)樽x數(shù)隨溫度變化很靈敏變化,只是讀數(shù)不是準(zhǔn)確的.

Keil 5 工程.rar

82.88 KB, 下載次數(shù): 29, 下載積分: 黑幣 -5

STC15W408AS驅(qū)動(dòng) 0.91寸OLED的全部代碼

回復(fù)

使用道具 舉報(bào)

6#
ID:784607 發(fā)表于 2020-12-19 13:33 | 只看該作者
為什么我燒了 也接了線沒反應(yīng)
回復(fù)

使用道具 舉報(bào)

7#
ID:138247 發(fā)表于 2021-1-22 18:55 | 只看該作者

謝謝樓主分享,正在搞這個(gè)傳感器。。。
回復(fù)

使用道具 舉報(bào)

8#
ID:482246 發(fā)表于 2022-4-10 17:19 | 只看該作者
溫度值大概是對(duì)的,較穩(wěn)定 ,但濕度總是從60多遞減到0附近又從60多遞減
回復(fù)

使用道具 舉報(bào)

9#
ID:218360 發(fā)表于 2022-6-8 16:38 | 只看該作者
下載學(xué)習(xí)下看看,按照這個(gè)寫下CHT8305溫濕度
回復(fù)

使用道具 舉報(bào)

10#
無效樓層,該帖已經(jīng)被刪除
11#
ID:1070668 發(fā)表于 2023-4-16 10:36 | 只看該作者
做好了

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

055.jpg
回復(fù)

使用道具 舉報(bào)

12#
ID:933399 發(fā)表于 2024-1-12 20:07 | 只看該作者


謝謝樓主分享,正在搞這個(gè)傳感器。。。
回復(fù)

使用道具 舉報(bào)

13#
ID:160746 發(fā)表于 2024-12-16 16:23 | 只看該作者
希望這個(gè)有用
回復(fù)

使用道具 舉報(bào)

14#
ID:160746 發(fā)表于 2024-12-16 16:23 | 只看該作者
下載下來測試下,看看有沒有用
回復(fù)

使用道具 舉報(bào)

15#
無效樓層,該帖已經(jīng)被刪除

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表