基于51单片机led闪烁温度报警系统(共6页)_第1页
基于51单片机led闪烁温度报警系统(共6页)_第2页
基于51单片机led闪烁温度报警系统(共6页)_第3页
基于51单片机led闪烁温度报警系统(共6页)_第4页
基于51单片机led闪烁温度报警系统(共6页)_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上江南大学单片机课程设计班级 姓名 学号 1.原理图放大器放大电压信号XXXXXXXXX将温度信号转换为电压信号输出热电偶放大器将电压信号放大输出报警电路 A/D转换电路 数字显示2.工作原理:热电偶将温度信号转换为电压信号输出,然后将模拟信号经A/D转换器转换为数字信号,经译码显示而得到相应的数字;同时,可以通过模拟量的大小来控制报警电路报警。电路图3.问题及解决方法首先遇到的问题就是选测量温度的传感器,选了热电偶传感器发现还有温度补偿、线性调整的问题,传感器的知识只停留在书本上,查阅资料询问同学后尝试了热电偶放大器,勉强完成了线性调整。刚开始对选择芯片等比较迷茫,后

2、来也是上网查资料,问同学。A/D转换器选用了ICL7107,但是对这个芯片不熟悉,选用之后看到芯片手册说温度范围是0-70摄氏度以为不能用,后来发现芯片手册说的温度范围是指芯片的工作温度范围,跟测量温度范围不是一个概念。4. 程序清单 #include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int #define delayNOP()

3、 _nop_();_nop_();_nop_();_nop_(); sbit HI_LED=P23; /高温,低温白净闪烁 LED sbit LO_LED=P26; sbit DQ=P33;    /DS18B20数据线 sbit BEEP=P37;   /报警 sbit RS=P20;  sbit RW=P21;  sbit EN=P2

4、2;  sbit K1=P17;   /正常显示温度,越界时报警 sbit K2=P14;   /显示报警温度 sbit K3=P11;   /查看 ROM CODEchar code RomCodeStr="- ROM  CODE -" uchar RomCode8=0x00,0x00,0x00,0x00,0x00,

5、0x00,0x00,0x00;  uchar code Temp_Disp_Title   ="Current Temp: " uchar Current_Temp_Display_Buffer="TEMPE:    " uchar code Temperature_Char8=0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00;/温度示字符 uch

6、ar code Alarm_Temp="ALARM TEMP Hi Lo" uchar Alarm_HI_LO_STR="Hi:    Lo:      "uchar temp_data2=0x00,0x00; uchar temp_alarm2=0x00,0x00; uchar display5=0x00,0x00,0x00,0x00,

7、0x00,;   /温度值 uchar display13=0x00,0x00,0x00;            /温度报警值 uchar code df_Table=0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9; /温度小数位对照表 /. /报警温度上下限(取值范围:-128+127)(DS18B20温度范围为:-55+125) /数组中

8、前一位为高温值,后一位为低温值 /此处类型注意设为char,否则不能进行有符号数的比较 char Alarm_Temp_HL2=70,-20; /. uchar CurrentT=0; /当前读取温度整数部分 uchar Temp_Value=0x00,0x00;/从DS18B20读取的温度值 uchar Display_Digit=0,0,0,0;/待显示的各温度数位 bit HI_Alarm=0,LO_Alarm=0; /高低温报警标志 bi

9、t DS18B20_IS_OK=1; /传感器正常标志 uint Time0_Count=0;   /定时器延时累加void DelayXus(int x)     uchar i;    while(x-)for(i=0;i<200;i+);  /.   /忙检测 bit LCD_Busy_Check()  b

10、it LCD_Status; RS=0;/寄存器选择 RW=1;/读状态寄存器EN=1;/开始读 DelayXus(1); LCD_Status=(bit)(P0&0x80)  EN=0; return LCD_Status;    /写LCD指令 void Write_LCD_Command(uchar cmd)     while(LCD_Busy_Check()&0

11、x80)=0x80);   /忙等待    RS=0;   /写选择命令寄存器  RW=0;  /写    EN=0;    P0=cmd; EN=1;   DelayXus(1);   EN=0;  /向LCD写数据 void Write_LCD_Data(uchar

12、 dat)      while(LCD_Busy_Check()&0x80)=0x80);   /忙等待    RS=1;RW=0;EN=0;P0=dat;EN=1;   DelayXus(1);   EN=0;  /设置液晶显示位置 void Set_LCD_POS(uchar pos)    &

13、#160;Write_LCD_Command(pos |0x80);  /LCD初始化 void LCD_Initialise()    Write_LCD_Command(0x38); DelayXus(1);   Write_LCD_Command(0x01);    /清屏 DelayXus(1);      Write_LCD_Command(0x0

14、6);   /字符进入模式:屏幕不动,字符后移 DelayXus(1);       Write_LCD_Command(0x0C);   /显示开,关光标 DelayXus(1);       /.  /. /自定义字符写CGRAM /. void Write_NEW_LCD_Char()  &#

15、160;    uchar i;      Write_LCD_Command(0x40);     /写CGRAM      for(i=0;i<8;i+)      Write_LCD_Data(Temperature_Chari);  /写入温度符号  void

16、60;Delay(uint num)     while(-num);  /. /初始化DS18B20 /. uchar Init_DS18B20()      uchar status;     DQ=1;Delay(8);     DQ=0;Delay(90);   

17、0; DQ=1;Delay(8);     status=DQ;     Delay(100);     DQ=1;     return status;                   

18、;                         /初始化成功时返回0  /. /读一节 /. uchar ReadOneByte()      uchar i,dat=0;   

19、0; DQ=1;_nop_();     for(i=0;i<8;i+)              DQ=0;dat>>=1;DQ=1;_nop_(); _nop_();         if(DQ) dat |=0x80;Delay(30);DQ=1;

20、0;         return dat;  /. /写一字节 /. void WriteOneByte(uchar dat)    uchar i;   for(i=0;i<8;i+)         DQ=0;DQ=dat&0x01;Del

21、ay(5);DQ=1;dat>>=1;     /.if(Alarm_HI_LO_STR4='0') Alarm_HI_LO_STR4=' ' if(Alarm_HI_LO_STR4=' '&& Alarm_HI_LO_STR5='0')  Alarm_HI_LO_STR5=' ' /"-"符号显示 if (n

22、g)      if (Alarm_HI_LO_STR5=' ') Alarm_HI_LO_STR5='-'    else    if(Alarm_HI_LO_STR4=' ') Alarm_HI_LO_STR4='-'    else    Alarm_HI_L

23、O_STR3='-'  /低温报警值 ng=0; if(Alarm_Temp_HL1<0)     /如果为负数则取反加1    Alarm_Temp_HL1=Alarm_Temp_HL1+1;   ng=1;  /分解低温各数位到待显示串中 Alarm_HI_LO_STR12=Alarm_Temp_HL1/100+'0' Alarm_HI_LO_STR13=

24、Alarm_Temp_HL0/10%10+'0' Alarm_HI_LO_STR14=Alarm_Temp_HL0%10+'0' /屏蔽高位不显示的0 if(Alarm_HI_LO_STR12='0') Alarm_HI_LO_STR12=' ' if(Alarm_HI_LO_STR12=' '&& Alarm_HI_LO_STR13='0')  Alarm_HI_LO_STR13=&

25、#39; ' /"-"符号显示 if (ng)      if (Alarm_HI_LO_STR13=' ') Alarm_HI_LO_STR13='-'    else    if(Alarm_HI_LO_STR12=' ') Alarm_HI_LO_STR12='-'

26、60;   else    Alarm_HI_LO_STR11='-'  /显示高低温报警温度值 Set_LCD_POS(0x00);       /显示标题 for (i=0;i<16;i+) Write_LCD_Data(Alarm_Tempi); Set_LCD_POS(0x40);      /显示

27、高低温 for (i=0;i<16;i+) Write_LCD_Data(Alarm_HI_LO_STRi);  /. /主函数 void main()     uchar Current_Operation=1;    /默认当前操作为显示温度    LCD_Initialise();    IE=0x82;  

28、;  TMOD=0x01;    TH0=-1000/256;    TL0=-1000%256;    TR0=0;    HI_LED=0;    LO_LED=0;    Set_Alarm_Temp_Value();    Read_Temperature();  

29、60; Delay(50000);    Delay(50000);    while(1)           if (K1=0) Current_Operation=1;       if (K2=0) Current_Operation=2;   

30、60;   if (K3=0) Current_Operation=3;       switch (Current_Operation)                 case 1:/正常显示当前温度,越界时报警      &

31、#160;        Read_Temperature();               if( DS18B20_IS_OK)                   &

32、#160;               if (HI_Alarm=1 | LO_Alarm=1) TR0=1;                   else TR0=0;                   Display_Temperature();               &#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论