完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
为什么用PD7做按键,第一次按程序是对的,第二次按程序就不对了,第三次按又对了,为什么呢?
程序如下: while (1) { static u16 c1=0; u8 i,j; if(btime) { KeyRead() ; if(Trg!=0x00) { i=Trg 0X88; } if(i == 0x80) { j = Cont 0x80; if(j==0x80) { c1++; btime = FALSE; if(c1>5000) { LED3_ON; }else { if(c1>2000) { LED2_ON;LED3_OFF; }else { if(c1>20) { LED1_ON;LED2_OFF;LED3_OFF; } } } }else{i=0;c1=0;j=0;} } if (i == 0x08) { LED1_OFF;LED2_OFF;LED3_OFF;i=0; } } } } void KeyRead(void) { unsigned char ReadData = PIND^0x88; // 1 Trg = ReadData (ReadData ^ Cont); // 2 Cont = ReadData; // 3 } |
|
相关推荐
2个回答
|
|
|
|
|
|
从您提供的代码片段来看,这是一个基于嵌入式系统的按键检测程序。程序的主要逻辑是在一个无限循环中检测按键状态,当检测到按键PD7被按下时,执行相应的操作。然而,您提到的问题可能是由于按键抖动、按键扫描频率或程序逻辑中的一些问题导致的。
1. 按键抖动:当按键被按下或释放时,由于机械接触的不稳定,按键的输入信号可能会在短时间内产生多次跳变。这可能导致程序误判按键状态,从而影响程序的正确执行。 解决方案:在按键检测逻辑中加入消抖处理。一种常见的方法是使用软件消抖,即在检测到按键状态变化后,稍作延时,再次检测按键状态,如果状态仍然相同,则认为按键状态稳定。 2. 按键扫描频率:如果按键扫描频率过低,可能导致按键状态的检测不准确。当按键被快速连续按下时,程序可能无法准确捕捉到每次按键事件。 解决方案:提高按键扫描频率,确保程序能够及时检测到按键状态的变化。 3. 程序逻辑问题:从您提供的代码片段来看,存在一些语法错误,如if语句中的条件判断缺少括号。这可能导致程序无法正确执行。 解决方案:修正程序中的语法错误,确保程序逻辑正确。 以下是修改后的代码示例: ```c while (1) { static u16 c1 = 0; u8 i, j; if (btime) { KeyRead(); if (Trg != 0x00) { i = Trg & 0X88; } if (i == 0x80) { // 按键PD7被按下时执行的操作 } } } ``` 请注意,这只是一个示例,您可能需要根据您的具体需求和硬件环境进行相应的调整。希望这些建议能帮助您解决问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1810 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1631 浏览 1 评论
1098 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
737 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1687 浏览 2 评论
1945浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
750浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
584浏览 3评论
604浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
568浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 13:03 , Processed in 0.914694 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号