2022年接口技术课程方案设计书 .pdf
《2022年接口技术课程方案设计书 .pdf》由会员分享,可在线阅读,更多相关《2022年接口技术课程方案设计书 .pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、湖北轻工职业技术学院接口技术 课程设计报告基于 RS232串口的数据采集系统设计与实现姓名:何松班级: 06 电信 1 班精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 17 页一系统结构:设计思路 :本课程设计通过使用带有AD 的单片机 STC12C5616AD 进行实时的AD 采样,并将采样到的值通过RS232串口传输到 PC机,由 VC 上位机接收,显示当前的电压值,并描绘电压变化实时波形。系统框图 : 二. 系统设计:(一) 硬件电路设计:硬 件 部 分由STC12C5416AD 和 晶 振 构成 的 单 片机 最 小 电路 和
2、MAX232 构成的电平转换电路用于和PC机串口进行电压匹配。电路原理图如下:单片机系统参考电压信号输入通道电平转换PC机精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 17 页(二)软件电路设计:(1)单片机 C51 程序设计1.1设计思路C51 程序由 RS232串口发送程序和AD 采样程序组成。 AD 采样采用查询方式,为了提高采样的进度,我们应用的2.5V 的参考电压,但是由于此单片机没有直接的参考电压输入端,不能直接输入参考电压。基于电源电压VCC 瞬间变换不大,因此我做了变通的方法。每次测量时,先测量2.5V 参考电压,得到
3、10 位参考AD 值ref,再采集需要测量的通道的电压值,得到另一个10 位 AD 值Vad,那么所测电压的计算公式就是:V=2.5*(Vad/ref) 。考虑到 51 单片机进行乘法、除法指令时速度较慢,故将10 位ref,Vad直接传输到 PC机,由上位机 VC 软件进行处理。考虑到数据传输时可能会出现错位,缺少数据等情况,导致最终显示的电压值错误。因此在单片机传输有效数据的时候,加上了起始字符和结束字符用于尽量减少错误。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 17 页1.2软件流程图1.3程序代码初始化采集 2.5V 参考
4、电压AD 值采集测量通道电压AD 值发送起始字符“A”发送参考值高位发送参考值低位发送测量值高位发送测量值低位发送停止字符“z”精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 17 页见附录一。(2) VC 程序设计2.1 设计思路VC 上位机以 Microsoft提供的 MSComm控件来与单片机的串口进行通信,获取采集数据。程序将接收到的数据放入缓冲区,经过起始字符和结束字符校验后的数据被处理计算成实际的电压值05V,并显示在静态文本框控件中。同时,当每次接收到一个有效数据时,调用 CDC 类的成员函数 LintTo ()。画出数据
5、连续的曲线。2.2 MSComm 控件介绍Microsoft提供的用于串口操作的控件MSComm共有 27 个属性。CommPort:设置并返回通信口号,缺省值为COM1 。Settings:设置并返回波特率、奇偶校验、数据位、停止位的字符串。其中波特率的范围为300b/s 19200b/s。PortOpen:设置并返回通信口的状态,同时用来打开和关闭通信口。InputLen :决定每次 Input 读入的字符个数,缺省为0,表示读取接收缓冲区的全部内容。Input :读入并清除接收缓冲区的字符。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5
6、页,共 17 页InBufferCount:返回接收缓冲区已接收的字符数,通过置0 可清初接受缓冲区。Output:将发送的字符串或数组写到发送缓冲区。InputMode:定义 Input 属性获得数据的方式。Rthreshold :设置、返回在通信控件置ComEvRecieve并激发OnComm事件前要接收的字符数。SThreshold:设置、返回在通信控件置ComEvSend并激发OnComm事件前发送缓冲区中的最少字符数。2.3界面设计如上图所示,添加相应的控件。2.4主要函数说明添加“打开串口”响应函数:void CWangfei311Dlg:OnBtnOpen() / TODO: A
7、dd your control notification handler code here InitComm() 。/设置串口。波特率停止位 端口选择精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 17 页pictureinit() 。/画图界面初始化画背景 X、 Y 轴坐标,标尺 MSComm 控件相应函数(画图、显示电压值功能在此事件中)void CWangfei311Dlg:OnOnCommMscomm() / TODO: Add your control notification handler code here int n
8、Event 。/Mscomm 控件的事件序号int k。VARIANT m_input 。char *str。long temp,tempref 。/存储接收到的2个 10 位 AD 值,分别为测量值,参考值int Y 。/画图纵坐标值double v。/计算出的电压值CString reslut 。CString Ccount 。CPen pen1。/数据曲线画笔pen1.CreatePen(PS_SOLID,1,RGB(255,255,255) 。/实线 线宽 1 白色pDC1-SelectObject(pen1) 。 nEvent = m_Comm.GetCommEvent() 。/得到
9、事件if(nEvent = 2)/ 只对接收数据事件进行处理 k = m_Comm.GetInBufferCount()。 / 接收缓冲区的字符数目if(k 0)/ 若得到接收数据 m_input = m_Comm.GetInput() 。str = (char*)(unsigned char*)m_input.parray-pvData。 if(*str =A & *(str+5) = z)/开始字符和停止字符的检测 tempref = (*(str+1)*256+*(str+2)。temp = (*(str+3)*256+*(str+4)。v = double(2.5*temp/tempr
10、ef) 。Y = int (300-60*v) 。if(Y300) Y = 300 。/防止画出界限reslut.Format(%f,v) 。reslut.TrimLeft() 。CWnd *pWnddata = GetDlgItem(IDC_RECDATA)。pWnddata-SetWindowText(reslut) 。/在静态文本框中显示电压值pDC-LineTo(X,Y) 。/画线X+=5 。count+。/接收数据个数值加1 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 17 页Ccount.Format(%16d,coun
11、t) 。Ccount.TrimLeft() 。CWnd *pWndcount = GetDlgItem(IDC_COUNT)。pWndcount-SetWindowText(Ccount) 。if(X500)/ 若画到 X 轴最右边 X=10 。pictureinit() 。/清除之前画的图pDC1-MoveTo(10,Y) 。/平移起始点到最左端 Else/若没有通过校验,显示“NO Data” CWnd *pWnddata = GetDlgItem(IDC_RECDATA) 。pWnddata-SetWindowText(NO Data)。 三. 系统测试(最终测试的是2.5V 标准电压)
12、精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 17 页附录一:单片机程序代码/rs232.c 源文件代码:#include #includeRS232.h #include /*+RS232 mode+*/ /* /* void delayus(uchar count) uint i 。uchar j。for(j=0 。 jcount。j+) for(i=0 。 i10。i+) 。 /波特率设置初始化/ void rs232_init() TMOD=0 x20 。TL1=0 xFD 。/9600 比特 /秒 for 11.0592M
13、TH1=0 xFD 。PCON=0 x00 。TR1=1。SCON=0 x50 。ES=1。/允许串行口中断EA=1。/开总中断 /发送字符 / void send(uchar i) SBUF=i 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 17 页while(!TI) 。TI=0 。 void rs232_isr() interrupt 4 using 1 if(RI) rbuf = SBUF 。RI = 0。 if(rbuf = 0 xF0) start=0 。if(rbuf = 0 x80) start=1 。/*=*/ /
14、main.c 源代码#include #include #include rs232.h #define uchar unsigned char #define uint unsigned int sfr P1M0=0 x91 。sfr P1M1 =0 x92 。sfr ADC_CONTR =0XC5 。sfr AUXR = 0 x8e 。sfr ADC_DATA =0 xC6 。sfr ADC_LOW =0 xBE。uchar rbuf。uchar start。uint V 。uint Vref 。delay(uchar count) uchar m,n。for(m=0 。m=count 。
15、m+) for(n=0 。n240。n+)。 /*ADC 初始化 */ void adc_init() P1M0=0 xff 。P1M1=0 x00 。ADC_DATA = 0 。 /数据清零ADC_LOW = 0 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 17 页ADC_CONTR = 0 xe0 。 /开 ADC 电源 ,采集速度选择最高delay(200)。 void get_adc(uchar ch) ADC_CONTR = (0 xe8 | ch) 。/ 开启转换while(!(ADC_CONTR&0 x10)。/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年接口技术课程方案设计书 2022 接口 技术 课程 方案设计
限制150内