完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
各位大大,本人在STM32上使用ucgui+ucos编写程序,在使用按钮的时候,发现点击按钮,GUI_GetKey()无法得到按钮ID(偶尔一次可以得到)。程序代码如下:
void MainTask(void) { GUI_Init(); while(1) { //WM_Exec1(); APP_main(); } } void APP_main(void)//用户主函数 { GUI_Clear(); while(1) { _Menu(); OStimeDlyHMSM(0,0,0,20);//按时分秒延时函数 } } static void _Menu(void) { BUTTON_Handle hM1, hM2;//hM3, hM4; int sKey; static u8 Kf1=0, Kf2=0; GUI_RECT rText = {340,8, 460,24}; GUI_SetBkColor(GUI_BLACK); GUI_SetColor(GUI_LIGHTGRAY); GUI_SetFont( amp;GUI_Font16_ASCII); GUI_DispStringInRect( quot;CH1 quot;, amp;rText, GUI_TA_VCENTER|GUI_TA_HCENTER); hM1 = BUTTON_Create( 340, 26, 120, 25, 1, BUTTON_CF_SHOW ); BUTTON_SetText(hM1, quot;通道选择 quot;); BUTTON_SetFont(hM1, amp;GUI_FontHZ_SimHei_19); BUTTON_SetBkColor(hM1, 0, GUI_DARKGRAY); BUTTON_SetTextColor(hM1, 0, GUI_WHITE); hM2 = BUTTON_Create( 340, 76, 120, 25, 2, BUTTON_CF_SHOW ); BUTTON_SetText(hM2, quot;探头 quot;); BUTTON_SetFont(hM2, amp;GUI_FontHZ_SimHei_19); BUTTON_SetBkColor(hM2, 0, GUI_DARKGRAY); BUTTON_SetTextColor(hM2, 0, GUI_WHITE); WM_Exec();//WM_Exec1(); sKey = GUI_GetKey();获取按钮ID if(sKey==1){//按钮处理 if(Kf1==0) Kf1=1; else Kf1=0; } else if(sKey==2) { if(Kf2==0) Kf2=1; else Kf2=0; } rText.y0 = 52; rText.y1 = 75; GUI_SetFont( amp;GUI_FontHZ_SimHei_19); if(Kf1==0) GUI_DispStringInRect( quot;直流 quot;, amp;rText, GUI_TA_VCENTER|GUI_TA_HCENTER); else GUI_DispStringInRect( quot;交流 quot;, amp;rText, GUI_TA_VCENTER|GUI_TA_HCENTER); rText.y0 = 100; rText.y1 = 125; GUI_SetFont( amp;GUI_Font16_ASCII); if(Kf2==0) { GUI_GotoXY(360, 102); GUI_DispCEOL(); GUI_DispStringInRect( quot;X1 quot;, amp;rText, GUI_TA_VCENTER|GUI_TA_HCENTER); } else GUI_DispStringInRect( quot;X10 quot;, amp;rText, GUI_TA_VCENTER|GUI_TA_HCENTER); BUTTON_Delete(hM1); BUTTON_Delete(hM2); } |
|
相关推荐
1个回答
|
|
从您提供的代码片段来看,问题可能出在以下几个方面:
1. 事件处理:确保您已经正确地为按钮设置了事件处理函数。在ucgui中,您需要使用 WM_SetCallback() 函数为按钮设置回调函数,以便在按钮被点击时执行相应的操作。 ```c WM_SetCallback(pButton, _ButtonCallback); ``` 2. 回调函数:确保您的回调函数能够正确处理按钮点击事件,并返回相应的按钮ID。以下是一个简单的回调函数示例: ```c void _ButtonCallback(WM_MESSAGE * pMsg) { switch (pMsg->MsgId) { case WM_PAINT: // 绘制按钮 break; case WM_TOUCHED: // 按钮被点击时的操作 // 这里可以获取按钮ID int buttonID = pMsg->Data.v; // 使用buttonID进行其他操作 break; default: // 其他消息处理 break; } } ``` 3. GUI_GetKey() 的使用:GUI_GetKey() 函数用于获取按键事件,而不是按钮点击事件。如果您想要获取按钮点击事件,应该使用 WM_TOUCHED 消息。请确保您正确地处理了 WM_TOUCHED 消息,而不是依赖 GUI_GetKey()。 4. 多任务调度:由于您使用了 uCOS 实时操作系统,确保您的任务调度是正确的。如果任务调度不正确,可能会导致事件处理不及时或丢失。 5. 延时问题:在您的代码中,您使用了 OSTimeDlyHMSM() 函数进行延时。请确保延时时间不会影响事件处理。如果延时过长,可能会导致事件处理不及时。 综上所述,您需要检查事件处理、回调函数、消息处理和任务调度等方面,以确保按钮点击事件能够被正确地捕获和处理。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1877 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1661 浏览 1 评论
1145 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
760 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1720 浏览 2 评论
1963浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
789浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
612浏览 3评论
629浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
591浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-12 03:29 , Processed in 1.003259 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号