使用数码管显示DHT22传感器数据时无法正常读数据

2019-07-21 05:56发布

本帖最后由 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]


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。