东华多路温度巡回检测仪的设计报告综述.docx
- 文档编号:9823347
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:14
- 大小:246.55KB
东华多路温度巡回检测仪的设计报告综述.docx
《东华多路温度巡回检测仪的设计报告综述.docx》由会员分享,可在线阅读,更多相关《东华多路温度巡回检测仪的设计报告综述.docx(14页珍藏版)》请在冰豆网上搜索。
东华多路温度巡回检测仪的设计报告综述
多路温度巡回检测仪的设计
一设计任务及要求:
设计一个多路温度检测仪,共有8个测温点,每个点连续检测8次,以平均值代表该点温度,并轮流在LED显示器上显示。
测试检测元件为铂热电阻Pt1000,温度测量范围为100℃——+500℃,测量精度为±1℃。
系统每隔10秒完成一个点的测量,测量值除在LED显示器上显示外,还必须通过串行口(RS485)发送到上位机。
任何时刻,可以通过按键切换显示通道。
二设计框图
三实验原理
以AT89C51单片机为核心的多路温度巡回检测控制系统,主要用来对多路温度测量结果进行选择性监控;该系统主要由单片机、传感器、多路转换开关、A/D转换器和驱动显示电路等组成。
其中温度传感器将温度信号转化成电压的信号,为了提高设计的精度,用具有低零点漂移繁荣放大器OP193将采集来的微弱的电压信号放大。
由于单片机处理的是数字信号,所以用模数转换电路将放大的模拟电信号转换成数字量输入到单片机,通过AT89C51的软件控制对输入的数字信号进行处理后输出,通过八位共阴极LED数码管动态扫描驱动电路MAX7219对测量结果进行显示。
四实验电路设计
(1)温度传感器——18B20
DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。
其一个工作周
期可分为两个部分,即温度检测和数据处理。
DS18B20数字温度传感器具有超小的体积,超低的硬件开消,抗干扰能力强,精度高,附加功能强。
DS18B20的主要特征:
全数字温度转换及输出。
先进的单总线数据通信。
最高12位分辨率,精度可达土0.5摄氏度。
12位分辨率时的最大工作周期为750毫秒。
可选择寄生工作方式。
检测温度范围为100°C~+500°C
内置EEPROM,限温报警功能。
64位光刻ROM,内置产品序列号,方便多机挂接。
(2)CPU主控模块——AT89C51
At89C51是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
8位微控制器8K字节在系统可编程Flash。
五实验调试及运行结果
六设计体会
通过这次对多路温度巡回检测系统的设计,让我了解了利用所学单片机知识设计电路的程序与方法,也让我了解了关于多路温度巡回检测系统的基本原理与设计理念,要设计一个电路总要先用仿真仿真成功之后才实际接线的。
通过这次学习,让我对各种电路都有了大概的了解,对proteus软件的使用也更为熟练。
对于这些电路还是应该自己动手实际操作才会有深刻理解。
七试验程序源代码
#include
#include
#include
#include
#definePCF85910x90//PCF8591的地址选择第零号通道
#defineNOKEY0xff//OXff代表没有按键按下
#defineSTART0x00//0x00代表PCF8591开始转化的命令
sbitcd4051A=P2^4;//CD4051的通道值用于选择输入的通道号
sbitcd4051B=P2^3;
sbitcd4051C=P2^2;
unsignedcharOPEN=1;//总开关标志
unsignedcharkeynumber;//按键值
unsignedcharvolatilesend;//串口发送标志
unsignedcharvolatilechannel=0;//当前通道
unsignedcharvolatiletick=0;
codeunsignedchardisc1[]={"TempofNo.:
"};
unsignedinttemperature[8]={250,250,250,250,250,250,250,250};//设置温度初始值
/**************************************函数声明部分**************************************************************/
unsignedcharKeyscan(void);//键盘扫描
voidAD_Convert(unsignedchar);//AD转换程序
voidDisplay(unsignedchark);//显示程序
voidTargetInit(void);
voidDelay(unsignedchardelay);
voidLcddisplay(unsignedcharnumber);
voidDelay(unsignedchar);
/*****************************************************************************************************************************/
voidDelay(unsignedchartimedelay)//延时函数
{
unsignedchari;
for(;timedelay<0;timedelay--)
{
for(i=0;i<110;i++);
}
}
//硬件的初始化//
voidTargetInit(void)
{
TMOD=0x21;
TR1=0;
TH1=0xfd;
TL1=0xfd;
TR0=0;
TH0=(65536-46080)/256;//11.0592Mhz下的50ms定时
TL0=(65536-46080)%256;
ET0=1;
SM0=0;
SM1=1;
REN=1;
ES=1;
EA=1;
TR0=1;
TR1=1;
}
/*****************************************************************中断处理函数******************************************************/
voidTimer_ISR(void)interrupt1
{TR0=0;
TH0=(65536-46080)/256;//重载计数器初值
TL0=(65536-46080)%256;
tick++;
if((tick%20)==0)//发送标志每隔1秒置位一次即每隔一秒使用串口发送一次数据
{
send=1;//发送标志置位
}
if(tick==100)
{tick=0;
channel++;
if(channel>7){channel=0;}//隔10秒切换到下一个通道
}
TR0=1;
}
/*******************************AD转换函数*********************************************************************************************************/
voidAD_Convert(unsignedcharnumber)
{floatAD_data;
floatsum=0;
unsignedcharch;
switch(number)
{
case0:
cd4051C=0;//选择转换通道
cd4051B=0;
cd4051A=0;
break;
case1:
cd4051C=0;
cd4051B=0;
cd4051A=1;
break;
case2:
cd4051C=0;
cd4051B=1;
cd4051A=0;
break;
case3:
cd4051C=0;
cd4051B=1;
cd4051A=1;
break;
case4:
cd4051C=1;
cd4051B=0;
cd4051A=0;
break;
case5:
cd4051C=1;
cd4051B=0;
cd4051A=1;
break;
case6:
cd4051C=1;
cd4051B=1;
cd4051A=0;
break;
case7:
cd4051C=1;
cd4051B=1;
cd4051A=1;
break;
}
//Delay(5);
for(ch=0;ch<8;ch++)
{
ISendByte(PCF8591,START);//开始转换选择通道0
AD_data=(float)IRcvByte(PCF8591);//读取转换结果·
AD_data=(AD_data/256)*5.0;//转换结果/256*5V
AD_data=AD_data*100;//
if(AD_data<100)
{
AD_data=100;
}
sum=sum+AD_data;
}
sum=sum/8;//取连续转换八次的的平均值
temperature[number]=(unsignedint)sum;
}
/************************************************显示函数******************************************************************************************/
voidLcddisplay(unsignedcharnumber)
{unsignedintdis[3];
dis[0]=temperature[number]/100+'0';//百位
dis[1]=(temperature[number]%100)/10+'0';//十位
dis[2]=(temperature[number])%10+'0';//各位
lcd_pos(0,0);
prints(disc1);
lcd_pos(11,0);
lcd_wdat(number+'0');
lcd_pos(5,1);
lcd_wdat(dis[0]);
lcd_wdat(dis[1]);
lcd_wdat(dis[2]);
lcd_wdat('');
lcd_wdat('C');
}
/***************************************************************按键扫描函数*************************************************************************/
unsignedcharKeyscan(void)
{unsignedcharnumber;
number=0xff;//如果无按键按下则返回0xff
if(P1!
=0xff)
{
Delay(10);
if(P1!
=0xff)
{switch(P1)
{
case0xfe:
number=0;break;//如果有按键按下则返回按下的按键号
case0xfd:
number=1;break;
case0xfb:
number=2;break;
case0xf7:
number=3;break;
case0xef:
number=4;break;
case0xdf:
number=5;break;
case0xbf:
number=6;break;
case0x7f:
number=7;break;
}
}
}
return(number);
}
voidmain()
{TargetInit();
lcd_init();
while
(1)
{if(~OPEN)//如果上位机发送OFF命令则停止显示
{
lcd_wcmd(0x01);
}
while(OPEN)
{
while(Keyscan()!
=NOKEY)
{keynumber=Keyscan();
AD_Convert(keynumber);//有按键按下时转换和显示按键对应的通道
Lcddisplay(keynumber);
if(send)
{send=0;
Uartsend("thetempofNo.",keynumber,temperature[keynumber]);
}
}
AD_Convert(channel);
Lcddisplay(channel);//无按键按下时转换当前的通道
if(send)
{
send=0;
Uartsend("thetempofNo.",channel,temperature[channel]);
}
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 东华 温度 巡回 检测 设计 报告 综述