stm32 NRF24L01+USART搞定有线和无线通信
时间:11-19
来源:互联网
点击:
否有效来向串口发送相应的数据。那么我们的问题又来了:这个speed_change_flag是在哪里被改变的呢?这个我们就要参看窗口回调函数了!这里的窗口回调函数是窗口动作响应函数(就像安卓开发里的按钮监听或MFC里的按钮点击事件等),一旦窗口里的控件有相应的触发动作就会调用该函数,并把事件类型封装在WM_MESSAGE里传过来,在该函数里对该消息进行解析并作出相应的动作即可(非常像Win32!!!我怀疑做这个uc-GUI的人有copy微软的嫌疑,?(^∇^*)随便猜测,如有雷同,纯属巧合)。这样我们就很容易找到send按钮的监听用于将数据通过NRF24L01发送出去的相关操作,也就明白了滑动条监听用来改变speed1~5.上面说了这么多,少了介绍整个界面是怎么建立的了~其实整个窗体的布局都要放在一个结构体里,然后在fun()函数里调用hWin = GUI_CreateDialogBox(aDialogCreate, GUI_COUNTOF(aDialogCreate), _cbCallback, 0, 0, 0);根据定义的窗口资源和回调函数进行窗体的建立~这样我们就圆满地理解了stm32基于uc-OS并搭载uc-GUI的运行逻辑啦!
1 void Fun(void) { 2 GUI_CURSOR_Show(); //打开鼠标图形显示 3 4 /* 建立对话框时,包含了资源列表,资源数目, 并且指定了用于动作响应的回调函数 */5 hWin = GUI_CreateDialogBox(aDialogCreate, GUI_COUNTOF(aDialogCreate), _cbCallback, 0, 0, 0);6 7 FRAMEWIN_SetFont(hWin, &GUI_FontComic18B_1); //对话框字体设置 8 FRAMEWIN_SetClientColor(hWin, GUI_BLACK); //对话框的窗体颜色是黑色9 memcpy(tx_buf, "1234567890abcdefghij!@#$%^&*()-=", 32); //将长度为32字节的发送字符串拷贝到发送缓冲区,10 memcpy(rx_buf, "", 32); //将接收缓存区清空11 12 /* 获得文本框句柄 */ 13 text1 = WM_GetDialogItem(hWin, GUI_ID_TEXT0); //获得对话框里GUI_ID_TEXT0项目(文本框Send Text Area)的句柄14 text2 = WM_GetDialogItem(hWin, GUI_ID_TEXT1); //获得对话框里GUI_ID_TEXT1项目(文本框Receive Text Area)的句柄15 text3 = WM_GetDialogItem(hWin, GUI_ID_TEXT2); //获得对话框里GUI_ID_TEXT2项目(文本框2M BPS)的句柄16 text4 = WM_GetDialogItem(hWin, GUI_ID_TEXT3); //获得对话框里GUI_ID_TEXT3项目(文本框1M BPS)的句柄17 text6 = WM_GetDialogItem(hWin, GUI_ID_TEXT5); //获得对话框里GUI_ID_TEXT5项目(文本框250K BPS)的句柄18 text5 = WM_GetDialogItem(hWin, GUI_ID_TEXT4); //获得对话框里GUI_ID_TEXT4项目(状态字符文本框)的句柄 19 /* 设置文本框字体 */20 TEXT_SetFont(text1,pFont); //设置对话框里文本框Send Text Area的字体21 TEXT_SetFont(text2,pFont); //设置对话框里文本框Receive Text Area的字体22 TEXT_SetFont(text3,pFont18); //设置对话框里文本框2M BPS的字体23 TEXT_SetFont(text4,pFont18); //设置对话框里文本框1M BPS的字体24 TEXT_SetFont(text6,pFont18); //设置对话框里文本框250K BPS的字体25 TEXT_SetFont(text5,pFont); //设置对话框里状态字符文本框的字体26 /* 设置文本框颜色 */27 TEXT_SetTextColor(text1,GUI_GREEN); //设置对话框里文本框Send Text Area的字体颜色28 TEXT_SetTextColor(text2,GUI_GREEN ); //设置对话框里文本框Receive Text Area的字体颜色29 TEXT_SetTextColor(text3,GUI_YELLOW); //设置对话框里文本框2M BPS的字体颜色30 TEXT_SetTextColor(text4,GUI_YELLOW); //设置对话框里文本框1M BPS的字体颜色31 TEXT_SetTextColor(text6,GUI_YELLOW); //设置对话框里文本框250K BPS的字体颜色32 TEXT_SetTextColor(text5,GUI_YELLOW); //设置对话框里状态字符文本框的字体颜色33 TEXT_SetBkColor(text5,GUI_BLUE); //设置对话框里状态字符文本框的背景颜色34 35 /* 编辑框相关 */36 edit1 = WM_GetDialogItem(hWin, GUI_ID_EDIT1); //获得对话框里GUI_ID_EDIT1项目(编辑框 发送字符串显示区)的句柄37 EDIT_SetFont(edit1,pFont18); //设置对话框里编辑框 发送字符串显示区的字体38 EDIT_SetText(edit1,(const char *)tx_buf); //设置对话框里编辑框 发送字符串显示区的字符串39 edit2 = WM_GetDialogItem(hWin, GUI_ID_EDIT2); //获得对话框里GUI_ID_EDIT2项目(编辑框 接收字符串显示区)的句柄40 EDIT_SetFont(edit2,pFont18); //设置对话框里编辑框 接收字符串显示区的字体41 EDIT_SetText(edit2,(const char *)rx_buf); //设置对话框里编辑框 接收字符串显示区的字符串42 43 /* 按钮相关 */44 bt[0]=WM_GetDialogItem(hWin,GUI_ID_BUTTON0); //获得对话框里GUI_ID_BUTTON0项目(按键SEND)的句柄45 bt[1]=WM_GetDialogItem(hWin, GUI_ID_BUTTON2); //获得对话框里GUI_ID_BUTTON2项目(按键CLEAR)的句柄46 BUTTON_SetFont(bt[0],pFont); //设置对话框里按键SEND的字体47 BUTTON_SetFont(bt[1],pFont); //设置对话框里按键CLEAR的字体48 BUTTON_SetTextColor(bt[0],0,GUI_WHITE); //设置对话框里按键SEND未被按下的字体颜色49 BUTTON_SetTextColor(bt[1],0,GUI_WHITE); //设置对话框里按键CLEAR未被按下的字体颜色50 51 /* List相关 */ 52 nrf_Pipe=0; //NRF24L01初始发射通道设置为053 list1 = WM_GetDialogItem(hWin, GUI_ID_LISTBOX0); //获得对话框里GUI_ID_LISTBOX0项目(列表框-通道选择)的句柄 54 LISTBOX_SetText(list1, _apListBox); //设置对话框里列表框-通道选择里的条目55 LISTBOX_SetFont(list1,pFont18); //设置对话框里列表框-通道选择的字体56 LISTBOX_SetSel(list1,nrf_Pipe); //设置对话框里列表框-通道选择的焦点选择57 SCROLLBAR_CreateAttached(list1, SCROLLBAR_CF_VERTICAL); //设置对话框里列表框-通道选择的卷动方向为下拉 58 59 /* Radio按钮相关 */ 60 rd0 = WM_GetDialogItem(hWin, GUI_ID_RADIO0); //获得对话框里GUI_ID_RADIO0项目(点选框-速率选择)的句柄61 nrf_baud=0; //NRF24L01速率 初始为2MPS62 RADIO_SetValue(rd0,0); //设置对话框里点选框-速率选择的焦点选择63 RX_Mode(); //NRF24L01进入接收模式 64 65 /* 获得slider部件的句柄 */ 66 slider1 = WM_GetDialogItem(hWin, GUI_ID_SLIDER1);67 slider2 = WM_GetDialogItem(hWin, GUI_ID_SLIDER2);68 slider3 = WM_GetDialogItem(hWin, GUI_ID_SLIDER3);69 slider4 = WM_GetDialogItem(hWin, GUI_ID_SLIDER4);70 slider5 = WM_GetDialogItem(hWin, GUI_ID_SLIDER5);71 /* 设置slider部件的取值范围-8-8*/ 72 SLIDER_SetRange(slider1,-8,8); 73 SLIDER_SetRange(slider2,-8,8);74 SLIDER_SetRange(slider3,-8,8);75 SLIDER_SetRange(slider4,-8,8);76 SLIDER_SetRange(slider5,-8,8);77 /* 设置slider部件的值*/ 78 SLIDER_SetValue(slider1,0); 79 SLIDER_SetValue(slider2,0); 80 SLIDER_SetValue(slider3,0); 81 SLIDER_SetValue(slider4,0); 82 SLIDER_SetValue(slider5,0); 83 /* 获取文本框句柄 */84 text_speed1 = WM_GetDialogItem(hWin, GUI_ID_TEXT_SPEED1); 85 text_speed2 = WM_GetDialogItem(hWin, GUI_ID_TEXT_SPEED2); 86 text_speed3 = WM_GetDialogItem(hWin, GUI_ID_TEXT_SPEED3); 87 text_speed4 = WM_GetDialogItem(hWin, GUI_ID_TEXT_SPEED4); 88 text_speed5 = WM_GetDialogItem(hWin, GUI_ID_TEXT_SPEED5); 89 /* 设置文本框字体 */90 TEXT_SetFont(text_speed1,pFont18);91 TEXT_SetFont(text_speed2,pFont18);92 TEXT_SetFont(text_speed3,pFont18);93 TEXT_SetFont(text_speed4,pFont18);94 TEXT_SetFont(text_speed5,pFont18); 95 /* 设置文本框颜色 */96 TEXT_SetTextColor(text_speed1,GUI_YELLOW); 97 TEXT_SetTextColor(text_speed2,GUI_YELLOW); 98 TEXT_SetTextColor(text_speed3,GUI_YELLOW); 99 TEXT_SetTextColor(text_speed4,GUI_YELLOW); 100 TEXT_SetTextColor(text_speed5,GUI_YELLOW); 101 102 speed_change_flag=0;103 104 while (1)105 { 106 if(Rx_Succ==1){ //当NRF24L01接收到有效数据107 EDIT_SetText(edit2,(const char *)rx_buf); //将接收缓冲区的字符写入到接收字符编辑框内108 TEXT_SetText(text5,(const char *)status_buf); //将状态文本缓冲区的字符写入到状态文本框内109 Rx_Succ=0; 110 // for(i=0;i
stm32NRF24L01USART无线通 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)