,系统处于80%水位。
当h=d时,传感器电阻阻值R′为0,对应
,系统处于100%水位。
其中,环形振荡器产生的方波周期T(或f)可通过单片机P87LPC744BN的两个定时/计数器(T0、T1)来确定,T1用来计数,T0用来定时。
所以,水位传感器测水位的基本原理如下:
(m为T1的计数值,#t为T0的定时值)。
(2)水温传感器
本设计可选选用具有负温度数的热敏电阻来测水温,热敏电阻与普通电阻不同,它具有负的温度特性,当温度升高时,电阻值减小,它的应用是为了感知温度。
现选用MF51型直热式负温度系数热敏电阻,它的技术特性如下:
型号
标称电阻(o)
材料常数(K)
温度系数(
)
使用温度范围
MF51
1~5K
±5%
±10%
±20%
3300
±5%
3.7
—55~+300℃
5~20K
3600
4.0
20~80K
3900
4.3
80~100K
4300
4.7
它能满足本设计的测量灵敏度要求和2%的测量精度要求,性价比较高。
测量原理:
与水位传感器一样,在设定好合适的参数(R1、R2、Rs、C)后,对应每个热敏电阻阻值,环形振荡器便能产生一个特定周期的矩形波。
T可通过单片机的T0外部计数和T1内部定时的方式确定。
故
然后通过下列公式求温度:
其中
--------------被测温度
-------------与热敏电阻特性有关的参数
------------与热敏电阻特性有关的系数
--------------热敏电阻阻值
以上计算均可由软件编程实现,把计算出的温度转化成BCD码,然后再存放于显示缓冲区中,执行相应的功能程序。
3.3显示接口的连接
本设计中采用了共阴极接法,对于显示水温水位的程序作如下说明:
①在动态扫描过程中,调用延时子程序Del1,其延迟时间为1ms,这是为了使扫描到哪位显示器稳定的点亮一段时间,犹如扫描过程中在每一位显示器上都一段驻留时间,以保证其显示亮度。
②本设计接口电路是软件为主的接口电路,对显示数据以查表方法得到其字形代码,为此在程序中有字形代码Table,从0开始依次写入十六进制数的字形代码。
为了进行查表操作,使用查表指令MOVCA,@A+DPTR,由DPTR提供16位基址,由A提供变址,因此显示数据送A后,再由A送P0.1~P0.6输出给显示器。
(1)水位显示:
本系统需显示水位,水位分缺水、20、50、80%五档,均用发光二极管来指示。
(2)水温显示:
本系统需显示水温,测量范围为0~990C,用两个八位LED数码管显示。
1)LED结构和显示原理。
LED(LightEmittingDiode)显示器是由发光二极管作为显示字段的显示器件,最常见的是由7段型发光二极管(a~g7段)和1个圆点型发光二极管(常以dp表示,主要用来显示小数点)组成的LED显示器,其排列形状如下图所示。
这种LED显示器也可称为7段数码显示器(或8段数码显示器)。
LED显示中的发光二极管根据其连接的方法有共阴极和共阳极两种结构。
共阴极结构:
把各段发光二极管的阴极连接在一起构成公共阴极,如图a所示。
使用时,公共阴极接地,根据要求需点亮发光二极管的阳极输入高电平,不需点亮的发光二极管的阳极输入低电平。
共阳极结构:
把各段发光二极管的阳极连接在一起构成公共阳极,如图b所示。
使用时,公共阳极接+5V,根据要求需要点亮发光二极管的阴极输入低电平,不需点亮的发光二极管的阴极输入高电平。
通过控制7个段的发光二极管的亮暗的不同组合,可以显示多种数字、字母以及其他符号。
2)字段码。
为了显示各个数字或字符,就需要为LED提供相应的代码,因为这些代码是控制各段的亮或灭,供显示器显示字形的,所以称为字段码(也可以称为段选码或字形码)。
七段发光二极管再加上1个小数点位,共计8段,因此提供给LED显示器的字段码正好1个字节。
各代码位的对应关系如下:
D7D6D5D4D3D2D1D0
dp
g
f
e
d
c
b
a
下图所示为共阴极LED所显示的不同字符的字段码,测量范围为0~990C,当温度超出范围时,显示器均显示F。
显示字符
共阴极字段码
0
3FH
1
06H
2
5BH
3
4FH
4
66H
5
6DH
6
7DH
7
07H
8
7FH
9
6FH
F
71H
3)N位LED显示器。
在单片机应用系统中,实际使用的LED显示器有多个,N位LED显示器的显示要从两个方面来控制:
其一是控制N位的字段显示(即显示什么字符);其二是控制字位(即哪一位到哪一位亮)。
由LED的显示原理可知,要使某N位LED显示器的某一位显示某个字符,就必须将此字符转换为对应的字段码来控制该位的8个段,同时,该位的字位线也要控制有效,这要通过一定接口来实现。
LED显示器有两种显示方式,即静态显示方式和动态显示方式。
N位LED显示器有N根字位选线(简称:
“位选线”)和N*8根字段选线(简称:
“段选线”)。
根据显示方式不同,位选线和段选线的连接方式也不同。
各种字符的字段码的获取方法有两种:
即软件译码和硬件译码法。
目前通常所用的各种型号的单片机开发系统或实验装置普遍采用软件译码。
当单片机应用系统中的LED显示器位数较多时,为了简化电路降低成本,本设计采用动态显示的方式。
动态显示方式的接口电路的连接方法是:
将所有LED位的段选线(a~dp)同名并联,即所有a段并联,所有b段并联。
依次类推,然后由一个8位I/O接口来控制各个段,而所有位的位选线则由另外一个相应的I/O接口线来控制。
这样用两个8位I/O接口就能控制8位LED显示器。
LED显示器是由电流型控制器件,其工作电流为2mA~20mA,使用时须加限流电阻。
本设计中限流电阻选用1K。
动态扫描显示控制方式就是逐个地循环点亮各位显示器,即在某一瞬间,只让某一位的位选线处于选通状态(共阳极的为高电平,共阴极的为低电平)其它各位的位选线处于段开状态,同时段选线上输出相应位要显示字符的字段码。
这样在每一个瞬间,8位LED中只有选通的那一位LED显示出字符,而其它7位则是熄灭的。
同样,在下一瞬间,只显示下1位LED。
如此继续下去,等8位LED都显示完毕后,在循环进行。
虽然这些字符是在不同的瞬时轮流点亮的,但由于人眼的视觉残留效应,看到的是8位稳定显示的字符,与静态显示的效果完全一样。
所以为了简化电路、降低成本,此系统中采用动态显示方式。
3.4主机结构
主机的选择是关键,选得好,可节省许多外围电路,本设计采用的是由Philips公司生产的P87LPC764BN芯片,是20脚封装的单片机,适合于要求高集成度、低成本的场合。
采用80C51加速处理器结构,指令执行速度是标准80C51的两倍。
片内有4K字节OTP程序存储器,128字节的RAM。
32Byte用户代码区可用来存放序列码及设置参数;有看门狗电路、复位电路(使用片内上电复位时不需要外接组件);2个16位定时/计数器,2个A/D转换器;所有口线均有20mA的驱动能力;电源电压VDD=4.5~6.0(操作频率为20MHZ)。
本设计中已经充分利用了该单片机的所有I/O口,且已能满足设计的要求,性价比高,组成了一个最小,最优化的系统。
现对P87LPC764BN这块芯片作如下介绍:
(1)概述:
P87LPC76x是20脚封装的单片机,适合于许多要求高集成度、低成本的场合。
可以满足许多方面的性能要求。
作为Philips小型封装系列中的一员,P87LPC76x提供高速和低速的晶振和RC振荡方式,可编程选择。
具有较宽的操作电压范围。
可编程I/O口线输出模式选择,可选择施密特触发输入,LED驱动输出。
有内部看门狗定时器。
P87LPC76x采用80C51加速处理器结构,指令执行速度是标准80C51MCU的两倍。
P87LPC76x采用增强型80C51MCU,其运行速度是标准80C51的2倍,这意味着P87LPC76x在5MHZ时性能和标准80C51采用10MHZ时性能相同。
一个机器周期由6个振荡周期组成,大多数指令执行时间为6或12个振荡周期,用户亦可选择工作在标准80C51MCU时序,这时一个机器周期变为12个振荡周期。
“MCU时钟”指控制内部指令执行的时钟。
当系统被设置成为标准80C51时序(由CLKR位确定)或通过设定DIVM寄存器分频时,“MCU时钟”和外部所加时钟不同。
(2)特性:
操作频率为20MHz时,除乘法和除法指令外,加速80C51指令执行时间为300~600ns。
VDD=4.5~6.0V时,时钟频率可高达到20MHz,VDD=2.7~4.5V时,时钟频率最大为10MHz。
VDD=4.5~6.0V(P87LPC765HDH)数字信号的操作电压为2.7~6.0V。
P87LPC762为2K字节OTP程序存储器,P87LPC764为4K字节OTP程序存储器,128字节的RAM。
32Byte用户代码区可用来存放序列码及设置参数。
2个16位定时/计数器,每一个均可设置为超时溢出时相应端口输出。
八个键盘中断输入,另加2路外部中断输入。
4个中断优先级。
看门狗定时器利用片内振荡,无需外接元件,看门狗定时器溢出时间有8级选择。
低电平复位。
使用片内上电复位时不需要外接元件。
低电压复位。
可选择预先设定好的两种电压之一复位,当掉电时允许系统安全关闭。
也可将其设置为一个中断源。
可选择片内振荡及其频率范围和RC振荡(用户通过对EPROM位编程选择)。
选择RC振荡器时不需外接振荡器件。
如果选择片内振荡及复位时,P87LPC76x仅需要连接电源线和地线。
20脚DIP、SO和TSSOP封装。
管脚配置:
方框图:
(3)键盘中断(KBI):
键盘中断功能主要是使得连至P87LPC76x特殊脚的键盘上任一键被按下时能产生一个中断(见图12)。
该中断可用于将MCU从空闲模式或掉电模式中唤醒。
此特性尤其适合便携式且使用电池供电的系统。
P87LPC76x允许端口0的部分或全部引脚被使能触发中断,这是通过对KBI寄存器对应位置位完成的,如图13所示。
当打开KBI中断功能后,任一被使能引脚被拉低都会将AUXR1寄存器内键盘中断标志(KBF)置位。
如若中断允许则将产生一中断。
注意KBF位必须由软件清除。
由于人对时间分辨精度及键开关闭合的机械延迟,KBI特性通常可用于中断服务程序轮流查询端口0以确定按下的是哪个键,甚至决定处理器从低功耗模式唤醒。
参见低功耗模式部分。
本系统存储容量不大,4KROM,128RAM足够,由于只有二个键,且不经常操作,所以本设计中采用了中断方式,其中与P0.2口的键盘是用于手动上水功能,与P0.3口连接的键盘用于水位设置的功能。
当产生键盘中断时,用软件判断按下的是哪个键:
本设计中键盘中断要实现两个功能:
水位设置和手动上水:
(1)其中水位设置键与P0.3口连接,具体功能叙述如下:
当水位不足情况下,未按下水位设置键时,默认预置水位为50%,在上水过程中,水位指示灯灭。
当按一下水位设置键时,80%水位指示灯亮,表明要上水到80%;
当按第二下水位设置键时,100%水位指使灯亮,表明要上水到100%;
当按第三下水位设置键时,20%水位指示灯亮,表明缺水时,要上水到20%;
当按第四下水位设置键时,预置水位又为50%,表明要上水到50%;
在具体的软件判别中,可通过查表P0.3是否置高电平来确认键盘有没按下,可用MOVA,P0;JNBACC、3等几条指令来实现。
通过对每一次的键盘按动进行加1记录,即当每次P0.3为高电平时,加一条INCR,指令,当R1为5时,又重新赋值为1,而后对R1的值进行判断,以确认水位设置键到底设置了哪个水位:
(2)手动上水键与P0.2口连接,可用MOVA,P0;JNBACC、2两条指令来
查看手动上水键有没被按下。
它的具体功能如下:
按“上水”键,若水位低于预置水位,可上水至预置水位;若水位已达到预置水位,则在原水位的基础上再加一档;若水位已加满,则停止手动加水,在上水过程中,按“上水”键,可停止上水。
同水位设置键一样,当奇数次按下此键时,表示要上水,当偶数次按下此键时,表示停止上水,
(4)振荡器:
P87LPC76x提供几种用户可选振荡器选项,允许根据需要从高精度至最低成本范围内选择。
这些选项在EPROM编程时配置。
支持的基本振荡器类型包括:
低、中、及高速晶振,20KHz~20MHz,陶瓷振荡器及片内RC振荡器。
片内RC振荡器选项(RC)
片内RC振荡器典型频率为6MHz,可通过DIVM寄存器分频后获取较低频率。
注意片内振荡器频率有±25%误差,因此不适于某些场合使用。
使用RC振荡器时X2/P2.0脚可用作标
准端口引脚。
此时亦可选择X2/P2.0脚输出时钟。
时钟输出
P87LPC76x在选择片内RC振荡器或外部时钟输入时支持时钟输出功能。
这使得外部器件可与P87LPC76x同步。
对P2M1寄存器的ENCLK置位后,无论是否处于空闲模式,只要片内振荡器运行,X2/CLKOUT就有信号输出。
输出时钟频率