二○一四~二○一五学年第二学期信息科学与工程学院电子技术综合设计(一)课程设计报告班级:姓名:学号:指导教师:二○一五年六月十八日一、设计任务温度测量显示系统设计在Proteus软件下,利用AT89C51系列单片机、A/D芯片ADC0831、OP07高精度单片运算放大器、TCK温度传感器、LED等设计一个温度测量显示报警系统,外接至少4个LED数码管,将当前测量温度值显示在LED上。根据系统的设计要求,温度传感器TCK输出信号经信号差动放大到0—5V,放大器的输出送ADC80C51进行A/D转换,A/D转换结果送单片机进行处理,最后将所测的温度在LED数码管上显示。仿真时可在TCK温度传感器上手动修改输入当前环境温度值。温度传感器A/D放大单片机LED显示报警灯二、设计要求1)测量范围为0℃~+120℃,精度为1℃。2)利用温度传感器测量某一点环境温度。3)利用A/D转换将温度信号转换成电压信号,在LED数码管上显示。4)设置一个开关,当开关断开时LED显示个人学号的后4位数字,当开关闭合时工作在测温报警显示状态,LED显示温度值。5)设置2个指示LED灯,当温度低于80°时,绿灯亮,当温度高于80°时,红灯亮报警。6)扩展功能:语音报警。7)所有单片机程序代码都用C语言编写。8)用Proteus软件进行仿真。报告要求:1).在报告中应对系统的设计思想、设计方法用文字详细说明,有总体电路框图和Proteus连接图的截图。2).有程序者在报告中应有完整的程序清单(必需加注释)。3).有程序者在报告中应有完整的程序流程框图。4).谈谈自己通过这次设计实践的收获和体会。课程考核方式考查要求:提交课程设计报告,设计报告内容包括设计任务,设计要求,软硬件设计,程序结果描述。1)每人独立完成题目的基本功能。包括设计报告、电路图和程序清单(带注释),运行结果及有关运行说明。2)程序检查。分优、良、中、及格、不及格,如为不及格,需下一学年进行重修;3)课程设计报告,正规书写打印,否则不计成绩;4)验收时每位同学现场演示仿真结果,指导老师随时针对电路设计、程序调试、代码功能等各个方面进行提问。5)设计报告若雷同或超过50%雷同,则以作弊论,作弊者本课程均计零分。本课程无补考,只能下一学年进行重修。三、各部分电路设计1)温度测量电路设计度测量电路要实现的目标是:将0~120度通过传感器测量,运算放大器放大的0~5V的电压信号。温度传感器选用Pa-t传感器,放大器采用OP07E放大器,温度信号输入采用差动放大形式,放大器输出为:iiiUUURRU10020020000130即放大倍数为100倍。在Proteus中实测放大器输出数据为:温度0102030405060708090100110120电压0.000.430.831.241.662.072.492.913.333.754.174.585.00从测试数据来看,本设计符合0~120C0对应输出0~5V电压要求。温度测量电路2)A/D转换器的设计A/D转换的目标是将模拟量转化成数字量,选用ADC0831串行A/D转换芯片做为温度测试系统的A/D转换芯片,设计电路如图所示:3)LED显示电路设计LED显示电路4)报警电路设计当温度低于80度时,绿灯亮;当温度高于80度时,红灯亮。报警电路5)系统整体硬件电路设计四、Proteus仿真调试及结果1)温度显示结果2)学号显示五、电路设计代码#includereg52.h//52单片机头文件#includeintrins.h//特殊移位操作函数的头文件#defineucharunsignedchar//宏定义用来随后定义变量的时候简单定义#defineuintunsignedint//宏定义用来随后定义变量的时候简单定义sbitCS=P3^7;//adc0831片选信号控制端sbitCLK=P3^6;//adc0831时钟信号输入端sbitDO=P3^5;//数据输出口sbitled_red=P3^4;//报警灯信号控制sbitled_green=P3^0;//绿灯信号控制端sbitswi=P3^2;//读状态ucharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39};//0-9数字编码ucharcodedu[]={0xfe,0xfd,0xfb,0xf7};//段选控制ucharpeng[]={4,0,5,2};//学号uchardate;voiddelay()//延时{intx,y;for(x=1;x0;x--)for(y=180;y0;y--);}voidxianshi()//数码管显示函数{uchari;for(i=0;i4;i++){P1=du[i];P2=tab[peng[i]];//显示学号和温度,中间转换数组delay();}}uintRead_ADC0831()//AD转换函数,及时序实现{uchari,temp;DO=1;_nop_();_nop_();CS=0;_nop_();_nop_();CLK=0;_nop_();_nop_();CLK=1;_nop_();_nop_();CLK=0;_nop_();_nop_();CLK=1;_nop_();_nop_();CLK=0;_nop_();_nop_();for(i=0;i8;i++){CLK=1;_nop_();_nop_();temp=1;if(DO){temp++;}CLK=0;_nop_();_nop_();}CS=1;_nop_();_nop_();return(temp);//返回温度测量值}voidmain(){while(1){swi=1;if(swi==0){date=Read_ADC0831();//读状态0831date=(date)*1.0/255*500/4.16;//装换后数据if(date25)date=date+1;if(date80)//温度大于80则红灯亮{led_red=0;led_green=1;}else//低于80则绿灯亮{led_green=0;led_red=1;}peng[3]=10;//最高位peng[0]=date%1000/100;//低位peng[1]=date%1000%100/10;peng[2]=date%1000%100%10;xianshi();}else//显示学号{peng[0]=4;peng[1]=0;peng[2]=5;peng[3]=2;xianshi();}}}六、设计实践收获和体会在本次题目的设计过程当中确实遇到了很多的问题,往往是自己能力所不能的解决的,所以有些东西还需借助网上帮助,proteus第一次使用,学习用了较长时间。通过这次设计的成功使我的自信心大增,同时学习了更多设计知识。在设计中用了ADC0831采集电压,通过温度传感器采集温度,并将温度信号变成电压信号,用放大器将微弱电压放大,放大到ADC0831可以检测的范围0~5V,分别对应温度0~120度。用4个数码管来显示温度和我的学号,显示采用数码管扫描的动态显示。通过操作段选和位选来实现。通过按键来切换显示温度和学号。