OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8258|回复: 20

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

[复制链接]

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2013-12-25
在线时间
8 小时
发表于 2014-3-13 18:26:54 | 显示全部楼层 |阅读模式
各位大神,本人菜鸟一枚,刚学习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]='\0';  //因为i在退出循环之前还自加了一次,此时,
             //指向最后一个存储有用值的元素的后一个位置。
DisStr(str);
}




















正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2013-12-25
在线时间
8 小时
 楼主| 发表于 2015-1-7 20:35:55 | 显示全部楼层
有网友需要上面的程序,现在分享给大家,如有问题,请大家给予指正,谢谢。

STM32 DH11 12864.zip

6.03 MB, 下载次数: 6911

回复 支持 1 反对 0

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2013-12-25
在线时间
8 小时
 楼主| 发表于 2014-3-13 23:13:37 | 显示全部楼层
回复【楼主位】xia缘梦:
---------------------------------
奇怪,本来想晚上重新调试下程序,谁知道重新上电,又没有后面的4了,又显示正确了。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-13 23:54:29 | 显示全部楼层
呵呵
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-1-7 22:29:37 | 显示全部楼层
回复【4楼】xia缘梦:
---------------------------------
谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2015-10-7
在线时间
0 小时
发表于 2015-10-21 21:11:00 | 显示全部楼层
菜鸟有问,为什么我没有看到你的12864.h文件呢?
回复 支持 反对

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2013-12-25
在线时间
8 小时
 楼主| 发表于 2015-10-22 19:09:09 | 显示全部楼层
回复【6楼】struggling泉:
---------------------------------
有的啊,你就编译下就能找到了,也可以直接去文件夹里找啊。
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2015-10-7
在线时间
0 小时
发表于 2015-10-22 21:09:53 | 显示全部楼层
回复【7楼】xia缘梦:
------------------------------哦哦 谢谢
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2015-10-7
在线时间
0 小时
发表于 2015-10-29 21:40:59 | 显示全部楼层
怎么你分享的和你的源程序不一样啊
回复 支持 反对

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2013-12-25
在线时间
8 小时
 楼主| 发表于 2015-11-2 11:06:34 | 显示全部楼层
回复【9楼】struggling泉:
---------------------------------
就main函数里面有些不一样,我简化了一点,其他的是没有变的。因为我做的是一个小的项目,实现温湿度和12864显示的功能是从我那个项目剥离出来的。
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2015-10-7
在线时间
0 小时
发表于 2015-11-2 11:13:08 | 显示全部楼层
回复【10楼】xia缘梦:
---------------------------------
哦 我想问下你   我的温湿度显示一直不变是怎么回事啊?难道是DHT11的时序有问题了?
回复 支持 反对

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2013-12-25
在线时间
8 小时
 楼主| 发表于 2015-11-2 17:06:13 | 显示全部楼层
回复【11楼】struggling泉:
---------------------------------
如果硬件没问题的话就要检查程序了,DHT11对时序要求是很高,而且温度转换需要时间的,所以我都是延时100MS才读的,你在好好检查下。自我感觉DHT11模块不是那么的好用。
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2015-10-7
在线时间
0 小时
发表于 2015-11-2 17:42:29 | 显示全部楼层
我觉得就是延时100MS那个地方有问题,你那个if(t%10==0)怎么会延时到100MS啊
回复 支持 反对

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2013-12-25
在线时间
8 小时
 楼主| 发表于 2015-11-2 21:58:06 | 显示全部楼层
你可以按照自己的理解来编写延时,我也是借鉴前辈们的,后面注释就没改了,不好意思。原本的意思是t的倍数才读取温度,不是的话就执行其他程序,这样就相当于延时了。你只要采样间隔不小于100MS就可以了。
回复 支持 反对

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2013-12-25
在线时间
8 小时
 楼主| 发表于 2015-11-2 22:00:05 | 显示全部楼层
回复【13楼】struggling泉:
---------------------------------
你可以按照自己的理解来编写延时,我也是借鉴前辈们的,后面注释就没改了,不好意思。原本的意思是t的倍数才读取温度,不是的话就执行其他程序,这样就相当于延时了。你只要采样间隔不小于100MS就可以了。
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2015-10-7
在线时间
0 小时
发表于 2015-11-2 22:05:17 | 显示全部楼层
哦哦,好的,谢谢了哈
回复 支持 反对

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2013-12-25
在线时间
8 小时
 楼主| 发表于 2015-11-12 10:51:43 | 显示全部楼层
回复【16楼】struggling泉:
---------------------------------
客气了,互相学习。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-4-24
在线时间
6 小时
发表于 2016-4-25 12:18:26 | 显示全部楼层
把LCD_ShowNum函数加到12864.c程序中就出现了这种错,请问哪里出错了
1.png
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2016-4-26
在线时间
0 小时
发表于 2016-4-26 17:49:00 | 显示全部楼层
zyjjlin 发表于 2016-4-25 12:18
把LCD_ShowNum函数加到12864.c程序中就出现了这种错,请问哪里出错了

您解决了么?
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2020-4-29
在线时间
4 小时
发表于 2017-4-15 16:22:44 | 显示全部楼层
楼主咋硬件连接啊?
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2016-10-29
在线时间
13 小时
发表于 2017-4-27 19:47:59 | 显示全部楼层
为什么原子STM32 dht11程序中 DHT11_Init() 中初始化的是PG端口
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-21 20:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表