标题:[求助]求助,C#如何通过串口写汉字到LED显示屏?有VB源码。
只看楼主
redcar
Rank: 2
等 级:论坛游民
帖 子:210
专家分:60
注 册:2006-9-13
结帖率:100%
 问题点数:0 回复次数:16 
[求助]求助,C#如何通过串口写汉字到LED显示屏?有VB源码。

有个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

搜索更多相关主题的帖子: LED 串口 汉字 源码 显示屏 
2006-10-30 21:20
yts111
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2006-5-17
得分:0 
顶上去!我也一直在找关于MSCOMM的串口通讯资料,兄弟你那有例子么!很想看看,大家学习学习!

希望能和大家交流一起进步我的QQ:274405946 欢迎加我
2006-10-30 21:37
redcar
Rank: 2
等 级:论坛游民
帖 子:210
专家分:60
注 册:2006-9-13
得分:0 
没有啊,这个改c#太难了,能不能把这个用VB6做成个DLL,让C#直接调用呢?
2006-10-30 21:46
chenjin145
Rank: 1
等 级:禁止访问
帖 子:3922
专家分:0
注 册:2006-7-12
得分:0 

為何不發去vb6


[url=javascript:alert(1);] [div]fdgfdgfdg\" on\"[/div] [/url]
2006-10-31 09:06
noshow
Rank: 2
等 级:新手上路
威 望:4
帖 子:1127
专家分:0
注 册:2006-4-21
得分:0 
在C#下读HZ16字库网上有源码的 而且很好实现
楼主还是主要关心一下怎么写串口通讯吧

此号自封于2006年11月30日
2006-10-31 10:06
redcar
Rank: 2
等 级:论坛游民
帖 子:210
专家分:60
注 册:2006-9-13
得分:0 
以下是引用noshow在2006-10-31 10:06:25的发言:
在C#下读HZ16字库网上有源码的 而且很好实现
楼主还是主要关心一下怎么写串口通讯吧

兄弟,给1个看看啊,串口通讯用那个seril就可以了啊

2006-10-31 13:01
noshow
Rank: 2
等 级:新手上路
威 望:4
帖 子:1127
专家分:0
注 册:2006-4-21
得分:0 
C版

[CODE]hzk汉字点阵

int i,j,k;
unsigned char incode[3]="我"; // 要读出的汉字
unsigned char qh,wh;
unsigned long offset;
// 占两个字节, 取其区位号
qh = incode[0] - 0xa0;
wh = incode[1] - 0xa0;
offset = (94*(qh-1)+(wh-1))*32L; / *得到偏移位置* /

FILE *HZK;
char mat[32];
if((HZK=fopen("hzk16", "rb")) == NULL)
{
printf("Can't Open hzk16\n");
exit(0);
}
fseek(HZK, offset, SEEK_SET);
fread(mat, 32, 1, HZK); [/CODE]

此号自封于2006年11月30日
2006-10-31 14:39
noshow
Rank: 2
等 级:新手上路
威 望:4
帖 子:1127
专家分:0
注 册:2006-4-21
得分:0 

这个应该是VB版

procedure TForm1.btnOKClick(Sender: TObject);
const
strText1 = '存放在字库路径的文件“';
strText2 = '”已经存在,是否替换原有文件?'+#13#13+'强烈建议不替换,另建有表达意义的文件名!';
var
dd: HDC; //Panel句柄
count,number,address: Integer;
//count 扫描点的序数, number 扫描点的序数,用于合成字节, address 汉字库中离起点的偏移位置
p,k,i,j,n,m: Integer; //p,k 扫描循环, i,j 全部汉字扫描循环, n 32个字节循环, m 改变字节为char类型循环
str: String; //str 中文内码
Byte1,Byte2: Byte; //合成字节的二位
Point: array[0..1023] of Integer; //扫描到的点
Buf16: array[0..127] of byte; //生成点阵字节
wStr: array[0..127] of char; //char型生成点阵字节
PositionX,PositionY,settype: Integer;
f: TFont; //设置字体
begin
if edtFile.Text = ExtractFilePath(Application.ExeName) then
begin
Application.MessageBox('请输入生成字库文件名!','操作提示',MB_ICONINFORMATION+MB_OK);
edtFile.SetFocus;
edtFile.SelStart := Length(edtFile.Text);
Exit;
end;

if FileExists(edtFile.Text) = True then
begin
if Application.MessageBox(PChar(strText1+ExtractFileName(edtFile.Text)+strText2),'操作提示',MB_ICONWARNING+MB_YESNO+MB_DEFBUTTON2) = IDYES then
DeleteFile(edtFile.Text)
else
begin
edtFile.SetFocus;
Exit;
end;
end;

dd := GetDC(Panel1.Handle); //取得Panel句柄

f := TFont.Create;
f.Name := Trim(cboFont.Text);
f.Size := StrToInt(Trim(cboSize.Text));
if chkBold.Checked = True then //是否选择粗体
f.Style := [fsBold]
else
f.Style := [];
SelectObject(dd,f.Handle);

for i := 1 to 126 do //循环取得所有中文
for j := 0 to 190 do
begin
Str := Char(i+ $D80)+Char((j)+$40); //取得当前的中文内码
if cboAlign.Text = '居中' then
begin
PositionX := Trunc((StrTofloat(Trim(cboPoint.Text))-PosPoint)/2); //画图X轴开始坐标
PositionY := Trunc((StrToFloat(Trim(cboPoint.Text))-PosPoint)/2); //画图Y轴开始坐标
end;
if cboAlign.Text = '左上' then
begin
PositionX := 0;
PositionY := 0;
end;
if cboAlign.Text = '左下' then
begin
PositionX := 0;
PositionY := Trunc(StrToFloat(Trim(cboPoint.Text))-PosPoint);
end;
if cboAlign.Text = '右上' then
begin
PositionX := Trunc(StrTofloat(Trim(cboPoint.Text))-PosPoint);
PositionY := 0;
end;
if cboAlign.Text = '右下' then
begin
PositionX := Trunc(StrTofloat(Trim(cboPoint.Text))-PosPoint);
PositionY := Trunc(StrToFloat(Trim(cboPoint.Text))-PosPoint);
end;

TextOut(dd,PositionX,PositionY,pchar(str),2); //画出字符


settype := Trunc((StrTofloat(Trim(cboPoint.Text))/8)*StrTofloat(Trim(cboPoint.Text)));
// 转换后字的字节数


wStr[0] := #$FA;
wStr[1] := Char(StrToInt(cboPoint.Text));
wStr[2] := wStr[1];
wStr[3] := #$FF;
wStr[4] := wStr[3];
wStr[5] := #$02;
wStr[6] := #$48;
wStr[7] := #$5A;
wStr[8] := #$47;
wStr[9] := #$42;
wStr[10] := #$4B;
wStr[11] := #$2D;
wStr[12] := #$31;
wStr[13] := #$36;
wStr[14] := #$00;
wStr[15] := #$00;
WriteToFile(Pchar(edtFile.Text),wStr,$10,0);
//给生成字库加头

count := 0;
for p := 0 to (StrToint(Trim(cboPoint.Text))-1) do
for k := 0 to (StrToint(Trim(cboPoint.Text))-1) do
begin
if GetPixel(dd,k,p) = 0 then //扫描点
Point[count] := 1
else
Point[count] := 0;
count := count + 1; //进入下一点扫描
end;

number := 0; //从扫描的第一点开始
for n := 0 to (settype-1) do //对扫描后的点转换成字节
begin
Byte1 := Point[number]*8 + Point[number+1]*4 + Point[number+2]*2 + Point[number+3];
Byte2 := Point[number+4]*8 + Point[number+5]*4 + Point[number+6]*2 + Point[number+7];
Buf16[n] := Byte1*16 + Byte2;
number := number + 8; //每8个点为一个字节
end;
for m := 0 to (settype-1) do wStr[m] := Char(Buf16[m]); //将字节转换成char型
address := ((i-1)*191 + j) * settype + $10; //算出当前汉字在汉字库中离起点的偏移位置
WriteToFile(Pchar(edtFile.Text),wStr,settype,address ); //生成一个字体库文件

Panel1.Refresh; //刷新Panel
Gauge1.Progress := Gauge1.Progress + 1; //显示进度条
end;

Application.MessageBox('生成字库完成','字库生成',MB_ICONINFORMATION+MB_OK); //完成提示
Close; //关闭本软件
end;


此号自封于2006年11月30日
2006-10-31 14:40
noshow
Rank: 2
等 级:新手上路
威 望:4
帖 子:1127
专家分:0
注 册:2006-4-21
得分:0 

此号自封于2006年11月30日
2006-10-31 14:42
noshow
Rank: 2
等 级:新手上路
威 望:4
帖 子:1127
专家分:0
注 册:2006-4-21
得分:0 

TC版

/*--------本程序由sunny整理完成-----------*/
*** 基于DOS平台,在Turbo c2.0中调试通过 **
*** 原码见于http://sunny1979.icpcn.com

http://tchome.icpcn.com ***/

#include "conio.h"
#include "stdio.h"
#include "graphics.h"
#include "stdlib.h"
#include "dos.h"

void *buffer;
FILE *fp;

void hz(int x,int y,int a,int COL,int b,char *s)
{
int ROW;
char buffer[32];
register m,n,i,j,k;
unsigned char qh,wh;
unsigned long offset;
ROW=COL;
while(*s)
{
qh=*(s)-0xa0;
wh=*(s+1)-0xa0;
offset=(94*(qh-1)+(wh-1))*32L;
fseek(fp,offset,SEEK_SET);
fread(buffer,32,1,fp);
for (i=0;i<16;i++)
for(n=0;n<ROW;n++)
for(j=0;j<2;j++)
for(k=0;k<8;k++)
for(m=0;m<COL;m++)
if (((buffer[i*2+j]>>(7-k))&0x1)!=NULL)
putpixel(x+8*j*COL+k*COL+m,y+i*ROW+n,b);
s+=2;
x+=a;
}
}

main()
{
int GD=DETECT,GM;
initgraph(&GD,&GM,"");
if ((fp=fopen("hzk16","rb"))==NULL)
{ printf("Can't open haz16,Please add it");
getch(); closegraph(); exit(0);
}
hz(342,245,25,1,4,"确定");
getch();
closegraph();
close(fp);
clrscr();
exit(0);
}

ghJ2AxFh.rar (167.74 KB)

[此贴子已经被作者于2006-10-31 14:47:00编辑过]


此号自封于2006年11月30日
2006-10-31 14:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-99790-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.299000 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved