...reference to discussion at http://www.powerbasic.com/support/pb...ad.php?t=36267

Code:
'------------------------------------------------------------------------------
' DEMO;
' User interface supplied with Velleman Kit K8055 USB Experiment Interface Board
'
' Kit w/DLL located at;
' [url]http://www.vellemanusa.com/us/enu/product/view/?id=500349[/url]
'
' VB to PBWIN8 v8.04 translated by: Jules Marchildon
' Date created: Feb 3nd, 2008
'
'------------------------------------------------------------------------------
#COMPILE EXE
#DIM ALL

'---Includes...
#INCLUDE "WIN32API.INC"
#INCLUDE "COMMCTRL.INC"
#INCLUDE "PBForms.INC"
#INCLUDE "K8055D.INC"        'Velleman K8055D.DLL header

'---Constants...
%IDD_Form1           =  101  'main form

%IDC_Check1_1        = 1000  'card address SK5
%IDC_Check1_0        = 1001  'card address SK6
%IDC_Connect         = 1002  'connect button
%IDC_Label1          = 1003  'connect status

%IDC_Text1           = 1100  'counter 1 textbox, value
%IDC_Reset1          = 1101  'counter 1 reset button
%IDC_Option1_0       = 1102  'counter 1 debounce time 0ms
%IDC_Option1_1       = 1103  'counter 1 debounce time 2ms
%IDC_Option1_2       = 1104  'counter 1 debounce time 10ms
%IDC_Option1_3       = 1105  'counter 1 debounce time 1000ms

%IDC_Text2           = 1200  'counter 2 textbox, value
%IDC_Reset2          = 1201  'counter 2 reset button
%IDC_Option2_0       = 1202  'counter 2 debounce time 0ms
%IDC_Option2_1       = 1203  'counter 2 debounce time 2ms
%IDC_Option2_2       = 1204  'counter 2 debounce time 10ms
%IDC_Option2_3       = 1205  'counter 2 debounce time 1000ms

%IDC_SetAllDig       = 1300  'set all digital button
%IDC_ClearAllDig     = 1301  'clear all digital button
%IDC_SetAllAnalog1   = 1302  'set all analog button
%IDC_ClearAllAnalog1 = 1303  'clear all analog button
%IDC_Check4          = 1304  'output text checkbox

%IDC_Check3_0        = 1402  'set digital output checkbox,LD1 LED
%IDC_Check3_1        = 1403  'set digital output checkbox,LD2 LED
%IDC_Check3_2        = 1404  'set digital output checkbox,LD3 LED
%IDC_Check3_3        = 1405  'set digital output checkbox,LD4 LED
%IDC_Check3_4        = 1406  'set digital output checkbox,LD5 LED
%IDC_Check3_5        = 1407  'set digital output checkbox,LD6 LED
%IDC_Check3_6        = 1408  'set digital output checkbox,LD7 LED
%IDC_Check3_7        = 1409  'set digital output checkbox,LD8 LED

%IDC_Check2_0        = 1500  'status digital input checkbox,Inp1 sw
%IDC_Check2_1        = 1501  'status digital input checkbox,Inp2 sw
%IDC_Check2_2        = 1502  'status digital input checkbox,Inp3 sw
%IDC_Check2_3        = 1503  'status digital input checkbox,Inp4 sw
%IDC_Check2_4        = 1504  'status digital input checkbox,Inp5 sw

%IDC_VTrackbar1      = 1601  'DA1 trackbar PWM1-LD9  LED brightness
%IDC_Label3          = 1602  'DA1 status value
%IDC_VTrackbar2      = 1603  'DA2 trackbar PWM2-LD10 LED brightness
%IDC_Label4          = 1604  'DA2 status value

%IDC_Vprogress1      = 1605  'AD1 progress bar   ATT1 adj trimpot
%IDC_Label7          = 1606  'AD1 status value
%IDC_Vprogress2      = 1607  'AD1 progress bar   ATT2 adj trimpot
%IDC_Label9          = 1608  'AD1 status value

%IDC_Timer1          = 1700  'timer 1
%IDC_Timer2          = 1701  'timer 2

%IDC_Frame1          = 1800  'Card Address
%IDC_Frame2          = 1801  'DA1
%IDC_Frame3          = 1802  'DA2
%IDC_Frame4          = 1803  'AD1
%IDC_Frame5          = 1804  'AD3
%IDC_Frame6          = 1805  'Inputs
%IDC_Frame7          = 1806  'Outputs
%IDC_Frame8          = 1807  'Counter1
%IDC_Frame9          = 1808  'Counter2

%IDC_Label10         = 1900  'Debounce Time
%IDC_Label11         = 1901  'Debounce Time

%ADC_MIN             = 0     'corresponds to a minimum input of 0V (8Bit ADC)
%ADC_MAX             = 255   'corresponds to a maximum input of +5V (8bit ADC)
%DAC_MIN             = 0     'corresponds to a minimum output of 0V (8Bit DAC)
%DAC_MAX             = 255   'corresponds to a maximum output of +5V (8Bit DAC)

'---Delcares...
DECLARE CALLBACK FUNCTION ShowForm1Proc()
DECLARE FUNCTION ShowForm1(BYVAL hParent AS DWORD) AS LONG

'------------------------------------------------------------------------------
'
'------------------------------------------------------------------------------
FUNCTION GetCardAddress(BYVAL hDlg AS DWORD,BYVAL idCheckSK5 AS LONG,BYVAL idCheckSK6 AS LONG) AS LONG

    LOCAL SK5 AS LONG, SK6 AS LONG

    '  --------------------------
    ' | SK5 | SK6 | CARD ADDRESS |
    '  ------------- ------------
    ' | ON  | ON  |      0       |
    ' | OFF | ON  |      1       |
    ' | ON  | OFF |      2       |
    ' | OFF | OFF |      3       |
    '  --------------------------

    CONTROL GET CHECK hDlg, idCheckSK5 TO SK5
    CONTROL GET CHECK hDlg, idCheckSK6 TO SK6

    IF     SK5 = 1 AND SK6 = 1 THEN
        FUNCTION = 0  'card address 0
    ELSEIF SK5 = 0 AND SK6 = 1 THEN
        FUNCTION = 1  'card address 1
    ELSEIF SK5 = 0 AND SK6 = 1 THEN
        FUNCTION = 2  'card address 2
    ELSEIF SK5 = 0 AND SK6 = 1 THEN
        FUNCTION = 3  'card address 3
    ELSE
        FUNCTION = -1 'error
    END IF

END FUNCTION

'------------------------------------------------------------------------------
'
'------------------------------------------------------------------------------
FUNCTION ConnectToUSBK8055D(BYVAL hDlg AS DWORD) AS LONG

    LOCAL cardAddress AS LONG
    LOCAL lrt AS LONG
    LOCAL cstatus AS STRING

    cardAddress = GetCardAddress(hDlg,%IDC_Check1_0,%IDC_Check1_1)

    lrt = OpenDevice(CardAddress)

    IF lrt = -1 THEN
        cstatus$ = "Card " & STR$(cardAddress) & "  not found !"
    ELSE
        cstatus$ = "Card " & STR$(lrt) & "  Connected !"
    END IF

    CONTROL SET TEXT hDlg,%IDC_Label1 , cstatus$

    FUNCTION = lrt

END FUNCTION

'------------------------------------------------------------------------------
'
'------------------------------------------------------------------------------
SUB UpdateDigitalOutputStatus(BYVAL hDlg AS DWORD, BYVAL bport AS LONG )

      'valid bport param, &HFF, &B00001111, 0-255

      LOCAL idx AS LONG
      LOCAL vbit AS LONG

      FOR idx = 0 TO 7
        vbit = BIT(bport, idx)
        CONTROL SET CHECK hDlg ,%IDC_Check3_0 + idx, vbit
      NEXT idx

END SUB

'------------------------------------------------------------------------------
'
'------------------------------------------------------------------------------
SUB UpdateAnalogInputStatus(BYVAL hDlg AS DWORD)

    LOCAL adc1 AS LONG, adc2 AS LONG

    '-fetch the analog channel values, valid range is 0-255
    CALL ReadAllAnalog(BYVAL VARPTR(adc1), BYVAL VARPTR(adc2))

    CONTROL SEND hDlg, %IDC_Vprogress1, %PBM_SETPOS, adc1, 0 'AD1
    CONTROL SEND hDlg, %IDC_Vprogress2, %PBM_SETPOS, adc2, 0 'AD2

    '-update the values, show as resolution between 0-255 bit
    CONTROL SET TEXT hDlg,%IDC_Label7, STR$(adc1) 'bottom of AD1 frame
    CONTROL SET TEXT hDlg,%IDC_Label9, STR$(adc2) 'bottom of AD2 frame

END SUB

'------------------------------------------------------------------------------
'
'------------------------------------------------------------------------------
SUB UpdateAnalogOutputStatus(BYVAL hDlg AS DWORD, BYVAL dac1 AS BYTE, BYVAL dac2 AS BYTE)

    '-NOTE:
    ' The trackbar is in vertical position, 0 at the top, 255 at the bottom
    ' we flip position 0 at the bottom and 255 at the top
    
    '-send value to both channels on card, flipping the value
    CALL OutputAnalogChannel(1, 255-dac1)
    CALL OutputAnalogChannel(2, 255-dac2)

    '-update the position of the  trackbars
    ' not necessary like scrollbars, but caller can set it manually with this call.
    CONTROL SEND hDlg,%IDC_VTrackbar1,%TBM_SETPOS,%TRUE, dac1  'DA1
    CONTROL SEND hDlg,%IDC_VTrackbar2,%TBM_SETPOS,%TRUE, dac2  'DA2

    '--we flip the value for display visually 0 at the bottom, 255 at the top
    CONTROL SET TEXT hDlg,%IDC_Label3, STR$(255-dac1)
    CONTROL SET TEXT hDlg,%IDC_Label4, STR$(255-dac2)

END SUB

'------------------------------------------------------------------------------
'
'------------------------------------------------------------------------------
SUB UpdateReadDigitalInputs(BYVAL hDlg AS DWORD)

    LOCAL ip AS LONG, idx AS LONG

    DIM bflag(0:4) AS LONG

    ip = ReadAllDigital()

    bflag(0) = (ip AND 1)
    bflag(1) = (ip AND 2)  / 2
    bflag(2) = (ip AND 4)  / 4
    bflag(3) = (ip AND 8)  / 8
    bflag(4) = (ip AND 16) / 16

    FOR idx = 0 TO 4
        CONTROL SET CHECK hDlg, %IDC_Check2_0 +idx, bflag(idx)
    NEXT idx

END SUB


'------------------------------------------------------------------------------
'
'------------------------------------------------------------------------------
SUB GetDigitalCheckboxState(BYVAL hDlg AS DWORD)

    LOCAL idx AS LONG
    LOCAL bflag AS LONG
    LOCAL writebyte AS BYTE

    '-get all the checkbox states
    FOR idx = 0 TO 7
        CONTROL GET CHECK hDlg,%IDC_Check3_0 +idx TO bflag
        IF bflag = 1 THEN
            BIT SET writebyte,idx
        END IF
    NEXT idx

    '-send them to the card...
    CALL WriteAllDigital(writebyte)

END SUB

'------------------------------------------------------------------------------
'
'------------------------------------------------------------------------------
SUB GetDebounceTimeOptionStatus(BYVAL hDlg AS DWORD, BYVAL id AS LONG)

    LOCAL nCounter AS LONG, nTime AS LONG

    '-identify option button checked and counter to set
    SELECT CASE id
        CASE %IDC_Option1_0 : nCounter = 1 : nTime = 0
        CASE %IDC_Option1_1 : nCounter = 1 : nTime = 2
        CASE %IDC_Option1_2 : nCounter = 1 : nTime = 10
        CASE %IDC_Option1_3 : nCounter = 1 : nTime = 1000
        CASE %IDC_Option2_0 : nCounter = 2 : nTime = 0
        CASE %IDC_Option2_1 : nCounter = 2 : nTime = 2
        CASE %IDC_Option2_2 : nCounter = 2 : nTime = 10
        CASE %IDC_Option2_3 : nCounter = 2 : nTime = 1000
    END SELECT

    CALL SetCounterDebounceTime(nCounter, nTime)

END SUB

'------------------------------------------------------------------------------
'
'------------------------------------------------------------------------------
FUNCTION PBMAIN()
    STATIC hLib AS DWORD
    hLib = LoadLibrary("K8055D.DLL")
    IF hLib = %NULL  THEN
        MSGBOX "Error loading K8055D.DLL"
    END IF
    PBFormsInitComCtls( %ICC_WIN95_CLASSES OR %ICC_DATE_CLASSES OR %ICC_INTERNET_CLASSES ) 'Macro
    CALL ShowForm1(%HWND_DESKTOP)
    CALL FreeLibrary(hLib)
END FUNCTION

'------------------------------------------------------------------------------
'
'------------------------------------------------------------------------------
CALLBACK FUNCTION ShowForm1Proc()

    LOCAL  lrt         AS LONG
    LOCAL  cstatus     AS STRING
    STATIC cardAddress AS LONG
    STATIC hTimer1     AS LONG,  hTimer2 AS LONG
    LOCAL  tPos1       AS LONG,  tPos2   AS LONG
    STATIC bLEDstatus  AS BYTE
    STATIC LEDcount    AS LONG

    '---
    SELECT CASE AS LONG CBMSG

        '---
        CASE %WM_INITDIALOG

            '-set default Card Address to 0
            CONTROL SET CHECK CBHNDL, %IDC_Check1_0, 1 'SK5
            CONTROL SET CHECK CBHNDL, %IDC_Check1_1, 1 'SK6

            '-initialize trackbars for DAC output display
            CONTROL SEND CBHNDL,%IDC_VTrackbar1,%TBM_SETRANGE,%TRUE,MAKDWD(%DAC_MIN,%DAC_MAX)
            CONTROL SEND CBHNDL,%IDC_VTrackbar1,%TBM_SETTICFREQ,8,0
            CONTROL SEND CBHNDL,%IDC_VTrackbar1,%TBM_SETPAGESIZE,0,16
            CONTROL SEND CBHNDL,%IDC_VTrackbar2,%TBM_SETRANGE,%TRUE,MAKDWD(%DAC_MIN,%DAC_MAX)
            CONTROL SEND CBHNDL,%IDC_VTrackbar2,%TBM_SETTICFREQ,8,0
            CONTROL SEND CBHNDL,%IDC_VTrackbar2,%TBM_SETPAGESIZE,0,16
            
            '-NOTE: we flip this around for visual effect only, 255=top, 0=bottom
            CALL UpdateAnalogOutputStatus(CBHNDL,255,255)   'set thumb pos to min

            '-initialize progress bars for ADC input display
            CONTROL SEND CBHNDL,%IDC_Vprogress1,%PBM_SETRANGE,0,MAKDWD(%ADC_MIN,%ADC_MAX)
            CONTROL SEND CBHNDL,%IDC_Vprogress1,%PBM_SETPOS, 0, 0
            CONTROL SEND CBHNDL,%IDC_Vprogress2,%PBM_SETRANGE,0,MAKDWD(%ADC_MIN,%ADC_MAX)
            CONTROL SEND CBHNDL,%IDC_Vprogress2,%PBM_SETPOS, 0, 0

            '-set Card Debounce time to default 2ms, make sure card is updated.
            CONTROL SET CHECK CBHNDL, %IDC_Option1_1, 1
            CONTROL SET CHECK CBHNDL, %IDC_Option2_1, 1
            CALL GetDebounceTimeOptionStatus(CBHNDL,%IDC_Option1_1)
            CALL GetDebounceTimeOptionStatus(CBHNDL,%IDC_Option2_1)


        '---
        CASE %WM_NCACTIVATE
            STATIC hWndSaveFocus AS DWORD
            IF ISFALSE CBWPARAM THEN
                hWndSaveFocus = GetFocus()
            ELSEIF hWndSaveFocus THEN
                SetFocus(hWndSaveFocus)
                hWndSaveFocus = 0
            END IF


        '---
        CASE %WM_TIMER
            SELECT CASE AS LONG CBWPARAM
                '---
                CASE %IDC_Timer1  'poll all inputs and counters.
                    CALL UpdateAnalogInputStatus(CBHNDL)
                    CALL UpdateReadDigitalInputs(CBHNDL)
                    CONTROL SET TEXT CBHNDL,%IDC_Text1,STR$(ReadCounter(1))
                    CONTROL SET TEXT CBHNDL,%IDC_Text2,STR$(ReadCounter(2))
                '---
                CASE %IDC_Timer2  'output LED rotate test
                    CALL ClearDigitalChannel(LEDcount + 1)
                    INCR LEDcount
                    IF LEDcount = 8 THEN LEDcount = 0 : bLEDstatus = &B10000000
                    CALL SetDigitalChannel(LEDcount + 1)
                    ROTATE LEFT bLedStatus,1
                    CALL UpdateDigitalOutputStatus(CBHNDL,bLEDstatus)
            END SELECT


        '---
        CASE %WM_COMMAND

            SELECT CASE AS LONG CBCTL

                '---Card Address
                CASE %IDC_Check1_0 'SK5
                CASE %IDC_Check1_1 'SK6

                '---
                CASE %IDC_Connect          '<-Connect to Card button
                    IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        lrt = ConnectToUSBK8055D(CBHNDL)
                        IF lrt = 0 OR lrt = 1 OR lrt = 2 OR lrt = 3 THEN
                            IF ISTRUE(hTimer1) THEN CALL KillTimer(CBHNDL, hTimer1)
                            hTimer1 = SetTimer(CBHNDL,%IDC_Timer1,100, BYVAL %NULL)
                        ELSE
                            MSGBOX "Unable To Connect To Device!", %MB_TASKMODAL
                        END IF
                    END IF
                CASE %IDC_SetAllDig        '<-Set All Digital button
                    IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                       CALL SetAllDigital()
                       CALL UpdateDigitalOutputStatus(CBHNDL,&B11111111)
                    END IF
                CASE %IDC_ClearAllDig      '<-Clear All Digital button
                    IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        CALL ClearAllDigital()
                        CALL UpdateDigitalOutputStatus(CBHNDL,&B00000000)
                    END IF
                CASE %IDC_SetAllAnalog1    '<-Set All Analog button
                    IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        CALL SetAllAnalog()   'All DA channels 1&2 are set to +5V
                        '--Note: we flip this for visaul effect, 0=bottom, 255=top
                        CALL UpdateAnalogOutputStatus(CBHNDL,0,0)
                    END IF
                CASE %IDC_ClearAllAnalog1  '<-Clear All Analog button
                    IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        CALL ClearAllAnalog() 'All DA channels 1&2 are set to 0V
                        '--Note: we flip this for visaul effect, 0=bottom, 255=top
                        CALL UpdateAnalogOutputStatus(CBHNDL,255,255)
                    END IF
                CASE %IDC_Reset1           '<-Reset button, counter 1
                    IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        CALL ResetCounter(1)
                    END IF
                CASE %IDC_Reset2           '<-Reset button, counter 2
                    IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        CALL ResetCounter(2)
                    END IF

                '---Output Test, Rotate LEDS...
                CASE %IDC_Check4
                    IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        CONTROL GET CHECK CBHNDL, %IDC_Check4 TO lrt
                        IF lrt = 1 THEN
                            bLEDstatus = &B00000000
                            hTimer2 = SetTimer(CBHNDL,%IDC_Timer2,50, BYVAL %NULL)
                        ELSE
                            CALL KillTimer(CBHNDL, hTimer2)
                            'CALL ClearAllDigital()
                            'CALL UpdateDigitalOutputStatus(CBHNDL,&B00000000)
                        END IF
                    END IF

                '---Digital Outputs checkbox group
                CASE %IDC_Check3_0, _
                     %IDC_Check3_1, _
                     %IDC_Check3_2, _
                     %IDC_Check3_3, _
                     %IDC_Check3_4, _
                     %IDC_Check3_5, _
                     %IDC_Check3_6, _
                     %IDC_Check3_7
                        IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                            CALL GetDigitalCheckboxState(CBHNDL)
                        END IF

                '---Counter 1 option group
                CASE %IDC_Option1_0, _
                     %IDC_Option1_1, _
                     %IDC_Option1_2, _
                     %IDC_Option1_3
                        IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                            CALL GetDebounceTimeOptionStatus(CBHNDL,CBCTL)
                        END IF
                '---Counter 2 option group
                CASE %IDC_Option2_0, _
                     %IDC_Option2_1, _
                     %IDC_Option2_2, _
                     %IDC_Option2_3
                        IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                            CALL GetDebounceTimeOptionStatus(CBHNDL,CBCTL)
                        END IF
            END SELECT

        '---
        CASE %WM_VSCROLL '-handle both trackbars...
            SELECT CASE LOWRD(CBWPARAM)
                CASE %TB_THUMBTRACK, _   '-Mouse
                     %TB_LINEDOWN,   _   '-Keyboard
                     %TB_LINEUP,     _   '-Keyboard
                     %TB_PAGEDOWN,   _   '-Keyboard
                     %TB_PAGEUP,     _   '-Keyboard
                     %TB_TOP,        _   '-Keyboard
                     %TB_BOTTOM          '-Keyboard
                    CONTROL SEND CBHNDL,%IDC_VTrackbar1,%TBM_GETPOS,0,0 TO tPos1
                    CONTROL SEND CBHNDL,%IDC_VTrackbar2,%TBM_GETPOS,0,0 TO tPos2
                    tPos1 = LOWRD(tPos1) : tPos2 = LOWRD(tPos2)
                    CALL UpdateAnalogOutputStatus(CBHNDL,tPos1,tPos2)
            END SELECT

        '---
        CASE %WM_DESTROY
            CALL CloseDevice() '<-unload the USB K8055D device drivers
            IF ISTRUE(hTimer1) THEN CALL KillTimer(CBHNDL, hTimer1)
            IF ISTRUE(hTimer2) THEN CALL KillTimer(CBHNDL, hTimer2)

        '---
        CASE %WM_CLOSE


    END SELECT
END FUNCTION

'------------------------------------------------------------------------------
'
'------------------------------------------------------------------------------
FUNCTION ShowForm1(BYVAL hParent AS DWORD) AS LONG

    LOCAL lRslt  AS LONG
    LOCAL hDlg   AS DWORD
    LOCAL hFont1 AS DWORD

    DIALOG NEW hParent, "K8055 USB Experiment Interface Demo", 131, 82, 406, 211, %WS_POPUP OR _
        %WS_VISIBLE OR %WS_CLIPSIBLINGS OR %WS_BORDER OR %WS_DLGFRAME OR %DS_3DLOOK OR %DS_NOFAILCREATE _
        OR %DS_SETFONT OR %WS_SYSMENU OR %WS_THICKFRAME, %WS_EX_LEFT OR %WS_EX_LTRREADING _
        OR %WS_EX_RIGHTSCROLLBAR OR %WS_EX_CONTROLPARENT OR %WS_EX_APPWINDOW, TO hDlg

    CONTROL ADD FRAME,   hDlg, %IDC_Frame1,   "Card Address", 5, 2, 73, 31
    CONTROL ADD CHECKBOX,hDlg, %IDC_Check1_0, "SK5", 13, 15, 28, 10
    CONTROL ADD CHECKBOX,hDlg, %IDC_Check1_1, "SK6", 45, 15, 28, 10

    CONTROL ADD BUTTON,hDlg, %IDC_Connect, "Connect", 5, 39, 73, 18
    CONTROL ADD LABEL, hDlg, %IDC_Label1,  "- - -", 8, 62, 80, 8

    CONTROL ADD BUTTON, hDlg, %IDC_SetAllAnalog1,   "Set All Analog",   5, 148, 73, 13
    CONTROL ADD BUTTON, hDlg, %IDC_ClearAllAnalog1, "Clear All Analog", 5, 162, 73, 13

    CONTROL ADD CHECKBOX,hDlg, %IDC_Check4,   "Output Test", 5, 185, 73, 15

    CONTROL ADD FRAME, hDlg, %IDC_Frame2,   "DA1", 91, 2, 31, 198
    CONTROL ADD LABEL, hDlg, %IDC_Label3,   " 0",96,188,20,8,%WS_CHILD _
                OR %WS_VISIBLE OR %SS_CENTER, %WS_EX_LEFT OR %WS_EX_LTRREADING

    CONTROL ADD "msctls_trackbar32", hDlg, %IDC_VTrackbar1,"",94,15,25,170,%WS_CHILD _
                OR %WS_VISIBLE OR %WS_TABSTOP OR %TBS_VERT OR %TBS_LEFT OR %TBS_AUTOTICKS

    CONTROL ADD FRAME, hDlg, %IDC_Frame3,   "DA2", 126, 2, 31, 198
    CONTROL ADD LABEL, hDlg, %IDC_Label4,   " 0", 132, 188, 20,8,%WS_CHILD _
                OR %WS_VISIBLE OR %SS_CENTER, %WS_EX_LEFT OR %WS_EX_LTRREADING
    CONTROL ADD "msctls_trackbar32", hDlg, %IDC_VTrackbar2,"",129,15,25,170,%WS_CHILD _
                OR %WS_VISIBLE OR %WS_TABSTOP OR %TBS_VERT OR %TBS_LEFT OR %TBS_AUTOTICKS

    CONTROL ADD FRAME, hDlg, %IDC_Frame4,   "AD1", 165, 2, 28, 198
    CONTROL ADD LABEL, hDlg, %IDC_Label7,   "00", 168, 188, 20, 8,%WS_CHILD _
                OR %WS_VISIBLE OR %SS_CENTER, %WS_EX_LEFT OR %WS_EX_LTRREADING

    CONTROL ADD "msctls_progress32", hDlg, %IDC_Vprogress1,"",173,15,12,170, %WS_CHILD _
                 OR %WS_VISIBLE OR %PBS_SMOOTH OR %PBS_VERTICAL

    CONTROL ADD FRAME, hDlg, %IDC_Frame5,   "AD2", 197, 2, 28, 198
    CONTROL ADD LABEL, hDlg, %IDC_Label9,   "00", 200, 188, 20, 8,%WS_CHILD _
                OR %WS_VISIBLE OR %SS_CENTER, %WS_EX_LEFT OR %WS_EX_LTRREADING

    CONTROL ADD "msctls_progress32", hDlg, %IDC_Vprogress2,"",205,15,12,170, %WS_CHILD _
                OR %WS_VISIBLE OR %PBS_SMOOTH OR %PBS_VERTICAL

    CONTROL ADD BUTTON,  hDlg, %IDC_SetAllDig,   "Set All Digital", 5,113,73, 13
    CONTROL ADD BUTTON,  hDlg, %IDC_ClearAllDig, "Clear All Digital",5,128, 73, 13

    CONTROL ADD FRAME,    hDlg, %IDC_Frame6,   "Inputs", 240, 2, 105, 31
    CONTROL ADD CHECKBOX, hDlg, %IDC_Check2_0, "1", 245, 15, 22, 10
    CONTROL ADD CHECKBOX, hDlg, %IDC_Check2_1, "2", 264, 15, 22, 10
    CONTROL ADD CHECKBOX, hDlg, %IDC_Check2_2, "3", 283, 15, 22, 10
    CONTROL ADD CHECKBOX, hDlg, %IDC_Check2_3, "4", 301, 15, 22, 10
    CONTROL ADD CHECKBOX, hDlg, %IDC_Check2_4, "5", 323, 15, 19, 10


    CONTROL ADD FRAME,    hDlg, %IDC_Frame7,   "Outputs", 240, 39, 158, 31
    CONTROL ADD CHECKBOX, hDlg, %IDC_Check3_0, "1", 245, 52, 17, 10
    CONTROL ADD CHECKBOX, hDlg, %IDC_Check3_1, "2", 264, 52, 17, 10
    CONTROL ADD CHECKBOX, hDlg, %IDC_Check3_2, "3", 283, 52, 16, 10
    CONTROL ADD CHECKBOX, hDlg, %IDC_Check3_3, "4", 301, 52, 17, 10
    CONTROL ADD CHECKBOX, hDlg, %IDC_Check3_4, "5", 320, 52, 17, 10
    CONTROL ADD CHECKBOX, hDlg, %IDC_Check3_5, "6", 339, 52, 16, 10
    CONTROL ADD CHECKBOX, hDlg, %IDC_Check3_6, "7", 357, 52, 17, 10
    CONTROL ADD CHECKBOX, hDlg, %IDC_Check3_7, "8", 376, 52, 17, 10


    CONTROL ADD FRAME,  hDlg, %IDC_Frame8,    "Counter1",     240, 94, 73, 106
    CONTROL ADD TEXTBOX,hDlg, %IDC_Text1,     "0",            248, 106, 57, 12
    CONTROL ADD BUTTON, hDlg, %IDC_Reset1,    "Reset",        248, 121, 54, 13
    CONTROL ADD LABEL,  hDlg, %IDC_Label10,   "Debounce Time",248, 138, 54,8
    CONTROL ADD OPTION, hDlg, %IDC_Option1_0, "0ms",          248, 148, 30, 8, _
                %WS_CHILD OR %WS_VISIBLE OR %WS_GROUP OR %WS_TABSTOP OR %BS_TEXT OR _
                %BS_AUTORADIOBUTTON OR %BS_LEFT OR %BS_VCENTER
    CONTROL ADD OPTION, hDlg, %IDC_Option1_1, "2ms",          248, 160, 30, 8
    CONTROL ADD OPTION, hDlg, %IDC_Option1_2, "10ms",         248, 172, 35, 8
    CONTROL ADD OPTION, hDlg, %IDC_Option1_3, "1000ms",       248, 185, 38, 8

    CONTROL ADD FRAME,  hDlg, %IDC_Frame9,    "Counter2",     325, 94, 73,  106
    CONTROL ADD TEXTBOX,hDlg, %IDC_Text2,     "0",            333, 106, 57, 12
    CONTROL ADD BUTTON, hDlg, %IDC_Reset2,    "Reset",        333, 121, 57, 13
    CONTROL ADD LABEL,  hDlg, %IDC_Label11,   "Debounce Time",333, 138, 54, 8
    CONTROL ADD OPTION, hDlg, %IDC_Option2_0, "0ms",          333, 148, 30, 8, _
                %WS_CHILD OR %WS_VISIBLE OR %WS_GROUP OR %WS_TABSTOP OR %BS_TEXT OR _
                %BS_AUTORADIOBUTTON OR %BS_LEFT OR %BS_VCENTER
    CONTROL ADD OPTION, hDlg, %IDC_Option2_1, "2ms",          333, 160, 30, 8
    CONTROL ADD OPTION, hDlg, %IDC_Option2_2, "10ms",         333, 172, 36, 8
    CONTROL ADD OPTION, hDlg, %IDC_Option2_3, "1000ms",       333, 185, 38, 8

    hFont1 = PBFormsMakeFont("MS Sans Serif",8,700,%FALSE,%FALSE,%FALSE,%ANSI_CHARSET)

    CONTROL SEND hDlg, %IDC_Connect,%WM_SETFONT, hFont1, 0
    CONTROL SEND hDlg, %IDC_Label3, %WM_SETFONT, hFont1, 0
    CONTROL SEND hDlg, %IDC_Label4, %WM_SETFONT, hFont1, 0
    CONTROL SEND hDlg, %IDC_Label7, %WM_SETFONT, hFont1, 0
    CONTROL SEND hDlg, %IDC_Label9, %WM_SETFONT, hFont1, 0
    CONTROL SEND hDlg, %IDC_Text2,  %WM_SETFONT, hFont1, 0
    CONTROL SEND hDlg, %IDC_Text1,  %WM_SETFONT, hFont1, 0

    DIALOG SHOW MODAL hDlg, CALL ShowForm1Proc TO lRslt

    CALL DeleteObject(hFont1)

    FUNCTION = lRslt
END FUNCTION
Code:
'------------------------------------------------------------------------------
' K8055 VELLEMAN-kit USB EXPERIMENT INTERFACE BOARD
' HEADER INLCUDE FILE FOR K8055D.DLL  LIBRARY
' FILE NAME: K8055D.INC
' TRANSLATION BY JULES MARCHILDON TO POWERBASIC FOR WINDOWS  PBWIN8 v8.04
'------------------------------------------------------------------------------
DECLARE FUNCTION OpenDevice LIB "K8055D.DLL" ALIAS "OpenDevice" (BYVAL CardAddress AS LONG) AS LONG
DECLARE SUB CloseDevice LIB "K8055D.DLL" ALIAS "CloseDevice" ()
DECLARE FUNCTION ReadAnalogChannel LIB "K8055D.DLL" ALIAS "ReadAnalogChannel"(BYVAL Channel AS LONG) AS LONG
DECLARE SUB SetAnalogChannel LIB "K8055D.DLL" ALIAS "SetAnalogChannel" (BYVAL Channel AS LONG )
DECLARE SUB OutputAnalogChannel LIB "K8055D.DLL" ALIAS "OutputAnalogChannel" (BYVAL Channel AS LONG, BYVAL oData AS LONG)
DECLARE SUB ClearAnalogChannel LIB "K8055D.DLL" ALIAS "ClearAnalogChannel" (BYVAL Channel AS LONG)
DECLARE SUB ReadAllAnalog LIB "K8055D.DLL" ALIAS "ReadAllAnalog" (BYVAL Data1 AS LONG, BYVAL Data2 AS LONG)
DECLARE SUB SetAllAnalog LIB "K8055D.DLL" ALIAS "SetAllAnalog" ()
DECLARE SUB OutputAllAnalog LIB "K8055D.DLL" ALIAS "OutputAllAnalog" (BYVAL Data1 AS LONG, BYVAL Data2 AS LONG)
DECLARE SUB ClearAllAnalog LIB "K8055D.DLL" ALIAS "ClearAllAnalog" ()
DECLARE SUB WriteAllDigital LIB "K8055D.DLL" ALIAS "WriteAllDigital" (BYVAL aData AS LONG)
DECLARE SUB ClearAllDigital LIB "K8055D.DLL" ALIAS "ClearAllDigital" ()
DECLARE SUB SetDigitalChannel LIB "K8055D.DLL" ALIAS "SetDigitalChannel" (BYVAL Channel AS LONG)
DECLARE FUNCTION ReadDigitalChannel LIB "K8055D.DLL" ALIAS "ReadDigitalChannel" (BYVAL Channel AS LONG) AS LONG
DECLARE SUB SetAllDigital LIB "K8055D.DLL" ALIAS "SetAllDigital" ()
DECLARE FUNCTION ReadAllDigital LIB "K8055D.DLL" ALIAS "ReadAllDigital" () AS LONG
DECLARE SUB ClearDigitalChannel LIB "K8055D.DLL" ALIAS "ClearDigitalChannel" (BYVAL Channel AS LONG)
DECLARE SUB SetCounterDebounceTime LIB "K8055D.DLL" ALIAS "SetCounterDebounceTime" (BYVAL CounterNr AS LONG, BYVAL DebounceTime AS LONG)
DECLARE SUB ResetCounter LIB "K8055D.DLL" ALIAS "ResetCounter" (BYVAL CounterNr AS LONG)
DECLARE FUNCTION ReadCounter LIB "K8055D.DLL" ALIAS "ReadCounter" (BYVAL CounterNr AS LONG) AS LONG