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

📄 counter.c

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 C
📖 第 1 页 / 共 4 页
字号:
							gwClkSrc = PA_MODE_COUNT_SRC_FOUT_0;
						}
						break;
					case 4:
						{
							gwClkSrc = PA_MODE_COUNT_SRC_FOUT_1;
						}
						break;
					case 5:
						{
                     if (dwBordID == BD_PCM3780){
                        gwClkSrc = PA_MODE_COUNT_SRC_GATE_N_M1;   // Gate N-1
                     }else{
                        gwClkSrc = PA_MODE_COUNT_SRC_FOUT_2;
                     }
                     
						}
						break;
					case 6:
						{
							gwClkSrc = PA_MODE_COUNT_SRC_FOUT_3;
						}
						break;
					
					case 7:
						{
							gwClkSrc = PA_MODE_COUNT_SRC_GATE_N_M1;
						}
						break;
					}
				}

				case IDCANCEL :
                 EndDialog(hDlg, 0);
                 return TRUE;


				case IDC_OutputEnable:
               EnableWindow(GetDlgItem(hDlg, IDC_OUTMODE), TRUE);
					gwOutputEnable = PA_MODE_ENABLE_OUTPUT;
               break;
					
				case IDC_OutputDisable:
               EnableWindow(GetDlgItem(hDlg, IDC_OUTMODE), FALSE);
					gwOutputEnable = PA_MODE_DISABLE_OUTPUT;
               break;

				case IDC_CntEdgeRising:
					gwCntEdge = PA_MODE_COUNT_RISE_EDGE;
					break;

            case IDC_CntEdgeFalling:
					gwCntEdge = PA_MODE_COUNT_FALL_EDGE;
					break;

            case IDC_CntDown :
					gwCntDirect = PA_MODE_COUNT_DOWN;
					break;

			case  IDC_CntUp:
					gwCntDirect = PA_MODE_COUNT_UP;
					break;

            case IDC_GateHigh:
					gwGatePolarity = PA_MODE_GATE_POSITIVE;
					break;

			case IDC_GateLow:
					gwGatePolarity = PA_MODE_GATE_NEGATIVE;
					break;

         case  IDC_IntEnable:
					gwIntFlag = 1;
					break;
					
			case  IDC_IntDisable:
					gwIntFlag = 0;

			case IDC_CntIniVal :
                 if (HIWORD(wParam) == EN_KILLFOCUS)
					{
                   if(SendDlgItemMessage(hDlg, IDC_CntIniVal,
                      EM_GETMODIFY, 0, 0))
						 {
                       SendDlgItemMessage(hDlg, IDC_CntIniVal,
                          WM_GETTEXT, 10, (LPARAM)(LPSTR)szBuffer) ;                       
					        g_usIniVal = atol(szBuffer);
                       SendDlgItemMessage(hDlg, IDC_CntIniVal,
                          EM_SETMODIFY, FALSE, 0) ;
						 }
				   if ( ( g_usIniVal <= 0 )||( g_usIniVal > 65535 ))
				   {
					   MessageBox( hDlg, "Invalid Counter Initial Value", 
						   "Notice", MB_OK );
					   return TRUE;
				   }
			   }
               return TRUE;
					
            case IDC_DEVICE :

                //
                // When device selection is changed, it needs to
                // re-initialize sub-device combobox and input range
                // combobox.
                //

                if (HIWORD(wParam) == CBN_SELCHANGE)
                {
                    if ((dwIndex = SendDlgItemMessage(hDlg, IDC_DEVICE,
                        CB_GETCURSEL, 0, 0)) != CB_ERR)
                         gwDevice = (WORD)dwIndex;
                    else
                        return TRUE;


                    // ------------------------------------------------------
                    // Initialize Module Combobox for COM port or CAN devices
                    // ------------------------------------------------------

                    // check any device attached on this COM port or CAN

                    gnNumOfSubdevices = DeviceList[gwDevice].nNumOfSubdevices;
                    if (gnNumOfSubdevices > MAX_DEVICES)
                        gnNumOfSubdevices = MAX_DEVICES;


                    // retrieve the information of all installed devices

                    if (gnNumOfSubdevices != 0)
                    {
                        if ((ErrCde = DRV_DeviceGetSubList(
                            (DWORD)DeviceList[gwDevice].dwDeviceNum,
                            (DEVLIST far *)&SubDeviceList[0],
                            (SHORT)gnNumOfSubdevices,
                            (SHORT far *)&nOutEntries)) != (LONG)SUCCESS)
                        {
                            DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
                            MessageBox(hMainWnd, (LPCSTR)szErrMsg,
                                "Driver Message", MB_OK);
                            return TRUE;
                        }


                        // initialize the Module List Combobox with the
                        // retrieved information

                        EnableWindow(GetDlgItem(hDlg, IDC_MODULE), TRUE);
                        SendDlgItemMessage(hDlg, IDC_MODULE, CB_RESETCONTENT,
                            0, (LPARAM)((LPSTR)0));

                        for (i = 0; i < gnNumOfSubdevices; i++)
                            SendDlgItemMessage(hDlg, IDC_MODULE, CB_ADDSTRING, 0,
                                (LPARAM)((LPSTR)SubDeviceList[i].szDeviceName));

                        gwSubDevice = 0;

                        SendDlgItemMessage(hDlg, IDC_MODULE, CB_SETCURSEL,
							(WPARAM)gwSubDevice, (LPARAM)0);
                    }
                    else
                    {
                        EnableWindow(GetDlgItem(hDlg, IDC_MODULE), FALSE);
                        SendDlgItemMessage(hDlg, IDC_MODULE, CB_RESETCONTENT,
                            0, (LPARAM)((LPSTR)0));
                    }

                    //Open device
                    if (gnNumOfSubdevices == 0)
                       ErrCde = DRV_DeviceOpen(
                       DeviceList[gwDevice].dwDeviceNum,
                       (LONG far *)&DriverHandle);
                    else
                       ErrCde = DRV_DeviceOpen(
                       SubDeviceList[gwSubDevice].dwDeviceNum,
                       (LONG far *)&DriverHandle);
                    
                    if (ErrCde != SUCCESS)
                    {
                       strcpy(szErrMsg,"Device open error !");
                       MessageBox(hDlg,(LPCSTR)szErrMsg,"Device Open",MB_OK);
                       return 0;
                    }
                    
                    
                    //
                    // get device features
                    //
                    
                    ptDevFeatures.buffer = (LPDEVFEATURES)&DevFeatures;
                    ptDevFeatures.size = sizeof(DEVFEATURES);
                    if ((ErrCde = DRV_DeviceGetFeatures(DriverHandle,
                       (LPT_DeviceGetFeatures)&ptDevFeatures)) != SUCCESS)
                    {
                       DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
                       MessageBox(hDlg,(LPCSTR)szErrMsg,"Driver Message",MB_OK);
                       DRV_DeviceClose((LONG far *)&DriverHandle);
                       return 0;
                    }
                    
                    dwBordID = DevFeatures.dwBoardID;
                    usMaxCntNumber = DevFeatures.usMaxTimerChl;
                    DRV_DeviceClose(&DriverHandle);
                    // initial counter channel
                    
                    SendDlgItemMessage(hDlg, IDC_ECHANNEL, CB_RESETCONTENT,(WPARAM)0, (LPARAM)0);

                    for ( i = 0; i< usMaxCntNumber; i++ )
                    {
                       _itoa( i, szBuffer, 10 );
                       SendDlgItemMessage( 
                          hDlg, 
                          IDC_ECHANNEL,
                          CB_ADDSTRING, 
                          0, 
                          ( LPARAM )( ( LPSTR )szBuffer ) );
                    }
                    SendDlgItemMessage(hDlg,IDC_ECHANNEL,CB_SETCURSEL,gwChannel,(LPARAM)0);
                    
                    // initial count source
                    SendDlgItemMessage(hDlg, IDC_CntClkSrc, CB_RESETCONTENT,(WPARAM)0, (LPARAM)0);
                    SendDlgItemMessage(
                       hDlg,
                       IDC_CntClkSrc,
                       CB_ADDSTRING,
                       0,
                       (LPARAM)((LPSTR)"OUT N-1"));
                    
                    SendDlgItemMessage(
                       hDlg,
                       IDC_CntClkSrc,
                       CB_ADDSTRING,
                       0,
                       (LPARAM)((LPSTR)"CLK N"));
                    SendDlgItemMessage(
                       hDlg,
                       IDC_CntClkSrc,
                       CB_ADDSTRING,
                       0,
                       (LPARAM)((LPSTR)"CLK N-1"));
                    SendDlgItemMessage(
                       hDlg,
                       IDC_CntClkSrc,
                       CB_ADDSTRING,
                       0,
                       (LPARAM)((LPSTR)"FOUT0"));
                    SendDlgItemMessage(
                       hDlg,
                       IDC_CntClkSrc,
                       CB_ADDSTRING,
                       0,
                       (LPARAM)((LPSTR)"FOUT1"));
                    if (dwBordID != BD_PCM3780)
                    {
                       //for pci1780&mic3780
                       SendDlgItemMessage(
                          hDlg,
                          IDC_CntClkSrc,
                          CB_ADDSTRING,
                          0,
                          (LPARAM)((LPSTR)"FOUT2"));
                       
                       
                       SendDlgItemMessage(
                          hDlg,
                          IDC_CntClkSrc,
                          CB_ADDSTRING,
                          0,
                          (LPARAM)((LPSTR)"FOUT3"));
                    }
                    
                    SendDlgItemMessage(
                       hDlg,
                       IDC_CntClkSrc,
                       CB_ADDSTRING,
                       0,
                       (LPARAM)((LPSTR)"GATE N-1"));
                    
                    SendDlgItemMessage(
                       hDlg,
                       IDC_CntClkSrc,
                       CB_SETCURSEL,
                       gwClkSrcIndex,
                       0);

                    
                }

                return TRUE;
         }

         break;
    }

    return FALSE ;
}


/***************************************************************************
    FUNCTION: ScanDlgProc(HWND, unsigned, WPARAM, LPARAM)

    PURPOSE:  Processes dialog box messages for scan time settings
****************************************************************************/

BOOL FTYPE ScanDlgProc
(
    HWND        hDlg,                          // window handle
    unsigned    message,                       // type of message
    WPARAM      wParam,                        // additional information
    LPARAM      lParam                         // additional information
)
{
    char        szBuffer[40];

    switch (message)
    {
    case WM_INITDIALOG :

        // ---------------------------------------------------
        // Initialize Scan Time Edit, Maximum accuracy: 40 ms
        // ---------------------------------------------------

        itoa(gwScanTime, szBuffer, 10);
        SendDlgItemMessage(hDlg, IDC_SCAN, EM_REPLACESEL, 0,
                        (LPARAM)((LPSTR)szBuffer));

        return TRUE;

    case WM_COMMAND :

         switch (LOWORD(wParam))
         {
            case IDOK :

                //
                // get scan time
                //

                if (SendDlgItemMessage(hDlg, IDC_SCAN,
                           EM_GETMODIFY, 0, 0))
                {
                    SendDlgItemMessage(hDlg, IDC_SCAN,
                            WM_GETTEXT, 10, (LPARAM)(LPSTR)szBuffer) ;
                    gwScanTime = atoi(szBuffer);
                    SendDlgItemMessage(hDlg, IDC_SCAN,
                              EM_SETMODIFY, FALSE, 0) ;
                }

            case IDCANCEL :
                EndDialog(hDlg, 0);
                return TRUE;

         }
         break;
    }
    return FALSE ;
}


/***************************************************************************
    FUNCTION: MainWndProc(HWND, unsigned, WPARAM, LPARAM)

    PURPOSE:  Processes messages

    MESSAGES:

        WM_CREATE     - create window
        WM_COMMAND    - application menu (About dialog box)
        WM_DESTROY    - destroy window
****************************************************************************/

long FTYPE MainWndProc
(
    HWND        hWnd,                          // window handle
    unsigned    message,                       // type of message
    WPARAM      wParam,                        // additional information
    LPARAM      lParam                         // additional information
)
{
    static  HANDLE  hInstance ;
    HMENU           hMenu;
    HDC             hdc;
    char            szBuffer[120];
    RECT            rect;
    DWORD           dwCurrentTime;
    DWORD           dwErrorTime;
    BOOL            bTimerOverrun;
    DWORD           dwExitCode;

    switch (message)
    {
        case WM_CREATE:

            //
            // initialize Stop Menu
            //

            hMenu = GetMenu(hWnd);
            EnableMenuItem(hMenu, IDM_STOP, MF_BYCOMMAND | MF_GRAYED);

            hInstance = ((LPCREATESTRUCT) lParam)->hInstance;

            lpfnConfigDlgProc = MakeProcInstance (ConfigDlgProc, hInstance);

            lpfnScanDlgProc = MakeProcInstance (ScanDlgProc, hInstance);

            return 0 ;

        case WM_COMMAND:     /* message: from application menu */

            hMenu = GetMenu(hWnd);

            switch (LOWORD(wParam))
            {
                case IDM_SETTING :
                   KillTimer(hWnd, 1); 
                   DialogBox (hInstance, MAKEINTRESOURCE(IDD_SETTING),
                         hWnd, lpfnConfigDlgProc) ;
                    return 0;

                case IDM_SCAN :
                    DialogBox (hInstance, MAKEINTRESOURCE(IDD_SCAN),
                         hWnd, lpfnScanDlgProc) ;
                    return 0;

                case IDM_STOP :

                    //
                    // kill timer and close driver
                    //
                    KillTimer(hWnd, 1);
                    
                    gwStopFlag = 1;
				        
                    // Close thread
			           bThreadloop = FALSE;

⌨️ 快捷键说明

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