基于vb6[1]0的温度数据采集系统内容摘要:

编写的图形界面把温度的变化曲线显示出来,并通过数据库存储,可查询历史温度记录。 图 总体设计框图主控制器单片机 AT89C51 具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。 显示电路显示电路采用 8 位共阳极 LED 数码管,从 P0 口输出段码,P2 口为 LED 的位选信号。 单片机LED显 示温 度 传 感 器复位电路时钟振荡蜂鸣器P C长沙学院毕业设计11温度传感器采用 DS18B20 温度传感器,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现 9~12 位的数字值读数方式。 PC 实时显示界面显示实时温度数据变化曲线的界面,采用 编辑,在 程序使用 的通用串口控件 MSCOMM 来对发送到串口的数据进行采集处理。 上下位机定义好通信协议和波特率。 设计中所需要的器件 单片机:AT89C51 一块; 温度传感器:DS18B20 一块;8位共阳极数码管 一块; 30PF电容一个,开关一个,蜂鸣器一个; 10K电阻 2个、5K的电阻排; 串行通信线。 长沙学院毕业设计12 系统硬件设计系统整体硬件电路包括,传感器数据采集电路,温度显示电路,报警电路,单片机主板电路等,如图 所示。 长沙学院毕业设计13 图 设计原理图温度传感器的数据线接单片机的 口,单片机通过反复读写 口的状态采集数据,不过硬件简单,软件肯定复杂,读写时都有严格的时序要求。 显示电路采用 8 个共阳极的 LED 显示,显示代码由 P0 口发送,当使用 P0 口时需要接上拉电阻,P2 口的逻辑状态作位选线信号,达到分时选通的目的,当相应口为高电平时 LED 才能显示相应代码。 实际使用中只用到七个 LED,最后 2 个用来显示摄氏度符号,第二个用来显示温度的正负,当温度为负时,显示“—”号,为正时不显示,同样由软件可以实现,当百位为零时,百位不显示,百位十位为零时,百位十位都不显示,这样设计方便观察,更加直观。 此外还接有蜂鸣器,当 DS18B20 不能正常工作时可以达到报警的目的。 最后还要实现单片机与上位机通信的功能,所以要连接好串口,以便能向上位机发送或接受数据。 按健复位电路是最简单的手动复位,使用比较方便,在程序跑飞时,可以手动复位,这样就不用在重起单片机电源,就可以实现复位。 系统软件设计 下位机软件设计系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。 主程序主程序的主要功能是负责温度的实时显示、读出并处理 DS18B20 的测量的当前温度值,温度测量每 1s 进行一次。 这样可以在一秒之内测量一次被测温度,其程序流程见图 所示。 长沙学院毕业设计14 图 2..3 主程序流程图 图 读温度流程图 读出温度子程序读出温度子程序的主要功能是读出 RAM 中的 9 字节,在读出时需进行 CRC 校验,校验有错时不进行温度数据的改写。 其程序流程图如图 所示。 计算温度子程序初始化调用显示子程序1S 到。 初次上电读出温度值温度计算处理显示数据刷新发温度转换开始命令的法国风格 法国 NYNYY发 DS18B20 复位命令发跳过 ROM 命令发读取温度命令读取操作,CRC 校验9 字节完。 CRC 校验正。 确。 移入温度暂存器结束 NNY长沙学院毕业设计15发 DS18B20 复位命令发跳过 ROM 命令发温度转换开始命令 结束计算温度子程序将 RAM 中读取值进行转换运算,并进行温度值正负的判定,其程序流程图如图 所示。 图 计算温度流程图 图 温度转换流程图 温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令,当采用 12 位分辨率时转换时间约为 750ms,在本程序设计中采用 1s 显示程序延时法等待转换的完成,如图 所示。 显示数据刷新子程序显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为 0 时将符号显示位移入下一位。 程序流程图如图 所示。 开始温度零下?温度值取补码置“—”标志计算小数位温度值 计算整数位温度值 结束置“+”标志NY温度数据移入显示寄存器十位数 0。 百位数 0。 十位数显示符号百位数不显示百位数显示数据(不显示符号) 结束NNYY长沙学院毕业设计16图 显示数据刷新流程图   上位机软件设计上位机是应用 VB 进行编写的,它把下位机传送上来是两字节的十六进制数据进行解码显示出来。 当点击采集温度时,上位机向下位机发送采集温度命令字符“1” ,当下位机接受到命令时,向上位机发送数据。 使用 编写上位机程序,接收温度数据并储存在数据库中;接收数据时,能同步画出温度变化的曲线,系统可查询历史温度信息。 具体在上下位机程序里面体现出来。 下图 为上位机工作流程图。 长沙学院毕业设计17图 上位机工作流程图数据采集实时显示程序设计思路:本程序使用 的通用串口控件 MSComm 来对发送到串口的数据进行采集处理。 的 MSComm 通信控件提供了一系列标准通信命令的接口,它允许建立串口连接,可以连接到其他通信设备(如 Modem) .还可以发送命令、进行数据交换以及监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工 、事件驱动的、高效实用的通信程序。 一般说来,计算机都有一个或多个串行端口,它们依次为 ComCom2 、… ,这些串口还提供了外部设备与 PC 进行数据传输和通信的通道。 这些串口在 CPU 和外设之间充当解释器的角色。 基本属性与描述如下:属性 描述CommPort 设置或返回通信端口号Settings 以字符串的形式设置或返回波特率、奇偶校验、数据位和停止位PortOpen 设置或返回通信端口的状态。 也可以打开和关闭端口Input 返回和删除接收缓冲区中的字符长沙学院毕业设计18Output 将字符串写入发送缓冲区 CommEvent 属性为通信事件或错误返回下列值之一,在该控件的对象库中也可以找到这些常量。 你只首先要确定一个 msm 控件在 system 目录下并且该控件已经被 windows 注册,程序才能正常运行。 有数据向串口发过来时,程序可以将数据接收到,接收的数据是字符型的,那么将数据转化为数字型的,再将这个数据的大小作为画图的某一个点的纵坐标,横坐标为数据的序,这个就是图形显示基本原理。 查看原来的数据的原理也是这样的,不同的地方就是,数据是从文件中来,同样的也是将多个数据分成一个一个的,然后这一个数据的大小就是画图的某一个点的纵坐标,横坐标同样为数据的序号,再将这些点用线连起来就是曲线图。 图形能移动的原理,是我们首先改变的只是数据,图形并没有变,但图形的形式是由这些数据来确定的,当数据发生变化后,我们通过刷新显示区来变化的。 VB 编写的实时显示界面如图 所示,点击查询可查询历史温度信息。 长沙学院毕业设计19图 实时温度曲线显示及查询图串口的波特率,串口号都采用下拉选择的方式,在使用中可跟据情况选择读串口数据的原理是,只要当有数据向串口发数据来时,计算机就会自动将其数据写到一个特定的缓冲区,我们只要写程序去读那个特定的缓冲区就可以了。 此外为了保存和查询历史温度数据还要在 VB 中设计建立连接到 Access 数据库的控件,Data 控件是 Visual Basic 中的一个内置数据控件,可以通过设置 Data 控件的 connect、DatabaseName 、RecordSource 属性实现对数据库的连接和访问。 建立的数据库库文件和 VB 中创建的工程文件必须放在放在同一目录下 [5]。 第 3 章 程序设计 下位机程序下位机程序的编写主要使用 C 语言进行编写,可读性要比汇编语言好很多。 其中包括 DS18B20 的测温模块,显示模块和串口通信模块,当上位机向下位机发送读温度指令时,单片机才会将所测得的数据传给上位机。 温度采集系统的主程序设计如下:void main(void){长沙学院毕业设计20uchar receive。 init()。 while(1) { Read_Temperature()。 if (flash==0) {Disp_Temperature()。 }else {P2 = 0x00。 }if (RI) {RI = 0。 receive = SBUF。 if (receive == 39。 s39。 ) {send_char()。 }} }}主程序为一无限循环,单片机不断从 DS18B20 的数据口采集数据信号,用 flash标志 DS18B20 是否正常,当 flash=1 时表示 DS18B20 不正常,就由软件设置及时关闭LED 显示并由蜂鸣器报警。 当一帧数据采集完毕即 RI 接受中断标志位为 1,判断下位机是否接受到来自上位机的字符“1”对应的 ASC 码 49 时接收到时才开始将采集到的数据发送给上位机进行处理,RI 标志位必须由软件清零。 在串口通信模块中,baudrate 的在程序初始化时已经定义为 9600b/s,晶振频率也已设定好。 波特率的产生用定时器产生,在设置时选择定时器 1,并将它的设为工作方式2,8 位的常数自动重新装载的定时器,这种工作方式可以省去用户软件中重装初值的程序,简化定时初值的计算方法,可以相当精确的确定定时时间。 计算出定时器的初长沙学院毕业设计21值之后,在设定串行口的工作方式,在这里令SCON=0X50,即 SCON 各位中,SM0=0,SM1=1,REN=1,其他控制字为 0,选择为工作方式 1,8 位异步收发。 令 TCON 中的 TR1=1,启动定时器,并禁止其他中断。 程序设计内容如下所示:void init(void){EA = 1。 TMOD = 0x20。 TH1=(unsigned char)(256 (XTAL / (32L * 12L * baudrate)))。 TL1=(unsigned char)(256 (XTAL / (32L * 12L * baudrate)))。 SCON = 0x50。 PCON amp。 = 0x00。 TR1 = 1。 IE = 0x00。 }此外,在显示模块中,小数位的转化才用了一定的技巧,由于实际显示中只要求显示一位小数,而 DS18B20 每一位的转化温度为 ℃/LSB,当每一位变化时,第一位小数只有 16 种状态,我们只需一一算出放在一个数组中,通过查表指令即可获取第一位小数的十进制值。 由于每一位变化为 ℃/LSB,通过移位操作,即可获得一个新的关于温度整数部分的数据,部分设计显示转化程序如下:display[4]=temp_data[0]amp。 0x0f。 display[0]=ditab[display[4]]。 display[4]=((temp_data[0]amp。 0xf0)4)|((temp_data[1]amp。 0x0f)4)。 display[3]=display[4]/100。 display[1]=display[4]%100。 display[2]=display[1]/10。 display[1]=display[1]%10。 其中小数位所查的表为:unsigned char code ditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04, 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}在程序中 display[0]为小数位十进制数,display[3]为百位十进制数,display[2] 为十位十进制数,display[1]为个位十进制数,通过查询 LED 共阳极的显示代码程序,分时选通即可显示当前的温度值。 长沙学院毕业设计22unsigned char code LEDData[ ] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0xff}当然应特别注意由于个位的显示需要显示小数点,所以它的查表显示代码不一样,应为下面的程序:unsigned char code LEDData1[ ] ={0x40,0x79,0x24,0x30,0x19,0x12。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。