基于51单片机的温度上下限报警设计 您所在的位置:网站首页 温度超限报警程序 基于51单片机的温度上下限报警设计

基于51单片机的温度上下限报警设计

2024-06-29 10:50| 来源: 网络整理| 查看: 265

基于51单片机的温度上下限报警设计

(仿真+程序+原理图+PCB+设计报告)

功能介绍 具体功能:

1.对室温进行检测和控制,温度显示范围:-55—125度,精度0.1度。

2.能够设置并保存温度上下限值,并可以随时修改。

3.LED数码管直读显示实时温度,温度上下限值用按键设定。

4.温度超出上下限时,蜂鸣器报警。

#include //宏定义 #include //宏定义 #include //宏定义 #define uchar unsigned char //无符号字符数据8位 #define uint unsigned int //无符号整数 #define SMGIO P0 //定义数码管io口为P0 sbit SET=P1^0; //定义设定上下限键 sbit ADD=P1^1; //定义增加键 sbit DEC=P1^2; //定义减小限键 sbit SMG1=P2^0; //定义数码管第一位 sbit SMG2=P2^1; //定义数码管第二位 sbit SMG3=P2^2; //定义数码管第三位 sbit SMG4=P2^3; //定义数码管第四位 sbit BEEP=P1^7; //定义蜂鸣器报警 uint tempValue; //变量 存储当前温度值 uint HI_Alarm=40; //初始上限 uint LO_Alarm=20; //初始下限 uchar SMG_CC[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管0-9编码 uchar SMG_CC_DOT[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //共阴极数码管0-9编码 带小数点 /********************************************************************/ /* 1ms延时 */ /********************************************************************/ void delayms(uint x) //延时函数 { uchar i; //定义循环变量 while(x--) //开始循环 { for(i=150;i>0;i--); //循环150次 } } void Display_Temperature() //显示温度 { char smg1,smg2,smg3,smg4; //定义4个数码管变量,以下表示将温度值拆分开 smg1=tempValue/1000; //第一位 smg2=(tempValue-smg1*1000)/100; //第二位 smg3=(tempValue%100)/10; //第三位 smg4=tempValue%10; //第四位 if(tflag==1) //负数显示 { SMGIO=SMG_CC[smg4]; //显示小数位 SMG4=0; //位选 delayms(1); //延时 SMG4=1; //消隐 SMGIO=SMG_CC_DOT[smg3]; //显示个数位 SMG3=0; //位选 delayms(1); //延时 SMG3=1; //消隐 if(smg2==0) { SMGIO=0x40; //显示十数位 SMG2=0; //位选 delayms(1); //延时 SMG2=1; //消隐 SMGIO=0x00; //显示百数位 SMG1=0; //位选 delayms(1); //延时 SMG1=1; //消隐 } else { SMGIO=SMG_CC[smg2]; //显示十数位 SMG2=0; //位选 delayms(1); //延时 SMG2=1; //消隐 SMGIO=0x40; //显示十数位 SMG1=0; //位选 delayms(1); //延时 SMG1=1; //消隐 } } else //正数显示 { SMGIO=SMG_CC[smg4]; //显示小数位 SMG4=0; //位选 delayms(1); //延时 SMG4=1; //消隐 SMGIO=SMG_CC_DOT[smg3]; //显示个数位 SMG3=0; //位选 delayms(1); //延时 SMG3=1; //消隐 if(smg1==0) //第一位为0 { SMGIO=0x00; //不显示 SMG1=0; //位选 delayms(1); //延时 SMG1=1; //消隐 if(smg2==0) //第二位为0 { SMGIO=0x00; //不显示 SMG1=0; //位选 delayms(1); //延时 SMG1=1; //消隐 } else { SMGIO=SMG_CC[smg2]; //显示0 SMG2=0; //位选 delayms(1); //延时 SMG2=1; //消隐 } } else { SMGIO=SMG_CC[smg1]; //正常显示第一个数码管 SMG1=0; //位选 delayms(1); //延时 SMG1=1; //消隐 SMGIO=SMG_CC[smg2]; //正常显示第二个数码管 SMG2=0; //位选 delayms(1); //延时 SMG2=1; //消隐 } } } void Display_HI_Alarm() //显示上限前缀 { SMGIO=0x76; //显示H SMG1=0; //位选 delayms(1); //延时 SMG1=1; //消隐 SMGIO=0x40; //显示- SMG2=0; //位选 delayms(1); //延时 SMG2=1; //消隐 SMGIO=SMG_CC[HI_Alarm/10]; //显示报警高值十位 SMG3=0; //位选 delayms(1); //延时 SMG3=1; //消隐 SMGIO=SMG_CC[HI_Alarm%10]; //显示报警高值个数位 SMG4=0; //位选 delayms(1); //延时 SMG4=1; //消隐 } void Display_LO_Alarm() //显示下限前缀 { SMGIO=0x38; //显示L SMG1=0; //位选 delayms(1); //延时 SMG1=1; //消隐 SMGIO=0x40; //显示- SMG2=0; //位选 delayms(1); //延时 SMG2=1; //消隐 SMGIO=SMG_CC[LO_Alarm/10]; //显示报警高值十位 SMG3=0; //位选 delayms(1); //延时 SMG3=1; //消隐 SMGIO=SMG_CC[LO_Alarm%10]; //显示报警高值个数位 SMG4=0; //位选 delayms(1); //延时 SMG4=1; //消隐 } void SET_KEY() //按键设置 { bit SET_FLAG=1; //按下标志位 if(SET==0) //设定按键按下 { delayms(40); //延时去除抖动 if(SET==1) //再次判断是否按下按键 { while(SET_FLAG==1) //有按键按下 { Display_HI_Alarm(); //设定上限温度值 if(ADD==0) //增加按键 { delayms(40); //延时去除抖动再次判断是否按下按键 if(ADD==1) //如果按下 HI_Alarm++; //温度值加一 } if(DEC==0) //减小按键 { delayms(40); //延时去除抖动 if(DEC==1) //再次判断是否按下按键 HI_Alarm--; //温度值减一 } if(SET==0) //以下表示 再次按下设定按键 进入设定下限程序 { delayms(40); //延时去除抖动 if(SET==1) //再次判断是否按下按键 { while(1) { Display_LO_Alarm(); //设定下限温度值 if(ADD==0) //增加按键 { delayms(40); //延时去除抖动 if(ADD==1) //再次判断是否按下按键 LO_Alarm++; //温度值加一 } if(DEC==0) //减小按键 { delayms(40); //延时去除抖动 if(DEC==1) //再次判断是否按下按键 LO_Alarm--; //温度值减一 } if(SET==0) //设定按键按下 { delayms(40); if(SET==1) //延时去除抖动 { SET_FLAG=0; //再次判断是否按下按键 break; //上下限设定完成 退出 } } } } } } } } } void BJ_LED() //报警程序 { if(tempValue>=HI_Alarm*10||tempValue


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有