沈阳航空航天大学课程设计论文
7.结论及进一步设想
本文详细讲述了系统设计方案,并给出了相关程序流程。本设计应用性比较强,可以应用在仓库温度、大棚温度、机房温度、水池等的监控。另外,如果把本设计方案扩展为多点温度控制,加上上位机,则可以实现远程温度监控系统,将具有更大的应用价值。 本文的创新点在于详细设计了基于单片机AT89C51 的温度监控系统,设计程序已经.此系统可广泛用于温度在DS18B20 测温范围之内的场合,有良好的应用前景。由于单片机的各种优越的特性,使得它的经济效益显的更加突出,有很好的实用性
参考文献
[1] 刘复华. 单片机及其应用系统. 北京:清华大学出版社,1992
[2] 李斌,董慧颖. 可重组机器人研究和发展现状. 沈阳工业学院学报,2000,19(4):23-27 [3] 刘复华. 单片机及其应用系统. 北京:清华大学出版社,1992
[4] 李斌,董慧颖. 可重组机器人研究和发展现状. 沈阳工业学院学报,2000,19(4):23-27 [5]张友德主编 《单片微型机原理,应用与实验》 复旦大学出版社出版 1993 [6]何立民主编 《单片机应用技术选编(1)》 北京航空航天大学出版社 2000
[7]李朝青,单片机原理及接口技术(简明修订版)[M]. 北京:北京航空航天大学出版社, 1998
[8]李广弟.单片机基础[M]. 北京:北京航空航天大学出版社,1994
第 15 页
沈阳航空航天大学课程设计论文
附录1 元件清单
元件名称 型号 数量 单片机 AT89C51 1 温度传感器 DS18B20 1 按键 4 七段数码管 JM-S02041A-B 6 LED 2
第 16 页
沈阳航空航天大学课程设计论文
附录2 程序
#include
#include\#define GPIO_DIG P0 uint ding,shuru,count,jiao; float u,e0,y; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; sbit en=P1^1; sbit k5=P1^3; sbit k6=P1^4; sbit k7=P1^5; //--定义全局变量
unsigned char code DIG_CODE[17]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码 unsigned char DisplayData[8]; //用来存放要显示的8位数的值
//--声明全局函数--// void LcdDisplay(int); void DigDisplay(); void delay(uint z);
/*******************************************************************************
* 函 数 名 : main * 函数功能
: 主函数
* 输 入 : 无 * 输 出 : 无
*******************************************************************************/
第 17 页
沈阳航空航天大学课程设计论文
void main() { }
/*******************************************************************************
* 函 数 名 : LcdDisplay() * 函数功能
: LCD显示读取到的温度
* 输 入 : v * 输 出 : 无
*******************************************************************************/
void LcdDisplay(int temp) //lcd显示
第 18 页
EA=1;
TH0=(65536-500)/256;
TL0=(65536-500)%6; TR0=1; while(1) {
LcdDisplay(Ds18b20ReadTemp());
if(k5==0){ delay(10);if(k5==0)ding=ding+1;while(!k5);} if(k6==0){ delay(10);if(k6==0)ding=ding-1;while(!k6);} if(k7==0){ delay(10);if(k7==0)shuru=ding;while(!k7);} y=Ds18b20ReadTemp();
ET0=1;
TMOD=0x11;
e0=shuru-y; }
if(u>=150) u=150; if(u<0) u=0; jiao=u;
u=u+0.0135*e0;
沈阳航空航天大学课程设计论文
{
float tp; } else {
}
DisplayData[0] = DIG_CODE[temp % 10000 / 1000]; DisplayData[1] = DIG_CODE[temp % 1000 / 100] | 0x80; DisplayData[2] = DIG_CODE[temp % 100 / 10]; DisplayData[3] = DIG_CODE[temp % 10];
第 19 页
if(temp< 0)
//当温度值为负数
{
DisplayData[0] = 0x40;
//因为读取的温度是实际温度的补码,所以减1,再取反求出原码 temp=temp-1; temp=~temp; tp=temp;
temp=tp*0.0625*100+0.5;
//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,//算由?.5,还是在小数点后面。
时候把小数点 小于0.5的就
DisplayData[0] = 0x00;
tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量 //如果温度是正的那么,那么正数的原码就是补码它本身 temp=tp*0.0625*100+0.5;
//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,//算加上0.5,还是在小数点后面。
时候把小数点 小于0.5的就
// DisplayData[1] = DIG_CODE[temp / 10000];