我们生活中经常遇到需要测量两种温度的情况,比如测居室的内外温度、小车的内外温度等。笔者制作了一款同时测定室内、室外温度的数字温度计(见图9.1),它利用1602显示屏同时显示室内外温度,测温快速、直观。
硬件电路本制作的硬件电路如图9.2所示。它由AT89S52单片机、2只温度传感器DS18B20以及LCD1602显示屏构成。工作时,IC1和IC2中的传感器把测得的温度转换成数字信号传到单片机IC3,单片机通过数值转换后,再调用相应的显示程序驱动显示器件IC4,把温度值显示出来。IC1、IC2中的两个传感器将室内外温度转换成十六进制,占两个字节的数字信号。IC1、IC2的I/O口分别接单片机的P3.6、P3.7口,避免单口测定DS18B20序列号的麻烦。
图9.1 室内外双显温度计
电路采用6V的干电池供电,整机用电约15mA。电源电压经二极管VD降压后为电路提供5V的电压。为了节约用电,这里接有开关S,可以让电池间歇工作,延长电池寿命。C1和R1组成复位电路,每次使用前让单片机复位。C2、C3、B为振荡电路,晶体振荡器为12MHz。
单片机IC3的P3.2、P3.3、P3.4接口分别接IC4的RS、RW、E接口,由于这些接口用于定义寄存器、信号读写以及是否执行指令等,故不能接错。单片机的数据接口P2.0~P2.7与IC4的D0~D7连接,主要用于传送显示的数据和各种指令。
图9.2
图9.3
软件设计本电路用单片机的两个I/O口控制2个DS1820传感器。单片机对液晶屏1602进行初始化,并进行读写操作,最后将数据转换为十进制数送到显示屏显示出内外温度值。软件的主流程图如图9.3所示。为了稳定地显示温度值,显示字母(OUT、IN、℃)和温度(如 025.5℃)的程序独立执行,互相不干扰。因此,它调用的子程序相对较长。由于要显示两种温度,如DS18B20的初始化、精度设置、显示地址、读写等程序都要执行2次,子程序相对较多。只有16进制数转化为十进制数只执行一次。
由于1602字符库无“℃”的符号,作者对字符库中所有字符进行查找(包括英文字母大小写、常用符号、日文假名),发现其中日文假名中的一个符号很接近“℃”中的“°”,于是将那个符号加上“C”即成符号“℃”,这样就避免单独编程的麻烦。
该温度计设计精度为±0.5℃,分辨率在0.5℃,可以显示-55~ 125℃的温度值。
硬件制作图9.4为笔者制作好的电路板,采用万能板安装元器件。1602显示屏直接装在万能板上,这样可以减小软线的移动,使电路工作更可靠。元件之间的连接尽量用背面的铜箔连线,点与点之间可以用焊锡丝连接。焊接时烙铁的温度不要太高,否则不易连接成功,背面焊锡连线如图9.5所示。元件中,内温传感器IC1装在电路板的外侧,外温传感器IC2用1m长的不同颜色三绞线,一端焊在传感器DS18B20上,另一端焊在电路板上,并用热缩管套住DS1820防水,如图9.6所示。
安装单片机IC3需要先将一个40脚的双排底座焊在电路板上,这样便于烧写单片机时的插拔。开关S采用小型按钮开关,上面套上按钮套,这样开关更方便。
元件和连线焊接完成后,需要检查一遍,看焊接是否有错误,若无错误,通电即可工作,无需调试,通电后LCD1602显示的效果如图9.7所示。
如有条件,再找一个塑料外壳将电路板装入固定,塑料壳需要开一个开关孔,并且塑料壳靠传感器IC1的一侧再开一些小孔,便于DS18B20对环境温度的检测。装入塑料壳的双显温度计如题图所示。实际使用时,把室外传感器IC2装在窗外,不靠墙,并且阳光不会直射到的地方即可。
图9.4 制作好的电路正面
图9.5 制作好的电路背面
图9.6 用热缩管套住 DS1820 防水
图9.7 双湿度显示效果
,