找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机,DS18B20温度传感器数码管显示

  [复制链接]
跳转到指定楼层
楼主
ID:495323 发表于 2019-10-17 11:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ds18b20温度传感器,设置高低电平预警值。高于预警值H或低于预警值L蜂鸣器报警。并且掉电保存功能

K1、显示当前温度,预警值H,预警值L

k 2,加预警值

k3,减预警值

k4,保存当前显示的值


/**************************************************************************************
*                DS18B20温度传感器实验              *
实现现象:下载程序后,在温度传感器接口处,按照丝印方向插好温度传感器,数码管就会显示
   检测的温度值,
注意事项:                     
***************************************************************************************/
#include "reg52.h"    //此文件中定义了单片机的一些特殊功能寄存器
#include"temp.h"
typedef unsigned int u16;   //对数据类型进行声明定义
typedef unsigned char u8;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit key_1=P3^1;
sbit key_2=P3^0;
sbit key_3=P3^2;
sbit key_4=P3^3;
sbit beep=P1^5;
char num=0,i=1;

u8 DisplayData[8];
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x76,0x38};                //16是“-” ,17是“H”,18是“L”
char h,l;
u8 h_1,l_1;
/*******************************************************************************
* 函 数 名         : delay
* 函数功能                   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
        while(i--);        
}


/*******************************************************************************
* 函 数 名         : datapros()
* 函数功能                   : 温度读取处理转换函数
* 输    入         : temp
* 输    出         : 无
*******************************************************************************/

void datapros(int temp)         
{
           float tp;  
        if(temp< 0)                                //当温度值为负数
          {
                DisplayData[0] = 0x40;           //   -
                //因为读取的温度是实际温度的补码,所以减1,再取反求出原码
                temp=temp-1;
                temp=~temp;
                tp=temp;

temp=tp*0.0625*100+0.5;
  //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
  //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
  //算加上0.5,还是在小数点后面。
   }
  else
   {   
  DisplayData[0] = 0x00;
  tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
  //如果温度是正的那么,那么正数的原码就是补码它本身
  temp=tp*0.0625*100+0.5;
  //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
  //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
  //算加上0.5,还是在小数点后面。
}
DisplayData[2] = smgduan[temp / 10000];
DisplayData[3] = smgduan[temp % 10000 / 1000];
h_1=temp % 10000 / 1000;
DisplayData[4] = smgduan[temp % 1000 / 100] | 0x80;
l_1=temp % 1000 / 100;
DisplayData[5] = smgduan[temp % 100 / 10];
DisplayData[6] = smgduan[temp % 10];
}
void datapros_1(int temp)
{
DisplayData[2] = smgduan[temp % 1000 / 100];
DisplayData[3] = smgduan[temp % 100 / 10];
DisplayData[4] = smgduan[temp % 10]|0x80;
DisplayData[5] = smgduan[0];
DisplayData[6] = smgduan[0];
}

/*******************************************************************************
* 函数名         :DigDisplay()
* 函数功能   :数码管显示函数
* 输入           : 无
* 输出                  : 无
*******************************************************************************/
void DigDisplay()
{
        u8 i;
        for(i=0;i<6;i++)
        {
                switch(i)         //位选,选择点亮的数码管,
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;//显示第0位
                        case(1):
                                LSA=1;LSB=0;LSC=0; break;//显示第1位
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;//显示第2位
                        case(3):
                                LSA=1;LSB=1;LSC=0; break;//显示第3位
                        case(4):
                                LSA=0;LSB=0;LSC=1; break;//显示第4位
                        case(5):
                                LSA=1;LSB=0;LSC=1; break;//显示第5位        
                        case(6):
                                LSA=0;LSB=1;LSC=1; break;//显示第6位
                }
                P0=DisplayData[6-i];//发送数据
                delay(100); //间隔一段时间扫描        
                P0=0x00;//消隐
        }               
}

void keypros_1()   
{
        if(key_1==0)                 
        {        
                delay(1000);   
                if(key_1==0)         
                {               
                        if(i==1){DisplayData[1]=table[17];datapros_1(ds18b20_read_hl(1));h=ds18b20_read_hl(1);}

if(i==2){DisplayData[1]=table[18];datapros_1(ds18b20_read_hl(0));l=ds18b20_read_hl(0);}
                        if(i==3){DisplayData[1]=smgduan[0];datapros(Ds18b20ReadTemp());}
                        if(i==4){i=0;}
                        i++;        
                }
                while(!key_1);        
        }               
}
void keypros_2()   
{
        if(key_2==0)                 
        {        
                delay(1000);   
                if(key_2==0)         
                {        
                        if(i==2){h++;datapros_1(h);}
                        if(i==3){l++;datapros_1(l);}                                
                }
                while(!key_2);        
        }               
}
void keypros_3()
{  
        if(key_3==0)                 
        {        
                delay(1000);   
                if(key_3==0)         
                {               
                        if(i==2){h--;datapros_1(h);}
                        if(i==3){l--;datapros_1(l);}               
                }
                while(!key_3);        
        }               
}
void keypros_4()
{
                if(key_4==0)                 
        {        
                delay(1000);   
                if(key_4==0)         
                {               
                        Ds18b20_Write_hl(h,l);
                        ds18b20_eeprom();
                }
                while(!key_4);        
        }        
}        

/*******************************************************************************
* 函 数 名       : main
* 函数功能                 : 主函数
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
void main()
{        
        while(1)
        {
                keypros_1();
                keypros_2();
                keypros_3();
                keypros_4();
                DigDisplay();//数码管显示函数               
                if(((h_1*10+l_1)<l||(h_1*10+l_1)>h)&&i!=0){beep=~beep;delay(10);}
        }               
}

最后,希望能接手一些项目做,基于51或是32都行
有视频连接和源代码连接
链接:https://pan.baidu.com/s/1Wbc-1TDq_OfL4Q8I_PshGQ
提取码:nbj3
复制这段内容后打开百度网盘手机App,操作更方便哦


DS18B20温度传感器.rar

40.09 KB, 下载次数: 116, 下载积分: 黑币 -5

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

使用道具 举报

沙发
ID:737508 发表于 2020-5-25 10:32 来自手机 | 只看该作者
能成吗
回复

使用道具 举报

板凳
ID:495323 发表于 2020-5-25 13:28 来自手机 | 只看该作者
666liuxing 发表于 2020-5-25 10:32
能成吗

要硬件和代码配合哦⊙⊙!
回复

使用道具 举报

地板
ID:765615 发表于 2020-5-31 12:19 | 只看该作者
有仿真图吗
回复

使用道具 举报

5#
ID:495323 发表于 2020-6-1 19:10 来自手机 | 只看该作者
liKayla 发表于 2020-5-31 12:19
有仿真图吗

去看我其它的文章,联系我我发给你
回复

使用道具 举报

6#
ID:495323 发表于 2020-6-1 19:11 来自手机 | 只看该作者
666liuxing 发表于 2020-5-25 10:32
能成吗

哪里不会可以问我
回复

使用道具 举报

7#
ID:766699 发表于 2020-6-2 17:36 | 只看该作者
楼主你好,请问可以提供一下仿真电路图吗?
回复

使用道具 举报

8#
ID:495323 发表于 2020-6-2 19:08 来自手机 | 只看该作者
ys1640690958 发表于 2020-6-2 17:36
楼主你好,请问可以提供一下仿真电路图吗?

其他文章有我联系方式
回复

使用道具 举报

9#
ID:771000 发表于 2020-6-6 12:08 | 只看该作者
楼主,这个压缩包里边有没有DS18B20的AD元器件库啊?
回复

使用道具 举报

10#
ID:495323 发表于 2020-6-7 01:58 来自手机 | 只看该作者
hyp12349 发表于 2020-6-6 12:08
楼主,这个压缩包里边有没有DS18B20的AD元器件库啊?

AD库文件太大,上传不了你给我邮箱我发给你
回复

使用道具 举报

11#
ID:731930 发表于 2020-6-20 21:28 | 只看该作者
楼主,分享呗取消了,求分享!!!
回复

使用道具 举报

12#
ID:495323 发表于 2020-6-21 00:15 来自手机 | 只看该作者
梨子栗子 发表于 2020-6-20 21:28
楼主,分享呗取消了,求分享!!!

好,联系我
回复

使用道具 举报

13#
ID:839551 发表于 2020-12-29 00:50 | 只看该作者
没有电路图啊
回复

使用道具 举报

14#
ID:839551 发表于 2020-12-29 00:50 | 只看该作者
没有符号啊不行
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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