OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6145|回复: 5

UCGUI触屏部分死机的问题

[复制链接]

19

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-11-24
在线时间
8 小时
发表于 2013-12-2 18:54:20 | 显示全部楼层 |阅读模式



现在BUTTON功能正常,RADIO部分,只要触到就死机了,CHECKBOX表面上能勾能空,但是有一个问题,GUI_ID_CHECK应该是放在WM_NOTIFICATION_VALUE_CHANGED消息下的,但是我把它放在WM_NOTIFICATION_VALUE_CHANGED下不能工作,我又尝试放在WM_NOTIFICATION_RELEASED下,能有点反应,但是也不正常工作。下面上代码,请会的人士分析一下,小弟感激万分啊

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-11-24
在线时间
8 小时
 楼主| 发表于 2013-12-2 19:00:31 | 显示全部楼层
u8 RadioValue;
u8 Checkbox;


static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
    { FRAMEWIN_CreateIndirect, "Setting",   0,                0,  0,  240,320,FRAMEWIN_CF_MOVEABLE,0},
    { RADIO_CreateIndirect,     0,       GUI_ID_RADIO0,    123,203,89, 48, 0,2},
    { CHECKBOX_CreateIndirect, "Voice Control",GUI_ID_CHECK0,    123,124,114,15, 0,0},
    { CHECKBOX_CreateIndirect, "DHT11",     GUI_ID_CHECK1,    123,77, 114,15, 0,0},
    { CHECKBOX_CreateIndirect, "HC-SR04",   GUI_ID_CHECK2,    123,30, 114,15, 0,0},
    { BUTTON_CreateIndirect,   "Direction", GUI_ID_BUTTON0,   18, 242,75, 27, 0,0},
    { BUTTON_CreateIndirect,   "Speed",     GUI_ID_BUTTON1,   18, 189,75, 27, 0,0},
    { BUTTON_CreateIndirect,   "State",     GUI_ID_BUTTON2,   18, 136,75, 27, 0,0},
    { BUTTON_CreateIndirect,   "OV7670",    GUI_ID_BUTTON3,   18, 83, 75, 27, 0,0},
    { BUTTON_CreateIndirect,   "Update",    GUI_ID_BUTTON4,   18, 30, 75, 27, 0,0}
};

static void _cbCallback(WM_MESSAGE *pMsg)
{
int NCode,Id;
WM_HWIN hRadio,hCheckboxVoice,hCheckboxDHT11,hCheckboxHCSR04,hButtonDirection,
hButtonSpeed,hButtonState,hButtonOV7670,hButtonUpdate;
WM_HWIN hWin=pMsg->hWin;
switch (pMsg->MsgId) 
{
case WM_INIT_DIALOG:
  hRadio=WM_GetDialogItem(hWin,GUI_ID_RADIO0);
  hCheckboxVoice=WM_GetDialogItem(hWin,GUI_ID_CHECK0);
  hCheckboxDHT11=WM_GetDialogItem(hWin,GUI_ID_CHECK1);
  hCheckboxHCSR04=WM_GetDialogItem(hWin,GUI_ID_CHECK2);
  hButtonDirection=WM_GetDialogItem(hWin,GUI_ID_BUTTON0);
  hButtonSpeed=WM_GetDialogItem(hWin,GUI_ID_BUTTON1);
  hButtonState=WM_GetDialogItem(hWin,GUI_ID_BUTTON2);
  hButtonOV7670=WM_GetDialogItem(hWin,GUI_ID_BUTTON3);
  hButtonUpdate=WM_GetDialogItem(hWin,GUI_ID_BUTTON4);
  
    RADIO_SetGroupId(hRadio,0);    //这句话我也不知道什么意思,用builder弄出来的
    RADIO_SetText(hRadio,"Remote",0);
    RADIO_SetText(hRadio,"nRF24l01",1);

CHECKBOX_SetText(hCheckboxVoice,"Voice Control");
CHECKBOX_SetText(hCheckboxDHT11,"DHT11");
CHECKBOX_SetText(hCheckboxHCSR04,"HC-SR04");

      break;
case WM_NOTIFY_PARENT:
        Id    = WM_GetId(pMsg->hWinSrc);   
       NCode = pMsg->Data.v;              
       switch (NCode) 
  {
         case WM_NOTIFICATION_RELEASED:
   switch(Id)
{
   case GUI_ID_BUTTON0:
      GUI_EndDialog(hWin, 1);
 break;

case GUI_ID_BUTTON1:
          GUI_EndDialog(hWin, 1);
 break;

case GUI_ID_BUTTON2:
          GUI_EndDialog(hWin, 1);
 break;

case GUI_ID_BUTTON3:
          GUI_EndDialog(hWin, 1);
 break;

case GUI_ID_BUTTON4:
          GUI_EndDialog(hWin, 1);
 break;

case GUI_ID_CHECK0:  //这里本来应该是跟CHECK1,CHECK2一样放在 WM_NOTIFICATION_VALUE_CHANGED:下的,
// 结果放在那个下面没反应,就放在了这个下面,测试结果:选了CHECK0后LED1就一直亮着
//以后再怎么点都没用,就一直亮着

 if(CHECKBOX_IsChecked(hCheckboxVoice))
   {
  Checkbox|=1<<0;
LED1=1;
     }
   else
 {
  Checkbox&=~(1<<0);
LED1=0;
 }
 break;

}

break;

case WM_NOTIFICATION_VALUE_CHANGED:
switch(Id)
{


case GUI_ID_CHECK1:
 if(CHECKBOX_IsChecked(hCheckboxDHT11))
  Checkbox|=1<<1;
   else
  Checkbox&=~(1<<1);
 break;  

case GUI_ID_CHECK2:
 if(CHECKBOX_IsChecked(hCheckboxHCSR04))
  Checkbox|=1<<2;
 else
  Checkbox&=~(1<<2);
 break;

case GUI_ID_RADIO0:
      RadioValue=RADIO_GetValue(hRadio);
     break;

}
     
  }
             break;
      
     default:
       WM_DefaultProc(pMsg);
   }
}





int main(void)
{     
   Stm32_Clock_Init(9); //系统时钟设置
uart_init(72,9600);   //串口初始化为9600
delay_init(72);       //延时初始化 
LED_Init();    //初始化与LED连接的硬件接口
  LCD_Init();
GUI_Init();
TP_Init();
TIM3_Int_Init(100,7199);
GUI_CURSOR_Show();
GUI_SetBkColor(GUI_BLUE);
GUI_SetColor(GUI_WHITE);
GUI_Clear();

GUI_CreateDialogBox(_aDialogCreate,GUI_COUNTOF(_aDialogCreate),&_cbCallback,0,0,0);  
   while(1) 
{  

}
回复 支持 反对

使用道具 举报

19

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-11-24
在线时间
8 小时
 楼主| 发表于 2013-12-2 19:01:43 | 显示全部楼层
//定时器3中断服务程序  
void TIM3_IRQHandler(void)
{              
if(TIM3->SR&0X0001)//溢出中断
{
GUI_TOUCH_Exec();
GUI_Exec();                    
}    
TIM3->SR&=~(1<<0);//清除中断标志位      
}

GUI_TOUCH_Exec();GUI_Exec();放在定时器里了,10ms周期
回复 支持 反对

使用道具 举报

19

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-11-24
在线时间
8 小时
 楼主| 发表于 2013-12-2 19:07:58 | 显示全部楼层
还有就是,我用builder弄出来的代码,直接粘过来的都不能用,LCD都乱显示,换了好几个builder都是这样,又从新移植了一般ucgui在新移植的工程里也不好用,无奈只好一边参考builder一边自己写代码。
回复 支持 反对

使用道具 举报

11

主题

127

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2013-7-14
在线时间
3 小时
发表于 2013-12-2 19:15:00 | 显示全部楼层
回复【4楼】we-are:
---------------------------------
在 我qq1811098211   咱俩私聊吧
因为爱所以爱
回复 支持 反对

使用道具 举报

19

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-11-24
在线时间
8 小时
 楼主| 发表于 2013-12-3 21:38:14 | 显示全部楼层
现在滚动滑条也不好用了,晕啊,不加处理函数的时候好好的,加点东西就卡死了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-8 08:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表