OpenEdv-开源电子网

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

两个类似的函数为什么只能执行一个

[复制链接]

10

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
249
金钱
249
注册时间
2016-9-15
在线时间
48 小时
发表于 2019-5-19 10:14:22 | 显示全部楼层 |阅读模式
2金钱
自己写了两个类似的按键扫描函数,函数名不一样(函数1和函数2),然后都放在主函数的死循环里面。如果函数体1在函数体2的前面,那么函数2就不执行了;相反,如果函数体2在函数体1的前面,那么函数1就不执行了。这是什么情况??????     工程在附件里面,两个函数分别为u8 Scan_Key(void) 和u8 Scan_Key_2(void),都在TM1650.c文件里面!

project.rar

5.03 MB, 下载次数: 8

最佳答案

查看完整内容[请看2#楼]

已解决,我把IIC初始化函数里面的两组IIC数据线和时钟线交换了一下位置就可以了,也不知道到底为什么这样就可以了!
回复

使用道具 举报

10

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
249
金钱
249
注册时间
2016-9-15
在线时间
48 小时
 楼主| 发表于 2019-5-19 10:14:23 | 显示全部楼层
已解决,我把IIC初始化函数里面的两组IIC数据线和时钟线交换了一下位置就可以了,也不知道到底为什么这样就可以了!
回复

使用道具 举报

25

主题

1587

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
3001
金钱
3001
注册时间
2018-5-11
在线时间
544 小时
发表于 2019-5-19 10:36:15 | 显示全部楼层
你怎么知道它没有执行呢?
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

10

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
249
金钱
249
注册时间
2016-9-15
在线时间
48 小时
 楼主| 发表于 2019-5-19 10:47:20 | 显示全部楼层
warship 发表于 2019-5-19 10:36
你怎么知道它没有执行呢?

我就是在开发板上试的,只要把函数体1放到前面,这个扫描函数就有用,然后2就没用;就是这个意思,那个“执行”一词用的不是太好,不要介意;仿真是都可以运行到。
回复

使用道具 举报

10

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
249
金钱
249
注册时间
2016-9-15
在线时间
48 小时
 楼主| 发表于 2019-5-19 10:47:46 | 显示全部楼层
warship 发表于 2019-5-19 10:36
你怎么知道它没有执行呢?

我就是在开发板上试的,只要把函数体1放到前面,这个扫描函数就有用,然后2就没用;就是这个意思,那个“执行”一词用的不是太好,不要介意;仿真是都可以运行到。
回复

使用道具 举报

25

主题

1587

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
3001
金钱
3001
注册时间
2018-5-11
在线时间
544 小时
发表于 2019-5-19 12:14:17 | 显示全部楼层
本帖最后由 warship 于 2019-5-19 12:16 编辑

我没有深入了解你用的这个键扫芯片,
一般这种芯片调用时就会读取按键,
连续两次调用类似的函数,
只有第一个有按键结果也是正常的。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

10

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
249
金钱
249
注册时间
2016-9-15
在线时间
48 小时
 楼主| 发表于 2019-5-19 18:51:22 | 显示全部楼层
warship 发表于 2019-5-19 12:14
我没有深入了解你用的这个键扫芯片,
一般这种芯片调用时就会读取按键,
连续两次调用类似的函数,

这款芯片是TM1650,可以驱动数码管,也可以通过指令读取扫描到的按键。是用IIC总线通信的,如果是你说的那种情况,那怎么解决啊?
回复

使用道具 举报

25

主题

1587

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
3001
金钱
3001
注册时间
2018-5-11
在线时间
544 小时
发表于 2019-5-19 20:08:53 | 显示全部楼层
shichuang 发表于 2019-5-19 18:51
这款芯片是TM1650,可以驱动数码管,也可以通过指令读取扫描到的按键。是用IIC总线通信的,如果是你说的 ...

类似的读键函数只执行一次不就行了么?
干嘛要同时执行两次?
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

10

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
249
金钱
249
注册时间
2016-9-15
在线时间
48 小时
 楼主| 发表于 2019-5-19 20:41:18 | 显示全部楼层
warship 发表于 2019-5-19 20:08
类似的读键函数只执行一次不就行了么?
干嘛要同时执行两次?

是这样的,我这个是用了IIC通信,然后想把两个按键扫描模块分别挂在IIC上,但是这两个模块的地址是一样的,就只能用两组IIC分别与他们通信,也就有了两个按键扫描模块。
回复

使用道具 举报

25

主题

1587

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
3001
金钱
3001
注册时间
2018-5-11
在线时间
544 小时
发表于 2019-5-19 20:46:38 | 显示全部楼层
IIC是靠地址分开的,
不同的IIC芯片必须设置成不同的地址才能分开寻址。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

10

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
249
金钱
249
注册时间
2016-9-15
在线时间
48 小时
 楼主| 发表于 2019-5-19 21:45:23 | 显示全部楼层
warship 发表于 2019-5-19 20:46
IIC是靠地址分开的,
不同的IIC芯片必须设置成不同的地址才能分开寻址。

对啊,所以才用了两个IIC接口嘛,只是函数名称不一样,里面的功能都是一样的,这样也就可以实现分别操作不同的从机
回复

使用道具 举报

25

主题

1587

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
3001
金钱
3001
注册时间
2018-5-11
在线时间
544 小时
发表于 2019-5-19 22:26:07 | 显示全部楼层
shichuang 发表于 2019-5-19 21:45
对啊,所以才用了两个IIC接口嘛,只是函数名称不一样,里面的功能都是一样的,这样也就可以实现分别操作 ...

一定要有两个地址
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

4

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2019-5-5
在线时间
11 小时
发表于 2019-5-19 22:54:00 | 显示全部楼层
会不会是芯片执行太快,其实两个函数都运行了,但是检测的按键状态都一样,或者是你按键消抖的原因,没有看,建议仅供参考
回复

使用道具 举报

10

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
249
金钱
249
注册时间
2016-9-15
在线时间
48 小时
 楼主| 发表于 2019-5-20 09:30:59 | 显示全部楼层
warship 发表于 2019-5-19 22:26
一定要有两个地址

是有两个地址啊,不过这两个模块我是直接从网上买的,地址也固定了,都是一样的,接到一个IIC接口上的话,那每次两个模块显示的数据肯定是一样的,接到两个IIC的话,就可以分别操作两个模块了嘛!
回复

使用道具 举报

10

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
249
金钱
249
注册时间
2016-9-15
在线时间
48 小时
 楼主| 发表于 2019-5-20 09:36:26 | 显示全部楼层
MXA 发表于 2019-5-19 22:54
会不会是芯片执行太快,其实两个函数都运行了,但是检测的按键状态都一样,或者是你按键消抖的原因,没有看 ...

它这个芯片只要跟它发送指令就行,其它的消抖的不用考虑,内部硬件都处理好了。至于按键检测到一样,我觉得应该也不像,因为我用的是两个IIC接口分别与两个数码显示模块相接,然后分别通过这两个IIC接口扫描按键,我每次都是按一个按键,但就是有一个模块的按键用不了,,,,,,,,,,,
回复

使用道具 举报

10

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
249
金钱
249
注册时间
2016-9-15
在线时间
48 小时
 楼主| 发表于 2019-5-20 09:36:55 | 显示全部楼层
MXA 发表于 2019-5-19 22:54
会不会是芯片执行太快,其实两个函数都运行了,但是检测的按键状态都一样,或者是你按键消抖的原因,没有看 ...

它这个芯片只要跟它发送指令就行,其它的消抖的不用考虑,内部硬件都处理好了。至于按键检测到一样,我觉得应该也不像,因为我用的是两个IIC接口分别与两个数码显示模块相接,然后分别通过这两个IIC接口扫描按键,我每次都是按一个按键,但就是有一个模块的按键用不了,,,,,,,,,,,
回复

使用道具 举报

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

本版积分规则



关闭

正点原子STM32/FPGA资料免费下载上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2019-6-27 18:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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