本帖最后由 q247341184 于 2017-8-23 20:40 编辑
基于原子哥的dht11例程修改代码,经测试没有错误和异常。移植数码管显示模块后也无异常,当在主函数读取温度模块后加入显示函数后,数据读取出现异常。无法正确读数,是指的从传感器传出来的数据是错的,用XCOM监控,用printf函数取值得到,具体如下面主函数部分。一开始推测是管脚冲突,经仔细检查后,排除管脚冲突原因。两个部分独立运行时是完好的,也排除代码异常问题。望指点一下思路, 还有什么原因可能导致这种情况的发生?
主函数的运行部分:
[mw_shl_code=c,true]
while(1)
{
if(t%10==0) //每100ms读取一次
{
DHT22_Read_Data(&temperature,&humidity); //读取温湿度值
printf("temp=%d!",temperature); //显示温度
printf("humidi=%d!",humidity); //显示湿度
DisPlayNum(temperature); //加入此行后数据读取异常
}
delay_ms(200);
t++;
} [/mw_shl_code]
显示函数:
[mw_shl_code=c,true]void DisPlayNum(int n)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能AFIO时钟
//由于PB4的功能就是GPIO,所以没有使能功能时钟
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE); //关闭JTRST,即开启重映射
for (i=0;i<4;i++)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7| //PB4-PB7是位选口
GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11| //PB8-PB15是段选口
GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15 );
switch (i) //位选数,,分别对应左数1、2、3、4
{
case 0:
GPIO_SetBits(GPIOB,GPIO_Pin_7);
break;
case 1:
GPIO_SetBits(GPIOB,GPIO_Pin_6);
break;
case 2:
GPIO_SetBits(GPIOB,GPIO_Pin_5);
break;
case 3:
GPIO_SetBits(GPIOB,GPIO_Pin_4);
break;
}
switch (a%10) //输出示数
{
case 0:
GPIO_SetBits(GPIOB,GPIO_Pin_14|GPIO_Pin_15); // 0
break;
case 1:
GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); // 1
break;
case 2:
GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_13|GPIO_Pin_15); // 2
break;
case 3:
GPIO_SetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_15); // 3
break;
case 4:
GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_15); // 4
break;
case 5:
GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_15); // 5
break;
case 6:
GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_15); // 6
break;
case 7:
GPIO_SetBits(GPIOB,GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); // 7
break;
case 8:
GPIO_SetBits(GPIOB,GPIO_Pin_15); // 8
break;
case 9:
GPIO_SetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_15); // 9
break;
case 10:
GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11| //负号
GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_15 );
break;
case 11:
GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11| //null
GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15 );
break;
}
s = s / 10; //此行放输出逻辑。
delay_ms(1);
} [/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>