ds18b20温度传感器
第一篇:ds18b20温度传感器
DS18B20温度传感器设计报告
传感器课程设计
专 业: 计算机控制技术
---数字温度计
年 级: 2011 级 姓 名: 樊 益 明
学 号: 20113042
指导教师: 刘 德 春
阿坝师专电子信息工程系
1. 引 言
1.1. 设计意义
在日常生活及工农业生产中,经常要用到温度的检测及控制,传统的测温元件有热电偶和热电阻。而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持。其缺点如下:
● 硬件电路复杂; ● 软件调试复杂; ● 制作成本高。
本数字温度计设计采用美国DALLAS半导体公司继DS1820之后推出的一种改进型智能温度传感器DS18B20作为检测元件,测温范围为-55~125℃,最高分辨率可达0.0625℃。
DS18B20可以直接读出被测温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的热点。
2 设计要求
2.1基本要求 1) 用LCD12232实现实时温度显示温度和自己的学号。 2) 采用LED数码管直接读显示。 2.2扩展功能
温度报警,能任意设定温度范围实现铃声报警;
33.1单片机89C52模块
单片机89C52是本设计中的控制核心,是一个40管脚的集成芯片构成。引脚部分:单片机引脚基本电路部分与普通设计无异,40脚接Vcc+5V,20脚接地。X1,X2两脚接12MHZ的晶振,可得单片机机器周期为1微秒。RST脚外延一个RST复位键,一端通过10K电阻接Vcc,一端通过10K电阻接地。AT89S52是一种低功耗、高性能的8位CMOS微控制器,具有8K的可编程Flash 存储器。使
资料准备 用高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在线系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8K字节Flash,256字节RAM,32位I/O 口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。P 0口接一个470的上拉电阻。P0口0~8脚接4位共阳数码管的段选,P2口0~4脚接4位共阳数码管的位选,P3.7接DS18B20采集信号。
3.2 DS18B20简介
DALLAS最新单线数字温度传感器DS18B20简介新的“一线器件”体积更小、适用电压更宽、更经济 Dallas 半导体公司的数字化温度传感器DS1820是世界上第一片支持 “一线总线”接口的温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。DS18B20、 DS1822 “一线总线”数字化温度传感器 同DS1820一样,DS18B20也支持“一线总线”接口,测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。DS1822的精度较差为± 2°C 。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小。 DS18B20、 DS1822 的特性 DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。DS18B20的性能是新一代产品中最好的!性能价格比也非常出色! DS1822与 DS18B20软件兼容,是DS18B20的简化版本。省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±2°C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。 继“一线总线”的早期产品后,DS1820开辟了温度传感器技术的新概念。DS18B20和DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。3.3 温度传感器的工作原理
DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s 减为750ms。 DS18B20测温原理:低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振 随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值,即为所测温度。
3.4 DS18B20中的温度传感器对温度的测量
高速暂存存储器由9个字节组成,其分配如表5所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在 高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后。
温度数据值格式
下表为12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0, 这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际 温度。 例如+125℃的数字输出为07D0H,
实际温度=07D0H*0.0625=2000*0.0625=125℃。
例如-55℃的数字输出为FC90H,则应先将11位数据位取反加1得370H(符号位不变,也不作运算), 实际温度=370H*0.0625=880*0.0625=55℃。
可见其中低四位为小数位。
DS18B20温度与表示值对应表
3.5 DS18B20的内部结构
DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如下:
DQ为数字信号输入/输出端;
GND为电源地;
VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
1) 64位的ROM 光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
2) DS18B20温度传感器的存储器
DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。
暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第
六、
七、八个字节用于内部计算。第九个字节是冗余检验字节。
3.6 DS18B20的时序
由于DS18B20采用的是单总线协议方式,即在一根数据线实现数据的双向传输,而对89C51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。
1) DS18B20的复位时序
2)DS18B20的读时序
对于DS18B20的读时序分为读0时序和读1时序两个过程。
对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。
3) DS18B20的写时序
对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。
对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。
4系统框架设计如下图所示:
按照系统设计功能的要求数字温度计总体电路结构框图如下图所示
5硬件设计
温度计采用AT89C51单片机作为微处理器,温度计系统的外围接口电路由晶振、LCD显示电路、复位电路、温度检测电路、LCD驱动电路。
温度计的工作过程是:初始化其接收需要检测的温度,并一直处于检测状态,并将检测到的温度值读取,并转化为十进制数值,通过LCD显示出来,再显示温度,方便用户来读数使用记录数据。
温度计系统的的硬件电路图如下图所示。
DS18B20测温和学号显示
6系统程序的设计
6.1主程序
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值。温度测量每1s进行一次。
主程序流程图如图4.1.1所示。
初始化调用显示子程序1s到?YN初次上电?N读出温度值温度计算处理显示数据刷新Y发温度转换开始命令
主程序流程图
6.2读出温度子程序
读出温度子程序的主要功能是读出RAM中的9字节。在读出时须进行CRC校验,校验有错时不进行温度数据的改写。
读出温度子程序流程图如图4.2所示。
发DS18B20复位信号发跳过ROM命令CRC校验正确?发读取温度命令Y移入温度暂存器读取操作,CRC校验YNN结束9字节完?
6.3温度转换命令子程序
温度转换命令子程序主要是发温度转换开始命令。当采用12位分辨率时,转换时间大约为750ms。在本程序设计中,采用1s显示程序延时法等待转换的完成。 温度转换命令子程序图如图4.3所示。
发DS18B20复位uml发跳过ROM命令发温度转换开始命令
结束
6.4计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值的正负判断。
计算温度子程序流程图如图4.4所示。
开始计算小数位温度BCD值温度零下?N计算整数位温度BCD值Y置“+”标志温度值补码置“—”标志结束
6.5显示数据刷新子程序
显示数据刷新子程序主要是对显示缓冲器中得显示数据进行刷新操作,当最高数据显示位为0时,将符号显示位移入下一位。
显示数据刷新子程序流程图如图4.5所示。
7 设计总结
本设计利用89S51芯片控制温度传感器DS18B52,再辅之以部分外围电路实现对环境温度的控制,性能稳定,精度较高,而且扩展性很强。由于DS18B20支持单总线协议,我们可以将多个DS18B52并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B52通信,占用较少的微处理器的端口就可以实现多点测温监控系统。
我们在老师的指导下完成了基于DS18B20的数字温度计的设计和制作。在进行实验的过程中,我们了解并熟悉DS18B20、AT89C2051以及74LS244的工作原理和性能。并且通过温度计的制作,我们将电子技能实训课堂上学到的知识进行运用,并在实际操作中发现问题,解决问题,更加增加对知识的认识和理解。
第二篇:2011基于18B20温度传感器论文
基于单片机18B20的温度计设计
摘要:文章主要介绍有关18B20温度传感器的应用及有关注意事项,经典接线原理图。 1. 引言:
温度传感器的种类众多,在应用与高精度、高可靠性的场合时DALLAS(达拉斯)公司生产的DS18B20温度传感器当仁不让。超小的体积,超低的硬件开消,抗干扰能力强,精度高,附加功能强,使得DS18B20更受欢迎。对于我们普通的电子爱好者来说,DS18B20的优势更是我们学习单片机技术和开发温度相关的小产品的不二选择。了解其工作原理和应用可以拓宽您对单片机开发的思路。
2. DS18B20的主要特征: * 全数字温度转换及输出。 * 先进的单总线数据通信。 * 最高12位分辨率,精度可达土0.5摄氏度。 * 12位分辨率时的最大工作周期为750毫秒。 * 可选择寄生工作方式。 * 检测温度范围为–55°C ~+125°C (–67°F ~+257°F) * 内置EEPROM,限温报警功能。 * 64位光刻ROM,内置产品序列号,方便多机挂接。 * 多样封装形式,适应不同硬件系统。 3. DS18B20引脚功能:
•GND 电压地 •DQ 单数据总线 •VDD 电源电压
4. DS18B20工作原理及应用:
DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。在讲解其工作流程之前我们有必要了解18B20的内部存储器资源。18B20共有三种形态的存储器资源,它们分别是:
ROM 只读存储器,用于存放DS18B20ID编码,其前8位是单线系列编码(DS18B20的编码是19H),后面48位是芯片唯一的序列号,最后8位是以上56的位的CRC码(冗余校验)。数据在出产时设置不由用户更改。DS18B20共64位ROM。
5. 控制器对18B20操作流程:
1、 复位:首先我们必须对DS18B20芯片进行复位,复位就是由控制器(单片机)给DS18B20单总线至少480uS的低电平信号。当18B20接到此复位信号后则会在15~60uS后回发一个芯片的存在脉冲。
2、 存在脉冲:在复位电平结束之后,控制器应该将数据单总线拉高,以便于在15~60uS后接收存在脉冲,存在脉冲为一个60~240uS的低电平信号。至此,通信双方已经达成了基本的协议,接下来将会是控制器与18B20间的数据通信。如果复位低电平的时间不足或是单总线的电路断路都不会接到存在脉冲,在设计时要注意意外情况的处理。
3、 控制器发送ROM指令:双方打完了招呼之后最要将进行交流了,ROM指令共有5条,每一个工作周期只能发一条,ROM指令分别是读ROM数据、指
定匹配芯片、跳跃ROM、芯片搜索、报警芯片搜索。ROM指令为8位长度,功能是对片内的64位光刻ROM进行操作。其主要目的是为了分辨一条总线上挂接的多个器件并作处理。诚然,单总线上可以同时挂接多个器件,并通过每个器件上所独有的ID号来区别,一般只挂接单个18B20芯片时可以跳过ROM指令(注意:此处指的跳过ROM指令并非不发送ROM指令,而是用特有的一条“跳过指令”)。ROM指令在下文有详细的介绍。
4、 控制器发送存储器操作指令:在ROM指令发送给18B20之后,紧接着(不间断)就是发送存储器操作指令了。操作指令同样为8位,共6条,存储器操作指令分别是写RAM数据、读RAM数据、将RAM数据复制到EEPROM、温度转换、将EEPROM中的报警值复制到RAM、工作方式切换。存储器操作指令的功能是命令18B20作什么样的工作,是芯片控制的关键。
5、 执行或数据读写:一个存储器操作指令结束后则将进行指令执行或数据的读写,这个操作要视存储器操作指令而定。如执行温度转换指令则控制器(单片机)必须等待18B20执行其指令,一般转换时间为500uS。如执行数据读写指令则需要严格遵循18B20的读写时序来操作。数据的读写方法将有下文有详细介绍。 6. DS28B20芯片ROM指令表
Read ROM(读ROM)[33H] (方括号中的为16进制的命令字) Match ROM(指定匹配芯片)[55H] Skip ROM(跳跃ROM指令)[CCH] Search ROM(搜索芯片)[F0H] Alarm Search(报警芯片搜索)[ECH] 7. DS28B20芯片存储器操作指令表:
Write Scratchpad (向RAM中写数据)[4EH] Read Scratchpad (从RAM中读数据)[BEH] Copy Scratchpad (将RAM数据复制到EEPROM中)[48H] Convert T(温度转换)[44H] Recall EEPROM(将EEPROM中的报警值复制到RAM)[B8H] Read Power Supply(工作方式切换)[B4H] 8.写程序注意事项
DS18B20复位及应答关系
每一次通信之前必须进行复位,复位的时间、等待时间、回应时间应严格按时序编程。
DS18B20读写时间隙:
DS18B20的数据读写是通过时间隙处理位和命令字来确认信息交换的。 写时间隙:
写时间隙分为写“0”和写“1”,时序如图7。在写数据时间隙的前15uS总线需要是被控制器拉置低电平,而后则将是芯片对总线数据的采样时间,采样时间在15~60uS,采样时间内如果控制器将总线拉高则表示写“1”,如果控制器将总线拉低则表示写“0”。每一位的发送都应该有一个至少15uS的低电平起始位,随后的数据“0”或“1”应该在45uS内完成。整个位的发送时间应该保持在60~120uS,否则不能保证通信的正常。 读时间隙:
读时间隙时控制时的采样时间应该更加的精确才行,读时间隙时也是必须先由主机产生至少1uS的低电平,表示读时间的起始。随后在总线被释放后的15uS
中DS18B20会发送内部数据位,这时控制如果发现总线为高电平表示读出“1”,如果总线为低电平则表示读出数据“0”。每一位的读取之前都由控制器加一个起始信号。注意:必须在读间隙开始的15uS内读取数据位才可以保证通信的正确。 在通信时是以8位“0”或“1”为一个字节,字节的读或写是从高位开始的,即A7到A0.字节的读写顺序也是如图2自上而下的。
9.接线原理图:
本原理图采用四位数码管显示,低于100度时,首位不显示示例27.5,低于10度时示例为9.0,低于零度时示例为-3.7。
结束语:基于DS18B20温度测量温度准确,接线简单,易于控制,加以扩展可以应用到各种温度控制和监控场合。
参考文献:
DALLAS(达拉斯)公司生产的DS18B20温度传感器文献
程序:
#include
#define uchar unsigned char #define uint unsigned int
sbit sda=P1^7; sbit dian=P0^7;//小数点显示 uint tem;
uchar h; uchar code tabw[4]={0xf7,0xfb,0xfd,0xfe};//位选 uchar code tabs[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};//数码管数据
//
0
4 5 6
8 9
空
- uchar code ditab[16]= {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; //查表显示小数位 ,1/16=0.0625,即当读出数据为3时,3*0.0625=0.1875,读出数据为3时对应1,查表显示1,为4时显2 uchar data temp[2]={0};//高位数据与低位数据暂存 uchar data display[5]={0};//显示缓存
void delay(uchar t)//t为1时延时小于5us { while(t--); } void delay1()//4us {} void delays(uchar m)//1ms { uchar i,j; for(i=0;i
for(j=0;j<110;j++); } void reset()//初始化 { uchar x=1; while(x) {
while(x)
{
sda=1;
sda=0;
delay(50);//延时500us以上
sda=1;
delay(5);//等待15us-60us
x=sda;
}
delay(45);
x=~sda; }
sda=1; } void write_s(uchar temp)//写入一个字节 { uchar i; for(i=0;i<8;i++) {
sda=1;
sda=0;
delay1();
sda=temp&0x01;
delay(6);
temp=temp/2; } sda=1; delay(1); } uchar read_s()//读出一个字节的数据 { uchar m=0,i; for(i=0;i<8;i++) {
sda=1;
m>>=1;
sda=0;
delay1();
sda=1;
delay1();
if(sda)
m=m|0x80;
delay(6); } sda=1; return m; } uint read_1820()//读出温度 { reset(); delay(200); write_s(0xcc);//发送命令
write_s(0x44);//发送转换命令
reset(); delay(1); write_s(0xcc);
write_s(0xbe); temp[0]=read_s(); temp[1]=read_s(); tem=temp[1]; tem<<=8; tem|=temp[0]; return tem; } void scan_led()//数据显示—数码管 { uchar i; for(i=0;i<4;i++) {
P0=tabs[display[i]];
P1=tabw[i];
delays(7);
if(i==1)
dian=0;
P1=tabw[i];
delays(2); } } void convert_t(uint tem)//温度转换{ uchar n=0; if(tem>6348) {
tem=65536-tem;
n=1; } display[4]=tem&0x0f; display[0]=ditab[display[4]];
display[4]=tem>>4;
display[3]=display[4]/100;
display[1]=display[4]%100;
display[2]=display[1]/10;
display[1]=display[1]%10; if(!display[3]) {
display[3]=0x0a; } if(!display[2])
display[2]=0x0a; if(n)
// 取百位数据暂存
// 取后两位数据暂存// 取十位数据暂存
{
n=0;
display[3]=0x0b; } } void main() { delay(0); delay(0); delay(0); P0=0xff; P1=0xff; for(h=0;h<4;h++)//初始化为零
{
display[h]=0; } reset(); write_s(0xcc); write_s(0x44); for(h=0;h<100;h++)//显示0保持
scan_led(); while(1) {
convert_t(read_1820());//读出并处理
scan_led();//显示温度
} }
第三篇:基于AVR的DS18b20程序
//说明:单片机ATmega16的18B20程序。调这个18B20程序问题主要出现在延时部分,即单片机实际输出的延时与设定不符。//后面为别人精确延时,我用自己的单片机通过示波器重新测量实际延时。建议调延时用示波器先看看。我用的晶振12M,但延时根本就与理论不符。其中480us的延时要在480us与960us之间,选取550us比较合适,一般都这么选。 最后一句话:DS18B20的程序很多,模块基本相似,调不出来就是因为延时问题,示波器是必备工具,否则很盲目。
#include
#define uchar unsigned char
#define uchar unsigned char
#define uint unsigned int
//------------------------//
//.....18B20........
void init_1820(void)
{
int Flag_1820Error;
uchar i;
uint j=0;
PORTD|=(1<<7);//PORTC|=(1<<7);
PORTD&=~(1<<7);//PORTC&=~(1<<7);
for(i=0;i<8;i++)delay(180);//delay_60us();//480us以上
PORTD|=(1<<7);//PORTC|=(1<<7);
DDRD&=~(1<<7);//DDRC&=~(1<<7);//
delay(40);//delay_15us();//15~60us
delay(40);//delay_15us();
Flag_1820Error=0;
while(PIND&(1<<7)
{ delay(180);//delay_60us();
j++;
if(j>=18000){Flag_1820Error=1;break;}
}
DDRD|=(1<<7);//DDRC|=(1<<7);//PORTC7 is OUTPUT
PORTD|=(1<<7);//PORTC|=(1<<7);
for(i=0;i<4;i++)delay(180);//delay_60us(); //240us
}
/********************************/
/********************************/
void write_1820(uchar x)
{
uchar m;
for(m=0;m<8;m++)
{
if(x&(1<
{
PORTD&=~(1<<7);//PORTC&=~(1<<7);delay_5us(); //5usPORTD|=(1<<7);//PORTC|=(1<<7); //write"1"delay(40);//delay_15us(); //15~45usdelay(40);//delay_15us();delay(40);//delay_15us();
}
else
{
PORTD&=~(1<<7);//PORTC&=~(1<<7);delay_15us();//15us
delay(40);//delay_15us(); //write"0"delay(40); //delay_15us(); //15~45usdelay(40);//delay_15us();
PORTD|=(1<<7);//PORTC|=(1<<7);
}
PORTD|=(1<<7);// PORTC|=(1<<7);
}
/*******************************/
uchar read_1820(void)
{
uchar temp,k,n;
temp=0;
for(n=0;n<8;n++)
{
PORTD&=~(1<<7);//PORTC&=~(1<<7);
delay(13);//delay_5us();
PORTD|=(1<<7);//PORTC|=(1<<7);
delay(13);//delay_5us();
DDRD&=~(1<<7);//DDRC&=~(1<<7);//"PINC7 is INPUT"k=(PIND&(1<<7));//k=(PINC&(1<<7)); //读数据,从低位开始if(k)
temp|=(1<
else
temp&=~(1<
delay(40);//delay_15us();//45us
delay(40);//delay_15us(); delay(40);//delay_15us();
DDRD|=(1<<7);//DDRC|=(1<<7);//
}
return (temp);
}
/*************************************/
float read_temperature(void)
{
float temp;////////////
uchar teml=0,temh=0;
unsigned long t=0;
init_1820();//复位18b20write_1820(0xcc);// 发出转换命令write_1820(0x44);
//Delay_nms(100);
init_1820();
write_1820(0xcc);//发出读命令write_1820(0xbe);
teml=read_1820();//读数据byte1temh=read_1820();//byte2
t=temh;
t=t<<8; t=t|teml; temp=t*0.0625*260/286; return(temp); /*if(temh&0xf8)sign=0; else sign=1; if(sign==0){temh=255-temh;teml=255-teml;}temh=temh<<4;
temh|=(teml&0xf0)>>4;
}
//再在主程序中调用一下read_temperature(void),读取温度。 teml=teml&0x0f; teml=(teml*10)/16; tempval=temh;e[0]=tempval/100; tempval=temh;e[1]=(tempval/10)%10; tempval=temh;e[2]=tempval%10; tempval=teml;e[3]=tempval;*/
第四篇:第3课 电子温度计---温度传感器 教学设计
《电子温度计---温度传感器》
教材分析
本课内容分为两部分。第一部分是温度传感器以及应用,以多功能电子钟还能显示温度为切入点,引出温度计在日常生活中国的普遍应用,进而认识温度传感器以及典型应用。第二部分介绍湿度传感器及相对湿度,要求了解日常生活中各类环境中适宜的相对湿度范围。本课的核心是温度传感器及其应用。
学情分析
学生对温度的认识有着直接的生活经验,可以安排对电子温度计产品功能的差异性进行适当的探讨。对于湿度传感器,学生理解的不多,主要侧重让学生了解不同环境中较为适宜的相对湿度数据范围。
预设教学目标
1.认知温度传感器极其应用; 2.了解湿度传感器。
教学重点
认知温度传感器极其应用,了解湿度传感器
教学难点
认知温度传感器极其应用,了解湿度传感器
课时安排: 1课时 预设教学过程:
一、导入
同学们,在上节课的学习中,我们了解了红外线传感器,实际上我们生活中这样的传感器还有很多,你知道还有些什么吗?
大家说了很多,今天老师给大家带来了其中一样,大家看看这是什么,你知道它使用的是什么传感器吗? (出示课题:电子温度计——温度传感器)
二、温度传感器
这是在我们生活中常见的电子温度计,它使用的是温度传感器,那么温度传感器是做什么的呢?大家一起看看书上的介绍。能够探测物体温度及其变化并转换成电信号的电子器件叫作温度传感器。
大家思考一下,温度传感器的作用很明显和红外线相同是用来探测温度的,那么它能用在什么方面呢?
小组讨论,并进行汇报
师:温度控制,还有探测环境,在一些环境中也可以搭配红外做报警装置等等。它的用途也是相当广泛的。
三、湿度传感器
在天气预报中,经常会出现温度和湿度的预报,这是因为对种植业来说,湿度和温度同样重要。湿度指的是什么有同学知道吗?
原来我们的空气,是有一定的水汽,水汽的多和少对环境还是很有影响的,这也是很多铁制品,在放置一段时间后,会生锈的原因,那么怎么样的湿度是适宜的呢,我们一起来看看书上的介绍。
学生观察书上的介绍,了解适宜的湿度数据。
温度不控制,对生活的影响大家很容易感受到,那么湿度如果不控制,对我们的生活是否有影响呢?请学生上网搜索相关知识,组内交流,进行汇报。
四、总结
通过今天的学习,我们简单的了解了温度和湿度传感器,相对于温度我们比较熟悉,湿度我们是第一次了解,但大家可以发现,它在我们的生活中,其实也有非常重要的影响。课后希望大家通过自己的观察、调查等相关的途径,更加客观清楚的认识这两种传感器,了解它们的技术应用,在生活实践中体验到它们带给我们的方便和巨大作用。
教后反思:
学生对温度的认识有着直接的生活经验,建议可安排对电子温度计产品功能的差异性进行适当探讨。如电子温度计与电子体温计,虽然名称类似,但应用领域不同,测量范围也有差异。
除了教材上“实践园“提供的实验外,建议增加利用实验器材对常规物品(如木块和铁块)的温度测量对比,并探讨实验结果与生活经验产生冲突的原因。
对于湿度传感器,侧重让学生了解不同环境中较为适宜的相对湿度数据范围。
第五篇:毕业设计(论文)-基于专用温度传感器的温度检测系统
摘 要 在现代工业领域温度检测系统是指用某种方式显示出当前的环境温度。传 统使用PTC或NTC电阻作为温度传感器的方式在使用过程中存在着很多不足之 处比如所采集温度的精度比较低、系统的可靠性差、设计难度较大、整体设计 成本较高等缺点已经无法满足现代工业生产中高精度温度控制的需求。而采用 专用温度传感器则可以在克服以上缺点很大程度上提高温度检测系统的性能。 本文阐述了一个基于专用温度传感器AD590的 高精度温度检测系统的设计
和实现过程。整个设计包括使用AD590的模拟温度采集传感器专用仪表放大 器AD620的信号处理系统由ADC0804构成的模数转换电路采用AT89C52组 成的单片机系统数码管显示系统和整机所需的供电系统。
关键字温度检测系统AD590AT89C52
Ⅰ Abstract The temperature check system in modern industry is that uses some special method to process and display the environmental temperature. Tradition uses PTC or NTC resistance to be using process to there be existing much defects as the temperature sensor way, supposes that what be detected the temperature has a bad accuracy, systematic reliability is bad, has much difficulties to design, and the cost of e ntire system is expensive. To use this method already unable satisfied modern industry produces the need being hit by the high-accuracy temperature under the control. Use the special temperature transducer could improve the systematic function of temperature detecting. This article elaborated the high-accuracy temperature having set forth a because of special temperature transducer AD590 checks the main body of a book systematically designing and realizing process. Entire design is included: Use the AD590 temperature transducer to detect the analog temperature, instrumentation amplifier AD620 signal process system, change the analog signal to digital signal circuit of ADC0804, the AT89C52 MUC system and the power system.
Key wordtemperature check systemAD590AT89C52
Ⅱ 目
录 摘 要.............................................................Ⅰ
Abstract............................................................Ⅱ 目 录.............................................................Ⅲ 1 绪论..............................................................1 1.1简介.......................................................... 2 1.2 温度控制系统的国内外现状......................................2 1.3 温度控制系统方案..............................................2 1.4 论文的主要任务和所做的工作....................................2 2设计方案以及论证.................................................. 4 2.2 温度传感部分..................................................4 2.3 A/D转换部分.................................................. 5 2.4数字显示部分.................................................. 6 3 电路设计......................................................... 8 3.1 硬件电路设计................................................. 8 3.1.1 温度采集电路............................................... 8 3.1.2 AD转换电路................................................. 8 3.1.3 单片机电路.................................................10 3.1.4 显示电路...................................................14 3.1.5 电源电路...................................................16 3.2 软件系统设计.................................................16 3.2.1 主程序设计.................................................16 3.2.2 AD转换程序.................................................17 3.2.3 温度采样...................................................18 3.2.4温度标度转换算法........................................... 19 3.3 特殊元器件介绍.............................................. 22 4 总结.............................................................24 参考文献.........................................................25 附录.............................................................26
1 绪论
1.1 简介 当代社会温度检测系统被广泛应用于社会生产、生活的各个领域。业、环境检测、医疗、家庭等多方面均有应用。同时单片机在电子产品中的应用 已经越来越广泛。
在很多电子产品中也将其用到温度检测和温度控制。目前温度测量系统种类 繁多功能参差不齐。有简单的应用于家庭的如空调电饭煲、太阳能热水器 电冰箱等家用电器的温度进行检测和控制。采用AT89C51单片机来对温度进行 控制不仅具有控制方便、组态简单和灵活性大等优点而且可以大幅度提高被 控温度的技术指标从而能够大大提高产品的质量和数量。单片机以其功能强、 体积小、可靠性高、造价低和开发周期短等优点为自动化和各个测控领域中广
在工 泛应用的器件在日常生活中成为必不可少的器件尤其是在日常生活中发挥的 作用也越来越大。因此单片机对温度的控制问题是一个日常生活中经常会遇到 的问题。
本论文以上述问题为出发点设计实现了温度实时测量、显示、控制系统。 以AD590为采集器AT89S51为处理器空调相应电路为执行器来完成设计任务 提出的温度控制要求。设计过程流畅所设计的电路单元较为合理。该设计在硬 件方案设计单元电路设计元器件选择等方面较有特色。 1.2 温度控制系统的国内外现状 通过网上查询、翻阅图书了解到目前国内外市场以单片机为核心的温度控制
系统很多而且方案灵活且应用面比较广可用于工业上的加热炉、热处理炉、 反应炉在生活当中的应用也比较广泛如热水器室温控制农业中的大棚温 度控制。以上出现的温度控制系统产品根据其系统组成、使用技术、功能特点、 技术指标。选出其中具有代表性的几种如下
1.虚拟仪器温室大棚温度测控系统在农业应用方面虚拟仪器温室大棚温度
测控系统是一种比较智能经济的方案适于大力推广改系统能够对大棚内的 温度进行采集然后再进行比较通过比较对大棚内的温度是否超过温度限制进 行分析如果超过温度限制温度报警系统将进行报警来通知管理人员大棚内 的温度超过限制大棚内的温控系统出现故障从而有利于农作物的生长提高 产量。本系统最大的优点是在一台电脑上可以监测到多个大棚内的温度情况从
而进行控制。该系统LabVIEW虚拟仪器编程通过对前面板的设置来显示温室大 棚内的温度并进行报警进而对大棚内温度进行控制。该系统有单片机温度
传感器串口通信和计算机组成。计算机主要是进行编程对温度进行显示、 报警和控制等温度传感器是对大棚内温度进行测量显示单片机是对温度传 感器进行编程去读温度传感器的温度值并把半温度值通过串口通信送入计算 机串口通信作用是把单片机送来的数据送到计算机里起到传输作用。 2.电烤箱温度控制系统
该方案采用美国TI公司生产的FLASH型超低功耗16位单片机MSP430F123 为核心器件通过热电偶检测系统温度用集成温度传感器AD590作为温度测量 器件利用该芯片内置的比较器完成高精度AD信号采样根据温度的变化情况 通过单片机编写闭环算法从而成功地实现了对温度的测量和自动控制功能。其 测温范围较低,大概在0-250之间具有精度高相应速度快等特点。 3.小型热水锅炉温度控制系统
该设计解决了北方冬季分散取暖采用人工定时烧水供热耗煤量大浪费人
力温度变化大的问题。设计方案硬件方面采用MCS-51系列8031单片机为核心 扩展程序存储器2732 AD590温度检测元件测量环境温度和供水温度ADC0809 进行模数转换同向驱动器740
7、光电耦合器及9103的功放完成对电机的控制。 软件方面建立了供暖系统的控制系统数学模型。本系统硬件电路简单,软件程序 易于实现。它可用于一台或多台小型取暖热水锅炉的温度控制,可使居室温度基 本恒定,节煤,节电,省人力。 1.3 温度控制系统方案 结合本设计的要求和技术指标通过对系统大致程序量的估计和系统工作速
度的估计考虑价格因素。选定AT89S51单片机作为系统的主要控制芯片8 位模数转换器AD0804采用AD509进行温度采集温度设定范围为-10℃~ 45℃ 通过温度采集系统对温度进行采集并作A/D转换再传输给单片机。以空调 机为执行器件通过单片机程序完成对室内温度的控制。 1.4 论文的主要任务和所做的工作 本论文主要是完成一种低成本、低价格、功能齐全、及温度测量、温度显示、 温度控制于一体的单片机温度控制系统的理论设计。包括硬件电路和主要的软件 设计。
研究的关键问题是室温的精确测量温度采集器AD590温度控制电路设 计单片机与A/D转换电路、显示电路以及软件设计。
根据本设计所要完成的任务本论文完成了如下工作 1介绍了研究和设计的背景和意义调查并综述了当前温度控系统市场的国内外 现状
2 提出了符合设计要求的高精度温度控制系统方案并阐述了其工作原理。 3 完成了硬件电路的设计它包括温度采集系统电路包含89S51单片机模数 转换器ADC0804等芯片的接口电路通过AD590实现的温度控制采集电路; 键盘接口和LED显示电路。
4 基本完成了软件部分设计它包括主程序流程图A/D转换子程序显示子程 序主程序清单。 2设计方案以及论证
2.1设计方案 经过查阅国内外相关资料现代工业控制的温度采集系统虽然传感器种类不 同但总体框架比较类似。通过仔细比较绘制出整体框架图如下
2.2 温度传感部分 方案1 基于PTC或NTC电阻的设计
热敏电阻是开发早、种类多、发展较成熟的敏感元器件。热敏电阻由
半导体陶瓷材料组成 利用温度引起电阻变化。若电子和空穴的浓度分别 为n、p迁移率分别为μn、μp则半导体的电导为
σ=qnμn+pμp
因为n、p、μn、μp都是依赖温度T的函数所以电导是温度的函数 因此可由测量电导而推算出温度的高低并能做出电阻-温度特性曲线这 就是半导体热敏电阻的工作原理
热敏电阻包括正温度系数PTC和负温度系数NTC热敏电阻以 及临界温度热敏电阻CTR。
使用热敏电阻设计而成的温度检测系统利用“惠更斯”电桥提取出 温度的变化然后通过高共模抑制比的仪表放大器将信号放大把模拟信 号信号送入模数转换电路进行模拟到数字信号的转变从而将信号送入单 片机进行处理最终由数码管显示出当前的温度值。整体框图如下 但热敏电阻精度、重复性、可靠性较差不适用于检测小于1 ℃的信号而
且线性度很差不能直接用于A/D转换应该用硬件或软件对其进行线性化补偿。
方案2
采用集成温度传感器如常用的AD590和LM35。
AD590是电流型温度传感器。这种器件是以电流作为输出量指示温度其典 型的电流温度敏感度是1μA/K.它是二端器件使用非常方便作为一种高阻电 流源他不需要严格考虑传输线上的电压信号损失噪声干扰问题因此特别适合 作为远距测量或控制用。另外AD590也特别适用于多点温度测量系统而不必 考虑选择开关或CMOS多路转换开关所引起的附加电阻造成的误差。
由于采用了一种独特的电路结构并利用最新的薄膜电阻激光微调技术校 准使得AD590具有很高的精度。并且应用电路简单便于设计。
方案选择选择方案2。理由电路简单稳定可靠无需调试与A/D连接 方便。 2.3 A/D转换部分 模/数转化器是一种将连续的模拟量转化成离散的数字量的一种电路或器件 模拟信号转换为数字信号一般需要经过采样保持和量化编码两个过程。针对不同
的采样对象有不同的A/D转换器ADC可供选择其中有通用的也有专用的。 有些ADC还包含有其他功能在选择ADC器件时需要考虑多种因素除了关键参 数、分辨率和转换速度以外还应考虑其他因素如静态与动态精度、数据接口 类型、控制接口与定时、采样保持性能、基本要求、校准能力、通道数量、功耗、 使用环境要求、封装形式以及与软件有关的问题。ADC按功能划分可分为直接 转换和非直接转换两大类其中非直接转换又有逐次分级转换、积分式转换等类 型。
A/D转换器在实际应用时除了要设计适当的采样/保持电路、基准电路和
多路模拟开关等电路外还应根据实际选择的具体芯片进行模拟信号极性转换等 的设计。
方案1采用分级式转换器这种转换器采用两步或多步进行分辨率的闪烁 式转换进而快速地完成“模拟-数字”信号饿转换同时可以实现较高的分辨 率。例如在利用两步分级完成n位转换的过程中首先完成m位的粗转换然后 使用精度至少为m位的数/模转换器ADC将此结果转换达到1/2的精度并且与 输入信号比较。对此信号用一个k位转换器k+m<=n转换最后将两个输出结 果合并。
方案2采用积分型A/D装换器如ICL7135等。双积分型A/D转换器转换 精度高但是转换速度不太快若用于温度测量不能及时地反应当前温度值 而且多数双击分型A/D转换器其输出端多不是而二进制码而是直接驱动数码管 的。所以若直接将其输出端接I/O接口会给软件设计带来极大的不方便。 方案3采用逐次逼近式转换器对于这种转换方式通常是用一个比较输 入信号与作为基准的n位DAC输出进行比较并进行n次1位转换。这种方法类 似于天平上用二进制砝码称量物质。采用逐次逼近寄存器输入信号仅与最高位 MSB比较确定DAC的最高位DAC满量程的一半。确定后结果0或1 被锁存同时加到DAC上以决定DAC的输出0或1/2。
逐次逼近式A/D转换器如ADC080
4、AD574等其特点是转换速度快精 度也比较高输出为二进制码直接接I/O口软件设计方便。由于ADC0804 设计时考虑到若干种模/数转换技术的优点所以该芯片非常适合于过程控制、 微控制器输入通道的结合口电路、智能仪器和机床控制等应用场合并且价格低 廉降低设计成本。
方案选择选择方案3。理由用ADC0804采样速度快配合温度传感器应 用方便价格低廉降低设计成本。 2.4 数字显示部分 通常用的LED显示器有7段或8段“米”字段之分。这种显示器有共阳极和
共阴极两种。共阴极LED显示器的发光二极管的阴极连接在一起通常此公共阴 极接地。当某个发光二极管的阳极为高电平时发光二极管点亮相应的段被显 示。同样共阳极LED显示器的工作原理也一样。 方案1采用静态显示方式。在这种方式下各位LED显示器的共阳极或 共阴极连接在一起并接地或电源正每位的段选线分别与一8位的锁存器 输出相连各个LED的显示字符一旦确定相应锁存器的输出将维持不变直到 显示另一个字符为止正因为如此静态显示器的亮度都较高。若用I/O口接口 这需要占用N*8位I/O口LED显示器的个数N。这样的话如果显示器的个数 较多那使用的I/O接口就更多因此在显示位数较多的情况下一般都不用静 态显示。
方案2采用动态显示方式。当多位LED显示时通常将所有位的段选线相应 的并联在一起由一个8位I/O口控制形成段选线的多路复用。而各位的共阳 极或共阴极分别有相应的I/O口线控制实现各位的分时选通。其中段选线占用 一个8位I/O口而位选线占用N个I/O口N为LED显示器的个数。由于各 位的段选线并联段码的输出对各位来说都是相同的因此同一时刻如果各 位选线都处于选通状态的话那LED显示器将显示相同的字符。若要各位LED 能显示出与本为相同的字符就必须采用扫描显示方式即在某一时刻只让某 一位的位选线处于选通状态而其他各位的位选线处于关闭状态同时段选线 上输出相应位要显示字符的段码。
方案选择选择方案2。理由非常节约I/O口亮度高节约CPU的使用 率。 3 电路设计
3.1 硬件系统设计 3.1.1 温度采集电路
温度采集系统主要由AD590、AD620组成如图所示 选用温度传感器AD590AD590具有较高精度和重复性重复性优于0.1℃ 其良好的非线形可以保证优于0.1℃的测量精度利用其重复性较好的特点通
过非线形补偿可以达到0.1℃测量精度。由AD590采集到的温度信号通过AD620, 一款低功耗、高进度的仪表放大器进行线性放大在AD620的外部只需要通过 一只电阻即可将放大倍数从1-1000倍进行调整。在本电路系统中我们需要将 输出最大值和最小值调整在0-5V之间便于A/D进行转换以提高温度采集电 路的可靠性。
集成温度传感器的输出形式分为电压输出和电流输出两种。电压输出型的灵 敏度一般为10mV/K温度0℃时输出为0温度25℃时输出为2.982V。电流输 出型的灵敏度为1 μA/K。这样便于A/D转换器采集数据。 3.1.2 AD转换电路 在学习和实验过程当中对于AD转换芯片通常使用美国国家半导体公司
生产的AD0809芯片进行模拟信号到数字信号的转换。AD0809相关资料齐全 使用广泛但是对于本设计略显奢侈AD0809可以同时转换8路模拟输入但 本设计中只需要转换一路模拟输入。因此我放弃使用AD0809转而使用美国 国家半导体公司的同类产品AD0804一款与AD0809同类型的模数转换芯片。 在达到系统要求的同时降低了电路的成本减小了电路的体积简化了电路的 复杂程度。 用单片机控制ADC时多数采用查询和中断控制两种方式。查询法是在单片
机把启动命令送到ADC之后执行别的程序同时对ADC的状态进行查询以检 查ADC变换是否已经完成如查询到变换已结束则读入转换完毕的数据。中断 控制是在启动信号送到ADC之后单片机执行别的程序。当ADC转换结束并向单 片机发出中断请求信号时单片机响应此中断请求进入中断服务程序读入转 换数据并进行必要的数据处理然后返回到原程序。这种方法单片机无需进行 转换时间管理CPU效率高所以特别适合于变换时间较长的ADC。本设计采用 查询方式进行数据收集。由于ADC0804片内无时钟故运用8051提供的地址锁 存使能信号ALE经D触发器二分频后获得时钟。因为ALE信号的频率是单片机时 钟频率的1/6如果时钟频率为6MHz,则ALE信号的频率为1MHz经二分频后为 500kHz与AD0804时钟频率的典型值吻合。由于AD0804具有三态输出锁存器 故其数据输出引角可直接与单片机的总线相连。并将A/D的ALE和START脚连在 一起以实现在锁存通道地址的同时启动ADC0804转换。启动信号由单片机的写 信号和P2.7经或非门而产生。在读取转换结果时用单片机的读信号和P2.7 经或非门加工得到的正脉冲作为OE信号去打开三态输出锁存器。根据所选用的 是查询、中断、等待延时三种方式之一的条件去执行一条输入指令读取A/D 转换结果。
ADC0804是一个8位逐次逼近的A/D转换器。AD0804的转换时间为100μs。 在CPU启动A/D命令后便执行一个固定的延时程序延时时间应略大于A/D 的转换时间延时程序一结束便执行数据读入指令读取转换结果。本设计选 用Motorola公司的基准源TL431产生参考电压2.50V即一位数字量对应10mV 即1℃。所以用起来很方便。具体电路如下
3.1.3 单片机电路 单片微型计算机简称单片机。它在一块芯片上集成了各种功能部件中央处
理器CPU、随机存取存储器RAM、只读存储器ROM、定时器/计数器和各 种输入/输出I/O接口如并行I/O口、串行I/O口和A/D转换器等。它们 之间相互连结构成一个完整的微型计算机。
单片机的发展经历了四个阶段第一阶段19711974年主要是美国INTEL 公司从早先的第一台MCS-4微型计算机到后来功能较强的8位微处理器
Intel8008和FAIRCHILD公司的F8微处理器。这些微处理器虽说还不是单片机 但从此拉开了研制单片机的序幕。第二阶段19741978初级单片机阶段 以INTEL公司的MCS-48为代表。这个系列的单片机内集成有8位CPU并行I/O 口8位定时器/计数器寻址范围不大于4K且无串行口。第三阶段1978 1983高性能单片机阶段。在这一阶段的单片机普遍带有串行口多级中断处 理系统和16位定时器/计数器。片内ROMRAM容量加大且寻址范围可达64K 字节有的片内还带有A/D转换器接口。这类单片机有INTEL公司的MCS-51 MOTOROLA公司的6801和ZILOG公司的Z8等。其中MCS-51系列产品由于其优 良的性能价格比特别适合我国的国情MCS-51系列单片机有可能稳定相当一
段时期。现在国内的MCS-51热正在升温随着我国经济建设步伐的加大MCS-51 系列单片机必将在各个领域大显身手。第四阶段1983现在8位单片机巩 固发展及16位单片机推出阶段。此阶段主要特征是一方面发展16位单片机及专
用单片机另一方面不断完善高档8位单片机改善其结构以满足不同用户的 需要。
MCS-51系列属高档单片机近年来INTEL公司在提高该系列产品性能方面 做了不少工作相继推出了不少新产品8052/8752/80
32、低功耗的CHMOS工艺 芯片80C51/87C51/80C
31、具有高级语言编程的芯片8052AH-BASIC、高性能的 C252系列等。在本次设计中我们采用了MCS -51系列中的89C51来完成产品的CPU 的功能。
89C51是一种带4K字节闪烁可编程可擦除只读存储器FPEROM—Falsh Programmable and Erasable Read Only Memory的低电压高性能CMOS8位微 处理器俗称单片机。89C2051是一种带2K字节闪烁可编程可擦除只读存储器 的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL 高密度非易失存储器制造技术制造与工业标准的MCS-51指令集和输出管脚相 兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中ATMEL的89C51 是一种高效微控制器89C2051是它的一种精简版本。89C单片机为很多嵌入式 控制系统提供了一种灵活性高且价廉的方案。
89C51的主要特性有与MCS-51 兼容4K字节可编程闪烁存储器寿命
1000写/擦循环数据保留时间10年全静态工作0Hz-24Hz三级程序存储 器锁定128*8位内部RAM32可编程I/O线两个16位定时器/计数器5个
中断源可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路。 下面按其引脚功能分为四部分叙述这40条引脚的功能 1 主电源引脚VCC和GND VCC40脚接+5V电压。GND20脚接地。
2 外接晶体引脚XTAL1和XTAL2 XTAL1 和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器 ,就构成了内部
振荡方式。由于单片机内部有一个高增益反相放大器当外接晶振后就构成了 自激振荡器并产生振荡时钟脉冲。
3 控制或与其它电源复用引脚RST/VPD、ALE/PROG、PSEN和EA/VPP RST/VPD当振荡器运行时在此引脚上出现两个机器周期的高电平将使单 片机复位。在此引脚与VSS引脚之间连接一个约10KΩ的下拉电阻与VCC引 脚之间连接一个约10μF的电容可以保证可靠地复位。VCC掉电期间此引脚 可接上备用电源以保持内部RAM的数据不丢失。当VCC主电源下掉到低于 规定的电平而VPD在其规定的电压范围5土0.5V内VPD就向内部RAM 提供备用电源。ALE/PROG当访问外部存储器时ALE允许地址锁存的 输出用于锁存地址的低位字节。即使不访问外部存储器ALE端仍然以不变的 频率周期性地出现正脉冲信号此频率为振荡器频率的1/6。因此它可用作对 外输出的时钟或用于定时目的。然而要注意的是每当访问外部数据存储器时 将跳过一个ALE脉冲。ALE端可以驱动吸收或输出电流8个LS型的TTL 输入电路。对于EPROM型的单片机如8751在EPROM编程期间此引脚 用于输入编程脉冲PROG。PSEN此脚的输出是外部程序存储器的读选通 信号。在从外部程序存储器取令或常数期间每个机器周期两次PSEN有效。
但在此期间每当访问外部数据存储器时这两次有效的PSEN信号将不出现。PSEN同样可以驱动吸收或输出8个LS型的TTL输入。EA/VPP当EA端
保持高电平时访问内部程序存储器但在PC程序计数器值超过0FFFH对 8051/8751/80C51或1FFFH对3052时将自动转向执行外部程序存储器内 的程序。当EA保持低电平时则只访问外部程序存储器不管是否有内部程序 存储器。对于常用的8031来说无内部程序存储器所以EA脚必须常接地 这样才能只选择外部程序存储器。对于EPROM型的单片机如8751在EPROM 编程期间此引脚也用于施加21伏的编程电源VPP。 4 输入/输出I/0引脚P0、P
1、P
2、P3共32根 P0口39脚--32脚是双向8位三态I/O口在外接存储器时与地址总 线的低8位及数据总线复用能以吸收电流的方式驱动8个LS TTL负载。P1 口l脚--8脚是8位准双向I/O口。由于这种接口输出没有高阻状态输入 也不能锁存故不是真正的双向I/O口。能驱动吸收或输出电流4个LS TTL 负载。对80
52、8032 P1.0引脚的第二功能为T2定时/计数器的外部输入P1.1 引脚的第二功能为T2EX捕捉、重装触发即T2的外部控制端。对EPROM编
程和程序验证时它接收低8位地址。P2口21脚--28脚是8位准双向I/O 口。在访问外部存储器时它可以作为扩展电路高8位地址总线送出高8位地址。
在对EPROM编程和程序验证期间它接收高8位地址。P2可以驱动吸收或 输出电流4个LS TTL负载。P3口l0脚--17脚是8位准双向I/O口在 MCS-51中这8个引脚还用于专门功能是复用双功能口。P3能驱动吸收或 输出电流4个LS TTL负载。作为第一功能使用时就作为普通I/O口用功 能和操作方法与P1口相同。作为第二功能使用时各引脚的定义如表3.1所示。 值得强调的是P3口的每一条引脚均可独立定义为第一功能的输入输出或第二 功能。 P3口的第二功能定义 口线
引脚 第二功能 P3.0 10 RXD串行输入口 P3.1 11 TXD串行输入口 P3.2 12 INT0外部中断 0
P3.3 13 1 INT外部中断1 P3.4 14 T0 定时器0外部输入 P3.5 15 T1 定时器1外部输入
P3.6 16 WR外部数据存储器写脉冲
P3.7 17 RD外部数据存储器读脉冲
3.1.4 显示电路
显示电路采用锁存器74HC573和数码管组合的方式进行显示温度数值。 数码管是单片机应用电路中常用的显示器件。每个数码管由8个发光二极管组 成。数码管有共阴极和共阳极两种类型。共阴极数码管内部8个二极管的阴极被 连接在一起和引脚com相接在使用是引脚应接低电平当数码管其余的某个引 脚接高电平则相应的发光二极管被点亮。共阳极数码管com端应接高电平当 数码管其余的某个引脚接低电平则相应的发光二极管被点亮。在使用过冲当中 我们需要在每个数码管的每一位段选上串联电阻限制导通电流来保证发光二极 管不被烧坏。本设计中选用共阳极数码管。 a共阴数码管原理图 b共阳数码管原理图 1 2 3 4 5 6 7a b c d e f g8dp9GND a bf c g d e dp a bf c g d e VCC1 2 3 4 5 6 7a b c d e f g8dp dp9 c共阴数码管电路符号图 d共阳数码管电路符号图 锁存器
74HC573是一款高速低功耗TTL锁存器它能够锁存8位数据最高锁存17ns 变化的数据。本设计中使用一组I/O口用来传送数码管的段选同时使用该组 I/O口的高四位传送位选。这样一来可以大大提高I/O口的使用效率。同时 使用另外两个I/O口控制两个锁存器的锁存端是能段来控制锁存器的工作。 关于74HC573的锁存使用说明如下图
显示总体电路如下
3.1.5 电源电路
一个优秀系统中的电源电路极为重要电源的好坏可以直接影响整机的工 作。本设计中采用线性稳压系统提供信号处理电路所需的正负15V电压和单片 机、数字电路、数码管所需的5V电压。电源系统的设计原理是通过工频变压器 将市电220V 50Hz的交流电变为双13V 50Hz的低压交流电再通过全桥整流变 为脉动的正电压经过电容滤波、7
8、79系列线性稳压芯片稳压最终输出稳 定的+15V、-15V和+5V直流电压供系统相应电路模块使用。 电源部分电路图如下所示
3.2 软件系统设计 本系统的单片机程序使用C语言编写相比汇编语言C语言具有使用灵
活、移植性强、易于上手、方便使用、可完成高级功能等特点。 3.2.1 主程序设计 程序启动后首先清理系统内存然后进行采集并通过A/D转换后传输
到单片机再由单片机控制显示设备显示现在的温度然后系统进入待机状态 等待再次检测温度。
3.2.2 AD转换程序
89S51给出一个脉冲信号启动A/D转换后ADC0809对接受到的模拟信号进 行转换这个转换过程大约需要100μs,系统采用的是固定延时程序所以在预 先设定的延时后89S51直接从ADC0809中读取数据。
主程序开始 采集温度 查询温度 调A/D程序
调显示程序 要控制温度
键盘输入设定值 和设定值比较 启动加热/降温
温度采集和比较 与设定值相等
是 N 否 是
否
3.2.3 温度采样
采样子程序流程图如图所示。
A/D入口 启动
A/D转换 查询EOC 读取转换数据 压缩BCD码 作未压缩处理
整理好的十位和个位 分别存入某地址单元
子程序结果
3.2.4温度标度转换算法
A/D转换器输出的数码虽然代表参数值的大小但是并不代表有量纲的参数
值必须转换成有量纲的数值才能进行显示标度转换有线性转换和非线性转换 两种本设计使用的传感器线性好在测量的量程制内基本能与温度成线性关系。 温度标度转换程序TRAST目的是要把实际采样的二进制值转换的温度值
转换成BCD形式的温度值。对一般的线性仪表来说标度转换公式为 AX=0A+) AA0 mNN NN0 m 0X
式中0A为一次仪表的下限 Am为一次量程仪表的上限为实际测量值工程量为仪表下限所对应的数字量 Nm为仪表上限所应的数字量 NX为测量所得数字量。例如若某热处理仪表量程为200—800℃在某一时刻计算机采样得到的 二进制值U(K)=CDH则相应的温度值为 采样值起始地址送 R0 采样次数送R2 启动AD590 延时
A/D完成 所有采样结束 返回 Y N N AX=0A+) AA0 mNN NN0 m 0X=200+800-200255205=682℃
根据上述算法只要设定热电偶的量程则相应的温度转换子程序TARST
N0 很容易编写只要把这一算式变成程序将A/D转换后经数字滤波处理后的值代 入即可计算出真实的温度值。具体算法如图所示。 保护现场 R0←Am, R1 ←0A 计算 NX-N0 R0←Nm, R1 ←N0 计算 Am-0A 计算) AA0 m/NN0m R0←NX, R1 ←N0 计算 Nm-N0 计算) AA0 mNN NN0 m 0X
R2—0A AX=0A+) AA0 mNN NN0 m 0X
DATA←AX 返 回 3.3 特殊元器件介绍 温度传感器AD590 简介
AD590温度传感器是一种已经IC化的温度传感器它会将温度转换为电流 其规格如下
1、温度每增加1℃它会增加1μA输出电流
2、可测量范围为-55℃至150℃ 3 、供电电压范围为+4V至+30V AD590的输出电流值说明见表。
其输出电流是以绝对温度零度-273℃为基准温度每增加1℃它会增
加1μA输出电流因此在室温25℃时其输出电流Iout=273+25=298μA。 AD590温度与电流的关系 温度与电流的关系 摄氏温度 AD590电流 经10KΩ电压 0℃ 273.2 uA 2.732V 10℃ 283.2 uA 2.832 V 20℃ 293.2 uA 2.932 V 30℃ 303.2 uA 3.032 V 40℃ 313.2 uA 3.132 V 50℃ 323.2 uA 3.232 V 60℃ 333.2 uA 3.332 V 100℃ 373.2 uA 3.732 V 主要特性如下
1 流过器件的电流mA等于器件所处环境的热力学温度开尔文度 数
2AD590的测温范围为-55℃+150℃。
3AD590的电源电压范围为4V30V。电源电压可在4V6V范围变化 电流变化1mA相当于温度变化1℃。AD590可以承受44V正向电压和20V反向 电压因而器件反接也不会被损坏。 4输出电阻为710MΩ。
5精度高。AD590共有I、J、K、L、M五档其中M档精度最高在-55℃ +150℃范围内非线性误差为±0.3℃。 AD590测量热力学温度、摄氏温度、两点温度差、多点最低温度、多点平均
温度的具体电路广泛应用于不同的温度控制场合。由于AD590精度高、价格低、 不需辅助电源、线性好常用于测温和热电偶的冷端补 AD590实际应用电路举例 分析
1AD590的输出电流I=273+TμAT为摄氏温度因此测量的电压 V为273+TμA×10K=2.73+T/100V。为了将电压测量出来又务须使输出 电流I不分流出来我们使用电压跟随器其输出电压V2等于输入电压V。 2由于一般电源供应教多器件之后电源是带杂波的因此我们使用齐 纳二极管作为稳压组件再利用可变电阻分压其输出电压V1需调整至2.73V 3接下来我们使用差动放大器其输出Vo为100K/10K×V2-V1=T/10 如果现在为摄氏28℃输出电压为2.8V输出电压接AD转换器那么AD转换 输出的数字量就和摄氏温度成线形比例关系。
AD590测量热力学温度、摄氏温度、两点温度差、多点最低温度、多点平均
温度的具体电路广泛应用于不同的温度控制场合。由于AD590精度高、价格低、
不需辅助电源、线性好常用于测温和热电偶的冷端补偿。 4 总结 AT89C51单片机体积小重量轻抗干扰能力强对环境要求不高价格
低廉可靠性高灵活性好本文的温度控制系统只是单片机广泛应用于各行 各业中的一例。
设计实现了温度实时测量、显示。本设计温度控制电路具有较高的抗干扰性 实时性方案具有较高的测量精度温度控制实时性更高。在设计过程中首先 在老师的指导下熟悉了系统的工艺进行对象的分析按照要求确定方案。然后 进行硬件和软件的设计。通过设计使我掌握了微型机控制系统I/O接口的使用方 法模拟量输入/输出通道的设计常用显示程序的设计方法数据处理及线性 标度技术基本算法的设计思想。
在做毕业设计之前我对单片机的基本知识了解甚少而C语言虽是接触过 可是没有具体的设计和编辑过所以花了大量的时间去做准备工作。在老师的指 导和帮助下克服了一系列困难终于完成了本设计基于本人能力有限该设计 还有许多不足之处有待改进。
参考文献 [1]钱聪.电子线路分析与设计[M].西安:陕西人民出版社,2000. [2]谈文心,钱聪,宋云娴.模拟集成电路原理与应用[M].西安:西安交通大学出版 社,1994. [3]孙肖子
,邓建国,陈南钱聪.电子设计指南[M].西安:高等教育出版社,2006. [4]HAN Zhi-jun Liu Xin-min.DIGITAL TEMPERATURE SENSOR DS18B20 AND ITS APPLICATION [J]. Nanjing: Journal of Nanjing Institute of Technology(Natural Science Edition).2003 [5]SHEN Li-li,CHEN Zhong-rong. Design of Multi-Channel Test System of Measuring Temperature for Grain Storage Based on CPLD and DS18B20[J].Nanjing: Nanjing University of Information Science & Technology.2008 [6]You Guanjun Hu Yihua Liu Shenlong Zhao Tianxiang. THE CIRCUITRY OF AD590 IC TEMPERATURE SENSOR AND THE APPLICATION IN TEMPERATURE MEASUREMENT AND CONTROL[J].COLLEGE PHYSICAL EXPERIMENT,2000. [7]张国勋. 缩短ICL7135A/D采样程序时间的一种方法[J].电子技术应用 1993第一期. [8]高峰. 单片微型计算机与接口技术[M].北京:科学出版社2003 [9]刘伟,赵骏逸,黄勇. 一种基于C8051单片机的SOC型数据采录的设计与实现 [A].天津:天津市计算机协会单片机分会编 2003 [10]何立民. 单片机高级教程[M].北京:北京航空航天大学出版社,2000 [11]李元. 数字电路与逻辑设计[M].南京:南京大学出版社,1997 [12]苏丽萍. 电子技术基础[M].西安:西安电子科技大学,2006 [13]徐江海. 单片机实用教程[M]:机械工业出版社,2003 [14]谢文和. 传感器技术及其应用[M]:高等教育出版社,2004 [15]孟立凡,蓝金辉. 传感器原理与应用[M].电子工业出版社,2000 [16]江晓安. 模拟电子技术 第二版[M].西安:西安电子科技大学出版社,2004
附录 单片机应用程序 #include #define uchar unsigned char #define uint unsigned int sbit wela=P3^0; sbit dula=P3^1; sbit wr=P3^6; sbit rd=P3^7; sbit cs=P3^5; uchar num; uint a1,b1,c1; uchar table1[]= {0xff,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x86}; uchar table2[]= {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x86}; uchar table3[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x86}; void delay(uint z); uchar ad(); void display(uint,uint,uint); void main() { while(1) { switch(ad()) { case 0x00: a1=0,b1=0,b1=0; break; case 0x01: a1=0,b1=0,c1=3; break; case 0x02: a1=0,b1=0,c1=7; break; case 0x03: a1=0,b1=1,c1=1; break; case 0x04: a1=0,b1=1,c1=5; break; case 0x05: a1=0,b1=1,c1=9; break; case 0x06: a1=0,b1=2,c1=3; break; case 0x07: a1=0,b1=2,c1=7; break; case 0x08: a1=0,b1=3,c1=1; break; case 0x09: a1=0,b1=3,c1=5; break; case 0x0a: a1=0,b1=3,c1=9; break; case 0x0b: a1=0,b1=4,c1=2; break; case 0x0c: a1=0,b1=4,c1=6; break; case 0x0d: a1=0,b1=5,c1=0; break; case 0x0e: a1=0,b1=5,c1=4; break; case 0x0f: a1=0,b1=5,c1=8; break; case 0x10: a1=0,b1=6,c1=2; break; case 0x11: a1=0,b1=6,c1=6; break; case 0x12: a1=0,b1=7,c1=0; break; case 0x13: a1=0,b1=7,c1=4; break; case 0x14: a1=0,b1=7,c1=8; break; case 0x15: a1=0,b1=8,c1=2; break; case 0x16: a1=0,b1=8,c1=5; break; case 0x17: a1=0,b1=8,c1=9; break; case 0x18: a1=0,b1=9,c1=3; break; case 0x19: a1=0,b1=9,c1=7; break; case 0x1a: a1=1,b1=0,c1=1; break; case 0x1b: a1=1,b1=0,c1=5; break; case 0x1c: a1=1,b1=0,c1=9; break; case 0x1d: a1=1,b1=1,c1=3; break; case 0x1e: a1=1,b1=1,c1=7; break; case 0x1f: a1=1,b1=2,c1=1; break; case 0x20: a1=1,b1=2,c1=5; break; case 0x21: a1=1,b1=2,c1=8; break; case 0x22: a1=1,b1=3,c1=2; break; case 0x23: a1=1,b1=3,c1=6; break; case 0x24: a1=1,b1=4,c1=0; break; case 0x25: a1=1,b1=4,c1=4; break; case 0x26: a1=1,b1=4,c1=8; break; case 0x27: a1=1,b1=5,c1=2; break; case 0x28: a1=1,b1=5,c1=6; break; case 0x29: a1=1,b1=6,c1=0; break; case 0x2a: a1=1,b1=6,c1=4; break; case 0x2b: a1=1,b1=6,c1=8; break; case 0x2c: a1=1,b1=7,c1=2; break; case 0x2d: a1=1,b1=7,c1=5; break; case 0x2e: a1=1,b1=7,c1=9; break; case 0x2f: a1=1,b1=8,c1=3; break; case 0x30: a1=1,b1=8,c1=7; break; case 0x31: a1=1,b1=9,c1=1; break; case 0x32: a1=1,b1=9,c1=5; break; case 0x33: a1=1,b1=9,c1=9; break; case 0x34: a1=2,b1=0,c1=3; break; case 0x35: a1=2,b1=0,c1=7; break; case 0x36: a1=2,b1=1,c1=1; break; case 0x37: a1=2,b1=1,c1=4; break; case 0x38: a1=2,b1=1,c1=8; break; case 0x39: a1=2,b1=2,c1=2; break; case 0x3a: a1=2,b1=2,c1=6; break; case 0x3b: a1=2,b1=3,c1=0; break; case 0x3c: a1=2,b1=3,c1=4; break; case 0x3d: a1=2,b1=3,c1=8; break; case 0x3e: a1=2,b1=4,c1=2; break; case 0x3f: a1=2,b1=4,c1=6; break; case 0x40: a1=2,b1=5,c1=0; break; case 0x41: a1=2,b1=5,c1=3; break; case 0x42: a1=2,b1=5,c1=7; break; case 0x43: a1=2,b1=6,c1=1; break; case 0x44: a1=2,b1=6,c1=5; break; case 0x45: a1=2,b1=6,c1=9; break; case 0x46: a1=2,b1=7,c1=3; break; case 0x47: a1=2,b1=7,c1=7; break; case 0x48: a1=2,b1=8,c1=1; break; case 0x49: a1=2,b1=8,c1=5; break; case 0x4a: a1=2,b1=8,c1=9; break; case 0x4b: a1=2,b1=9,c1=3; break; case 0x4c: a1=2,b1=9,c1=6; break; case 0x4d: a1=3,b1=0,c1=0; break; case 0x4e: a1=3,b1=0,c1=4; break; case 0x4f: a1=3,b1=0,c1=8; break; case 0x50: a1=3,b1=1,c1=2; break; case 0x51: a1=3,b1=1,c1=6; break; case 0x52: a1=3,b1=2,c1=0; break; case 0x53: a1=3,b1=2,c1=4; break; case 0x54: a1=3,b1=2,c1=8; break; case 0x55: a1=3,b1=3,c1=2; break; case 0x56: a1=3,b1=3,c1=5; break; case 0x57: a1=3,b1=3,c1=9; break; case 0x58: a1=3,b1=4,c1=3; break; case 0x59: a1=3,b1=4,c1=7; break; case 0x5a: a1=3,b1=5,c1=1; break; case 0x5b: a1=3,b1=5,c1=5; break; case 0x5c: a1=3,b1=5,c1=9; break; case 0x5d: a1=3,b1=6,c1=3; break; case 0x5e: a1=3,b1=6,c1=7; break; case 0x5f: a1=3,b1=7,c1=1; break; case 0x60: a1=3,b1=7,c1=5; break; case 0x61: a1=3,b1=7,c1=8; break; case 0x62: a1=3,b1=8,c1=2; break; case 0x63: a1=3,b1=8,c1=6; break; case 0x64: a1=3,b1=9,c1=0; break; case 0x65: a1=3,b1=9,c1=4; break; case 0x66: a1=3,b1=9,c1=8; break; case 0x67: a1=4,b1=0,c1=2; break; case 0x68: a1=4,b1=0,c1=6; break; case 0x69: a1=4,b1=1,c1=0; break; case 0x6a: a1=4,b1=1,c1=4; break; case 0x6b: a1=4,b1=1,c1=8; break; case 0x6c: a1=4,b1=2,c1=1; break; case 0x6d: a1=4,b1=2,c1=5; break; case 0x6e: a1=4,b1=2,c1=9; break; case 0x6f: a1=4,b1=3,c1=3; break; case 0x70: a1=4,b1=3,c1=7; break; case 0x71: a1=4,b1=4,c1=1; break; case 0x72: a1=4,b1=4,c1=5; break; case 0x73: a1=4,b1=4,c1=9; break; case 0x74: a1=4,b1=5,c1=3; break; case 0x75: a1=4,b1=5,c1=7; break; case 0x76: a1=4,b1=6,c1=0; break; case 0x77: a1=4,b1=6,c1=4; break; case 0x78: a1=4,b1=6,c1=8; break; case 0x79: a1=4,b1=7,c1=2; break; case 0x7a: a1=4,b1=7,c1=6; break; case 0x7b: a1=4,b1=8,c1=0; break; case 0x7c: a1=4,b1=8,c1=4; break; case 0x7d: a1=4,b1=8,c1=8; break; case 0x7e: a1=4,b1=9,c1=2; break; case 0x7f: a1=4,b1=9,c1=6; break; case 0x80: a1=5,b1=0,c1=0; break; case 0x81: a1=5,b1=0,c1=3; break; case 0x82: a1=5,b1=0,c1=7; break; case 0x83: a1=5,b1=1,c1=1; break; case 0x84: a1=5,b1=1,c1=5; break; case 0x85: a1=5,b1=1,c1=9; break; case 0x86: a1=5,b1=2,c1=3; break; case 0x87: a1=5,b1=2,c1=7; break; case 0x88: a1=5,b1=3,c1=1; break; case 0x89: a1=5,b1=3,c1=5; break; case 0x8a: a1=5,b1=3,c1=9; break; case 0x8b: a1=5,b1=4,c1=3; break; case 0x8c: a1=5,b1=4,c1=6; break; case 0x8d: a1=5,b1=5,c1=0; break; case 0x8e: a1=5,b1=5,c1=4; break; case 0x8f: a1=5,b1=5,c1=8; break; case 0x90: a1=5,b1=6,c1=2; break; case 0x91: a1=5,b1=6,c1=6; break; case 0x92: a1=5,b1=7,c1=0; break; case 0x93: a1=5,b1=7,c1=4; break; case 0x94: a1=5,b1=7,c1=8; break; case 0x95: a1=5,b1=8,c1=2; break; case 0x96: a1=5,b1=8,c1=5; break; case 0x97: a1=5,b1=8,c1=9; break; case 0x98: a1=5,b1=9,c1=3; break; case 0x99: a1=5,b1=9,c1=7; break; case 0x9a: a1=6,b1=0,c1=1; break; case 0x9b: a1=6,b1=0,c1=5; break; case 0x9c: a1=6,b1=0,c1=9; break; case 0x9d: a1=6,b1=1,c1=3; break; case 0x9e: a1=6,b1=1,c1=7; break; case 0x9f: a1=6,b1=2,c1=1; break; case 0xa0: a1=6,b1=2,c1=5; break; case 0xa1: a1=6,b1=2,c1=8; break; case 0xa2: a1=6,b1=3,c1=2; break; case 0xa3: a1=6,b1=3,c1=6; break; case 0xa4: a1=6,b1=4,c1=0; break; case 0xa5: a1=6,b1=4,c1=4; break; case 0xa6: a1=6,b1=4,c1=8; break; case 0xa7: a1=6,b1=5,c1=2; break; //65.2 default: a1=7,b1=10,c1=10;break; } display(a1,b1,c1); } }
uchar ad() { cs=1; wr=1; cs=0; wr=0; delay(1); wr=1; cs=1; rd=1; delay(3); cs=0; rd=0; num=P1; delay(1); rd=1; cs=1; delay(50); return num; } void display(uint a,uint b,uint c) { P2=0x00; wela=1; P2=0x80; wela=0; P2=0xff; dula=1; P2=table1[a]; dula=0; delay(10); //第一位 P2=0x00; wela=1; P2=0x40; wela=0; P2=0xff; dula=1; P2=table2[b]; dula=0; delay(10); //第二位 P2=0x00; wela=1; P2=0x20; wela=0; P2=0xff; dula=1; P2=table3[c]; dula=0; delay(10); //第三位 P2=0x00; wela=1; P2=0x10; wela=0; P2=0xff; dula=1; P2=0xc6; dula=0; delay(10); //第四位 P2=0x00; wela=1; P2=0x00; wela=1; delay(10); } void delay(uint z) { uint t1,y; for(t1=z;t1>0;t1--) for(y=10;y>0;y--); }