⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 util7248.c

📁 凌华工控控制卡PCI-7248使用例子
💻 C
📖 第 1 页 / 共 2 页
字号:
        // Channel Label 
        SetBkMode(hDC,TRANSPARENT);  
        SetTextColor(hDC,RGB(0,0,0));
        TextOut(hDC, input_pos[0][7].x, input_pos[0][7].y+16, " 7                                 0", 36);       
        TextOut(hDC, io_pos[0][7].x, io_pos[0][7].y+16, " 3             0", 16); 
        TextOut(hDC, io_pos[0][3].x, io_pos[0][3].y+16, " 3             0", 16);
        TextOut(hDC, output_pos[0][7].x,output_pos[0][7].y+16," 7                                 0", 36);
        
        SetBkMode(hDC,OPAQUE);  
        
        // Detect Channel Input
        for (k=0;k<2;k++ )
        {    
         if ( port_a[k]==0 )
         {
          for (i=0; i<8; i++) {
           if ((inputA[k]>>i)&0x01)
              SelectObject(hDC, hRedBrush);
           else
              SelectObject(hDC, GetStockObject(WHITE_BRUSH));
           Ellipse(hDC, input_pos[k][i].x, input_pos[k][i].y, input_pos[k][i].x+17, input_pos[k][i].y+17);
          }                
         } 
         else
         { 
             // Detect Channel Output
          for (i=0; i<8; i++) {
           if ((outputA[k]>>i)&0x01)
              SelectObject(hDC, hRedBrush);
           else
              SelectObject(hDC, GetStockObject(WHITE_BRUSH));
           Ellipse(hDC, input_pos[k][i].x, input_pos[k][i].y, input_pos[k][i].x+17, input_pos[k][i].y+17);
          }                      
         }
         
         if ( port_b[k]==0 )  
         {
          for (i=0; i<8; i++) {
            if ((inputB[k]>>i)&0x01)
              SelectObject(hDC, hRedBrush);
            else
              SelectObject(hDC, GetStockObject(WHITE_BRUSH));
            Ellipse(hDC, output_pos[k][i].x, output_pos[k][i].y, output_pos[k][i].x+17, output_pos[k][i].y+17);
          }
         }           
         else
         {
          for (i=0; i<8; i++) {
            if ((outputB[k]>>i)&0x01)
               SelectObject(hDC, hRedBrush);
            else
              SelectObject(hDC, GetStockObject(WHITE_BRUSH));
            Ellipse(hDC, output_pos[k][i].x, output_pos[k][i].y, output_pos[k][i].x+17, output_pos[k][i].y+17);
          }       
         } 
        if ( port_c_lower[k]==0)
        { 
         for (i=0; i<4; i++) {
           if ((inputC[k]>>i)&0x01)
              SelectObject(hDC, hRedBrush);
           else
              SelectObject(hDC, GetStockObject(WHITE_BRUSH));          
            Ellipse(hDC, io_pos[k][i].x, io_pos[k][i].y, io_pos[k][i].x+17, io_pos[k][i].y+17);
          }             
        }
        else
        { 
         for (i=0; i<4; i++) {
           if ((outputC[k]>>i)&0x01)
              SelectObject(hDC, hRedBrush);
           else
              SelectObject(hDC, GetStockObject(WHITE_BRUSH));          
            Ellipse(hDC, io_pos[k][i].x, io_pos[k][i].y, io_pos[k][i].x+17, io_pos[k][i].y+17);
          }             
        }
        if ( port_c_upper[k]==0)
        { 
         for (i=0; i<4; i++) {
           if ((inputD[k]>>i)&0x01)
              SelectObject(hDC, hRedBrush);
           else
              SelectObject(hDC, GetStockObject(WHITE_BRUSH));          
            Ellipse(hDC, io_pos[k][i+4].x, io_pos[k][i+4].y, io_pos[k][i+4].x+17, io_pos[k][i+4].y+17);
          }             
         }
        else
        { 
         for (i=0; i<4; i++) {
           if ((outputD[k]>>i)&0x01)
              SelectObject(hDC, hRedBrush);
           else
              SelectObject(hDC, GetStockObject(WHITE_BRUSH));          
            Ellipse(hDC, io_pos[k][i+4].x, io_pos[k][i+4].y, io_pos[k][i+4].x+17, io_pos[k][i+4].y+17);
          }             
         } 
        } //k
         
        EndPaint(hWnd, &ps);
        break;
    case WM_COMMAND:
        switch(LOWORD(wParam)) {
           case IDM_EXIT:
                SendMessage(hWnd, WM_CLOSE, 0, 0L);
                break;

           default:
                  return(DefWindowProc(hWnd, message, wParam, lParam));
        }
        break;
    case WM_TIMER:
       
          /* Digital Input */ 
		  hDC=GetDC(hWnd);
          for(k=0;k<2;k++)
          {                                    
            if ( port_a[k]==0) {  
			  DI_ReadPort(card,5*k+Channel_P1A,&inputA[k]);
              for (i=0; i<8; i++) {
               if (((inputA[k]>>i)&0x01) != ((oldinputA[k]>>i)&0x01) )
               {
                 if ((inputA[k]>>i)&0x01)
                    SelectObject(hDC, hRedBrush);
                 else
                    SelectObject(hDC, GetStockObject(WHITE_BRUSH));
                 Ellipse(hDC, input_pos[k][i].x, input_pos[k][i].y, input_pos[k][i].x+17, input_pos[k][i].y+17);
               } 
              }    
              oldinputA[k]=inputA[k];
            }
            else {
			   DO_WritePort(card,5*k+Channel_P1A, outputA[k]);
			}
                          
            if ( port_b[k]==0){  
		      DI_ReadPort(card,5*k+Channel_P1B,&inputB[k]);
              for (i=0; i<8; i++) {               
              if( ((inputB[k]>>i)&0x01) != ((oldinputB[k]>>i)&0x01) )
                { 
                if ((inputB[k]>>i)&0x01)
                   SelectObject(hDC, hRedBrush);
                else
                   SelectObject(hDC, GetStockObject(WHITE_BRUSH));
                Ellipse(hDC, output_pos[k][i].x, output_pos[k][i].y, output_pos[k][i].x+17, output_pos[k][i].y+17);
                }
              }  
              oldinputB[k]=inputB[k];             
              }                            
              else {
			   DO_WritePort(card,5*k+Channel_P1B,outputB[k]);
              }
			  
              if ( port_c_lower[k]==0){ 
				DI_ReadPort(card,5*k+Channel_P1CL,&inputC[k]);
               for (i=0; i<4; i++) {        
                if( ((inputC[k]>>i)&0x01) != ((oldinputC[k]>>i)&0x01) )
                {
                 if ((inputC[k]>>i)&0x01)
                   SelectObject(hDC, hRedBrush);
                 else
                   SelectObject(hDC, GetStockObject(WHITE_BRUSH));
                 Ellipse(hDC, io_pos[k][i].x, io_pos[k][i].y, io_pos[k][i].x+17, io_pos[k][i].y+17);
                }
               } //for
			   oldinputC[k]=inputC[k];             
              } //if     
              else {
               DO_WritePort(card,5*k+Channel_P1CL, outputC[k]);       
              }
              if ( port_c_upper[k]==0){  
			   DI_ReadPort(card,5*k+Channel_P1CH, &inputD[k]);
               for (i=0; i<4; i++) {           
                if( ((inputD[k]>>i)&0x01) != ((oldinputD[k]>>i)&0x01) )
                {
                 if ((inputD[k]>>i)&0x01)
                   SelectObject(hDC, hRedBrush);
                 else
                   SelectObject(hDC, GetStockObject(WHITE_BRUSH));
                 Ellipse(hDC, io_pos[k][i+4].x, io_pos[k][i+4].y, io_pos[k][i+4].x+17, io_pos[k][i+4].y+17);
                }
               }  
                oldinputD[k]=inputD[k];                 
              }     
              else
              { 
			   DO_WritePort(card,5*k+Channel_P1CH,outputD[k]);
              }           
             } //k  
             ReleaseDC(hWnd, hDC);
        break;
    case WM_DESTROY:
	    if (card >= 0) Release_Card(card);
        DeleteObject(hRedBrush);
        DeleteObject(hGreenBrush);      
        DeleteObject(hLTGreenBrush);
        KillTimer(hWnd, TIMER);
        PostQuitMessage(0);
        break;    
    case WM_LBUTTONDOWN:
          px = LOWORD(lParam);
          py = HIWORD(lParam);
        
         for (k=0;k<2;k++ )
         {
          if (px>(input_pos[k][0].x+25) && px<(input_pos[k][0].x+41)) 
          {
           if (py>(input_pos[k][0].y-12) && py<(input_pos[k][0].y+7)) 
           {           
            port_a[k]=0;
            DIO_PortConfig(card,5*k+Channel_P1A, INPUT_PORT);
            InvalidateRect(hWnd, NULL, FALSE);
            }                                    
           else 
           if (py>(input_pos[k][0].y+7) && py<(input_pos[k][0].y+26)) 
           {            
            port_a[k]=1;
            DIO_PortConfig(card,5*k+Channel_P1A, OUTPUT_PORT);
            InvalidateRect(hWnd, NULL, FALSE);
            }               
           }
          if (px>(output_pos[k][0].x+25) && px<(output_pos[k][0].x+41)) 
          {
           if (py>(output_pos[k][0].y-12) && py<(output_pos[k][0].y+7)) 
           {            
            port_b[k]=0;
            DIO_PortConfig(card,5*k+Channel_P1B, INPUT_PORT);
            InvalidateRect(hWnd, NULL, FALSE);
            }                                    
           else 
           if (py>(output_pos[k][0].y+7) && py<(output_pos[k][0].y+26)) 
           {            
            port_b[k]=1;
            DIO_PortConfig(card,5*k+Channel_P1B, OUTPUT_PORT);
            InvalidateRect(hWnd, NULL, FALSE);
           }   
          }  
          if (px>(io_pos[k][0].x+25) && px<(io_pos[k][0].x+41)) 
          {
           if (py>(io_pos[k][0].y-12) && py<(io_pos[k][0].y+7)) 
           {           
            port_c_lower[k]=0;
            DIO_PortConfig(card,5*k+Channel_P1CL, INPUT_PORT);
            InvalidateRect(hWnd, NULL, FALSE);
           }                                    
           else 
           if (py>(io_pos[k][0].y+7) && py<(io_pos[k][0].y+26)) 
           {            
            port_c_lower[k]=1;
            DIO_PortConfig(card,5*k+Channel_P1CL, OUTPUT_PORT);
            InvalidateRect(hWnd, NULL, FALSE);
            }              
          }                               
          if (px>(io_pos[k][4].x+25) && px<(io_pos[k][4].x+41)) 
          {
           if (py>(io_pos[k][4].y-12) && py<(io_pos[k][4].y+7)) 
           {           
            port_c_upper[k]=0;
            DIO_PortConfig(card,5*k+Channel_P1CH, INPUT_PORT);
            InvalidateRect(hWnd, NULL, FALSE);
            }                                    
           else 
           if (py>(io_pos[k][4].y+7) && py<(io_pos[k][4].y+26)) 
           {            
            port_c_upper[k]=1;
            DIO_PortConfig(card,5*k+Channel_P1CH, OUTPUT_PORT);
            InvalidateRect(hWnd, NULL, FALSE);
           }               
          }         
         }//k           
         hDC = GetDC(hWnd);               
         for (k=0;k<2;k++)
         { 
           if ( port_a[k]==1 ){
            for (i=0; i<8; i++) {
             if (px>input_pos[k][i].x && px<input_pos[k][i].x+17 && py>input_pos[k][i].y && py<input_pos[k][i].y+17) {
               if ((outputA[k]>>i)&0x01) {
                  outputA[k] -= (((unsigned char)1)<<i);
                  SelectObject(hDC, GetStockObject(WHITE_BRUSH));
               }
               else {
                  outputA[k] += (((unsigned char)1)<<i);
                  SelectObject(hDC, hRedBrush);
               }
               Ellipse(hDC, input_pos[k][i].x, input_pos[k][i].y, input_pos[k][i].x+17, input_pos[k][i].y+17);
              
			   DO_WritePort(card,5*k+Channel_P1A, outputA[k]);
               break;
             }
            }             
           } 
           if ( port_b[k]==1 )
           {
            for (i=0; i<8; i++) {
             if (px>output_pos[k][i].x && px<output_pos[k][i].x+17 && py>output_pos[k][i].y && py<output_pos[k][i].y+17) {
               if ((outputB[k]>>i)&0x01) {
                  outputB[k] -= (((unsigned char)1)<<i);
                  SelectObject(hDC, GetStockObject(WHITE_BRUSH));
               }
               else {
                  outputB[k] += (((unsigned char)1)<<i);
                  SelectObject(hDC, hRedBrush);
               }
               Ellipse(hDC, output_pos[k][i].x, output_pos[k][i].y, output_pos[k][i].x+17, output_pos[k][i].y+17);
               DO_WritePort(card,5*k+Channel_P1B, outputB[k]);
               break;
             }
            }//for
           }          
           if ( port_c_lower[k]==1 )
           {
            for (i=0; i<4; i++) {
             if (px>io_pos[k][i].x && px<io_pos[k][i].x+17 && py>io_pos[k][i].y && py<io_pos[k][i].y+17) {
               if ((outputC[k]>>i)&0x01) {
                  outputC[k] -= (((unsigned char)1)<<i);
                  SelectObject(hDC, GetStockObject(WHITE_BRUSH));
               }
               else {
                  outputC[k] += (((unsigned char)1)<<i);
                  SelectObject(hDC, hRedBrush);
               }
               Ellipse(hDC, io_pos[k][i].x, io_pos[k][i].y, io_pos[k][i].x+17, io_pos[k][i].y+17);
			   DO_WritePort(card,5*k+Channel_P1CL, outputC[k]);
               break;
             }
            }
           }    
           if ( port_c_upper[k]==1 )
           {
            for (i=0; i<4; i++) {
             if (px>io_pos[k][i+4].x && px<io_pos[k][i+4].x+17 && py>io_pos[k][i+4].y && py<io_pos[k][i+4].y+17) {
               if ((outputD[k]>>i)&0x01) {
                  outputD[k] -= (((unsigned char)1)<<i);
                  SelectObject(hDC, GetStockObject(WHITE_BRUSH));
               }
               else {
                  outputD[k] += (((unsigned char)1)<<i);
                  SelectObject(hDC, hRedBrush);
               }
               Ellipse(hDC, io_pos[k][i+4].x, io_pos[k][i+4].y, io_pos[k][i+4].x+17, io_pos[k][i+4].y+17);
			   DO_WritePort(card,5*k+Channel_P1CH, outputD[k]);
               break;
             }
            }
           }       
         }//k          
         ReleaseDC(hWnd,hDC); 
        break;
    default:
        return(DefWindowProc(hWnd, message, wParam, lParam));
  }
  return(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -