求助!关于独立按键检测的问题(问题解决了,但是疑问还在)
本帖最后由 ly1350 于 2024-2-28 09:35 编辑我用8H8K64U的P3.2口,连接按键到地,想通过程序读取P3.2口的状态,来控制变量f,我写的语句如下:
void main()
{
uchar i=0,f=0;
P3M0 &= ~0x04; P3M1 &= ~0x04; //设置P32为标准io口
EX0=0;
P32=1;
Timer1_Init();
while(1)
{
if(P32==0)
{
// Delay10ms(); 去掉这个语句,程序运行正常,加上后就死机;在uv4里调试,进入软件延时函数里的循环,电脑就死机。
if(P32==0)
{
f++;
while(!P32);
}
}
if(f>=3) f=0;
。。。。。。
是按键检测的软件去抖思路有问题吗?请教大家,这个去抖该如何实现?
开始我怀疑是P32口触发了外部中断,已经将外部中断关了,问题依旧。
EX0=0;
【分享】按键程序,大道至简,按键扫描 + 累计主循环次数去抖动/不占用定时器 - I/O读写及点灯,外部中断 ,所有I/O都支持的普通I/O中断,按键扫描 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
不是你延时函数的问题?
jwd 发表于 2024-2-27 22:13
不是你延时函数的问题?
不是。软件延时函数是stc工具生成的。我用了2个,一个是1ms的,用来刷新数码管,去残影;一个是10ms,用来软件除抖。
不调用延时函数,运行是正常的,就是视频上那样;
只要加上延时函数,程序就死了。
我也换成调用1ms的试过,问题依旧。1ms在数码管刷新里也调用了,没问题。
说明问题不在延时函数本身。不知道是不是这种去抖思路有问题。 神农鼎 发表于 2024-2-27 21:19
【分享】按键程序,大道至简,按键扫描 + 累计主循环次数去抖动/不占用定时器 - I/O读写及点灯,外部中断 ...
这个我要好好学习一下。
我的这种处理办法,以前学stc89c52时候,是没有问题的。不知道现在问题出在哪里。
这个是stc的工具生成的软件延时函数
void Delay10ms(void) //@24.000MHz
{
unsigned char data i, j;
i = 234;
j = 115;
do
{
while (--j);
} while (--i);
} 代码能全发出来么?不全不好找问题啊 晚点我给你发一个好的按键检测函数{:lol:} 昨日菜鸟 发表于 2024-2-28 08:05
试验一一下延时正常吗
确定是正常的