版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
粮库温度监控管理系统实习报告系别:电气工程系班级:学号:25号实习时间:2014.11.24~2014.12.6指导教师:实习名称:粮库温度监控管理系统二、实习目的:1、能够正确使用相关软件编写上位机、下位机程序实现数据的采集;2、要求系统界面美观、大方,颜色、字体等选择合适,控件选择合理;3、本系统能够控制下位机的启动与停止,同时应具有实时显示、曲线绘制、数据保存、数据浏览、分析(上下限提示、平均值、直方图或饼图等)等基本功能,并配置菜单、工具栏等;4、下位机提供粮库中八个粮仓的温度数据,用数码管或液晶循环显示;三、实训过程:1.设计的内容本次设计所做的是基于VB的温度数据采集与控制系统,它采用DS18B20作为温度传感器,以微机作为主控计算机。通过仿真电路,由串行通讯线把数据直接传送给上位机,让上位机对所得到的数据进行分析处理,并且应用VB语言编程实现温度的显示。硬件方面是由上位机和仿真电路来实现的,DS18B20采集到的温度数据通过串行通讯线传送给上位机,运行在上位机上的编程软件VB利用串行通讯线提供给硬件的接口,对整个单总线进行操作控制,并且对测量数据进行处理。软件方面主要是通过对系统参数的设置,通信控件的应用,最终实现对DS18B20的控制和温度数据的读取。2.仿真电路此次下位机主要是由8个温度传感器DS18B20构成,在此系统中应用DS18B20温度传感器检测温度,经信号处理后,通过仿真运行,最终在上位机上应用编程软件VB语言实现温度的显示。登录界面通过输入用户名和密码来进行登录进入主界面,并有用户名注册和找回密码功能。登录界面主界面串口编写在主界面中打开串口参数对串口参数进行设置。(程序如下)PrivateSubForm2_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadMe.Text="串口参数"EndSubPrivateSubComboBox1_SelectedIndexChanged(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesComboBox1.SelectedIndexChangedForm3.SerialPort1.PortName=ComboBox1.TexEndSubPrivateSubComboBox2_SelectedIndexChanged(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesComboBox2.SelectedIndexChangedForm3.SerialPort1.BaudRate=ComboBox2.TextEndSubPrivateSubComboBox3_SelectedIndexChanged(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesComboBox3.SelectedIndexChangedComboBox3.Text=Form3.SerialPort1.ParityEndSubPrivateSubComboBox4_SelectedIndexChanged(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesComboBox4.SelectedIndexChangedComboBox4.Text=Form3.SerialPort1.DataBitsEndSubPrivateSubComboBox5_SelectedIndexChanged(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesComboBox5.SelectedIndexChangedComboBox5.Text=Form3.SerialPort1.StopBitsEndSubPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickForm3.TextBox1.Text=ComboBox1.TextForm3.TextBox2.Text=ComboBox2.TextForm3.TextBox3.Text=ComboBox3.TextForm3.TextBox4.Text=ComboBox4.TextForm3.TextBox5.Text=ComboBox5.TextMe.Hide()EndSub5.曲线绘图通过打开串口和下位机仿真电路进行数据传递,实现在上位机进行监控各粮仓温度,还可以通过曲线把各个粮仓的温度直观的显示在界面。并附有上下限温度报警系统,使用户可以快速的对粮仓的温度进行调整。(程序如下)DimgAsGraphics=PictureBox1.CreateGraphics'曲线绘图h=PictureBox1.Heightg.TranslateTransform(30,h-165)Dimp1AsPen=NewPen(Color.Maroon)z=Val(TextBox6.Text)q=5i=30x21=x11+iy21=-z*qg.DrawLine(p1,x11,y11,x21,y21)x11=x21y11=y21Ifx21=450Thenx11=0PictureBox1.Refresh()EndIfIfx22=450Orx23=450Orx24=450Orx25=450Orx26=450Orx27=450Orx28=450Thenx11=0PictureBox1.Refresh()EndIfg.Dispose()p1.Dispose()EndSubPrivateSub打开串口ToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles打开串口ToolStripMenuItem.ClickIfSerialPort1.IsOpen=FalseThen'串口通信SerialPort1.Open()Timer3.Enabled=TrueSerialPort1.Write(TextBox6.Text)EndIfEndSubPrivateSub关闭串口ToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles关闭串口ToolStripMenuItem.ClickIfSerialPort1.IsOpen=TrueThenSerialPort1.Close()Timer3.Enabled=FalseTextBox6.Text="1"TextBox7.Text="0"TextBox8.Text="0"TextBox9.Text="0"TextBox10.Text="0"TextBox11.Text="0"TextBox12.Text="0"TextBox13.Text="0"EndIfEndSubPrivateSubTimer3_Tick(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesTimer3.TickDimcAsDoubleDimdat,rAsStringDimb(3)AsSingler=SerialPort1.ReadExisting()IfLen(r)<3OrLen(r)>3ThenExitSubElsec=rIfc<>0Thenb(0)=c\100b(1)=c\10Mod10b(2)=cMod10EndIfIfb(2)=1Thendat=b(0)*10+b(1)TextBox6.Text=datEndIfIfb(2)=2Thendat=b(0)*10+b(1)TextBox7.Text=datEndIfIfb(2)=3Thendat=b(0)*10+b(1)TextBox8.Text=datEndIfIfb(2)=4Thendat=b(0)*10+b(1)TextBox9.Text=datEndIfIfb(2)=5Thendat=b(0)*10+b(1)TextBox10.Text=datEndIfIfb(2)=6Thendat=b(0)*10+b(1)TextBox11.Text=datEndIfIfb(2)=7Thendat=b(0)*10+b(1)TextBox12.Text=datEndIfIfb(2)=8Thendat=b(0)*10+b(1)TextBox13.Text=datEndIfEndIfSerialPort1.DiscardInBuffer()'把串口缓存清空EndSub6.图形数据显示直方图显示和饼图显示每一个颜色都代表一个粮库温度可以使用户更一步直观的了解各粮仓的温度。(各颜色对应于主界面中粮仓按钮旁的颜色)数据统计和保存统计每秒各粮仓的温度情况并保存,方便用户随时调看每天的温度历史记录。四、实习体会:在做课程设计之前,整个人对课程设计的流程可谓是一头雾水。在结课之前,我们学了VB的串口通信。在课上积累的基础上,我开始了串口通信课程设计的制作。设计时,最初想到的是界面如何更加美观。在好奇心的驱使下,到网上下载好多图片作为背景。慢慢地,开始读入编程阶段。要进入一个系统,最开始需要写一段代码运行进入系统。这让我想起了平常的很多登录界面,比如QQ登录。每次人的登录界面,现在终于自己面临设计界面,刚开始确实迷茫,但是想想平常的很多界面的运行方式方法问题就迎楞而解了。在曲线绘图、温度报警、数据显示、数据查询这一方面的代码是不尽相同的。为了实现这些功能,我查找了书上的各个章节的练习题,希望能够找到点灵感。终于功夫不负有心人,我也成功地让这些按钮能够运行。总而言之,这次的课程设计让我体验了编写城中的酸与苦。也学到了很多东西。(程序源码)#include<reg52.h>#defineLCD1602_DBP0sbitLCD1602_RS=P2^5;sbitLCD1602_RW=P2^6;sbitLCD1602_E=P2^7;/*等待液晶准备好*/voidLcdWaitReady(){unsignedcharsta;LCD1602_DB=0xFF;LCD1602_RS=0;LCD1602_RW=1;do{LCD1602_E=1;sta=LCD1602_DB;//读取状态字LCD1602_E=0;}while(sta&0x80);//bit7等于1表示液晶正忙,重复检测直到其等于0为止}/*向LCD1602液晶写入一字节命令,cmd-待写入命令值*/voidLcdWriteCmd(unsignedcharcmd){LcdWaitReady();LCD1602_RS=0;LCD1602_RW=0;LCD1602_DB=cmd;LCD1602_E=1;LCD1602_E=0;}/*向LCD1602液晶写入一字节数据,dat-待写入数据值*/voidLcdWriteDat(unsignedchardat){LcdWaitReady();LCD1602_RS=1;LCD1602_RW=0;LCD1602_DB=dat;LCD1602_E=1;LCD1602_E=0;}/*设置显示RAM起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标*/voidLcdSetCursor(unsignedcharx,unsignedchary){unsignedcharaddr;if(y==0)//由输入的屏幕坐标计算显示RAM的地址 addr=0x00+x;//第一行字符地址从0x00起始elseaddr=0x40+x;//第二行字符地址从0x40起始LcdWriteCmd(addr|0x80);//设置RAM地址}/*在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针*/voidLcdShowStr(unsignedcharx,unsignedchary,unsignedchar*str){LcdSetCursor(x,y);//设置起始地址while(*str!='\0')//连续写入字符串数据,直到检测到结束符{LcdWriteDat(*str++);}}/*初始化1602液晶*/voidInitLcd1602(){LcdWriteCmd(0x38);//16*2显示,5*7点阵,8位数据接口LcdWriteCmd(0x0C);//显示器开,光标关闭LcdWriteCmd(0x06);//文字不动,地址自动+1LcdWriteCmd(0x01);//清屏}#include<reg52.h>#include<intrins.h>unsignedcharcodeID[8][8]={{0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e},//第一个DS18B20的序列号 {0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9},//第2个DS18B20的序列号 {0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,0xe0}, {0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,0xd7}, {0x28,0x34,0xc5,0xb8,0x00,0x00,0x00,0x52}, {0x28,0x35,0xc5,0xb8,0x00,0x00,0x00,0x65}, {0x28,0x36,0xc5,0xb8,0x00,0x00,0x00,0x3c}, {0x28,0x37,0xc5,0xb8,0x00,0x00,0x00,0x0b}, }; unsignedcharlcdadd=0;sbitIO_18B20=P3^7;//DS18B20通信引脚/*软件延时函数,延时时间(t*10)us*/voidDelayX10us(unsignedchart){do{_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();}while(--t);}/*复位总线,获取存在脉冲,以启动一次读写操作*/bitGet18B20Ack(){bitack;EA=0;//禁止总中断IO_18B20=0;//产生500us复位脉冲DelayX10us(50);IO_18B20=1;DelayX10us(6);//延时60usack=IO_18B20;//读取存在脉冲while(!IO_18B20);//等待存在脉冲结束EA=1;//重新使能总中断 returnack;}/*向DS18B20写入一个字节,dat-待写入字节*/voidWrite18B20(unsignedchardat){unsignedcharmask;EA=0;//禁止总中断for(mask=0x01;mask!=0;mask<<=1)//低位在先,依次移出8个bit{IO_18B20=0;//产生2us低电平脉冲_nop_();_nop_();if((mask&dat)==0)//输出该bit值IO_18B20=0;elseIO_18B20=1;DelayX10us(6);//延时60usIO_18B20=1;//拉高通信引脚} EA=1;//重新使能总中断}/*从DS18B20读取一个字节,返回值-读到的字节*/unsignedcharRead18B20(){unsignedchardat;unsignedcharmask;EA=0;//禁止总中断for(mask=0x01;mask!=0;mask<<=1)//低位在先,依次采集8个bit{IO_18B20=0;//产生2us低电平脉冲_nop_();_nop_();IO_18B20=1;//结束低电平脉冲,等待18B20输出数据_nop_();//延时2us_nop_();if(!IO_18B20)//读取通信引脚上的值dat&=~mask;elsedat|=mask;DelayX10us(6);//再延时60us}EA=1;//重新使能总中断returndat;}/*启动一次18B20温度转换,返回值-表示是否启动成功*/bitStart18B20(){bitack;ack=Get18B20Ack();//执行总线复位,并获取18B20应答if(ack==0)//如18B20正确应答,则启动一次转换{ Write18B20(0xCC);Write18B20(0x44);//启动一次温度转换}return~ack;//ack==0表示操作成功,所以返回值对其取反}/*读取DS18B20转换的温度值,返回值-表示是否读取成功*/bitGet18B20Temp(int*temp){bitack;unsignedcharLSB,MSB,i;//16bit温度值的低字节和高字节staticunsignedcharadder=0;ack=Get18B20Ack();//执行总线复位,并获取18B20应答if(ack==0)//如18B20正确应答,则读取温度值{// Write18B20(0xCC);//跳过ROM操作 Write18B20(0x55);for(i=0;i<8;i++) { Write18B20(ID[adder][i]); lcdadd=adder; } adder++; if(adder>=8) adder=0;Write18B20(0xBE);//发送读命令LSB=Read18B20();//读温度值的低字节MSB=Read18B20();//读温度值的高字节*temp=((int)MSB<<8)+LSB;//合成为16bit整型数}return~ack;//ack==0表示操作应答,所以返回值为其取反值#include<reg52.h>unsignedchari=0,z;unsignedcharIDD[8][5]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}, {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},};voidDelayMs(unsignedcharn){ unsignedchari=0,j=0; for(i=0;i<n;i++) for(j=0;j<123;j++);}bitflag1s=0;//1s定时标志unsignedcharT0RH=0;//T0重载值的高字节unsignedcharT0RL=0;//T0重载值的低字节voidConfigTimer0(unsignedintms);externvoidConfigUART(unsignedintbaud);unsignedcharIntToString(unsignedchar*str,intdat);externbitStart18B20();externunsignedcharlcdadd,tmp;externbitGet18B20Temp(int*temp);externvoidInitLcd1602();externvoidLcdShowStr(unsignedcharx,unsignedchary,unsignedchar*str);voidmain(){bitres;inttemp;//读取到的当前温度值intintT,decT;//温度值的整数和小数部分unsignedcharlen;unsignedcharstr[12];EA=1;//开总中断ConfigTimer0(10);//T0定时10ms ConfigUART(9600);Start18B20();//启动DS18B20 InitLcd1602();//初始化液晶while(1){if(flag1s)//每秒更新一次温度{flag1s=0;res=Get18B20Temp(&temp);//读取当前温度 if(res)//读取成功时,刷新当前温度显示{intT=temp>>4;//分离出温度值整数部分decT=temp&0xF;//分离出温度值小数部分len=IntToString(str,intT);//整数部分转换为字符串str[len++]='.';//添加小数点decT=(decT*10)/16;//二进制的小数部分转换为1位十进制位str[len++]=decT+'0';//十进制小数位再转换为ASCII字符while(len<4)//用空格补齐到6个字符长度{str[len++]='';}str[len]='\0';//添加字符串结束符 switch(lcdadd) { case0:LcdShowStr(0,0,"1:");LcdShowStr(2,0,str) ;break;//显示到液晶屏上 case1:LcdShowStr(8,0,"2:");LcdShowStr(10,0,str);break; case2:LcdShowStr(0,1,"3:");LcdShowStr(2,1,str) ;break;//显示到液晶屏上 case3:LcdShowStr(8,1,"4:");LcdShowStr(10,1,str);break; case4:LcdShowStr(0,0,"5:");LcdShowStr(2,0,str) ;break;//显示到液晶屏上 case5:LcdShowStr(8,0,"6:");LcdShowStr(10,0,str);break; case6:LcdShowStr(0,1,"7:");LcdShowStr(2,1,str) ;break;//显示到液晶屏上 case7:LcdShowStr(8,1,"8:");LcdShowStr(10,1,str);break; default:break; } for(z=0;z<2;z++) IDD[lcdadd][z]=str[z]; IDD[lcdadd][2]='\0'; }else//读取失败时,提示错误信息{LcdShowStr(0,0,"error!");}/*********************************************************/ if(tmp==1) { while(IDD[lcdadd][i]!='\0') { SBUF=IDD[lcdadd][i]; while(!TI); TI=0; i++; DelayMs(30); } SBUF=lcdadd+1+0x30; while(!TI); TI=0; i=0; }Start18B20();//重新启动下一次转换}}}/*整型数转换为字符串,str-字符串指针,dat-待转换数,返回值-字符串长度*/unsignedcharIntToString(unsignedchar*str,intdat){signedchari=0;unsignedcharlen=0;unsignedcharbuf[6];if(dat<0)//如果为负数,首先取绝对值,并在指针上添加负号{dat=-dat;*str++='-';len++;} if((dat<10)&(dat>0)) { *str++='0';len++; }do{//先转换为低位在前的十进制数组buf[i++]=dat%10;dat/=10;}while(dat>0);len+=i;//i最后的值就是有效字符的个数while(i--
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年全自动精密贴片机项目发展计划
- 2024年非接触温度计合作协议书
- 小学一年级十篇周记150字左右
- 小学一年级作文可爱的小动物(十篇)
- 一年级小学生日记中秋节300字
- 小学一年级作文家乡的景色(20篇)
- 2024年生化分析仪器合作协议书
- 小学二年级记叙文作文200字十篇
- Thiobencarb-Standard-生命科学试剂-MCE
- Thalidomide-4-Br-生命科学试剂-MCE
- 2022届高三语文一轮复习积累:现代汉语语法基础知识
- GB/T 31953-2023企业信用评价报告编制指南
- 大学武术智慧树知到答案章节测试2023年浙江大学
- 现代药物制剂与新药研发智慧树知到答案章节测试2023年苏州大学
- 市政工程排水工程 深基坑专项施工方案
- MT/T 198-1996煤矿用液压凿岩机通用技术条件
- GB/T 7715-2014工业用乙烯
- 企鹅排队课件
- GB/T 21387-2008轴流式止回阀
- GB/T 14480.2-2015无损检测仪器涡流检测设备第2部分:探头性能和检验
- GB/T 1094.11-2007电力变压器第11部分:干式变压器
评论
0/150
提交评论