单片机温度控制系统毕业论文 下载本文

内容发布更新时间 : 2024/12/23 21:52:12星期一 下面是文章的全部内容请认真阅读。

参考文献

[1] 马忠梅.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社,1998

[2] 李晓荃.单片机原理与应用[M].北京:电子工业出版社,2000年8月 [3] 何立民 AVR单片机原理与接口技术[M].北京:北京航空航天大学出版社,2002

31

致 谢

本论文在xx老师的细心指导和严格要求下已完成,从课题选择到具体构思和内容,无不凝聚着老师的心血和汗水,特备是老师严格的教学要求和一丝不苟的工作精神,让我非常敬佩。在三年的大学学习和生活期间,也始终感受着导师的精心培养和无私的关怀,我受益匪浅。在此向各位老师表示深深的感谢和崇高的敬意。

在此,我还要特别感谢我的同学们,由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,你们对本课题做了不少工作,直至本文的顺利完成,给予我不少的帮助。最后我还要感谢含辛茹苦培养我长大的父母,谢谢你们!

32

附 录

附录1 主程序

/*******************************************************************/ /*学校名称*/湖南工学院

/*模块名*/单片机温度控制系统

/*功能描述*/显示温度传感器的温度及控制温度范围

/*******************************************************************/

#include #include

#define uchar unsigned char /*端口定义*/

#define LED P0 /*实际温度值输出端口定义*/ #define NOP _nop_() sbit Q1=P3^2; sbit Q2=P3^3;

sbit tem_in=P3^0; /*温度读取端口*/ sbit con_out=P1^7; /*报警启动端口*/ sbit DP=P2^7;

#define L 15 /*温度报警下限*/ #define H 40

uchar temp_h,temp_l; /*温度值变量*/ uchar flag1; /*正负标志位*/ uchar code

ledcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};/*数码显示数据:0,1,2,3,4,5,6,7,8,9*/

uchar code ledbit[]={0xfe,0xfd,0xfb};//共阴led uchar dispbuf[2]={0,0};

uchar B20num[]={1,2,3,4,5,6,7,8};

/*==================================== 函数功能:延时 入口参数:

说 明 :送1迟202us

=====================================*/ void delay(unsigned int count) {

unsigned int i; while(count) {

i=200;

while(i>0)i--; count--; } }

/*==================================== 函数功能:延时 us 入口参数: 说 明 :

=====================================*/ void Delay_us(uchar n)

33

{

uchar i; i=0;

while(i

/*==================================== 函数功能:DS18B20重设 入口参数:无 说 明 :

=====================================*/ void dsreset(void) {

unsigned int i; tem_in=0; i=103;

while(i>0)i--; tem_in=1; i=4;

while(i>0)i--; }

/*==================================== 函数功能:直接读一字节程序 入口参数:无

说 明 :返回结果

=====================================*/ uchar ReadByte(void){ uchar i,k; i=8; k=0;

while(i--) {

tem_in=1; Delay_us(1); tem_in=0; k=k>>1; tem_in=1; NOP;

if(tem_in)k |= 0x80; Delay_us(4); }

return(k); }

/*==================================== 函数功能:向B20写一字节 入口参数:待写数据 说 明 :

=====================================*/ void tmpwrite(unsigned char dat) { unsigned int i; unsigned char j; bit testb;

for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb)

{ tem_in=0;i++;i++;

34

tem_in=1;

i=8;while(i>0)i--; } else {

tem_in=0;

i=8;while(i>0)i--; tem_in=1;i++;i++; } } }

void tmpchange(void) {

dsreset(); /*复位*/ delay(1);

tmpwrite(0xcc); //跳过序列号命令 tmpwrite(0x44); //转换命令 }

/*==================================== 函数功能:将温度值读出来并转化为显示数组 入口参数:

说 明 :调用 ReadByte();

=====================================*/ void tmp(void) {

float dis;

uchar tempbuf; dsreset(); delay(1);

tmpwrite(0xcc); tmpwrite(0xbe);

temp_l=ReadByte(); //低位在前 temp_h=ReadByte(); //高位在后

flag1=temp_h&0xf8; if(flag1) {

temp_h=~temp_h;

if(temp_l==0)temp_h++; //若低8位全为0且温度为负,取补时就要向高位进1

temp_l=~temp_l+1; }

dis=(temp_h*256+temp_l)/16;

dis=25.34; //调试用

if(dis<10) {

dispbuf[0]=0;

dispbuf[1]=(uchar)dis; } else {

dispbuf[0]=(uchar)dis/10; dispbuf[1]=(uchar)dis; }

dispbuf[2]=(uchar)(dis*10); dispbuf[3]=(uchar)dis*100;

35