关于点阵上位机的,求指点
我用VC写了一个上位机程序,输入的点阵码转化为16进制的数据发送到单片机,由显示字体的数组接收,我采用串口中断,接受字符程序如下,本意是希望从上位机发送16*16点阵数据,进而显示,这样就可以灵活控制单片机的显示。
void rece()
{
uchar i;
i=0;
do
{
while(RI==0) ;
tab[i]=SBUF;
RI=0;
i++ ;
}while(tab[i-1]!=0xff);//ff作为借宿的标记
}
上位机中发送数据
void CKpdianzhenDlg::OnOK()
{
// TODO: Add extra validation here
CByteArray hexdata;
UpdateData(true);
int len=str2HEX(m_send,hexdata);
UpdateData(false);
m_ctrlComm.SetOutput(COleVariant(hexdata));
}其中str2HEX是将字符串转为16进制,
char CKpdianzhenDlg::HexChar(char c)
{
if(c>='0' && c<='9')
return c-0x30;
else if(c>='A' && c<='F')
return c-'A'+10;
else if(c>='a' && c<='f')
return c-'a'+10;
else
return -1;
}
int CKpdianzhenDlg::str2HEX(CString str,CByteArray &senddata)
{
int hexdata,lowhexdata;
int hexdatalen=0;
int len=str.GetLength();
senddata.SetSize(len/2);
for(int i=0;i<len;)
{
char lstr,hstr=str[i];
if(hstr==' ')
{
i++;
continue;
}
i++;
if(i>=len)
break;
lstr=str[i];
hexdata=HexChar(hstr);
lowhexdata=HexChar(lstr);
if((hexdata==16) || (lowhexdata==16))
break;
else
hexdata=hexdata*16+lowhexdata;
i++;
senddata[hexdatalen]=(char)hexdata;
hexdatalen++;
}
return hexdatalen;
}
这是将字符串转化16进制的发送。
按如上程序我发现偶尔能置换tab[]数组,但是是一对乱,根本不是对应的字;
请问我这样的思路有错吗?问题出在哪里了,有经验的能给点意见吗,或者有这方面的代码能给参考下吗
[解决办法]
因为点阵字库的矩阵大小是固定的,因此不需要什么结束标志。
因此,也就不需要做什么数据格式转换,将点阵的 Char 数据字节发下来就可以了。
[解决办法]