新闻中心

EEPW首页>嵌入式系统>设计应用> 基于单片机的无线电子点菜系统硬件方案设计

基于单片机的无线电子点菜系统硬件方案设计

作者: 时间:2012-09-14 来源:网络 收藏

4.2.2程序设计原理
第一步:初始化串行口。调用SetCommPort()函数,选择使用的端口好,然后设置波特率发送接收的处理方式,以及数据的传输方式,最后将串口打开。
第二步:发送数据。将要发送的字符串变成特定的类型后,调用函数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;ilen;i++)
safearray_tmp.GetElement(i,buf+i);
for(i=0;ilen;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机通过串口接收发送过来的数据时候的图形界面。在缓冲区接收的数据为二进制形式,程序内已经将这些二进制转化为字符串在界面上显示。
图4.7是串行口调试工具初始运行时候的图形界面。
事件驱动方式时,由计算机直接管理,字节之间不可控,而且单片机串行口和PC机串行口速率差别较大,接收程序一定要精心合理的设计,才能使传输稳定可靠,否则很容易出现意想不到的问题。在调试过程中,如果不小心将串行口调试工具的波特率和开发板串行口的波特率设置为不同,就会出现错误。程序中已经将串行口的波特率设置为9600bps,这样可以避免错误。
图4.5通过端口1进行发送时候的图型界面

图4.6 通过串口接收时候的图形界面
图4.7 串行口调试工具的运行界面
第五章 总结与展望
5.1 全文总结

通过这次毕业设计,我学到了不少课本上没有的知识,也锻炼了自己的动手能力,将以前学过的零散的知识串到一起。
首先在毕业设计刚开始的调研阶段,我学会了怎么通过各种方式查询相关的资料。通过对这些资料的学习,我大致了解了通信的发展现状以及未来的发展趋势,认识到目前通信方面的各种各样的协议,以及它们之间的竞争。了解了通信方面的先进技术,这些都为我未来的学习指明了方向。
我毕业设计主要涉及和软件两个方面的内容,通过这些我的和软件开发能力都获得了提高。首先在方面,基本了解了产品的开发流程和所要做的工作。基本掌握了Protel 99 SE设计原理图和简单的PCB图的方法,并设计了一个单片机最小。通过开发板的设计和硬件搭建的过程,使我对51系列单片机的接口有了更深层次的理解,熟悉了一些单片机常用的外围电路的引脚和连接方法,如LED数码管,键盘等。
在软件方面,通过串行口调试工具的开发,我基本掌握了Visual C++ 6.0的使用方法,加深了对类封装的理解。通过开发板驱动程序的开发,使我熟练掌握了Keil uVision2,熟悉了51系列单片机内部的寄存器和编程规则,以及如何控制外围电路。
当然,由于单片机功能的局限性,当面对很复杂的时像无线,单片机就不太合适。这是因为单片机的引脚过少,能够使用操作系统过于简单,不能进行复杂的工作调度,也不能驱动复杂的外围电路,因此使用单片机完全实现系统的要求比较困难。
近几年来,处理器已经发展到32位机,尤其是以ARM(Advanced RISC Machines)为内核的32位处理器受到越来越多嵌入式开发人员的青睐。ARM处理器支持复杂的嵌入式操作系统,例如Win CE,UClinux等。可以进行复杂的功能调度,而且能够驱动比较复杂的外围电路例如触摸屏等。这样使用ARM处理器和嵌入式操作系统,配合嵌入式移动数据库技术,更能完成系统的要求。所以,毕业设计也给我将来的学习指明了一个方向。
单就本论文而言,主要完成了以下工作:
1.在ZigBee协议的基础上,以51系列单片机为处理器,配合一定的外围电路构建了硬件开发平台。
2.用C51语言为硬件部分编写驱动程序,并用Visual C++6.0开发了串口调试工具。

5.2 研究展望

目前,无线通信的各种技术呈现百花齐放的局面。但是随着经济的发展,人民需求的提高,无线通信技术依然有很大的发展空间。在以下方面仍然有很长的路要走。
1随着IP(Internet Protocol,网际协议)技术的发展,无线通信网和IP网有融合的趋势。尤其是多媒体信息需求的增加,多媒体信息对实时性要求不高的特点,使得利用无线通信网传输多媒体信息成为一大热门。
2随着人民生活水平的提高,生活方式的转变,无线通信技术必然向移动化和便携化方向发展。
3由于无线频谱资源有限和无线通信传输信道的特殊性,使得如何提高频谱资源的利用率以及提高抗干扰能力成为未来很热门的研究方向。
4 现代微技术发展迅猛,摩尔定理仍然有效,集成电路技术已经发展到SOC,32位的ARM处理器已经得到了广泛的应用。因此在未来越来越复杂的嵌入式系统开发中,32位处理器和嵌入式操作系统将得到更广泛的应用。

51单片机相关文章:51单片机教程


单片机相关文章:单片机教程


c++相关文章:c++教程


单片机相关文章:单片机视频教程


单片机相关文章:单片机工作原理


波段开关相关文章:波段开关原理


蓝牙技术相关文章:蓝牙技术原理
矢量控制相关文章:矢量控制原理

上一页 1 2 3 4 下一页

评论


相关推荐

技术专区

关闭