找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3594|回复: 9
收起左侧

单片机采集按键高电平问题

[复制链接]
ID:213619 发表于 2018-6-30 11:13 | 显示全部楼层 |阅读模式
这个按键设计的单片机是STM8,按键的一端接到单片机强推挽输出高电平快速输出上,另一端接到浮空输入上,浮空输入后下拉电阻。通过浮空输入读取电平状态来判断按键。硬件我用万用表测试电平可以正常输出IO无问题。只是强推挽输出的高电平接近5V。程序采用 主循环循环扫描是否IO为1。现在出现的问题是,当按键按下后,这个函数无法正常运行。也就是仿真的时候进不去。 后将程序中的==1改成>0才能正常运行。不知为什么。请大家指点
YFM4SYE4G}S]{B`I%DL8.png
回复

使用道具 举报

ID:335709 发表于 2018-6-30 14:09 | 显示全部楼层
请检查你的KEYPORT1的定义。
是bit吗?
如果不是,甚至,如果它是口寄存器的话,显然不可能对的,因为那包含了多个位。
哪怕是bit,也未必对,取决于该C编译器的处理规则。
假设是系统定义的 bit 口,比如PA.0吧,常见的写法也应该是:
if( KEYPORT1 )
而不写
if( KEYPROT1 ==1 )
哪怕单纯从效率考虑呢

评分

参与人数 1黑币 +90 收起 理由
admin + 90 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:258676 发表于 2018-6-30 14:44 | 显示全部楼层
这个是按键程序吗?
回复

使用道具 举报

ID:258676 发表于 2018-6-30 14:45 | 显示全部楼层
你的口线是进行的位定义吗?
回复

使用道具 举报

ID:213619 发表于 2018-6-30 14:53 | 显示全部楼层
zyzhyue 发表于 2018-6-30 14:09
请检查你的KEYPORT1的定义。
是bit吗?
如果不是,甚至,如果它是口寄存器的话,显然不可能对的,因为那 ...

你好,使用的宏 #define KEYPORT1  GPIO_ReadInputPin(GPIOB, GPIO_PIN_4)
回复

使用道具 举报

ID:213619 发表于 2018-6-30 15:07 | 显示全部楼层
zyzhyue 发表于 2018-6-30 14:09
请检查你的KEYPORT1的定义。
是bit吗?
如果不是,甚至,如果它是口寄存器的话,显然不可能对的,因为那 ...

确实如你所说,改成if(KEYPORT1)也是可以的。但是if(KEYPORT1==1)为什么不好使那
回复

使用道具 举报

ID:213619 发表于 2018-6-30 15:27 | 显示全部楼层
愿意出来了。通过打印变量的值查看返回的是0x10。将整IO的值进行返回的。#define KEYPORT1  GPIO_ReadInputPin(GPIOB, GPIO_PIN_4)位置正好。但是BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin);  这个库的返回值是bit。请大家帮帮忙。为什么是整组的值

评分

参与人数 1黑币 +60 收起 理由
admin + 60 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:362338 发表于 2018-6-30 16:22 | 显示全部楼层
学习一下
回复

使用道具 举报

ID:362379 发表于 2018-6-30 18:00 | 显示全部楼层
要看下你写的IO配置,是不是配置为上拉输入或者下拉输入
回复

使用道具 举报

ID:213619 发表于 2018-7-1 05:46 | 显示全部楼层
lxd411468700 发表于 2018-6-30 18:00
要看下你写的IO配置,是不是配置为上拉输入或者下拉输入

是的,都是用的宏定义。浮空输入采集,平时是低电平的。强推挽拉高采集高电平。说白了是按键的逆使用

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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