标题: 单片机采集按键高电平问题 [打印本页]

作者: 大山黑科技    时间: 2018-6-30 11:13
标题: 单片机采集按键高电平问题
这个按键设计的单片机是STM8,按键的一端接到单片机强推挽输出高电平快速输出上,另一端接到浮空输入上,浮空输入后下拉电阻。通过浮空输入读取电平状态来判断按键。硬件我用万用表测试电平可以正常输出IO无问题。只是强推挽输出的高电平接近5V。程序采用 主循环循环扫描是否IO为1。现在出现的问题是,当按键按下后,这个函数无法正常运行。也就是仿真的时候进不去。 后将程序中的==1改成>0才能正常运行。不知为什么。请大家指点

YFM4SYE4G}S]{B`I%DL8.png (4.18 KB, 下载次数: 50)

YFM4SYE4G}S]{B`I%DL8.png

作者: zyzhyue    时间: 2018-6-30 14:09
请检查你的KEYPORT1的定义。
是bit吗?
如果不是,甚至,如果它是口寄存器的话,显然不可能对的,因为那包含了多个位。
哪怕是bit,也未必对,取决于该C编译器的处理规则。
假设是系统定义的 bit 口,比如PA.0吧,常见的写法也应该是:
if( KEYPORT1 )
而不写
if( KEYPROT1 ==1 )
哪怕单纯从效率考虑呢
作者: qidiao007    时间: 2018-6-30 14:44
这个是按键程序吗?
作者: qidiao007    时间: 2018-6-30 14:45
你的口线是进行的位定义吗?
作者: 大山黑科技    时间: 2018-6-30 14:53
zyzhyue 发表于 2018-6-30 14:09
请检查你的KEYPORT1的定义。
是bit吗?
如果不是,甚至,如果它是口寄存器的话,显然不可能对的,因为那 ...

你好,使用的宏 #define KEYPORT1  GPIO_ReadInputPin(GPIOB, GPIO_PIN_4)
作者: 大山黑科技    时间: 2018-6-30 15:07
zyzhyue 发表于 2018-6-30 14:09
请检查你的KEYPORT1的定义。
是bit吗?
如果不是,甚至,如果它是口寄存器的话,显然不可能对的,因为那 ...

确实如你所说,改成if(KEYPORT1)也是可以的。但是if(KEYPORT1==1)为什么不好使那
作者: 大山黑科技    时间: 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。请大家帮帮忙。为什么是整组的值
作者: mdjwbw    时间: 2018-6-30 16:22
学习一下
作者: lxd411468700    时间: 2018-6-30 18:00
要看下你写的IO配置,是不是配置为上拉输入或者下拉输入
作者: 大山黑科技    时间: 2018-7-1 05:46
lxd411468700 发表于 2018-6-30 18:00
要看下你写的IO配置,是不是配置为上拉输入或者下拉输入

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1