OpenEdv-开源电子网

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

新手求助

[复制链接]

3

主题

12

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-7-20
在线时间
11 小时
发表于 2017-8-1 11:18:54 | 显示全部楼层 |阅读模式
10金钱
为什么我按键按下去加一  液晶先显示1 然后会跳回0  并且也只能加到1 我设置的上限是15

捕获.PNG
捕获1.PNG
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
307
金钱
307
注册时间
2016-10-20
在线时间
64 小时
发表于 2017-8-1 14:03:33 | 显示全部楼层
仿真看看你的程序进没进下面的if语句里
回复

使用道具 举报

0

主题

145

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
366
金钱
366
注册时间
2017-6-19
在线时间
55 小时
发表于 2017-8-1 14:54:39 | 显示全部楼层
你自己加了又减
回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-7-20
在线时间
11 小时
 楼主| 发表于 2017-8-1 17:15:02 | 显示全部楼层
hasaki 发表于 2017-8-1 14:03
仿真看看你的程序进没进下面的if语句里

有啊 他是会加一的
回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-7-20
在线时间
11 小时
 楼主| 发表于 2017-8-1 17:15:30 | 显示全部楼层
jokeym 发表于 2017-8-1 14:54
你自己加了又减

我是按下按键才减的啊
回复

使用道具 举报

0

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2017-8-1
在线时间
21 小时
发表于 2017-8-1 17:42:50 | 显示全部楼层
有可能自己初始化了  
回复

使用道具 举报

0

主题

145

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
366
金钱
366
注册时间
2017-6-19
在线时间
55 小时
发表于 2017-8-1 18:03:37 | 显示全部楼层
你自己看看第一张图里else
第一个LCD_ShowString显示PresetVol应该正确(PresetVol=1)
你Temp_PresetVol = PresetVol
第二个LCD_ShowString显示你Temp_PresetVol应该正确(Temp_PresetVol=1)
但是你 PresetVol-=Temp_PresetVol(PresetVol=0)

所以显示没毛病 是你自己逻辑乱了

回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-7-20
在线时间
11 小时
 楼主| 发表于 2017-8-1 20:16:30 | 显示全部楼层
jokeym 发表于 2017-8-1 18:03
你自己看看第一张图里else
第一个LCD_ShowString显示PresetVol应该正确(PresetVol=1)
你Temp_PresetVol = ...

可是我第最后一个显示是显示小数部分啊  倒数第二个是显示整数部分  Temp_PresetVol是u8
PresetVol是float
回复

使用道具 举报

7

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2017-4-6
在线时间
67 小时
发表于 2017-8-1 20:46:54 | 显示全部楼层
你问了两个问题:
1.  LCD显示为什么先变成1,再变成0
2.  LCD为什么最多显示到1

这里7楼其实已经给出了正确答案,因为PresetVol在触发变成1后,又被你做了减法处理。跟你定义的类型没有关系,因为它就是0,在下一次你再调用图片1中的程序时,LCD会再次使用PresetVol这个值显示,即0.
回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-7-20
在线时间
11 小时
 楼主| 发表于 2017-8-1 22:22:48 | 显示全部楼层
JUSTNIUB 发表于 2017-8-1 20:46
你问了两个问题:
1.  LCD显示为什么先变成1,再变成0
2.  LCD为什么最多显示到1

浮点数赋值给整形 只是将整数部分赋给他而已啊 然后我浮点型减掉整数部分就是小数部分啊 没有错啊
回复

使用道具 举报

7

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2017-4-6
在线时间
67 小时
发表于 2017-8-2 08:52:48 | 显示全部楼层
438109376 发表于 2017-8-1 22:22
浮点数赋值给整形 只是将整数部分赋给他而已啊 然后我浮点型减掉整数部分就是小数部分啊 没有错啊

你调用了几次LCD显示函数?怎么调用的?
在调用期间PresetVol是怎么变化的?
你第一张图片里的整个函数你调用了几次?
在调用期间PresetVol是怎么变化的?

在其他地方PresetVol有变化吗?
你的取小数的算法做得非常棒,但你用错了。

回复

使用道具 举报

0

主题

145

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
366
金钱
366
注册时间
2017-6-19
在线时间
55 小时
发表于 2017-8-2 09:48:08 | 显示全部楼层
自己还不理解
你自己打断点仿一下咯
回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-7-20
在线时间
11 小时
 楼主| 发表于 2017-8-2 09:59:57 | 显示全部楼层
JUSTNIUB 发表于 2017-8-2 08:52
你调用了几次LCD显示函数?怎么调用的?
在调用期间PresetVol是怎么变化的?
你第一张图片里的整个函数 ...

我懂了 在最后加个PresetVol+=Temp_PresetVol就行了 这样就可以正常加减了  但是我如果改成按键按下加1.1这种有小数的 数值开始乱跳 跳到七八十 最后变回0.00  还比我原本少了一个0   一开始是0.000
回复

使用道具 举报

10

主题

172

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1479
金钱
1479
注册时间
2016-1-25
在线时间
260 小时
发表于 2017-8-2 10:05:43 | 显示全部楼层
单从你贴上来的代码看的话   你说的情况其实就是你程序写的那样。你自己好好看看你写显示的那部分代码。像七楼说的那样
第一个LCD_ShowString显示PresetVol应该正确(PresetVol=1)
你Temp_PresetVol = PresetVol
第二个LCD_ShowString显示你Temp_PresetVol应该正确(Temp_PresetVol=1)
但是你 PresetVol-=Temp_PresetVol(PresetVol=0)
所以你第一次显示的话是1,然后在一次执行的话就变成0.除非你把程序改成  每按一次按键才刷新一次显示。
回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-7-20
在线时间
11 小时
 楼主| 发表于 2017-8-2 10:12:06 | 显示全部楼层
438109376 发表于 2017-8-2 09:59
我懂了 在最后加个PresetVol+=Temp_PresetVol就行了 这样就可以正常加减了  但是我如果改成按键按下加1.1 ...

PresetVol/=1000;
PresetVol+=Temp_PresetVol;
要在最后加上这两句  
回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-7-20
在线时间
11 小时
 楼主| 发表于 2017-8-2 10:12:23 | 显示全部楼层
谢谢大家了!!万分感谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-20 06:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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