線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:5093
推到 Plurk!
推到 Facebook!

rs232傳送給16x16字幕機相關

缺席
powervic
一般會員


發表:5
回覆:7
積分:2
註冊:2008-03-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-03-18 17:50:06 IP:59.120.xxx.xxx 訂閱
請問要用rs232傳送到16x16字幕機
我已經能傳送BYTE 給字幕機了
但是他會從本來顯示暫存的資料變黑代表他有接收到資料
那我該怎麼控制讓它顯示出我想要傳送的字呢?


另外

[code cpp]
char *a = new char[Edit1->Text.Length() 1];
strcpy(a,Edit1->Text.c_str());
for(int i=0;iText.Length() 1;i )
TransmitCommChar(hComm, a[i]);
[/code]

我這樣傳送我KEY進的字串正確嗎@@"
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-03-20 10:27:24 IP:140.116.xxx.xxx 訂閱
應該是跟字幕機的控制有關吧...
我想應該是需要有控制命令..
你有字幕機的控制說明嗎?
------
FPGA驗證, FPGA開發平台, http://smims.com
haha0738
一般會員


發表:12
回覆:19
積分:6
註冊:2007-08-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-05-16 15:00:40 IP:59.120.xxx.xxx 訂閱
你要丟的應該是處理過後的32Byte的資料吧...
要把字轉成點陣字
可以一次丟1個Byte
evileva
一般會員


發表:0
回覆:1
積分:0
註冊:2009-03-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-03-31 23:37:24 IP:220.134.xxx.xxx 訂閱

不好意思,對於字幕機控制,我已經了解要用什麼資料格式去控制他
要先將文字轉成點陣字,再去傳送,藉以控制字幕機的led燈,
但我的問題是在bcb上,要怎麼把"字"轉成點陣字呢?
在網路上是找的到點陣字庫,但是我還是不知道該怎麼在bcb上設計一個點陣字的轉換控制器,
不知道各位前輩有沒有人能幫忙解答。

===================引 用 haha0738 文 章===================
你要丟的應該是處理過後的32Byte的資料吧...
要把字轉成點陣字
可以一次丟1個Byte
HikaruGo
中階會員


發表:22
回覆:69
積分:88
註冊:2007-12-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-04-01 00:00:02 IP:61.62.xxx.xxx 訂閱
通常字幕機會有
通訊協定

For 台灣用的應該會內建Big 5 不用將字轉圖,只要將內碼寫入RS232即可
EX: 中文
[通訊頭] A4h A4h A4h E5h [CheckSum]
你可以跟供應商取的 API 或通訊協定
若沒有 API 或通訊協定
你可以開 RS232 Spy ,觀查別人AP如何寫入的,若也沒ap那就無解了



提供之前做的 包裝 L16 LED Code
FLOW
1.public void AddStation(int StationNumber, int StationID)
2.public void AddTEXT(string Message, int ShowMode, int EndMode)
3. public void AddEnd()
4. public byte[] GetbyteAllCommand()
5.送到RS232 or TCP to RS232

[code c#]
// Fields
private int _CurScreenIdx = -1;
private readonly byte _End_Send = 0xf4;
private readonly byte _Mode_POWER = 0x11;
private int _ScreenCount = 0;
private readonly byte _SOH = 0xff;
private byte[] byteAllCommand = new byte[0x1000];
private int CurLen = 0;
// Methods
public void AddEnd()
{
this.AddShowModa();
byte[] buffer2 = new byte[] { 0, 0, 0xee, 1, 1, 0, 0, 11 };
buffer2[0] = this._SOH;
buffer2[1] = this._Mode_POWER;
buffer2[5] = this._SOH;
buffer2[6] = this._End_Send;
byte[] sourceArray = buffer2;
Array.Copy(sourceArray, 0, this.byteAllCommand, this.CurLen, sourceArray.Length);
this.CurLen = sourceArray.Length;
}
private void AddShowModa()
{
byte[] sourceArray = new byte[((3 this._ScreenCount) 1) 1];
sourceArray[0] = this._SOH;
sourceArray[1] = 5;
sourceArray[2] = 250;
int num = 0;
for (int i = 3; i < ((this._ScreenCount 1) 3); i )
{
if (i == 3)
{
sourceArray[i] = (byte) this._ScreenCount;
}
else
{
sourceArray[i] = (byte) ((i - 1) - 3);
}
num ^= sourceArray[i];
}
sourceArray[sourceArray.Length - 1] = (byte) num;
byte[] buffer4 = new byte[] { 0, 30, 0xe1, 0, 0, 0, 0, 11 };
buffer4[0] = this._SOH;
buffer4[5] = this._SOH;
buffer4[6] = this._End_Send;
byte[] buffer2 = buffer4;
byte[] destinationArray = new byte[sourceArray.Length buffer2.Length];
Array.Copy(sourceArray, destinationArray, sourceArray.Length);
Array.Copy(buffer2, 0, destinationArray, sourceArray.Length, buffer2.Length);
Array.Copy(destinationArray, 0, this.byteAllCommand, this.CurLen, destinationArray.Length);
this.CurLen = destinationArray.Length;
}
public void AddStation(int StationNumber, int StationID)
{
byte[] buffer2 = new byte[] { 0, 0x80, 0x7f, 0, 0, 0, 0, 0, 0xee, 0, 0, 0, 0, 11 };
buffer2[0] = this._SOH;
buffer2[3] = (byte) StationNumber;
buffer2[4] = (byte) StationID;
buffer2[5] = (byte) this.GetChkSum(new byte[] { (byte) StationNumber, (byte) StationID });
buffer2[6] = this._SOH;
buffer2[7] = this._Mode_POWER;
buffer2[11] = this._SOH;
buffer2[12] = this._End_Send;
byte[] sourceArray = buffer2;
Array.Copy(sourceArray, 0, this.byteAllCommand, this.CurLen, sourceArray.Length);
this.CurLen = sourceArray.Length;
}
public void AddTEXT(string Message, int ShowMode, int EndMode)
{
int num2;
this._CurScreenIdx ;
this._ScreenCount ;
byte[] sourceArray = new byte[0x400];
sourceArray[0] = 0;
sourceArray[1] = (byte) this._CurScreenIdx;
sourceArray[2] = 0xf1;
sourceArray[3] = (byte) ShowMode;
string str = Message;
int index = 3;
for (num2 = 0; num2 < str.Length; num2 )
{
char ch = str[num2];
if (ch > '\x007f')
{
byte[] bytes = Encoding.GetEncoding("Big5").GetBytes(str.Substring(num2, 1));
index ;
sourceArray[index] = 1;
index ;
sourceArray[index] = 1;
index ;
sourceArray[index] = bytes[0];
index ;
sourceArray[index] = bytes[1];
}
else
{
index ;
sourceArray[index] = 0x41;
index ;
sourceArray[index] = (byte) ch;
}
}
index ;
sourceArray[index] = 1;
index ;
sourceArray[index] = 0;
index ;
sourceArray[index] = 0;
index ;
sourceArray[index] = 0;
index ;
sourceArray[index] = (byte) EndMode;
index ;
sourceArray[index] = 0;
int num3 = 0;
for (num2 = 0; num2 < index; num2 )
{
num3 ^= sourceArray[num2];
}
index ;
sourceArray[index] = (byte) num3;
byte[] buffer3 = new byte[] { this._SOH, 1, 0xfe };
byte[] buffer4 = new byte[] { this._SOH, this._End_Send, 11 };
byte[] destinationArray = new byte[((buffer3.Length index) 1) buffer4.Length];
Array.Copy(buffer3, destinationArray, buffer3.Length);
Array.Copy(sourceArray, 0, destinationArray, buffer3.Length, index 1);
Array.Copy(buffer4, 0, destinationArray, (buffer3.Length index) 1, buffer4.Length);
Array.Copy(destinationArray, 0, this.byteAllCommand, this.CurLen, ((buffer3.Length index) 1) buffer4.Length);
this.CurLen = ((buffer3.Length index) 1) buffer4.Length;
}
public byte[] GetbyteAllCommand()
{
byte[] destinationArray = new byte[this.CurLen];
Array.Copy(this.byteAllCommand, 0, destinationArray, 0, this.CurLen);
return destinationArray;
}
private int GetChkSum(byte[] b)
{
int num = 0;
for (int i = 0; i < b.Length; i )
{
num ^= b[i];
}
Console.WriteLine(num.ToString());
return num;
}
[/code]
編輯記錄
HikaruGo 重新編輯於 2009-04-01 11:44:28, 註解 無‧
harrypp
中階會員


發表:7
回覆:124
積分:61
註冊:2006-08-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-04-27 15:24:54 IP:218.210.xxx.xxx 訂閱
字幕機若沒支援中文字型的話,就自己先把中文字畫在螢幕後,
再把點一個一個讀出來送到字幕機上。
同樣道理也可以把小圖片,以這種方式載入後show上去。

比如:
拉個16x16的TImage;
Image1->Canvas->Textout(0,0,"試");

for (i=0; i<16; i )
for (j=0; j<16; j )
{
TColor outputColor;
outputColor= Image1->Canvas->Pixels[i][j];
if (outputColor= = clBlack)
位置(i,j) 輸出亮點
else
位置(i,j) 不輸出
}
編輯記錄
harrypp 重新編輯於 2009-04-27 15:27:28, 註解 無‧
fongdoggy
一般會員


發表:1
回覆:2
積分:0
註冊:2009-08-01

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-08-03 14:31:32 IP:59.126.xxx.xxx 訂閱
請問要怎麼清空暫存的資料呢?
現在也在研究字幕機的通訊..
但怎麼試都沒辦法把它原本顯示的資料清掉@_@..求救..
===================引 用 powervic 文 章===================
請問要用rs232傳送到16x16字幕機
我已經能傳送BYTE 給字幕機了
但是他會從本來顯示暫存的資料變黑代表他有接收到資料
那我該怎麼控制讓它顯示出我想要傳送的字呢?


另外

[code cpp]
char *a = new char[Edit1->Text.Length() 1];
strcpy(a,Edit1->Text.c_str());
for(int i=0;iText.Length() 1;i )
TransmitCommChar(hComm, a[i]);
[/code]

我這樣傳送我KEY進的字串正確嗎@@"
系統時間:2024-03-28 19:13:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!