请教stm32+12864+dht11显示问题?

2019-08-20 16:06发布

各位大神,本人菜鸟一枚,刚学习stm32,现在有一个问题请教各位大神,我已经调了好多天都没有找到问题的所在:

问题:
       在LCD12864显示温湿度的数据时,显示的本来是两位数,但是后面总会多出一位数4,不知道什么原因,请大神指教,谢谢。






主程序:

int main(void) { u8 t=0;    u8 temperature,humidity;
SystemInit(); //系统初始化 delay_init(72);     //延时初始化   NVIC_Configuration();   LCD12864_InitPort();   LCD12864_Init(); while(DHT11_Init()) //DHT11初始化 { LCD_ShowString(1,0,"DHT11 Error"); delay_ms(200); }    LCD_ShowString(1,0,"DHT11 OK"); while(1) { if(t%10==0)//每100ms读取一次 {   DHT11_Read_Data(&temperature,&humidity); //读取温湿度值 //WriteCmd(0x98); LCD12864_Pos(2,0); LCD_ShowNum(temperature); delay_ms(200); LCD12864_Pos(3,0); LCD_ShowNum(humidity);    }    delay_ms(10); t++; if(t==20) { t=0; } }

}
LCD_ShowNum函数


void LCD_ShowNum(int num)  //显示整型变量的函数,最多显示16位的整数。只能显示正数。 { u8 temp[17]; u8 str[17]; int i=0,j=0; while(num != 0)  //这里不能用num%10 != 0,如果num是10的整数倍,                  //例如,100,这样就会出错,根本就不能进入循环体。 { temp = (num%10)+0x30; num/=10; i++; } i--;           //因为i在退出循环之前还自加了一次,此时,                //指向最后一个存储有用值的元素的后一个位置。 while(i != -1) //因为i=0时,temp[0]还是有用值。 { str[j] = temp; j++; i--; } str[j]='';  //因为i在退出循环之前还自加了一次,此时,              //指向最后一个存储有用值的元素的后一个位置。 DisStr(str); }



















友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
struggling泉
1楼-- · 2019-08-21 07:18
回复【7楼】xia缘梦:
------------------------------哦哦 谢谢
struggling泉
2楼-- · 2019-08-21 11:15
怎么你分享的和你的源程序不一样啊
xia缘梦
3楼-- · 2019-08-21 15:50
 精彩回答 2  元偷偷看……
struggling泉
4楼-- · 2019-08-21 19:53
回复【10楼】xia缘梦:
---------------------------------
哦 我想问下你   我的温湿度显示一直不变是怎么回事啊?难道是DHT11的时序有问题了?
xia缘梦
5楼-- · 2019-08-21 21:40
回复【11楼】struggling泉:
---------------------------------
如果硬件没问题的话就要检查程序了,DHT11对时序要求是很高,而且温度转换需要时间的,所以我都是延时100MS才读的,你在好好检查下。自我感觉DHT11模块不是那么的好用。
struggling泉
6楼-- · 2019-08-21 21:43
我觉得就是延时100MS那个地方有问题,你那个if(t%10==0)怎么会延时到100MS啊

一周热门 更多>