如果用8个DHT11采集数据除了将dht11.c中的函数用不同的端口写八遍之外有没有其他的间接方法?

2019-07-21 02:57发布

总是感觉将这几个函数重复八遍有点冗余
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
花戒
2019-07-21 07:17
DHT11固定在比如PG口高8位,例程改为(STM32F1的例程,没有F3/F4开发板,不过估计也没多大区别)

//IO方向设置
#define DHT11_IO_IN(n)  {GPIOG->CRH&=(~0XF<<((n-8)*4));GPIOG->CRH|=8<<((n-8)*4);}
#define DHT11_IO_OUT(n) {GPIOG->CRH&=(~0XF<<((n-8)*4));GPIOG->CRH|=3<<((n-8)*4);}
////IO操作函数    
#define DHT11_DQ_OUT(n) Gout(n) //数据端口 PGn
#define DHT11_DQ_IN(n)  Gin(n)  //数据端口 PGn

 程序里面要相应修改,每个函数都要加一个代表端口的参数 int8u n,比如:
void DHT11_Rst(void)     要修改成:
void DHT11_Rst(int8u n)    
{                 
DHT11_IO_OUT(n);  //SET OUTPUT
        DHT11_DQ_OUT(n)=0;  //拉低DQ
        delay_ms(20);     //拉低至少18ms
        DHT11_DQ_OUT(n)=1;  //DQ=1 
delay_us(30);      //主机拉高20~40us
}

一周热门 更多>