👆面包板社区DIY活动进行中!
1.介绍
相信很多实验设计都是做温度传感器报警的设计,今天就来讲一下它的整体设计思路,这个设计非常简单,基本学过单片机的再会点数据通信基本就能拿捏的死死的。
2.设计
这个设计主要有四个部分组成,分别是单片机最小系统、显示屏、温度传感器和声光报警器,电路图如下图1所示。
都是比较常见的模块,所以代码也是非常简单的,一般做设计都是先做好人机交互,也就是图1中的LCD1602显示屏。
void write_1602com(uchar com)//****液晶写入指令函数****
{
rs=0;//数据/指令选择置为指令
rw=0; //读写选择置为写
P0=com;//送入数据
delay(1);
en=1;//拉高使能端,为制造有效的下降沿做准备
delay(1);
en=0;//en由高变低,产生下降沿,液晶执行命令
}
void write_1602dat(uchar dat)//***液晶写入数据函数****
{
rs=1;//数据/指令选择置为数据
rw=0; //读写选择置为写
P0=dat;//送入数据
delay(1);
en=1; //en置高电平,为制造下降沿做准备
delay(1);
en=0; //en由高变低,产生下降沿,液晶执行命令
}
然后就是DS18B20温度传感器了,这个传感器也是非常常用的,教学也会拿这个传感器来讲解,其实这个传感器的时序了解清楚之后,就没有任何难度了。
void Init_DS18B20_I(void)//初始化ds1820
{
unsigned char x=0;
DQ_I = 1; //DQ复位
Delayns(8); //稍做延时
DQ_I = 0; //单片机将DQ拉低
Delayns(80); //精确延时 大于 480us
DQ_I = 1; //拉高总线
Delayns(14);
x=DQ_I; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
Delayns(20);
}
//****************************************************************
uchar ReadOneChar_I(void)//读一个字节
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ_I = 0; // 给脉冲信号
dat>>=1;
DQ_I = 1; // 给脉冲信号
if(DQ_I)
dat|=0x80;
Delayns(4);
}
return(dat);
}
//****************************************************************
void WriteOneChar_I(uchar dat)//写一个字节
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ_I = 0;
DQ_I = dat&0x01;
Delayns(5);
DQ_I = 1;
dat>>=1;
}
}
//****************************************************************
uint ReadTemperature_I(void)//读取温度
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Init_DS18B20_I();
WriteOneChar_I(0xCC); // 跳过读序号列号的操作
WriteOneChar_I(0x44); // 启动温度转换
Init_DS18B20_I();
WriteOneChar_I(0xCC); //跳过读序号列号的操作
WriteOneChar_I(0xBE); //读取温度寄存器
a=ReadOneChar_I(); //读低8位
b=ReadOneChar_I(); //读高8位
if((b&0xf8)==0){
t=b;
t<<=8; //将b做高八位
t=t|a; //或上a,a做低八位
tt=t*0.0625; //通过固定值算出温度
t= tt*10+0.5; //放大10倍输出并四舍五入
}
else{ //如果为负数求补码+1
a=~a; //补码
b=~b;
t=b;
t<<=8; //将b做高八位
t=t|a; //或上a,a做低八位
tt=t*0.0625; //通过固定值算出温度
t= tt*10+1.5; //放大10倍输出并四舍五入
t = -t;
}
return(t);
}
不过这个传感器有一个通病,就是读写的时候可能会读到85这个值,所以读写的时候尽量不要被中断抢占,让他正常的读温度完成。
声光报警就不多说了,根据设定值报警即可,最终的效果如下图2所示。
3.总结
这个设计虽然基础,但是对于初学者来说,还是有一定的知识量的,可以好好学一学,大佬就当看个小白教学就好了~
作者:二哲科技 来源:面包板社区
扫码加入
单片机技术交流群
面包板社区DIY活动进行中!👇
https://mbb.eet-china.com/forum/topic/147007_1_1.html
社
在面包板社区博客/论坛分享你的DIY电子设计,并在发布文章时添加【电子DIY】标签,字数不限,文章通过社区评审,将有丰富奖励送给您!
【奖项设置】
二等奖(不限人数):福禄克F15B PRO MAX万用表、华为WATCH FIT 2...(任选一个)
三等奖(不限人数):小米手环9 NFC版、小米mini筋膜枪2C、价值¥300电子常用工具大礼包...(任选一个)
【文章要求】
1、内容要求原创,必须和电子行业相关,且首次发布于互联网
2、内容应包括:设计思路、成品展示(如电路原理、功能展示、成本控制方案或清单、代码等)涉及核心知识产权的内容可不展示。
3. 活动期间,同一ID可多次参加,等质量条件下多发作品可累积评分。
活动时间:2024.11.13 - 2025.02.13
点击阅读原文,了解活动详情!