基于单片机的温度报警系统+proteus仿真

更新时间:2023-05-14 01:57:45 阅读: 评论:0

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define delayNOP() {_nop_();_nop_();_nop_();_nop_();}
sbit HI_LED=P2^3; //高温,低温白净闪烁 LED
sbit LO_LED=P2^6;
sbit DQ=P3^3;    //DS18B20数据线
sbit BEEP=P3^7;  //报警
sbit RS=P2^0;
sbit RW=P2^1;
竹溪县sbit EN=P2^2;
sbit K1=P1^7;  //正常显示温度,越界时报警
sbit K2=P1^4;  //显示报警温度
sbit K3=P1^1;  //查看 ROM CODE
uchar code RomCodeStr[]={"-- ROM  CODE --"};
uchar RomCode[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};  //64位ROM CODE
uchar code Temp_Disp_Title[]  ={"Current Temp: "};
uchar Current_Temp_Display_Buffer[]={"TEMPE:    "};
uchar code Temperature_Char[8]={0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00};  //温度示字符
配电房管理制度uchar code Alarm_Temp[]={"ALARM TEMP Hi Lo"};
uchar Alarm_HI_LO_STR[]={"Hi:    Lo:      "};
网站推广策略uchar temp_data[2]={0x00,0x00};
uchar temp_alarm[2]={0x00,0x00};
uchar display[5]={0x00,0x00,0x00,0x00,0x00,};  //温度值
uchar display1[3]={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)
//数组中前一位为高温值,后一位为低温值
//此处类型注意设为char,否则不能进行有符号数的比较
char Alarm_Temp_HL[2]={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; //高低温报警标志
bit 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()
{
bit 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()&0x80)==0x80);  //忙等待
  RS=0;  //写选择命令寄存器
  RW=0;  //写
  EN=0;
  P0=cmd; EN=1;  DelayXus(1);  EN=0;
}
//向LCD写数据
void Write_LCD_Data(uchar 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)
{
  Write_LCD_Command(pos |0x80);
}
//LCD初始化
void LCD_Initiali()
{
  Write_LCD_Command(0x38);
DelayXus(1);
实施办法  Write_LCD_Command(0x01);    //清屏
DelayXus(1); 
  Write_LCD_Command(0x06);  //字符进入模式:屏幕不动,字符后移
DelayXus(1);   
  Write_LCD_Command(0x0C);  //显示开,关光标
DelayXus(1);   
}
//...............................................
//..........................................
//自定义字符写CGRAM
//..................................
void Write_NEW_LCD_Char()
{
    uchar i;
    Write_LCD_Command(0x40);    //写CGRAM
    for(i=0;i<8;i++)
    Write_LCD_Data(Temperature_Char[i]);  //写入温度符号
}
//............................................
//延时
//........................................................
void Delay(uint num)
{
  while(--num);
}
//...............................................
//初始化DS18B20
//...............................................
uchar Init_DS18B20()
{
    uchar status;
相思歌词    DQ=1;Delay(8);
    DQ=0;Delay(90);
    DQ=1;Delay(8);
    status=DQ;
    Delay(100);
    DQ=1;
    return status;                                            //初始化成功时返回0
}
//...............................................
//读一节
//...............................................
uchar ReadOneByte()
{
    uchar i,dat=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;
    }
    return dat;
}
//...............................................
//写一字节
//...............................................
void WriteOneByte(uchar dat)
{
  uchar i;
  for(i=0;i<8;i++)
  {
    DQ=0;DQ=dat&0x01;Delay(5);DQ=1;dat>>=1;
酸梅汤的功效与作用  }
}
//...............................................
//读取温度值
//...............................................
void Read_Temperature()
{
    if(Init_DS18B20()==1)                              //DS18B20故障
      DS18B20_IS_OK=0;
野战经历    el
    {
      WriteOneByte(0xCC);                            //跳过序列号
      WriteOneByte(0x44);                            //启动温度转换
      Init_DS18B20();
      WriteOneByte(0xCC);                            //跳过序列号

本文发布于:2023-05-14 01:57:45,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/621204.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:温度   报警   显示   字符   寄存器
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图