东华多路温度巡回检测仪的设计报告Word格式.docx

上传人:b****1 文档编号:834934 上传时间:2023-04-29 格式:DOCX 页数:14 大小:246.53KB
下载 相关 举报
东华多路温度巡回检测仪的设计报告Word格式.docx_第1页
第1页 / 共14页
东华多路温度巡回检测仪的设计报告Word格式.docx_第2页
第2页 / 共14页
东华多路温度巡回检测仪的设计报告Word格式.docx_第3页
第3页 / 共14页
东华多路温度巡回检测仪的设计报告Word格式.docx_第4页
第4页 / 共14页
东华多路温度巡回检测仪的设计报告Word格式.docx_第5页
第5页 / 共14页
东华多路温度巡回检测仪的设计报告Word格式.docx_第6页
第6页 / 共14页
东华多路温度巡回检测仪的设计报告Word格式.docx_第7页
第7页 / 共14页
东华多路温度巡回检测仪的设计报告Word格式.docx_第8页
第8页 / 共14页
东华多路温度巡回检测仪的设计报告Word格式.docx_第9页
第9页 / 共14页
东华多路温度巡回检测仪的设计报告Word格式.docx_第10页
第10页 / 共14页
东华多路温度巡回检测仪的设计报告Word格式.docx_第11页
第11页 / 共14页
东华多路温度巡回检测仪的设计报告Word格式.docx_第12页
第12页 / 共14页
东华多路温度巡回检测仪的设计报告Word格式.docx_第13页
第13页 / 共14页
东华多路温度巡回检测仪的设计报告Word格式.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

东华多路温度巡回检测仪的设计报告Word格式.docx

《东华多路温度巡回检测仪的设计报告Word格式.docx》由会员分享,可在线阅读,更多相关《东华多路温度巡回检测仪的设计报告Word格式.docx(14页珍藏版)》请在冰点文库上搜索。

东华多路温度巡回检测仪的设计报告Word格式.docx

可选择寄生工作方式。

检测温度范围为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<

reg52.h>

#include<

I2C.H>

LCD1602.H>

UART.h>

 

#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;

//重载计数器初值

tick++;

if((tick%20)==0)//发送标志每隔1秒置位一次即每隔一秒使用串口发送一次数据

send=1;

//发送标志置位

}

if(tick==100)

{tick=0;

channel++;

if(channel>

7){channel=0;

}//隔10秒切换到下一个通道

/*******************************AD转换函数*********************************************************************************************************/

voidAD_Convert(unsignedcharnumber)

{floatAD_data;

floatsum=0;

unsignedcharch;

switch(number)

{

case0:

cd4051C=0;

//选择转换通道

cd4051B=0;

cd4051A=0;

break;

case1:

cd4051B=0;

cd4051A=1;

case2:

cd4051B=1;

case3:

case4:

cd4051C=1;

cd4051B=0;

case5:

case6:

cd4051B=1;

case7:

}

//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+'

//十位

dis[2]=(temperature[number])%10+'

//各位

lcd_pos(0,0);

prints(disc1);

lcd_pos(11,0);

lcd_wdat(number+'

);

lcd_pos(5,1);

lcd_wdat(dis[0]);

lcd_wdat(dis[1]);

lcd_wdat(dis[2]);

lcd_wdat('

'

C'

/***************************************************************按键扫描函数*************************************************************************/

unsignedcharKeyscan(void)

{unsignedcharnumber;

number=0xff;

//如果无按键按下则返回0xff

if(P1!

=0xff)

Delay(10);

{switch(P1)

case0xfe:

number=0;

break;

//如果有按键按下则返回按下的按键号

case0xfd:

number=1;

case0xfb:

number=2;

case0xf7:

number=3;

case0xef:

number=4;

case0xdf:

number=5;

case0xbf:

number=6;

case0x7f:

number=7;

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;

channel,temperature[channel]);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2