基于单片机无线电子点菜系统硬件设计及实现

[09-11 23:01:53]   来源:http://www.88dzw.com  单片机学习   阅读:8376

文章摘要:第二步:发送数据。将要发送的字符串变成特定的类型后,调用函数SetOutput(),将数据发送到发送缓冲区第三步:接受数据。将接收缓冲区中的数据通过GetInput()函数读出,并将它转换为Cstring类型,显示在界面上。程序的各个主要部分和一些流程图:(1)登陆界面后,程序首先将接收缓冲区和发送缓冲区清空程序如下:m_str_send=” “;m_str_recv=” “;UpdateData(FALSE);(2)然后进行串行口的初始化,也即是设置MSComm控件的各种属性。首先要进行端口的选择,由于所用到的计算机只有两个串行口,因此本程序只给了两个选择,具体的程序代码如下:void CM

基于单片机无线电子点菜系统硬件设计及实现,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com
第二步:发送数据。将要发送的字符串变成特定的类型后,调用函数SetOutput(),将数据发送到发送缓冲区
第三步:接受数据。将接收缓冲区中的数据通过GetInput()函数读出,并将它转换为Cstring类型,显示在界面上。
程序的各个主要部分和一些流程图:
(1)登陆界面后,程序首先将接收缓冲区和发送缓冲区清空
程序如下:
m_str_send=” “;
m_str_recv=” “;
UpdateData(FALSE);
(2)然后进行串行口的初始化,也即是设置MSComm控件的各种属性。首先要进行端口的选择,由于所用到的计算机只有两个串行口,因此本程序只给了两个选择,具体的程序代码如下:
void CMyDlg::On_Com1()
{
if(m_mscomm.GetPortOpen())
m_mscomm.SetPortOpen(FALSE);
m_mscomm.SetCommPort(1);
m_mscomm.SetSettings(”9600,n,8,1″);
m_mscomm.SetRThreshold(1);
m_mscomm.SetSThreshold(0);
m_mscomm.SetInputLen(0);
m_mscomm.SetInputMode(1);
m_mscomm.SetPortOpen(TRUE);
}
void CMyDlg::On_Com2()
{
if(m_mscomm.GetPortOpen())
m_mscomm.SetPortOpen(FALSE);
m_mscomm.SetCommPort(2);
m_mscomm.SetSettings(”9600,n,8,1″);
m_mscomm.SetRThreshold(1);
m_mscomm.SetSThreshold(0);
m_mscomm.SetInputLen(0);
m_mscomm.SetInputMode(1);
m_mscomm.SetPortOpen(TRUE);
}
1)CommPort:分别选1和2。
2) Setting设置或返回串行端口的波特率:9600、无奇偶校验位、数据位数为8、1位停止位。
3) InBufferSize:设置接收缓冲区为1024字节。
4) RThreshold:设置当接收缓冲区内字节个数为1时,触发MSCOMM的OnComm事件,然后由计算机将接收缓冲的数据读出,并将接收缓冲区清空。
5) InputLen:值为0,设置INPUT读取整个缓冲区的内容。
6) OutBufferSize:设置发送缓冲区为512字节。
(3)发送数据的源程序代码
void CMyDlg::OnSend()
{
if(!m_mscomm.GetPortOpen())
m_mscomm.SetPortOpen(TRUE);
UpdateData(TRUE);
m_mscomm.SetOutput(COleVariant(m_str_send)); //发送数据
}
将文本框内的字符串送到变量m_str_send中,然后将字符转化为ColeVariant类型的数据,再通过SetOutput函数将数据发送到发送缓冲区中。
(4)接收数据的源程序代码
void CMyDlg::OnComm()
{
VARIANT variant_tmp;
COleSafeArray safearray_tmp;
LONG len,i;
BYTE buf[2048];
CString str_tmp;
if(m_mscomm.GetCommEvent()==2)
{
variant_tmp=m_mscomm.GetInput();
safearray_tmp=variant_tmp;
len=safearray_tmp.GetOneDimSize();
for(i=0;i<len;i++)
safearray_tmp.GetElement(&i,buf+i);
for(i=0;i<len;i++)
{
BYTE ch=*(char*)(buf+i);
str_tmp.Format(”%c”,ch);
m_str_recv+=str_tmp;
}
}
UpdateData(FALSE);
}
当m_mscomm.GetCommEvent()==2时候,数据到来,触发OnComm事件,调用该函数。首先通过m_mscomm.GetInput()将接收缓冲区内的数据读到变量variant_tmp中,再将variant_tmp赋予safearray_tmp来实现数据类型转化为ColeSafeArray。通过safearray_tmp.GetOneDimSize()求出接收到的字符的总长度,再将每个ColeSafeArray变量转化为Byte类型的变量,最后转化为字符类型,并将它显示在文本框内。
void CMyDlg::OnComm() 的流程图:

图4.3 void CMyDlg::OnComm() 的流程图

(5)清空功能函数源代码
void CMyDlg::OnClr()
{
m_str_send=” “;
m_str_recv=” “;
UpdateData(FALSE);
}
总的程序流程图如图4.4所示
图4.5是PC机通过端口1向单片机发送数据时候的图型界面。进入界面后,首先要进行根据连接的串行口选择要初始化的端口,然后使用键盘在发送缓冲区内输入一系列的字符。等单片机开发板上电后,单击发送按键将数据发送出去。
图4.6是PC机通过串口接收单片机发送过来的数据时候的图形界面。在缓冲区接收的数据为二进制形式,程序内已经将这些二进制转化为字符串在界面上显示。

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14]  下一页


Tag:单片机学习单片机开发,单片机原理,单片机教程单片机学习
分类导航
最新更新
热门排行