有个VB的列子,可以通过读取HZK16和ASC16这2个UCDOS下的文件,再通过MSCOMM控件写入LED显示屏,来显示点阵汉字,请问要如何修改到C#上使用呢?Function CALL_LED(ledstring As String) As String
Dim zw(1 To 32) As Byte
Dim zc(1 To 32) As Byte
Dim zimo As Integer
For I = 1 To Len(ledstring) Step 1
    If Asc(Mid$(ledstring, I, 1)) < 0 Then
    '写入的是汉字
     If zimo = 1 Then MSComLED.Output = zc: zimo = 0
     AA = Hex(Asc(Mid(ledstring, I, 1)))
     bb = (94 * (CLng("&H" & Mid(AA, 1, 2)) - &HA1) + (CLng("&H" & Mid(AA, 3, 2)) - &HA1)) * 32 + 1
     HzFile = App.Path + "\" + "hzk16"
     Open HzFile For Binary Access Read As #1 '读取该汉字在16*16点阵字库中的原始字模
     Get #1, bb, zw
     Close #1
     MSComLED.Output = zw
    Else
    '写入的不是汉字
     If zimo = 0 Then
     AA = Hex(Asc(Mid(ledstring, I, 1)))
     bb = (CLng("&H" & Mid(AA, 1, 2))) * 16 + 1
     HzFile = App.Path + "\" + "ASC16"
     Open HzFile For Binary Access Read As #2 '读取该汉字在8*16点阵字库中的原始字模
     Get #2, bb, zw
     Close #2
     zc(1) = zw(1): zc(3) = zw(2): zc(5) = zw(3): zc(7) = zw(4): zc(9) = zw(5): zc(11) = zw(6)
     zc(13) = zw(7): zc(15) = zw(8): zc(17) = zw(9): zc(19) = zw(10): zc(21) = zw(11): zc(23) = zw(12)
     zc(25) = zw(13): zc(27) = zw(14): zc(29) = zw(15): zc(31) = zw(16): zimo = 1
     zc(2) = 0: zc(4) = 0: zc(6) = 0: zc(8) = 0: zc(10) = 0: zc(12) = 0: zc(14) = 0: zc(16) = 0
     zc(18) = 0: zc(20) = 0: zc(22) = 0: zc(24) = 0: zc(26) = 0: zc(28) = 0: zc(30) = 0: zc(32) = 0
     Else
     AA = Hex(Asc(Mid(ledstring, I, 1)))
     bb = (CLng("&H" & Mid(AA, 1, 2))) * 16 + 1
     HzFile = App.Path + "\" + "ASC16"
     Open HzFile For Binary Access Read As #3 '读取该汉字在8*16点阵字库中的原始字模
     Get #3, bb, zw
     Close #3
     zc(2) = zw(1): zc(4) = zw(2): zc(6) = zw(3): zc(8) = zw(4): zc(10) = zw(5): zc(12) = zw(6)
     zc(14) = zw(7): zc(16) = zw(8): zc(18) = zw(9): zc(20) = zw(10): zc(22) = zw(11): zc(24) = zw(12)
     zc(26) = zw(13): zc(28) = zw(14): zc(30) = zw(15): zc(32) = zw(16): zimo = 0
     
     MSComLED.Output = zc
     End If
    End If
Next
    If zimo = 1 Then MSComLED.Output = zc: zimo = 0
End Function

解决方案 »

  1.   

    实在不行转换的话,能否用做个DLL,让C#引用?
      

  2.   

    c#和vb.net的相互转换:
    http://www.c114.net/study/networkread.asp?articleid=482
      

  3.   

    C#和VB.net是可以互相转换的。也就是说,VB.net的代码可以自动转换成为C#
      

  4.   

    可以在C#中引用MSCOMM,再修改成C#代码,或者用.net中的serialPort类也行
      

  5.   

    你的LED显示屏是哪家的控制系统?用的通讯协议和你提供的代码一致么?
      

  6.   

    LED是通用的89c51控制的,其实跟控制芯片没关系的,VB那个程序直接就可以输出的
    MSComLED.Output = zc
    就用MSCOMM控件直接输出就是汉字了
      

  7.   

    AA = Hex(Asc(Mid(ledstring, I, 1)))
         bb = (94 * (CLng("&H" & Mid(AA, 1, 2)) - &HA1) + (CLng("&H" & Mid(AA, 3, 2)) - &HA1)) * 32 + 1这个应该是VB的关键算法吧?如果换成c#要怎么弄呢?
      

  8.   

    如果能保证VB能编译成功的话,使用Reflector打开这个exe(或dll),选择语言,OK。转换成功
      

  9.   

    求助,下面是单片机源码,怎么编写VB代码才能连接,谢谢了!
    串口中断程序,61为接收代码
    ;62为电脑取数,中断后向电脑回送62,完比后回送63
    ;64为在标定状态下取数,6字节
    ;11为给定首址,和字节数取认意地址的数据,调式用
    S_SIO:
            CLR EA
    clr ES ;串口中断开
            PUSH PSW
            PUSH ACC
    PUSH DPL
    PUSH DPH
    SETB PSW.4
            CLR RI
            MOV A,SBUF
            CJNE A,#61H,SSIO1 ;a为地址
    mov r0,#10h
    djnz r0,$
    MOV SBUF,A
    JNB TI,$
    CLR TI
    LCALL Auto_8 ;自动方式下返回数据
    LJMP SSIOE
    SSIO1:  CJNE A,#62H,SSIO2 ;a为地址
    mov r0,#10h
    djnz r0,$
    MOV SBUF,A
    JNB TI,$
    CLR TI
    LCALL Auto_62 ;自动方式下返回数据
    LJMP SSIOE
    SSIO2:  CJNE A,#63H,SSIO3 ;a为地址
    mov r0,#10h
    djnz r0,$
    MOV SBUF,A
    JNB TI,$
    CLR TI
    LCALL Auto_63 ;自动方式下返回AD0~AD7数据
    LJMP SSIOE
    SSIO3:  CJNE A,#64H,SSIO4 ;a为地址
    mov r0,#10h
    djnz r0,$
    MOV SBUF,A
    JNB TI,$
    CLR TI
    LCALL Auto_64 ;自动方式下返回数据
    LJMP SSIOE
    SSIO4:  CJNE A,#65H,SSIO5 ;a为地址
    mov r0,#10h
    djnz r0,$
    MOV SBUF,A
    JNB TI,$
    CLR TI
    LCALL Auto_qx ;返回曲线数据
    LJMP SSIOE
    SSIO5:
            CJNE A,#66H,SSIO6 ;a为地址
    mov r0,#10h
    djnz r0,$
    MOV SBUF,A
    JNB TI,$
    CLR TI
            LCALL ZER_MING ;清零命令接受程序
    LJMP SSIOE
    SSIO6:
            CJNE A,#67H,SSIO8 ;为B此段程序为电脑来取数
    mov r0,#10h
    djnz r0,$
    MOV SBUF,A
    JNB TI,$
    CLR TI
    LCALL Rxd_ming ;收控制命令
    LJMP SSIOE
    SSIO8:
            CJNE A,#68H,SSIO9 ;为B此段程序为电脑来取数
    mov r0,#10h
    djnz r0,$
    MOV SBUF,A
    JNB TI,$
    CLR TI
    LCALL OUT_ming ;收控制命令
    LJMP SSIOE
    SSIO9:
            CJNE A,#69H,SSIOA
    mov r0,#10h
    djnz r0,$
    MOV SBUF,A
    JNB TI,$
    CLR TI
    LCALL TES_LED ;送LED显示信息(最长<100)
    LJMP SSIOE
    SSIOA:
            CJNE A,#6AH,SSIOE
    mov r0,#10h
    djnz r0,$
    MOV SBUF,A
    JNB TI,$
    CLR TI
    LCALL EEP_ming ;收控制命令,写EEPROM,48字节
    SSIOE:
            POP DPH
    POP DPL
           POP ACC
            POP PSW
            setb es
            SETB EA
            RETI