在一、实验目的1、了解模块基本功能;2、了解模块的硬件特性;3、了解模块的软件特性;4、了解模块的应用。5、通过编程实现手机短信的收发;6、加深对VC编程的理解和实践。二、实验内容(含技术指标)移动终端开发VC编程实践——短信收发实现,调制并测试整个程序以实现短信的接收和发送。三、实验仪器(仪器名称、型号、元器件名称、清单、软件名称、版本等)GSM收发模块SIM300C模块PC机手机四、实验原理(基本原理,主要公式,参数计算,实现方法及框图,相关电路等)在GSM于PC端相连接的情况下,通过PC机里的VC软件开发移动终端,并进而通过开发的移动终于,实现模块与测试手机进行短信的手法试验。GSM收发模块小系统实现框图及实物连接图如下:图1-1GSM收发模块小系统实现框图图1-五、实验步骤(实验关键操作步骤,仪器、电路及器件选择使用,原程序级关键指令注释等)1.在上次的工程中,将所有的CView类修改为CListView类,以显示短信的读取显示功能;即在程序中查找所有的CView,替换为CListView,并且在StdAfx.h头文件总添加如下语句:#includeafxcview.h2.利用ClassWizard创建函数:3.在上图中先点击“AddFunction”按钮,再点击“EditCode”按钮,添加如下代码:CListCtrl&ListCtrl=GetListCtrl();ListCtrl.InsertColumn(0,号码,LVCFMT_LEFT,100);ListCtrl.InsertColumn(1,时间,LVCFMT_LEFT,140);ListCtrl.InsertColumn(2,消息内容,LVCFMT_LEFT,500);SetTimer(1,1000,NULL);//设置定时器1,每1秒触发一次为了让ListCtrl正常显示,在CMygsmView中的PreCreateWindow增加如下一行代码:cs.style|=LVS_SHOWSELALWAYS|LVS_REPORT;4.同理创建OnDestroy函数:5.点击“AddFunction”按钮,再点击“EditCode”按钮,添加代码:KillTimer(1);//关闭定时器16.添加一个发送短信资源对话框如;7.在MainFrm.h中定义:CDialogBarm_wndDialogBar;8.将“VC++手机短信收发”参考工程下负责短信收发处理的SmsTraffic.h和SmsTraffic.cpp拷贝到当前工程的文件夹下,选择VC++的菜单栏Project—AddtoProject—Files将这两个文件加入到工程中。9.将SmsFraffic.cpp中的包含文件改为自己创建的工程名:10.在新创建的IDD_SEND_SM对话框上选中“发送”按钮,点击右键选择ClassWizard,在出现的“AddingaClass”窗口中选择Cancel;11.在对话框中先点击“AddFunction”再点击“EditCode”:12.点击“EditCode”后输入如下发送短信代码:CComboBox*pNumberWnd=(CComboBox*)m_wndDialogBar.GetDlgItem(IDC_NUMBER);CComboBox*pContentWnd=(CComboBox*)m_wndDialogBar.GetDlgItem(IDC_CONTENT);CStringstrSmsc;CStringstrNumber;CStringstrContent;strSmsc=13800280500;//成都移动短信中心号码,如果是联通请改为13010811500pNumberWnd-GetWindowText(strNumber);pContentWnd-GetWindowText(strContent);//检查号码if(strNumber.GetLength()11){AfxMessageBox(请输入正确的号码!);pNumberWnd-SetFocus();pNumberWnd-SetEditSel(-1,0);return;}//检查短消息内容是否空,或者超长CStringstrUnicode;CStringstrUnicode;WCHARwchar[1024];intnCount=::MultiByteToWideChar(CP_ACP,0,strContent,-1,wchar,1024);if(nCount=1){AfxMessageBox(请输入消息内容!);pContentWnd-SetFocus();pContentWnd-SetEditSel(-1,0);return;}elseif(nCount70)//全部用UCS2编码,最大70个字符(半角/全角){AfxMessageBox(消息内容太长,无法发送!);pContentWnd-SetFocus();pContentWnd-SetEditSel(-1,0);return;}if(AfxMessageBox(确定发送吗?,MB_YESNO)==IDYES){SM_PARAMSmParam;memset(&SmParam,0,sizeof(SM_PARAM));//去掉号码前的+if(strSmsc[0]=='+')strSmsc=strSmsc.Mid(1);if(strNumber[0]=='+')strNumber=strNumber.Mid(1);//在号码前加86if(strSmsc.Left(2)!=86)strSmsc=86+strSmsc;if(strNumber.Left(2)!=86)strNumber=86+strNumber;//填充短消息结构strcpy(SmParam.SCA,strSmsc);strcpy(SmParam.TPA,strNumber);strcpy(SmParam.TP_UD,strContent);SmParam.TP_PID=0;SmParam.TP_DCS=GSM_UCS2;//发送短消息theApp.m_pSmsTraffic-PutSendMessage(&SmParam);//列表中加入新串if(pNumberWnd-FindStringExact(-1,strNumber)0)pNumberWnd-InsertString(0,strNumber);if(pContentWnd-FindStringExact(-1,strContent)0)pContentWnd-InsertString(0,strContent);}pContentWnd-SetFocus();pContentWnd-SetEditSel(-1,0);13.在mygsm.h中增加包含文件和变量定义:#includeSmsTraffic.hpublic:CSmsTraffic*m_pSmsTraffic;在类定义之后(即“};”之后)增加:externCMygsmApptheApp;14.在工程中增加OnTimer()函数定时显示接收到的短信:15.点击“AddFunction”,再点击“EditCode”,增加如下代码:if(nIDEvent==1)//对应3中的SetTimer(1,1000,NULL){SM_PARAMSmParam;CStringstrTime;CStringstrNumber;CStringstrContent;CListCtrl&ListCtrl=GetListCtrl();//取接收到的短消息if(theApp.m_pSmsTraffic-GetRecvMessage(&SmParam)){//取短消息信息strNumber=SmParam.TPA;strContent=SmParam.TP_UD;strTime=20+CString(&SmParam.TP_SCTS[0],2)+-+CString(&SmParam.TP_SCTS[2],2)+-+CString(&SmParam.TP_SCTS[4],2)++CString(&SmParam.TP_SCTS[6],2)+:+CString(&SmParam.TP_SCTS[8],2)+:+CString(&SmParam.TP_SCTS[10],2);//去掉号码前的86if(strNumber.Left(2)==86)strNumber=strNumber.Mid(2);//最多保留200条intnItemCount=ListCtrl.GetItemCount();if(nItemCount=200){ListCtrl.DeleteItem(0);nItemCount--;}//插入新消息ListCtrl.InsertItem(nItemCount,strNumber);ListCtrl.SetItemText(nItemCount,1,strTime);ListCtrl.SetItemText(nItemCount,2,strContent);ListCtrl.EnsureVisible(nItemCount,FALSE);}}else{//othertimersCListView::OnTimer(nIDEvent);}16.调制并测试整个程序以实现短信的接收和发送。六、实验数据发送成功:接收成功:七、实验数据分析(对实验结果的评价,误差分析,出现故障的原因及排除方法,回答思考题等)本次实验符合预期设计要求,由于对开发环境的了解不够深刻,以及粗心等原因,在实验过程中出现了一些在连线、硬件上电开启、文件加载、代码增加、调试上的失误。在老师的悉心指导下我们组终于获得了成功!错误分析:(1)在连线上要仔细对照连线说明,尤其注意402模块上需要短接的那条线。(2)在上电后,注意观察指示灯的闪烁,很可能因为SM卡接触、端口线的接触上的问题照成闪烁异常,需要让指示灯保持在4秒闪一次。(3)在接口波特率和端口的设置上也要注意匹配。(4)在添加文件时要注意不要重复添加,会照成编译出错。(5)在添加代码时,注意检查所需要的类是否申明,所不用的代码段是否注释掉。(6)整体上要注意语法上的错误。八、参考文献九、实验体会(对实验的看法,改进建议等)通过本次试验,在我们多次的失败与尝试中并在老师的悉心指导下,让我们组的学员都了解模块基本功能、模块的硬件特性、软件特性及其应用,通过VC++开发软件实现了手机短信的收发,更让我们加深了对通信原理、VC编程的理解和实践!改进建议:希望能在试验步骤中加上一些关键的需要添加的操作,或者加些启示性的提示,以减少学员在试验中测试摸索的时间,从而更快更好的掌握试验内容,增强试验的可操作性。也希望能适当增加试验机位,以减少每组的成员,让更多的同学能有实地性的锻炼和提高。