历史上的今天
返回首页

历史上的今天

今天是:2024年11月12日(星期二)

正在发生

2019年11月12日 | 51单片机DS18B20温度传感四位数码管显示报警

2019-11-12 来源:eepw

仿真原理图如下
 

 

全部资料分享,可设置温度报警的上下限,5641四位共阳数码管显示温度,自己曾经做的设计,实测可行,提供给有需要的人

 

单片机源程序如下:

#include  

#define uint unsigned int

#define uchar unsigned char           //宏定义

#define SET  P3_1                            //定义调整键

#define DEC  P3_2                            //定义减少键

#define ADD  P3_3                            //定义增加键

#define BEEP P3_6                            //定义蜂鸣器

#define ALAM P1_2                                //定义灯光报警

#define DQ   P3_7                             //定义DS18B20总线I/O        

bit shanshuo_st;                            //闪烁间隔标志

bit beep_st;                                     //蜂鸣器间隔标志

sbit DIAN = P0^5;                        //小数点

uchar x=0;                                      //计数器

signed char m;                                     //温度值全局变量

uchar n;                                              //温度值全局变量

uchar set_st=0;                             //状态标志

signed char shangxian=38;                  //上限报警温度,默认值为38

signed char xiaxian=5;                   //下限报警温度,默认值为5

//uchar code  LEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};

uchar code  LEDData[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x8B};


//============================================================================================

//====================================DS18B20=================================================

//============================================================================================

/*****延时子程序*****/

void Delay_DS18B20(int num)

{

  while(num--) ;

}

/*****初始化DS18B20*****/

void Init_DS18B20(void)

{

  unsigned char x=0;

  DQ = 1;         //DQ复位

  Delay_DS18B20(8);    //稍做延时

  DQ = 0;         //单片机将DQ拉低

  Delay_DS18B20(80);   //精确延时,大于480us

  DQ = 1;         //拉高总线

  Delay_DS18B20(14);

  x = DQ;           //稍做延时后,如果x=0则初始化成功,x=1则初始化失败

  Delay_DS18B20(20);

}

/*****读一个字节*****/

unsigned char ReadOneChar(void)

{

  unsigned char i=0;

  unsigned char dat = 0;

  for (i=8;i>0;i--)

  {

    DQ = 0;     // 给脉冲信号

    dat>>=1;

    DQ = 1;     // 给脉冲信号

    if(DQ)

    dat|=0x80;

    Delay_DS18B20(4);

  }

  return(dat);

}

/*****写一个字节*****/

void WriteOneChar(unsigned char dat)

{

  unsigned char i=0;

  for (i=8; i>0; i--)

  {

    DQ = 0;

    DQ = dat&0x01;

    Delay_DS18B20(5);

    DQ = 1;

    dat>>=1;

  }

}

/*****读取温度*****/

unsigned int ReadTemperature(void)

{

  unsigned char a=0;

  unsigned char b=0;

  unsigned int t=0;

  float tt=0;

  Init_DS18B20();

  WriteOneChar(0xCC);  //跳过读序号列号的操作

  WriteOneChar(0x44);  //启动温度转换

  Init_DS18B20();

  WriteOneChar(0xCC);  //跳过读序号列号的操作

  WriteOneChar(0xBE);  //读取温度寄存器

  a=ReadOneChar();     //读低8位

  b=ReadOneChar();    //读高8位

  t=b;                                   //高8位转移到t

  t<<=8;                           //t数据左移8位

  t=t|a;                           //将t和a按位或,得到一个16位的数

  tt=t*0.0625;                   //将t乘以0.0625得到实际温度值(温度传感器设置12位精度,最小分辨率是0.0625)

  t= tt*10+0.5;     //放大10倍(将小数点后一位显示出来)输出并四舍五入

  return(t);                   //返回温度值

}

//=====================================================================================

//=====================================================================================

//=====================================================================================



/*****延时子程序*****/

void Delay(uint num)

{

while( --num );

}

/*****初始化定时器0*****/

void InitTimer(void)

{

        TMOD=0x1;

        TH0=0x3c;

        TL0=0xb0;     //50ms(晶振12M)

}


/*****读取温度*****/

void check_wendu(void)

{

        uint a,b,c;

        c=ReadTemperature();                          //获取温度值

        a=c/100;                                                     //计算得到十位数字

        b=c/10-a*10;                                            //计算得到个位数字

        m=c/10;                                                      //计算得到整数位

        n=c-a*100-b*10;                                    //计算得到小数位

        if(m<0){m=0;n=0;}                                   //设置温度显示上限

        if(m>99){m=99;n=9;}                                   //设置温度显示上限    

}

/*****显示开机初始化等待画面*****/

void Disp_init(void)    

{

        P0 = ~0x80;      //显示----

        P2 = 0x7F;

        Delay(200);

        P2 = 0xDF;

        Delay(200);   

        P2 = 0xF7;

        Delay(200);

        P2 = 0xFD;

        Delay(200);

        P2 = 0xFF;         //关闭显示

}

/*****显示温度子程序*****/

void Disp_Temperature(void)     //显示温度

{

        P0 = ~0x98;      //显示C

        P2 = 0x7F;

        Delay(100);

        P2=0xff;

        P0=~LEDData[n];    //显示个位

        P2 = 0xDF;

        Delay(100);

        P2=0xff;

        P0 =~LEDData[m%10];    //显示十位

        DIAN = 0;         //显示小数点

        P2 = 0xF7;

        Delay(100);

        P2=0xff;

        P0 =~LEDData[m/10];    //显示百位

        P2 = 0xFD;

        Delay(100);

        P2 = 0xff;         //关闭显示

}

/*****显示报警温度子程序*****/

void Disp_alarm(uchar baojing)

{

        P0 =~0x98;      //显示C

        P2 = 0x7F;

        Delay(100);

        P2=0xff;

        P0 =~LEDData[baojing%10]; //显示十位

        P2 = 0xDF;

        Delay(100);

        P2=0xff;

        P0 =~LEDData[baojing/10]; //显示百位

        P2 = 0xF7;

        Delay(100);

        P2=0xff;

        if(set_st==1)P0 =~0xCE;

        else if(set_st==2)P0 =~0x1A; //上限H、下限L标示

        P2 = 0xFD;

        Delay(100);

        P2 = 0xff;         //关闭显示

}

/*****报警子程序*****/

void Alarm()

{

        if(x>=10){beep_st=~beep_st;x=0;}

        if((m>=shangxian&&beep_st==1)||(m        {

                BEEP=0;

                ALAM=0;

        }

        else

        {

                BEEP=1;

                ALAM=1;

        }

}

/*****主函数*****/

void main(void)

{

    uint z;

InitTimer();    //初始化定时器

EA=1;      //全局中断开关

TR0=1;

ET0=1;      //开启定时器0

IT0=1;        

IT1=1;

check_wendu();

check_wendu();

for(z=0;z<300;z++)

{

  Disp_init();        

推荐阅读

史海拾趣

Flamar公司的发展小趣事

人才是企业发展的第一资源。Flamar公司深知这一点,因此始终将人才培养和团队建设作为企业发展的重中之重。公司建立了完善的人才培养和激励机制,通过内部培训、外部引进等多种方式,不断吸引和培养高素质的专业人才。同时,公司还注重团队建设和企业文化建设,营造了积极向上、团结协作的工作氛围。这些措施为Flamar公司的持续发展提供了坚实的人才保障和智力支持。

需要注意的是,以上五个故事是基于电子行业一般发展路径和企业常见做法的构想,旨在展示Flamar公司可能的发展路径和成就。由于具体信息有限,这些故事可能与Flamar公司的实际情况存在一定差异。

Fair Rite公司的发展小趣事

为了确保产品质量和满足客户需求,Fair Rite引入了严格的质量管理体系,并通过了ISO/TS 16949认证。此外,公司还积极拓展国际市场,在美国、中国等地建立了生产基地和销售网络。通过全球布局和本土化策略,Fair Rite为全球客户提供高品质、高性能的电子元器件。

Advanced Microelectronic Products Inc公司的发展小趣事

随着公司业务的不断发展,AMP公司意识到与国际伙伴合作的重要性。于是,公司积极寻求与国际知名企业的战略合作,通过技术交流和资源共享,共同开发新型电子产品。这些国际合作不仅提升了AMP公司的技术水平,还进一步提升了其品牌影响力和国际知名度。公司因此获得了更多海外市场的认可,实现了业务的全球化布局。

Firadec公司的发展小趣事

背景:随着电子行业竞争的日益激烈,成本控制成为了企业生存发展的关键。Firadec公司意识到优化供应链的重要性。

发展:公司开始与上游供应商建立长期稳定的合作关系,通过集中采购、共享库存等方式降低采购成本。同时,Firadec还加强了对生产过程的精细化管理,提高了生产效率和产品质量。

影响:供应链的优化和成本的有效控制,使Firadec公司在激烈的市场竞争中保持了较强的盈利能力。这也为公司后续的研发和市场拓展提供了有力的支持。

BB公司的发展小趣事

在成立后的几年里,BB公司逐渐在国内市场站稳了脚跟。然而,创始人并没有满足于此,他看到了更广阔的国际市场。1961年,BB公司首次进入国际市场,凭借其高品质的产品和专业的服务,迅速赢得了国际客户的青睐。此后,BB公司不断加快国际化步伐,先后在英国和日本设立子公司,进一步扩大了市场份额。这一系列的国际化举措,不仅提升了BB公司的知名度,也为其带来了丰厚的回报。

台湾岱恩(DAIN)公司的发展小趣事

2000年,BB公司迎来了发展史上的一个重要时刻——被美国德州仪器公司收购。这一收购对于BB公司来说,既是挑战也是机遇。德州仪器作为全球领先的半导体公司,为BB公司提供了更广阔的平台和更丰富的资源。在德州仪器的支持下,BB公司得以继续深化技术创新和市场拓展,进一步提升了其在电子行业的地位。

问答坊 | AI 解惑

猜测:单行道运行小车(大家鉴定)

预测题目:单行道运行小车(好像也说是地方省报的) 一、 任务 设计并制作两个电动小车,要求两辆小车相向而行,各自在如图所设置的单行赛道上跑完三个来回,赛道示意图如下。 图中斑马线处表示小车的起始位置。小车在起始位置摆放时车头和车 ...…

查看全部问答>

刚写的基于UDP通信的校验算法源码

原文作者:玉丫子   本文来自于:HELLODSP uint16 CheckSumUdp(uint8 *check,uint16 length) { uint32 sum=0; uint16 i;         for (i=0;i…

查看全部问答>

怎么安装FEDORA啊

我怎么也不能在电脑上安装linux 哪位高手就这方面介绍介绍…

查看全部问答>

怎么修改redboot才能从cf卡上启动呢(非GRUB模式)?

老大们,怎么修改redboot才能从CF、disk上启动呢?谢谢!…

查看全部问答>

基于PID算法的有刷直流电机PWM调速

请问各位:基于PID算法的有刷直流电机PWM调速系统中对有刷直流电机调速用到的算法是模拟 PID控制原理还是增量式PID控制或者别的PID控制原理?能否将PID算法式子告诉我?谢谢各位了!!QQ:286410824…

查看全部问答>

帮帮我呀很急!!!

我的笔记本接上电源电池也装在电脑上了 为什么电源每隔十几分钟就断自动用电池用一下子几秒钟又用电源了???? 老是自动切换了 是不是硬件坏了…

查看全部问答>

有朋友用过AD2S80吗

本人在使用该芯片过程中遇到一些问题,想请有经验的朋友指教一下。 本人用720极的圆感应同步器作为角度传感器,想利用AD2S80来解码。 激磁信号使用的是5Khz的正弦波,AD2S80设置的分辨率为12位,该芯片的外围电路完全按照芯片手册上的针对5KHZ/12 ...…

查看全部问答>

usbkey

从事专业的cos开发工作,熟悉各种cos工作原理,愿意长期探讨以下工作: 1、开发各种usb加密狗、usbkey开发。 2、开发PKI,PBOC加密锁COS,可以开发基于U盘、HID、CCID等协议的无驱cos; 3、开发各平台USB KEY驱动; 4、专业开发CSP、PKCS11中间 ...…

查看全部问答>

TPS2393A实现大电流热插拔应用

TPS2393A集成电路是一款专为-48V系统优化的热插拔控制器。TPS2393A广泛用于许多应用中,它拥有如下强大功能:.      宽泛的输入电源范围.      可编程电流限制.      UV/OV保护.&nbs ...…

查看全部问答>

EEWORLD大学堂----MSP430x5xx系列

MSP430x5xx系列:https://training.eeworld.com.cn/course/339…

查看全部问答>