电子设计自动化实训报告题目:多点温度监测系统学生姓名:宋安邦学生学号:2104020685学院:工学院专业:电子信息工程班级:2011级指导教师:林君副教授电子设计自动化实训1一、实训目的和意义通过对多点温度检测系统的设计,可以更深入的了解MC5.2单片机的特点以及应用技巧,对单片机的应用可以温习其中的结构以及原理。而且proteus的强大功能也能通过此次试验反应出来,熟悉其界面的风格以及各种应用,又重新的认识了proteus在单片机方面的强大功能。二、实训设计内容要求1.实现4点温度实时采集,温度传感器采用DS18B202.采用LCD1602显示4个采集点温度3.具有温度上下限报警功能:上限90°C,下限20°C4.声音和光报警2种模式:光报警采用4只发光LED;声音报警采用扬声器,报警音调采用2KHz方波。三、系统设计1.方案设计2.硬件电路设计采集温度显示温度8052系统处理是否高于90C°或低于20C°是相应的报警(灯光或蜂鸣器)电子设计自动化实训2(1)工作原理:(a)通过四个温度采集器采集数字温度输入到单片机的p2.0~p2.3口。(b)初始化LCD1602使1602能够接受数据,并分配其显示位置,此处采用两行两列式显示。(c)单片机读取信号。(d)单片机向LCD1602写信号,并延时。(e)判断是否有数据高于90度或低于20度,如果有点亮相应的led,并启动蜂鸣器。(2)硬件系统组成(a)80C52(b)晶振电路(c)复位电路(d)LED灯电路(e)LCD1602电子设计自动化实训3(f)温度检测ds18b203.软件设计(1)时间的设定:从此采用中断T0方式延时,而且是基本单位,无论蜂鸣器还是led,或是显示温度都用到此延时程序。延时程序如下:voidtmpDelay(intnum){while(num--);}voidTime0(void)interrupt1using0{sound=~sound;TH0=(65536-5000)/256;TL0=(65536-5000)%256;}(2)信号的读入与写出:读字节程序如下unsignedcharReadOneChar1()//{unsignedchari=0;unsignedchardat1=0;for(i=8;i0;i--){DQ1=0;//给脉冲信号dat1=1;DQ1=1;//给脉冲信号if(DQ1)dat1|=0x80;tmpDelay(4);电子设计自动化实训4}return(dat1);一共读四个字节,接下来是写字节程序如下voidWriteOneChar1(unsignedchardat1)//{unsignedchari=0;for(i=8;i0;i--){DQ1=0;DQ1=dat1&0x01;tmpDelay(5);DQ1=1;dat1=1;}注意度字节的返回值。读取温度unsignedintReadtemp1()//{unsignedchara=0;unsignedcharb=0;unsignedintt=0;floattt=0;Init_DS18B201();WriteOneChar1(0xCC);WriteOneChar1(0x44);Init_DS18B201();WriteOneChar1(0xCC);WriteOneChar1(0xBE);a=ReadOneChar1();b=ReadOneChar1();//电子设计自动化实训5t=b;t=8;t=t|a;tt=t*0.0625;t=tt*10;if((t900)|(t200)){LED1=0;EA=1;TR0=1;}else{LED1=1;EA=0;TR0=0;}return(t);}(3)蜂鸣器以及led的显示程序如下voiddelay(ucharz){ucharx,y;for(x=1000;x1;x--)for(y=z;y1;y--);}voidwrite_com(ucharcom)//写命令函数{lcdrs=0;P0=com;delay(5);lcden=1;电子设计自动化实训6delay(5);lcden=0;}voidwrite_date(uchardate)//写数据函数{lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;}voidinit_lcd()//初始化函数{lcden=0;//默认开始状态为关使能端,见时序图lcdrw=0;//选择状态为写write_com(0x0f);write_com(0x38);//显示模式设置,默认为0x38,不用变。write_com(0x01);//显示清屏,将上次的内容清除write_com(0x0c);//显示功能设置0x0f为开显示,显示光标,光标闪烁;0x0c为开显示,不显光标,光标不闪write_com(0x06);//设置光标状态默认0x06,为读一个字符光标加1.write_com(0x80);//设置初始化数据指针for(i=0;i16;i++){//显示Thetemperaturewrite_date(t0[i]);delay(0);}write_com(0x80+0x40);for(i=0;i16;i++){//显示isCwrite_date(t1[i]);delay(0);}电子设计自动化实训7}(4)程序流程图如下图所示:四、调试方法及步骤1.用软件调试工具先调试设计好的程序,方法是打开调试工具后新建项目,设计开发环境,选择单片机种类,建立.c,然后加载到环境中,编写程序,生成HEX,把他放虚拟单片机中,调试。2出现错误,就要修改错误,编译全部通过后再接外围硬件电路,接上仿真头,硬件电路供电后再开启仿真头,然后正确设置好仿真器,最后全速运行,查看硬件电路显示结果是否与原设计思想一致。3.显示结果正确后结束仿真,先停止运行程序,再关掉仿真头开关,最后断电,撬开仿真器。否否开始初始化读取温度是否大于90度是否小于20度显示温度点亮相应的led,启动蜂鸣器点亮相应的led,启动蜂鸣器结束电子设计自动化实训8五、结果与讨论.查看结果是否与自己想的一样,如果不一样,可以向同学和老师讨教,如果一样就记录下。六、实训心得通过本次试验学会了如何使用虚拟工具来进行单片机的编辑,通过写c语言又温习了以前的所学,回味看单片机和c语言的魅力。通过调试程序锻炼了个人的耐心恒,恒心,毅力,和理论联系实际的能力通过学习使得懂得了开发工具的使用,多了一门吃饭的的本领,多了一门学习其他学科的实践基础。经过这次实训课程设计,我学到了很多书本上没有的,比较实际、实用的东西,学会了怎样将理论知识运用到实际设计当中,对实验设备和设计软件的使用和分析问题解决问题的能力也有了很大的提高。同时也明白了电路焊接和作品调试时,需要更多的耐心。通过这次实训课程设计,不仅可以在专业上可以学到更多的知识,同时也对平时的学习和工作中产生了影响,那就是认认真真的去完成每一件事。附录(程序清单)#includereg52.h//包含52单片机寄存器定义的头文件/**************************************************程序功能:LCD1602显示温度***************************************************/#defineucharunsignedchar#defineuintunsignedintsbitlcdrs=P2^6;//数据命令选择控制sbitlcdrw=P2^5;//读/写选择控制sbitlcden=P2^7;//使能信号sbitLED1=P1^0;电子设计自动化实训9sbitLED2=P1^1;sbitLED3=P1^2;sbitLED4=P1^3;sbitsound=P1^4;ucharcodet0[]=T1:T2:;ucharcodet1[]=T3:T4:;ucharcodedigital[]=0123456789;sbitDQ1=P2^0;//定义温度DS18B20接口,详情见原理图sbitDQ2=P2^1;//定义温度DS18B20接口,详情见原理图sbitDQ3=P2^2;//定义温度DS18B20接口,详情见原理图sbitDQ4=P2^3;//定义温度DS18B20接口,详情见原理图uchari;/*****************************************函数功能:DS18B20相关函数*****************************************/voidtmpDelay(intnum)//延时函数{while(num--);}voidTime0(void)interrupt1using0{sound=~sound;TH0=(65536-5000)/256;//定时器T0的高8位重新赋初值TL0=(65536-5000)%256;//定时器T0的高8位重新赋初值}voidInit_DS18B201()//初始化ds1820{unsignedcharx=0;DQ1=1;//DS复位tmpDelay(8);//稍做延时DQ1=0;//单片机将DS拉低tmpDelay(80);//精确延时大于480usDQ1=1;//拉高总线tmpDelay(14);x=DQ1;//稍做延时后如果x=0则初始化成功x=1则初始化失败tmpDelay(20);}voidInit_DS18B202()//初始化ds1820{unsignedcharx=0;DQ2=1;//DS复位电子设计自动化实训10tmpDelay(8);//稍做延时DQ2=0;//单片机将DS拉低tmpDelay(80);//精确延时大于480usDQ2=1;//拉高总线tmpDelay(14);x=DQ2;//稍做延时后如果x=0则初始化成功x=1则初始化失败tmpDelay(20);}voidInit_DS18B203()//初始化ds1820{unsignedcharx=0;DQ3=1;//DS复位tmpDelay(8);//稍做延时DQ3=0;//单片机将DS拉低tmpDelay(80);//精确延时大于480usDQ3=1;//拉高总线tmpDelay(14);x=DQ3;//稍做延时后如果x=0则初始化成功x=1则初始化失败tmpDelay(20);}voidInit_DS18B204()//初始化ds1820{unsignedcharx=0;DQ4=1;//DS复位tmpDelay(8);//稍做延时DQ4=0;//单片机将DS拉低tmpDelay(80);//精确延时大于480usDQ4=1;//拉高总线tmpDelay(14);x=DQ4;//稍做延时后如果x=0则初始化成功x=1则初始化失败tmpDelay(20);}unsignedcharReadOneChar1()//读一个字节{unsignedchari=0;unsignedchardat1=0;for(i=8;i0;i--){DQ1=0;//给脉冲信号dat1=1;DQ1=1;//给脉冲信号电子设计自动化实训11if(DQ1)dat1|=0x80;tmpDelay(4);}return(dat1);}unsignedcharReadOneChar2()//读一个字节{unsignedchari=0;unsignedchardat2=0;for(i=8;i0;i--){DQ2=0;//给脉冲信号dat2=1;DQ2=1;//给脉冲信号if(DQ2)dat2|=0x80;tmpDelay(4);}return(dat2);}unsignedcharReadOneChar3()//读一个字节{unsignedchari=0;unsignedchardat3=0;for(i=8;i0;i--){DQ3=0;//给脉冲信号dat3=1;DQ3=1;//给脉冲信号if(D