请教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条回答
xia缘梦
1楼-- · 2019-08-21 22:16
你可以按照自己的理解来编写延时,我也是借鉴前辈们的,后面注释就没改了,不好意思。原本的意思是t的倍数才读取温度,不是的话就执行其他程序,这样就相当于延时了。你只要采样间隔不小于100MS就可以了。
xia缘梦
2楼-- · 2019-08-22 02:45
 精彩回答 2  元偷偷看……
struggling泉
3楼-- · 2019-08-22 04:07
哦哦,好的,谢谢了哈
xia缘梦
4楼-- · 2019-08-22 09:37
回复【16楼】struggling泉:
---------------------------------
客气了,互相学习。
zyjjlin
5楼-- · 2019-08-22 11:44
把LCD_ShowNum函数加到12864.c程序中就出现了这种错,请问哪里出错了
爱她就要努力
6楼-- · 2019-08-22 16:29
zyjjlin 发表于 2016-4-25 12:18
把LCD_ShowNum函数加到12864.c程序中就出现了这种错,请问哪里出错了

您解决了么?

一周热门 更多>