电子体温计的研制 23
3.3.3 复位源
ATmega16有5个复位源:
? 上电复位。电源电压低于上电复位门限 VPOT时,MCU复位。
? 外部复位。引脚RESET上的低电平持续时间大于最小脉冲宽度时MCU复位。 ? 看门狗复位。看门狗使能并且看门狗定时器溢出时复位发生。
? 掉电检测复位。掉电检测复位功能使能,且电源电压低于掉电检测复位门限 VBOT时MCU即复位。
? JTAG AVR复位。复位寄存器为1时MCU复位[20]。
3.4 AD转换器
ATmega16有一个10位的逐次逼近型ADC。ADC与一个8通道的模拟多路复用器连接,能对来自端口A的8路单端输入电压进行采样。单端电压输入以0V(GND)为基准。器件还支持16路差分电压输入组合。两路差分输入(ADC1、ADC0 与ADC3、ADC2)有可编程增益级,在A/D转换前给差分输入电压提供0dB(1x)、20dB(10x) 或46dB(200x)的放大级。七路差分模拟输入通道共享一个通用负端(ADC1),而其他任何ADC 输入可做为正输入端。如果使用1x或10x增益,可得到8位分辨率。如果使用200x 增益,可得到7位分辨率。
ADC包括一个采样保持电路,以确保在转换过程中输入到ADC的电压保持恒定。 ADC由AVCC 引脚单独提供电源。AVCC 与VCC 之间的偏差不能超过± 0.3V。标称值为2.56V 的基准电压,以及AVCC,都位于器件之内。基准电压可以通过在AREF引脚上加一个电容进行解耦,以更好地抑制噪声。
ADC 通过逐次逼近的方法将输入的模拟电压转换成一个10位的数字量。最小值代表GND,最大值代表AREF引脚上的电压再减去1 LSB。通过写ADMUX寄存器的REFSn位可以把AVCC 或内部2.56V 的参考电压连接到AREF引脚。在AREF上外加电容可以对片内参考电压进行解耦以提高噪声抑制性能。模拟输入通道与差分增益可以通过写ADMUX 寄存器的MUX 位来选择。任何ADC输入引脚,像GND及固定能隙参考电压,都可以作为ADC的单端输入。ADC输入引脚可选做差分增益放大器的正或负输入。如果选择差分通道,通过选择被选输入信号对的增益因子得到电压差分放大级。然后放大值成为ADC的模拟输入。如果使用单端通道,将绕过增益放大器。通过设置ADCSRA寄存器的ADEN即可启动ADC。只有当ADEN置位时参考电压及输入通道选择才生效。ADEN清零时ADC并不耗电,因此建议在进入节能睡眠模式之前关闭ADC。
ADC转换结果为10位,存放于ADC数据寄存器ADCH及ADCL中。默认情况下转换结果为右对齐,但可通过设置ADMUX寄存器的ADLAR变为左对齐。如果要求转换结果左对齐,且最高只需8 位的转换精度,那么只要读取ADCH足够了。否则要先读ADCL,再读ADCH,以保证数据寄存器中的内容是同一次转换的结果一旦读出ADCL,ADC对数据寄存器的寻址就被阻止了。也就是说,读取ADCL之后,即使在读ADCH之前又有一次ADC转换结束,数
电子体温计的研制 24
据寄存器的数据也不会更新,从而保证了转换结果不丢失。ADCH被读出后, ADC即可再次访问ADCH及ADCL寄存器。ADC转换结束可以触发中断。即使由于转换发生在读取ADCH与ADCL之间而造成ADC无法访问数据寄存器,并因此丢失了转换数据,中断仍将触发。
ADC通过逐次逼近的方法将输入的模拟电压转换成一个10位的数字量。最小值代表GND,最大值代表AREF引脚上的电压再减去1 LSB。通过写ADMUX寄存器REFSn位可以把AVCC 或内部2.56V的参考电压连接到AREF引脚。在AREF 上外加电容可以对片内参考电压进行解耦以提高噪声抑制性能。
模拟输入通道与差分增益可以通过写ADMUX寄存器的MUX位来选择。任何ADC输入引脚,像GND及固定能隙参考电压,都可以作为ADC的单端输入。ADC输入引脚可选做差分增益放大器的正或负输入。
如果选择差分通道,通过选择被选输入信号对的增益因子得到电压差分放大级。然后放大值成为ADC的模拟输入。如果使用单端通道,将绕过增益放大器。通过设置ADCSRA 寄存器的ADEN即可启动ADC。只有当ADEN置位时参考电压及输入通道选择才生效。ADEN 清零时ADC并不耗电,因此建议在进入节能睡眠模式之前关闭ADC。
电子体温计的研制 25
4 液晶屏JXD1602
LCD是液晶显示屏,主要是用来做面显示的,它本身不发光,然后通过电流使屏幕产生各种颜色的浑浊现象,后置一个光源来透过前面的LCD面板使人看到图案。LED是发光二极管,它本身是点光源,就是说发出来的光不是一个面,而是一个点。也有用LED做显示屏的,相对于液晶显示屏来说,LED适合于室外以及室内大屏幕观看距离稍微远一点的情况,因为LED显示屏的分辨率肯定远远小过LCD。还有一点就是由于LED与LCD的功耗比大约为10:1,所以本设计部采用LED显示。
液晶显示器(LCD)由于体积小、重量轻、耗电小等优点已成为各种嵌入式系统的常用的理想显示器。近年来,液晶显示器技术的发展迅猛,大面积的液晶显示器已开始取代CRT显示器,在使用电池供电的嵌入式电子产品中,如手机、PDA、家电产品、仪器仪表产品等,液晶显示器是首选的显示器。
4.1液晶显示简介
4.1.1液晶显示原理
液晶显示器利用液晶的物理特性, 通过外加电压对显示区域进行控制, 可以显示字符或图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点, 广泛用于便携式电脑、数字摄像机、PDA、移动通信工具等领域。 4.1.2液晶显示器的分类
液晶显示的分类方法很多, 按显示方式可分为段式、字符式、点阵式等。除了黑白显示外, 液晶显示器还有多灰度、彩色显示等。如果根据驱动方式,可以分为静态驱动。、单纯矩阵驱动和主动矩阵驱动等三种。
4.2 1602字符型LCD简介
1602字符型液晶显示模块是专门用于显示字母、数字、符号等的点阵式LCD,目前常用的有16X1、16X2、20X2和40X2行等。下面以1602字符型液晶显示器为例, 介绍其用法。
4.2.1 1602LCD的引脚功能
VL为液晶显示器对比度调整端, 接正电源时对比度最弱, 接砌寸对比度最高。若对比度过高会产生“鬼影”,使用时可以通过一只10K电阻来调整对比度。
RS为寄存器选择端, RS为高电平时选择数据寄存器, 为低电平时选择指令寄存器。
R/W为读写信号线, 为高电平时进行读操作, 为低电平时为写操作。当RS和R/W
电子体温计的研制 26
同为低电平时可以写人指令或者显示地址;当RS为低电平、R/W为高电平时可以读忙信号;当RS为高电平、R/W为低电平时可以写入数据。
E为使能端, 当E端由高电平跳变成低电平时, 液晶模块执行命令。 D0一D7为位双向数据线[21]。 4.2.2 1602LCD的指令说明及时序
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。 指令1:清显示, 指令码01H, 光标复位到地址00H位置 指令2:光标复位, 光标返回到地址00H 指令3:光标和显示模式设置
I/D:光标移动方向, 高电平右移, 低电平左移
S:屏幕上所有文字是否左移或者右移, 高电平表示有效, 低电平则无效。时序如表所示
指令4:显示开关控制
D:控制整体显示的开与关,高电平表示开显示, 低电平表示关显示 C:控制光标的开与关, 高电平表示有光标, 低电平表示无光标 B:控制光标是否闪烁, 高电平闪烁, 低电平不闪烁 指令5:光标或显示移位
S/C:高电平时移动显示的文字, 低电平时移动光标 指令6:功能设置命令
DL:高电平时为位总线, 低电平时为8位总线;N:低电平时为单行显示, 高电平时双行显示;F:低电平时显示5X7的点阵字符, 高电平时显示5X10的点阵字符
指令7:字符发生器RAM地址设置 指令8:DDRAM地址设置 指令9:读忙信号和光标地址
BF:忙标志位, 高电平表示忙, 此时模块不能接收命令或者数据低电平表示不忙 指令10:写数据 指令11:读数据
4.2.3 1602LCD的RAM地址映射及标准字库表
液晶显示模块是慢显示器件, 所以在执行每条指令之前一定要确认模块的忙标志为低电平即不忙, 否则该指令失效。显示字符时, 要先输人显示字符址功上, 即告诉模块在哪里显示字符。
例如, 第二行第一个字符的地址是40H, 那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢这是不行的。因为写入显示地址时要求最高位D7恒定为高电平1,所以实际写入的数据应该是01000000B(40H)+10000000B(80H),即
电子体温计的研制 27
11000000B(C0H)。
在对液晶模块进行初始化时, 要先设置其显示模式, 在液晶模块显示字符时光标是自动右移的, 无需人工干预。每次输人指令前, 都要判断液晶模块是否处于忙状态
[22]
。
1602液晶模块内部的字符发生存储器(CGROM)中已经存储了160个点阵字符图
形,如表4-1所示,每一个字符都有一个固定的代码。比如, 大写英文字母A的代码是01000001B(41H),显示时, 模块把地址41H中的点阵符图形显示出来,我们就能看到字母A。
表4-1 CGROM和CGRAM中字符代码与字符图形对应关系
4.2.4 1602LCD的一般初始化复位过程
延时15mS
写指令38H(不检测忙信号) 延时5mS
写指令38H(不检测忙信号) 延时5mS
写指令38H(不检测忙信号)
以后每次写指令,读/写数据操作均需要检测忙信号 写指令38H:显示模式设置 写指令08H:显示关闭 写指令01H:显示清屏