普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 4825|回复: 6

[已解决] 急!DS18B20温度传感器代码中如何加蜂鸣器报警?

 关闭 [复制链接]

1

主题

4

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2020-1-7 09:15:43 | 显示全部楼层 |阅读模式
1金钱
请问大家,如何在普中科技原视频所给的代码中,加入蜂鸣器报警呢!

最佳答案

温度数据转换后的数值要处理后才能用IF

回复

使用道具 举报

1

主题

4

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2020-1-7 09:21:05 | 显示全部楼层
主程序如下:  #include "reg52.h" #include "DS18B20.h"   typedef unsigned char u8; typedef unsigned int u16;  sbit beep=P1^5;  sbit LSA=P2^2; sbit LSB=P2^3;  sbit LSC=P2^4;  u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  //0~9 char num=0; u8 DisplayData[8];    void delay(u16 i) {         while(i--); }   void datapros(int temp) {         float tp;         if(temp<0)         {                 DisplayData[0]=0x40;                  temp=temp-1;                 temp=~temp;                 tp=temp;                 temp=tp*0.0625*100+0.5;                 //+0.5在C中四舍五入         }         else         {                 DisplayData[0]=0x00;                 tp=temp;                 temp=tp*0.0625*100+0.5;         }         DisplayData[1]=smgduan[temp/10000];         DisplayData[2]=smgduan[temp%10000/1000];         DisplayData[3]=smgduan[temp%10000%1000/100]|0x80;        //个位         DisplayData[4]=smgduan[temp%100/10];         DisplayData[5]=smgduan[temp%100%10]; }  void DIGDISPLAY() {         u8 i;         for(i=0;i<6;i++)         {                 switch(i)                 {                         case(0):                                         LSA=0;LSB=0;LSC=0;break;                         case(1):                                         LSA=1;LSB=0;LSC=0;break;                     case(2):                                         LSA=0;LSB=1;LSC=0;break;                         case(3):                                         LSA=1;LSB=1;LSC=0;break;                         case(4):                                         LSA=0;LSB=0;LSC=1;break;                         case(5):                                         LSA=1;LSB=0;LSC=1;break;                 }                 P0=DisplayData[5-i];                 delay(100);                 P0=0x00;         } }  void main() {         while(1)         {                 datapros(Ds18b20ReadTemp());                 DIGDISPLAY();                         } }
回复

使用道具 举报

6

主题

193

帖子

826

积分

超级版主

Rank: 8Rank: 8

积分
826
发表于 2020-1-7 09:32:08 | 显示全部楼层
开发板是什么型号
回复

使用道具 举报

6

主题

193

帖子

826

积分

超级版主

Rank: 8Rank: 8

积分
826
发表于 2020-1-7 09:35:27 | 显示全部楼层
定义P15管脚 加个if就可以了
回复

使用道具 举报

1

主题

4

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2020-1-7 09:36:44 | 显示全部楼层
loyalboy 发表于 2020-1-7 09:32
开发板是什么型号

STC89C51芯片系统
回复

使用道具 举报

1

主题

4

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2020-1-7 09:40:29 | 显示全部楼层
loyalboy 发表于 2020-1-7 09:35
定义P15管脚 加个if就可以了

是的,我定义了个beep=P1^5;
然后
if(Ds18b20ReadTemp>330)
{
     beep=~beep;
     delay;
}
else
beep=0;
但是蜂鸣器没有在阈值温度那报警,而是一直响,我不清楚是什么情况呢。
回复

使用道具 举报

6

主题

193

帖子

826

积分

超级版主

Rank: 8Rank: 8

积分
826
发表于 2020-1-7 16:54:45 | 显示全部楼层
温度数据转换后的数值要处理后才能用IF
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-5-3 00:20 , Processed in 0.099056 second(s), 36 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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