基于51单片机的数字电压表设计
作用是停止定时器事件。接着是添加WM_TIMER消息。可在OnTimer(UINT nIDEvent)上添加CByteArray bytoutArr;bytoutArr.Add(0xfd);m_mscomm.SetOutput(COleVariant(bytoutArr));(采用二进制方式发送数据0xfd,500ms发送一次,下位机只有在接收到0xfd后才会将转化的数据传回来,这也相当于一个简单的通信协议。
数据的接收处理(也是本文的重点)可通过在MSComm控件的消息响应函数中采用查询方式检查接收事件是否发生来完成。具体代码如下:
void CCTestVotDlg::OnOnCommMscomml ()
{VARIANT variant_inp;
COleSafeArray safearray_inp;
LONGlen,k;
BYTE rxdata[1024];//设置字节数组
CString strtemp;
if(m_mscomm.GetCommEvent 0==2)//事件值为2 表示接收到数据
{variant_inp=m_mscomm.GetInput 0;//读缓冲区
safearray_inp=variant_inp;
len=safearray_inp.GetOneDimSize ();//得到有效的数据长度
for(k=0;klen;k++)
safearray_inp.GetElement(k,rxdata+k);//转化成BYTE型数组
m_receive=rxdata[0];//将接收到的值赋予
float变量m_receive=m_receive/255;//接收到的数据为(0,255)之间的整数值
m_receive=m_receive*5;//这三步就得到0到5V的电压值
m_receive=setprecision(m_receive,3)//这个函数的作用是保留小数点后三位
}
UpdateData(FALSE);//更新编辑框,将数值显示在编辑框中
}
4 结束语
上述实施方案可在实践中很好地实现整个样机的功能,实际使用证明,该仪器的各项指标都能达到预期效果。本文对使用MSComm串行通信的方法做了着重的分析,同时分析了ActiveX技术的强大功能、充分的灵活性和易用性,具有一定的实践意义。
- 基于FPGA的DSP设计方法(08-26)
- 电力电子装置控制系统的DSP设计方案(04-08)
- 基于DSP Builder的VGA接口设计(04-10)
- 基于DSP和USB的高速数据采集与处理系统设计(05-01)
- 数字信号处理(DSP)应用系统中的低功耗设计(05-02)
- 基于DSP的嵌入式显微图像处理系统的设计(06-28)