参考文献
[1] 马忠梅.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社,1998
[2] 李晓荃.单片机原理与应用[M].北京:电子工业出版社,2000年8月 [3] 何立民 AVR单片机原理与接口技术[M].北京:北京航空航天大学出版社,2002
31
致 谢
本论文在xx老师的细心指导和严格要求下已完成,从课题选择到具体构思和内容,无不凝聚着老师的心血和汗水,特备是老师严格的教学要求和一丝不苟的工作精神,让我非常敬佩。在三年的大学学习和生活期间,也始终感受着导师的精心培养和无私的关怀,我受益匪浅。在此向各位老师表示深深的感谢和崇高的敬意。
在此,我还要特别感谢我的同学们,由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,你们对本课题做了不少工作,直至本文的顺利完成,给予我不少的帮助。最后我还要感谢含辛茹苦培养我长大的父母,谢谢你们!
32
附 录
附录1 主程序
/*******************************************************************/ /*学校名称*/湖南工学院
/*模块名*/单片机温度控制系统
/*功能描述*/显示温度传感器的温度及控制温度范围
/*******************************************************************/
#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