相信很多实验设计都是做温度传感器报警的设计,今天就来讲一下它的整体设计思路,这个设计非常简单,基本学过单片机的再会点数据通信基本就能拿捏的死死的。
2.设计
这个设计主要有四个部分组成,分别是单片机最小系统、显示屏、温度传感器和声光报警器,电路图如下图1所示。
图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); }
复制代码声光报警就不多说了,根据设定值报警即可,最终的效果如下图2所示。
图2
3.总结
这个设计虽然基础,但是对于初学者来说,还是有一定的知识量的,可以好好学一学,大佬就当看个小白教学就好了~
收藏