本文介绍一种用AT89S52单片机构成的“温度、时钟显示仪”,该电路硬件结构简单,程序简练,成本低廉,使用灵活,非常适合对产品增加辅助功能。
1.电路的主要功能和特点
(1)测试室内温度和显示当前时间。
(2)时钟芯片和模数转换芯片都采用串行接口方式,占用MCL,端口较少。
(3)作为工业上的辅助功能,程序占用单片机的内部资源较少。
(4)采用专用时钟芯片,并且合理的电源设计使得电路具有较强的抗干扰能力。
(5)程序均采用模块化方式编写,方便后期维护更新。
2.电路硬件
(1)电源电路(见图1)。工业控制中的干扰在所难免,此电源电路采用常见的7805作为稳压,笔者作了简单改进一在电路中加了共模扼流圈,利用共模扼流圈的漏电感产生适量的差模电感,起到对差模电流的抑制作用。读者在设计时要注意控制共模扼流圈的寄生电容,否则对高频干扰的隔离效果很差。共模扼流圈的匝数越多,寄生电容越大,高频隔离的效果越差。
(2)功能电路(见图2)
AT89S52单片机芯片U1作为本电路的MCU,上电自动复位以及时钟电路均采用简易装置。
①液晶显示12232:是表示显示122列32行,由两片0713作为点阵驱动器(一片0713芯片,驱动61列32行),故引脚端有片选信号CS1和片选信号CS2。第8个引脚(A0),是数据/指令选择端,高电平时把数据DO~D7(9~16脚)送入显示RAM,低电平时把数据DO~D7送入指令执行器。
②时钟芯片BL5372:部分手机电路就是利用BL5372作为时钟模块,该芯片采用I2C接口协议,最高传输速率是400kbit/s,在成功完成读写信号后内嵌的字地址寄存器地址会自动增加。要注意的是FC接口的SCL、SDA引脚往往都是开漏电路,所以在功能实现时要接上10k的上拉电阻。该时钟芯片有自动闰年调节功能,功耗电流400NA/3.6V,其应用范围较广,相当多的电池耗电设备都采用该电路,其中时钟芯片BL5372与PCF8563有异曲同工之处(只需更改器件地址和时间寄存器地址,详细资料可去网站WWW.zlp.com.cn下载)。
③AD转换芯片ADC0832:工控设备在室内温度测量时,对A/D的转换速率、转换精度要求并不高,同时对MCU的端口使用尽量要少,故选择串行输出且性价比合理的ADC0832作为转换模块,硬件电路采用A/D转换的典型接法,利用热敏电阻的阻值变化,分压后获得不同模拟量,引脚D1是输入模拟通道IN0、IN1的选通引脚(D1为0选通IN01通道、Dl为1选通IN1通道),转换后的数字量伴随着8个CLK脉冲的下降沿,在DO引脚串行输出8位的数据。
④温度传感器:采用MF系列的PTC热敏电阻。
(3)程序介绍
本程序使用C语言编写,编写的总体思路是:在液晶显示器的固定位置显示特定文字,同时把转换后的时钟、温度数据经过查表显示在相应的位置,这样程序可分为液晶显示、时钟显示、温度显示3大模块,具有调用灵活、后期修改方便等特点。主程序的流程如图3所示。开机上电复位后,程序对89S52(MCU)、12232(LCD)初始化后,期间是一个不断读取BL5372(时钟芯片)和ADC0832(模数转换)的过程,编制程序均采用模块化调用方式,笔者在程序中已经对各个模块化程序标注详细注释,其中子程序LCD_Show_tAB的作用是预先定义显示文字的内容表,方便后期显示文字的更改。
编写时钟程序时,BL5 372的I2C接口有三种读数据方式,笔者采取的读数据模式如下:
其中:
写驱动器模式的目的是使单片机选中该时钟芯片,BL5372的器件地址是0l10010+R/W(R时为1,W时为0),由于我们当前是写指令,所以送驱动器地址0x64。
读驱动器模式的目的是读取时钟芯片的内容后,经单片机处理,送液晶显示器。BL5372的I2C协议规定,高四位为内部寄存器地址,低四位为传输模式(读状态时,定义传输模式为“0100”),由于秒的内部地址是(OH),所以在读秒地址的时候应写入0x04H。
应答信号:在I2C接口协议中规定主器件收发每个字节后产生一个时钟应答脉冲,由于BL5372内部已嵌入I2C接口电路,所以当该时钟芯片接受从单片机发送来的一个字节信号时,自动产生ACK应答信号,但由于80C51MCU并没有I2C接口,所以当完成读取时钟芯片内一个字节时,BL5372会把SDA状态保持为高电平,这时我们需要提供一个ACK应答信号,具体做法是接收完一个字节后,人为产生一个SDA的低电平。
源码下载