完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
问题描述
由于近期需要做一个项目,想通过四个按键来控制液晶屏显示四个界面的显示,采用的主函数的控制代码如下: // 四个按键控制四个界面显示 while(1) { if(KEY1 == KEY_ON) { SysTick_Delay_Ms(100); JLX19264G_ClearScreen();//清屏 SysTick_Delay_Ms(100); display_graphic_192x64(bmp1);//显示图片1 } if(KEY2 == KEY_ON) { SysTick_Delay_Ms(100); JLX19264G_ClearScreen(); SysTick_Delay_Ms(100); display_graphic_192x64(bmp2); } if(KEY3 == KEY_ON) { SysTick_Delay_Ms(100); JLX19264G_ClearScreen(); SysTick_Delay_Ms(100); display_graphic_192x64(bmp3); } if(KEY4 == KEY_ON) { SysTick_Delay_Ms(100); JLX19264G_ClearScreen(); SysTick_Delay_Ms(100); display_graphic_192x64(bmp4); } } 按照逻辑,当我按下任意键时显示的应该是对应的画面才对,但实际的效果是当我按下KEY1,出现第一个画面,这时我再按下KEY3,第三个画面并没有显示出来,但是按下KEY2,第二个画面可以显示出来。经过多次按下测试,发现四个按键只能顺序按下才能显示四个画面,也就是: KEY1-画面1-KEY2-画面2-KEY3-画面3-KEY4-画面4-KEY1-画面1-.... 这就很奇怪,主函数C语言语法应该不会有错,那么就只可能在按键扫描函数那里出现错误。 按键扫描函数 uint16_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin) { /*检测是否有按键按下 */ if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON ) { /*等待按键释放 */ while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON); return KEY_ON; } else return KEY_OFF; } 结果发现:按键检测函数也没有什么问题,所以只能进行代码调试了。 解决方法 首先判断出主函数的一个while+四个if是没有问题的,接下来就是对按键扫描函数进行调试,在函数中加入printf进行打印信息,看看代码的执行过程: uint16_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin) { printf("1"); /*检测是否有按键按下 */ if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON ) { printf("2"); /*等待按键释放 */ while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON); printf("3"); return KEY_ON; } else return KEY_OFF; } 测试发现:按KEY1后,串口输出:312,按照正常的逻辑,调用扫描函数,应该打印的是123。所以说明当按键按下时, GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON根本没执行,而是在松开按键时才执行的,这样其实问题就浮现出最根本的面目了,此按键低电平触发 解决方法也很简单,将宏定义中 #define KEY_ON 1 改成 #define KEY_ON 0 即可解决问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
3209 浏览 9 评论
2896 浏览 16 评论
3402 浏览 1 评论
8845 浏览 16 评论
3997 浏览 18 评论
9628浏览 3评论
1007浏览 3评论
521浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
524浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2251浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-2 20:19 , Processed in 0.927561 second(s), Total 77, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号