logo资料库

基于51单片机的数字电压表的设计.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
第 11 卷 第 2009 年 11 期 11 月 Electronic Component & Device Applications Vol.11 No.11 Nov. 2009 doi:10.3969/j.issn.1563-4795.2009.11.005 基于STC89C51单片机的数字电压表设计 胡卓敏, 王丽娟 (中北大学信息与通信工程学院, 山西 太原 030051) 摘 要: 介绍了一种基于STC89C51单片机的数字电压表的设计方法。 该方案根据数据采集的 工作原理来实现数字电压的测量, 然后完成单片机与PC的通信, 以将所测量的电压值通过串 口传送给PC, 并在PC上进行显示。 关键词: 数字电压表; ATC89C51; 单片机; AD0809 0 引言 , , 数字电压表的设计和开发已有很多类型和款 传统的数字电压表有自己的特点 它们适合 而要完成远程测量并对测量 运用传统的数字电压表是 通信的数 又 这种类型 都具有 这使得它的开 式 在现场做手工测量 , 的数据做进一步处理 无法完成的 字电压表 可借助 , 的数字电压表无论在功能和实际应用上 传统数字电压表无法比拟的优点 发和应用都具有良好的前景 。 该表既可以完成测量数据的传递 , 进行测量数据的处理 , 本文设计了基于 所以 为此 PC PC , , 。 , , 。 1 系统构成 , 。 8 , 图 片内有 即没有用任何附加逻辑器件做接口电路 现单片机对 是 ADC0809 位的模数转化芯片 转换芯片的操作 ADC0809 选通开关以及相应的通道锁存译码电路 间大约为 定 后 的 数 据 通 道 信 号 由 高 到 低 便可实 中 的 1 路模拟 转化时 , 首先要指 当 外 部 电 压 进 入 芯 片 在 脉 冲 的 下 降 沿 表 , 的电 电平变低 管脚 , 转化完成之后 , 同时管脚 在电路应用中 开始转换 , STATR ADC0809 100 μs 左右 EOC 8 。 , , ADC0809 示转化正在进行 平变高 , , 表示一次转化结束 。 , EOC 本系统主要由硬件和软件两部分构成 , , 硬件 单片机最小数据采集系 软件主要有单 单片机与上位机通信程序 。 机的接口电路等 , 单片机与 主要包括数据采集电路 统 片机数据采集程序 以及上位机数据处理程序 PC , 。 2 数据采集电路原理 该新型数字电压表测量的电压类型为直流 , 下 位 机 采 用 的 单 片 机 为 测 量 范 围 为 0 ~5 V, 转化采用的是最常见的 STC89C51, AD 串行口与 可通过 测量的直流电压数据 的数据采集电路 ADC0809, 以传送所 所示是该数字电压表 电路的设计已做到了最小化 机进行通信 PC 图 RS232 1 , 。 。 收稿日期:2009-06-05 14 2009.11 www.ecda.cn , , 图1 数字电压表的数据采集电路 3 软件编程 上位机可视化界面程序 本系统的软件程序主要包括下位机数据采集 机的 上位机操 在串 工 , 串口调试助手 单片机与 编程 进行可视化编程 单片机可采用 就可以借助 , 这样 VC++6.0 C51 PC 、 , “ 并有效利用这个工具提高 , ” 整个系统效率 。 、 程序 串口通信等 作可采用 口调试的时候 具 , , 。 3.1 单片机编程 单 片 机 在 这 个 系 统 中 所 起 的 作 用是 控 制 并将转化的数据通过串 进行数据转化 ADC0809 ,
第 11 卷 第 2009 年 11 期 11 月 新特器件应用 Vol.11 No.11 Nov. 2009 口发送到上位机上 力不是很强 所以 , 。 , 机上 PC 行处理 , 再利用 最后得出想要的结果 PC , 需要外接时钟信号 因为单片机做数据处理的能 将所采集的数据转化量送到 机强大的数据处 理 能 力 来 进 的 这 也 为了设计的 , 口来提供时钟 500 kHz), ADC0809 一般接 因为 T0 。 , ( CLOCK 个时钟信号频率可以用标准的振荡电路产生 可以用单片机自带的 最小化 信号 本设计采用的是自带的 , 其程序如下 口产生 或 T1 T0 。 : #include #include #define uchar unsigned char sbit clk=P3^4; sbit start=P3^6; sbit eoc=P3^3; sbit oe=P3^7; uchar temp; void send (uchar ch) { } SBUF=ch; while (! TI) ; TI=0; void inituart ( ) { } TMOD=0x21; SCON=0x50; TH1=0xfd; TL1=0xfd; TR1=1; void main () { inituart ( ) ; EA=1; ET0=1; TH0= (65536-1) /256; TL0= (65536-1) %256; TR0=1; start=0; while (1) { start=1; start=0; while (! eoc) ; oe=1; P1=0xff; temp=P1; if (RI==1) { RI=0; If (SBUF=0xfd) send (temp) ; } } } void inter_T0 () interrupt 1 { TH0= (65536-2) /256; TL0= (65536-2) %256; clk=~clk; } 3.2 上位机编程 上位机采用 位机的通信功能 的编程语言工具 下位机的通信 设置 所以 。 VC++ VC++6.0 实现可视化界面及与下 操作系统 是基于 函数来直接实现与 , 但是这种方法要涉及到很多低层 Windows 可采用 API , 本文采用 的 是 , 技术来实现串口通信 , Microsoft Ac- 即应用程序直接使用 推 出 的 tiveX ActiveX 控件提供的接口来访问 , ActiveX 控件 以 下 简 称 。 Microsoft Communications Control ( 是 公 司 提 供 的 可 在 简 化 。 , , 控件 ActiveX Microsoft MSComm) (Event2driven) 下串行通信编程的 Win- 它为应用 dows 程序提供了通过串行接口收发数据的简便方法 它提供了两种处理通信问题的方法 具体来说 : 二是查询方 一是事件驱动 这种方法适合于 法 较小的应用程序 每当应用程序 执行完某一串行口操作后 控件的 属性 , 检查某一事件是否发生 是自成一体 MSComm , 以便检查执行结果或者 如果应用程序较小而且 故对本设计 本设计采用的是查询方法 , 在这种情况下 这种方法可能更可取 将不断检查 CommEvent 方法 , 。 。 。 , , 。 www.ecda.cn 2009.11 15
第 11 卷 第 2009 年 11 期 11 月 Electronic Component & Device Applications Vol.11 No.11 Nov. 2009 更为可取 中首要的几个如表 。 MSComm 控件有许多重要的属性 所列 1 。 其 , { VARIANT variant_inp; COleSafeArray safearray_inp; 表1 MSComm控件的属性 说明 设置 设置 打开 / / / 获取控件对应的串行口 获取波特率 、 关闭通信口 校验方式 、 、 读取数据 发送数据 数据位 、 停止位 属性 CommPort Settings PortOpen Input Output LONG len, k; BYTE rxdata [1024] ; // CString strtemp; 设置字节数组 if (m_mscomm.GetCommEvent () ==2) // 表示接收到数据 2 { variant_inp=m_mscomm.GetInput () ;// 读缓冲区 事件值为 为文本 , 1 为二进制 safearray_inp=variant_inp; InputMode 接受数据类型 : 0 在对上位机编程时 话框的应用程序 对 话 框 资 源 上 放 一 个 编 辑 框 然后插入 , , 应首先创建一个基于对 可在 控件 MSComm , 显示电压值 再放两个 按 钮 控 件 , IDC_TEST) CEIVE) 测量 做对话框模板 , 增加成员变量 m_mscomm 和停止测量 鼠标点击右键 将 设 定 为 , IDC_MSCOMM1 (ID_STOP)。 选择 , CMSComm 关联成员变量 ( IDC_EDIT_RE- 开 始 然后再 [ 控 件 类 型 Classwizard, 关联成员变量 但 , 不是 之后分别对两个 这可在 m_receive , (float)。 控件添加消息响应函数 WM_TIMER 上 添 加 消 息 。 可 在 OnTimer ( UINT nIDEvent) CByteArray bytoutArr; bytoutArr.Add (0xfd) ;m_mscomm.SetOutput (COle- 采用二进制方式发送数据 下 位 机 只 有 在 接 收 到 这也相当于一 Variant (bytoutArr)) ; ( 发 送 一 次 后才会将转化的数据传回来 0xfd, 500 ms , , 0xfd 个简单的通信协议 。 数据的接收处理 可通过 控件的消息响应函数中采用查询方式 也是本文的重点 ( ) MSComm 在 检查接收事件是否发生来完成 具体代码如下 : 。 void CCTestVotDlg::OnOnCommMscomm1 () 16 2009.11 www.ecda.cn IDC_EDIT_RECEIVE 控件类型 按钮和 是数值类型 , MSComm 下自动添加 。 , Classwizard 添加代码时 这可以在 口 性 , 的是 位数据位 COM1 OnInitDialog 波特率为 , 位停止位 , 1 , 在开始测量按钮的 Timer (1, 500, NULL) 发一次定时器事件 函数下添加 器事件 , KillTimer (1) ; 。 接 着 是 添 加 要首先设置 MSComm 函数中添加 。 控件的属 本文采用 无奇偶校验位 9600, 用二进制方式收发数据 , 8 。 Set- 触 函数下添加 OnTest () 开 启 定 时 器 每 并在停止测量按钮 ; 500 ms OnStop () 按钮的作用是停止定时 len=safearray_inp.GetOneDimSize () 的数据长度 for (k=0;k
分享到:
收藏