专注于Linux系统移植及应用开发
RSS
>
热门关键字:  s3c2410x  linux  u-boot  yaffs  weiyan
当前位置 :| 伟研科技>嵌入式文章>

WINCE 串口通信程序(2)

来源: 作者: 时间:2008-11-12 点击:

三、基于串口通信的控制LED灯的程序
   1、在SerialDlg.h加入LED灯控制成员函数
static void LedControl(DWORD opretion );

 
 
2、在SerialDlg.cpp实现LedControl函数
在最后加入如下代码
void CSerialDlg::LedControl(DWORD opretion )
 {
   HANDLE hdDevice;
   DWORD error;
   char *buffToOpen="open";    //控制打开led灯的缓冲区
   char *buffToClose="close"; //控制关闭led灯的缓冲区

   DWORD ret;
   hdDevice=CreateFile(_T("LED1:"),GENERIC_READ |   GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);  //打开led设备
    if (hdDevice== INVALID_HANDLE_VALUE)
  {
   return;
   }
 if(opretion==1)  
 {
      if(!WriteFile(hdDevice,buffToOpen,0,&ret,NULL)) //控制灯亮
  {
     
   error=GetLastError();
         return;
  }
 }
 else
 {
     if(!WriteFile(hdDevice,buffToClose,0,&ret,NULL))  //控制灯灭
  {
     
   error=GetLastError();
         return;
  }
 }
2、 增加支持中文传输和控制led灯功能
在SerialDlg.cpp里面把void CALLBACK CSerialDlg::OnComRecv(CWnd* pWnd, char *buf, int buflen)修改如下:

void CALLBACK CSerialDlg::OnComRecv(CWnd* pWnd, char *buf, int buflen)
{   
      CSerialDlg *pDlg = (CSerialDlg*)pWnd;
   CEdit *pRecvStrEdit = (CEdit*)pDlg->GetDlgItem(IDC_REV);
      // MultiByteToWideChar函数的作用是把多字节转换成字符,由于一个中文字符由两个字节组成,
      //所以要使用此函数来进行多字节到字符的转换
      // CP_ACP表示ANSI编码
      // buf 表示要转换的字符缓冲区
   DWORD dwNum = MultiByteToWideChar(CP_ACP, 0, buf, -1, NULL, 0); 
   WCHAR *pwText;
       pwText = new WCHAR[dwNum];  /*存放宽字符的缓冲区*/
MultiByteToWideChar(CP_ACP,0,buf,-1,pwText,dwNum); /*把多字节转换成字符,转换的结果放在pwText缓冲*/
   CString str(pwText);
   if (str.Find(L"打开")!=-1)   //如果接收到“打开”命令则打开灯
   {
      LedControl(1);
   }
   if (str.Find(L"关闭")!=-1)  //如果接收到“关闭”命令则关闭灯
   {
         LedControl(0);
   }
   pDlg->strRecDisp+=str;
   pRecvStrEdit->SetWindowText(pDlg->strRecDisp);  //显示字符
   delete []pwText;
}
3、 修改led灯驱动
在wyleddrvr.cpp修改LED_Write()函数
修改如下

 
 

上一篇:WINCE 串口通信程序(1)
下一篇:没有了
联系我们