有个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
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
http://www.c114.net/study/networkread.asp?articleid=482
MSComLED.Output = zc
就用MSCOMM控件直接输出就是汉字了
bb = (94 * (CLng("&H" & Mid(AA, 1, 2)) - &HA1) + (CLng("&H" & Mid(AA, 3, 2)) - &HA1)) * 32 + 1这个应该是VB的关键算法吧?如果换成c#要怎么弄呢?
串口中断程序,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