我使用的第三方控件是WINIO,并口上,SCL是pin2,SDA的写是pin3,SDA读是pin13
   delay(): 延时函数
   sclhigh(): SCL置1
   scllow():  SCL置0
   sdahigh(): SDA置1
   sdalow():  SDA置0
   
   I2C启动函数
   Sub I_start()           
     Call sclhigh
     Call delay
     Call sdalow
     Call delay
     Call scllow
     Call delay
   End Sub
  
  停止函数 
  Sub I_stop()
    Call sdalow
    Call delay
    Call sclhigh
    Call delay
    Call sdahigh
    Call delay
    Call scllow
    Call delay
  End Sub
  
  
  Function I_clock() As Boolean
    Dim sample As Boolean                            'bit I_clock(void) {
    Dim Result As Boolean                            'bit sample;
    Dim portVal As Long                              'SCL = HIGH;
    Dim a As Byte                                    'delay();
    Call sclhigh                                     'sample = SDA;
    Call delay                                       'SCL = LOW;
    Result = GetPortVal(&H379, portVal, 1)           'delay();
    a = portVal And &H10                             'return(sample);
    If a <> 0 Then                                   '}
      sample = 1
    Else
      sample = 0                                     '并口13脚是地址为379的状态位第4位
    End If
    Call scllow
    Call delay
    I_clock = sample
  End Function
  
  
  以下2个函数是向I2C发送8位数据
  Sub judge(ByVal a As Byte)
    Dim Result As Boolean
    If a <> 0 Then
      portValue = portValue Or &H2                    '置SDA位为 portVaule = &H1 Or portVaule
      Result = SetPortVal(&H378, portValue, 1)
    Else
      portValue = portValue And &HFD                  '置SDA位为0
      Result = SetPortVal(&H378, portValue, 1)
    End If
  End Sub  Function I_send(ByVal I_data As Byte) As Boolean   '发送i_data数据
    Dim j As Byte
    Dim sample As Boolean                              'bit I_send(byte I_data)
    j = I_data And &H80                               '{
    judge (j)                                         'register byte i;
   Call I_clock                                      'for(i=0;i<8;i++)
    j = I_data And &H40                               '{
    judge (j)                                         'SDA = (bit)(I_data & 0x80);
    Call I_clock                                      'I_data =I_data << 1;
    j = I_data And &H20                               'I_clock();
    judge (j)                                         '}
    Call I_clock                                      '/*请求应答信号ACK*/
    j = I_data And &H10                               'SDA=HIGH;
    judge (j)                                         ' return(~I_clock());
    Call I_clock                                      '}
    j = I_data And &H8
    judge (j)
    Call I_clock
    j = I_data And &H4
    judge (j)
    Call I_clock
    j = I_data And &H2
    judge (j)
    Call I_clock
    j = I_data And &H1
    judge (j)
    sample = I_clock
    Call sdahigh
    I_send = Not sample
  End Function
  
  发送地址
  Sub E_address()
    Dim i As Byte
    addrlow = address And &HFF                  '取低8位
    For i = 1 To 8
      address = address \ 2
    Next i
    addrmiddle = address And &HFF
    Call I_send(w)
    Call I_send(addrmiddle)
    Call I_send(addrlow)
  End Sub
  
  以上几个关键的时序程序望前辈们看下,是不是合理?我在对并口使用VB操作的时候,老是写不进去~郁闷啊,谢谢了啊!