找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1332|回复: 0
打印 上一主题 下一主题
收起左侧

单片机可调温控报警器

[复制链接]
跳转到指定楼层
楼主
#include <reg51.h>
#include <1602.h>
#include <DS18b20.h>
#include <intrins.h>
sbit speak=P1^5;
sbit keyadj=P3^3;//调整按键
sbit keyup=P3^4;  //加
sbit keydown=P3^5;//减
uchar DisplayData[6];//定义数组存放温度值

int num,temp;
uchar almhigh=40,almlow=15;        //报警的上下限初始值
void almspeak()           //报警响0.5秒
{
        uint i=500;
        while(i--)
        {
                 speak=~speak;
                Delay1ms(1);
        }
}
void Display()
{
         uchar i;
         num=Ds18b20ReadTemp();          //读取温度传感器的数据
         temp=num*0.0625*100+0.5;        //转换为十进制数值
         DisplayData[0] = temp / 10000;           //以下为数值的拆分
         DisplayData[1] = temp % 10000 / 1000;
         DisplayData[2] = temp % 1000 / 100 ;
         DisplayData[3] ='.';
         DisplayData[4] = temp % 100 / 10;
         DisplayData[5] = temp % 10;
         LCD1602_write_com(0x80);
         LCD1602_write_word("tempreture is:");
         LCD1602_write_com(0xc4);
         for(i=0;i<6;i++)
                {
                   if(i==3)LCD1602_write_data(DisplayData[i]);
                   else LCD1602_write_data(DisplayData[i]+48);
                }
         if((temp/100+0.5)>=almhigh||(temp/100+0.5)<=almlow)almspeak();        //温度超出上下限就报警
}
void Display_adj()
{
        LCD1602_write_com(0x01);                        //清屏指令
        LCD1602_write_com(0x80);                        //重新定位
        LCD1602_write_word("adjust almtemp");
}
void disp2() //调整上下限温度的画面
{
        LCD1602_write_com(0xc0);
        LCD1602_write_word("high");
        LCD1602_write_data(almhigh/10+48);
        LCD1602_write_data(almhigh%10+48);
        LCD1602_write_word(",low");
        LCD1602_write_data(almlow/10+48);
        LCD1602_write_data(almlow%10+48);
}
void disp3() //调整上限温度的画面
{
        LCD1602_write_com(0xc0);
        LCD1602_write_word("* almhigh=");
        LCD1602_write_data(almhigh/10+48);
        LCD1602_write_data(almhigh%10+48);
        LCD1602_write_word(" *");
}
void disp4() //调整下限温度的画面
{
        LCD1602_write_com(0xc0);
        LCD1602_write_word("* almlow=");
        LCD1602_write_data(almlow/10+48);
        LCD1602_write_data(almlow%10+48);
        LCD1602_write_word(" * ");
}
void keyscan()                   //按键检测
{
        if(keyadj==0)         //第一次检测到按键按下,进入调整界面
        {
          Delay1ms(500);
          Display_adj();
          while(keyadj==1);        //按键没有按第二次就等待
          if(keyadj==0)//第二次按下调整按键,进行上限调整
          {
           Delay1ms(500);
           disp2();
           while(keyadj==1)
            {
                 disp3();
                 if(keyup==0){Delay1ms(500);almhigh++; disp3();}
                 if(keydown==0){Delay1ms(500);almhigh--;disp3();}
            }
         }
           if(keyadj==0)//第三次按下调整按键,进行下限调整
           {
                 Delay1ms(500);
                 while(keyadj==1)
                   {
                         disp4();
                        if(keyup==0){Delay1ms(500);almlow++;disp4();}
                         if(keydown==0){Delay1ms(500);almlow--;disp4();}
                   }
           }
                if(keyadj==0)//第四次按下调整按键,退出调整
                {
                         Delay1ms(500);
                        while(keyadj==0);
                       
                        LCD1602_write_com(0x01);//退出之前进行清屏
                }

        }
}
void main()
{
        Init_LCD1602();
        Ds18b20Init();
        while(1)
        {
         Display();
         keyscan();
        }
}

IMG_6888.JPG (2.04 MB, 下载次数: 44)

IMG_6888.JPG

1.jpg (50.88 KB, 下载次数: 51)

1.jpg

液晶显示温度上下限温度可调.zip

73.17 KB, 下载次数: 8, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表