时供暖最低温度度为0度,安装运行后最低环境温度为多少℃

当前位置: >>
环境温湿度实时测控装置设计
摘 要 单片机成了无处不在的商品,同时带来了社会的发展,使我们的生 活越来越美好,在自动控制和电子测量中,单片机是它们发展的核心, 而单靠单片机的理论远远是不够的,它要硬件和相关的软件相结合, 才能做出完美的产品。温湿度指标是许多工作场合的重要参数,不论 是仓库管理、图书保存还是工业测量与计量检定,都需要符合操作规 定的温湿度环境条件。而温湿度也是最不易保障的指标,针对这一情 况,研制可靠且实用的温湿度控制器显得非常重要。本文介绍的温湿 度实时控制装置可在 0~50℃和 20%~98%rh(相对湿度)的范围内任 意设定温湿度值,其附加的通信接口可方便地实现与计算机的实时通 信,而且便于功能的扩展,可保证温度、湿度满足设计指标。此外, 该装置还可自动控制多个设备的多点时间控制电路,因而具有更广泛 的应用前景。 【关键字】: AT89c51、DS18B20、湿度传感器目摘录要? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????????????????????1第一章 概 况? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2 ???????????????????1.1 设计的依据? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????????????????????2 1.2 功能及应用? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????????????????????2第二章 硬件? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???????????????????32.1 51 系列单片机的概述? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??????????????3 2.2 80c51 系列单片机???? ????? ? ? ? ? ? ? ? ? ? ? ? ? ???? ???????? ????????5 2.3 DS18B20 的用法? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 6 ???????????????????? 2.4 检测电路? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 10 ?????????????????????? 第三章 软件? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 11 ???????????????????3.1 定时及控制电路? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 11 3.2 主程序设计? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 12 3.3 子程序设计? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 18结 束 语? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 27 附 录? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 28 单片机构成的环境温湿度实时测控装置设计 前 言1970 年微处理器研制成功之后, 随着就出现了单片机 (即单片的微型计算机) 。 1971 年美国 Intel 公司生产的 4 位单片机 4004 和 1972 年生产的雏型 8 位单片机 8008,特别是 1976 年 9 月 Intel 公司的 MCS-48 单片机问世以来,在短短的十几 年间,经历了多次更新换代,其发展速度大约每二、三年要更新一代、集成度增 加一倍、功能翻一番。发展速度之快、应用范围之广已达到了惊人的地步。单片 机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管 理及过程控制等领域,大致可分如下几个范畴 1.在智能仪器仪表上的应用 单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优 点,广泛应用于仪器仪表中,结合不同类型的传感器可实现诸如电压、功率、频 率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量 的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化且功能比采用电 子或数字电路更加强大。例如精密的测量设备(功率计,示波器,各种分析仪)。 2.在工业控制中的应用 用单片机可以构成形式多样的控制系统,数据采集系统。例如工厂流水线的智 能化管理,电梯智能化控制、各种报警系统与计算机联网构成二级控制系统。 3.在家用电器中的应用 可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、 电冰箱、空调、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所 不在。 4.在计算机网络和通信领域中的应用 现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在 计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上 都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼 叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信, 无线电对讲机等。 5.单片机在医用设备领域中的应用 单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监 护仪,超声诊断设备及病床呼叫系统等等。此外,单片机在工商,金融,科研、 教育,国防航空航天等领域都有着十分广泛的用途。第一章 方案1.1 开发的依据 本课程开发的意义在于它的硬件成本低,他们之间的相互转换功能相当的简 单,通信接口可方便地实现与计算机的实时通信,而且便于功能的扩展,可保证 温度、湿度满足设计指标。此外,该装置还可自动控制多个设备的多点时间控制 电路,对于我们来说它值得我们去开发。 1.2 功能及应用 本文介绍的温湿度实时控制装置可在0~50℃和20%~98%rh (相对 湿度)的范围内任意设定温湿度值。它的应用十分的广泛:仓库管理、图书保存 还是工业测量与计量检定,都需要符合操作规定的温湿度环境条件。 ●可以实时监测环境温湿度的变化情况,并记录、存储相关数据; ●对环境温湿度的控制可满足设计指标; ●具有多点定时设备控制电路,便于功能扩展; ●设有语音提示功能,可方便地实现仪器操作和工作管理提示; ●配有通信接口,可方便地与计算机进行通信; ●温湿度控制的精度分别为:温度(0~50℃)± 0.5℃;湿度(20%~9 8%rh)± 2%~3%rh。第二章 硬件2.1 单片机概述 自单片机出现至今,单片机技术已走过了近 20 年的发展路程。纵观 20 年来 单片机发展历程可以看出,单片机技术的发展以微处理器(MPU)技术及超大规模 集成电路技术的发展为先导,以广泛的应用领域为前提,表现出较微处理器更具 个性的发展趋势。 单片机长寿命,这里所说的长寿命,一方面指用单片机开发的产品可以稳定可 靠地工作十年、二十年;另一方面是指与微处理器相比的长寿命。随着半导体技 术的飞速发展, MPU 更新换代的速度越来越快, 386、 以 486、 为代表的 MPU, 586 很短的时间内就被淘汰出局,而传统的单片机如 68HC05、8051 等年龄已有 15 岁,产量仍是上升的。这一方面是由于其对相应应用领域的适应性,另一方面是 由于以该类 CPU 为核心,集成以更多 I/O 功能模块的新单片机系列层出不穷。可 以预见,一些成功上市的相对年轻的 CPU 核心,也会随着 I/O 功能模块的不断丰 富,有着相当长的生存周期。新的 CPU 类型的加盟,使单片机队伍不断壮大,给用 户带来了更多的选择余地。 8 位、16 位、32 位单片机共同发展。这是当前单片机技术发展的另一动向。 长期以来,单片机技术的发展是以 8 位机为主的。随着移动通讯、网络技术、多 媒体技术等高科技产品进入家庭,32 位单片机应用得到了长足发展。以 Motorola 68K 为 CPU 的 32 位单片机 97 年的销售量达 8 千万枚。过去认为由于 8 位单片 机功能越来越强,32 位机越来越便宜,使 16 位单片机生存空间有限,而 16 位单 片机的发展无论从品种和产量方面,近年来都有较大幅度的增长。单片机速度越 来越快 MPU 发展中表现出来的速度越来越快是以时钟频率越来越高为标志的。 而单片机则有所不同,为提高单片机抗干扰能力,降低噪声,降低时钟频率而不 牺牲运算速度是单片机技术发展之追求。一些 8051(如图 1)。 单片机兼容厂商改善了单片机的内部时序,在不提高时钟频率的条件下,使运 算速度提高了很多,Motorola 单片机则使用了琐相环技术或内部倍频技术使内部 总线速度大大高于时钟产生器的频率。 68HC08 单片机使用 4.9M 外部振荡器而内 部时钟达 32M,而 M68K 系列 32 位单片机使用 32K 的外部振荡器频率内部时钟 可达 16MHz 以上。低电压与低功耗 自 80 年代中期以来,NMOS 工艺单片机逐 渐被 CMOS 工艺代替, 功耗得以大幅度下降, 随着超大规模集成电路技术由 3μm 工艺发展到 1.5、1.2、0.8、0.5、0.35 近而实现 0.2μm 工艺,全静态设计使时钟 频率从直流到数十兆任选,都使功耗不断下降 。 Motorola 最近推出任选的 M.CORE 可在 1.8V 电压下以 50M/48MIPS 全速工 作,功率约为 20mW。几乎所有的单片机都有 Wait、Stop 等省电运行方式。允 许使用的电源电压范围也越来越宽。一般单片机都能在 3 到 6V 范围内工作,对 电池供电的单片机不再需要对电源采取稳压措施。低电压供电的单片机电源下限 已由 2.7V 降至 2.2V、1.8V。0.9V 供电的单片机已经问世。 图(1) 低噪声与高可靠性技术为提高单片机系统的抗电磁干扰能力, 使产品能适应恶 劣的工作环境,满足电磁兼容性方面更高标准的要求,单片机商家在单片机内部 电路中采取了一些新的技术措施。如美国国家半导体 NS 的 COP8 单片机内部增 加了抗 EMI 电路,增强了“看门狗”的性能。Motorola 也推出了低噪声的 LN 系列 单片机。OTP 与掩膜 OTP 是一次性写入的单片机。过去认为一个单片机产品的 成熟是以投产掩膜型单片机为标志的。由于掩膜需要一定的生产周期,而 OTP 型 单片机价格不断下降,使得近年来直接使用 OTP 完成最终产品制造更为流行。它 较之掩膜具有生产周期短、风险小的特点。 近年来,OTP 型单片机需量大幅度上扬,为适应这种需求许多单片机都采用 了在片编程技术(In System Programming)。未编程的 OTP 芯片可采用裸片 Bonding 技术或表面贴技术,先焊在印刷板上,然后通过单片机上引出的编程线、 串行数据、时钟线等对单片机编程。解决了批量写 OTP 芯片时容易出现的芯片 与写入器接触不好的问题。使 OTP 的裸片得以广泛使用,降低了产品的成本。编 程线与 I/O 线共用,不增加单片机的额外引脚。而一些生产厂商推出的单片机不 再有掩膜型,全部为有 ISP 功能的 OTP。MTP 向 OTP 挑战 MTP 是可多次编程 的意思。一些单片机厂商以 MTP 的性能、OTP 的价位推出他们的单片机,如 ATMEL AVR 单片机,片内采用 FLASH,可多次编程。华邦公司生产的与 8051 兼容的单片机也采用了 MTP 性能,OTP 的价位。这些单片机都使用了 ISP 技术, 等安装。 2.2 51 系列单片机 单片机分为:51 单片机, ARM 单片机 , PIC 单片机 , AVR 单片机。下面要讲的是 51 系列的单片机, MCS-51 的原生产商是 Intel 公司。最早推出 80C51 芯片的。作为 MCS-51 的一部分,按原 MCS-51 芯片的规则命名。例如 80C31、 80C51、87C51 和 89C51,这样我们就可以很容易地认出 80C51 的系列芯片了。最小系统:2.3DS18B20 的用法 这是关于 DS18B20 的读写程序,数据脚 P2.2,晶振 11.0592mhz;温度传感器 18B20 汇编程序,采用器件默认的 12 位转化,最大转化时间 750 微秒;可以将 检测到的温度直接显示到 AT89C51 的两个数码管上;显示温度 00 到 99 度,很 准确无需校正! ORG 0000H;单片机内存分配申明! TEMPER_L EQU 29H;用于保存读出温度的低 8 位 TEMPER_H EQU 28H;用于保存读出温度的高 8 位 FLAG1 EQU 38H;是否检测到 DS18B20 标志位 a_bit equ 20h ;数码管个位数存放内存位置 b_bit equ 21h ;数码管十位数存放内存位置 MAIN: LCALL GET_TEMPER;调用读温度子程序 ;进行温度显示,这里我们考虑用网站提供的两位数码管来显示温度 ;显示范围 00 到 99 度,显示精度为 1 度 ; 因为 12 位转化时每一位的精度为 0.0625 度,我们不要求显示小数所以可以抛弃 29H 的低 4 位 ;将 28H 中的低 4 位移入 29H 中的高 4 位,这样获得一个新字节,这个字节就是实 际测量获得的温度 ;这个转化温度的方法可是我想出来的哦~~非常简洁无需乘于 0.0625 系数 MOV A,29H MOV C,40H;将 28H 中的最低位移入 C RRC A MOV C,41H RRC A MOV C,42H RRC A MOV C,43H RRC A MOV 29H,A LCALL DISPLAY;调用数码管显示子程序 CPL P1.0 AJMP MAIN ; 这是 DS18B20 复位初始化子程序 INIT_1820; SETB P2.2 NOP CLR P2.2 ;主机发出延时 537 微秒的复位低脉冲 MOV R1,#3 TSR1:MOV R0,#107 DJNZ R0,$ DJNZ R1,TSR1 SETB P2.2;然后拉高数据线 NOP NOP NOP MOV R0,#25H TSR2: JNB P2.2,TSR3;等待 DS18B20 回应 DJNZ R0,TSR2 LJMP TSR4 ; 延时 TSR3: SETB FLAG1 : 置标志位,表示 DS1820 存在 CLR P1.7;检查到 DS18B20 就点亮 P1.7LED LJMP TSR5 TSR4: CLR FLAG1 ; 清标志位,表示 DS1820 不存在 CLR P1.1 LJMP TSR7 TSR5: MOV R0,#117 TSR6: DJNZ R0,TSR6 ; 时序要求延时一段时间 TSR7: SETB P2.2 RET ;读出转换后的温度值 GET_TEMPER: SETB P2.2 LCALL INIT_1820;先复位 DS18B20 JB FLAG1,TSS2 CLR P1.2 RET ; 判断 DS1820 是否存在;若 DS18B20 不存在则返回 TSS2: CLR P1.3;DS18B20 已经被检测到!!!!!!!!!!!!!!!!!! MOV A,#0CCH ;跳过 ROM 匹配 LCALL WRITE_1820 MOV A,#44H ; 发出温度转换命令 LCALL WRITE_1820 ; 这里通过调用显示子程序实现延时一段时间, 等待 AD 转换结束 , 位的话 750 12 微秒 LCALL DISPLAY LCALL INIT_1820;准备读温度前先复位 MOV A,#0CCH ; 跳过 ROM 匹配 LCALL WRITE_1820 MOV A,#0BEH ; 发出读温度命令 LCALL WRITE_1820 LCALL READ_18200; 将读出的温度数据保存到 35H/36H CLR P1.4 RET ;写 DS18B20 的子程序(有具体的时序要求) WRITE_1820: MOV R2,#8;一共 8 位数据 CLR C WR1: CLR P2.2 MOV R3,#5 DJNZ R3,$ RRC A MOV P2.2,C MOV R3,#21 DJNZ R3,$ SETB P2.2 NOP DJNZ R2,WR1 SETB P2.2 RET READ_18200: ; 读 DS18B20 的程序,从 DS18B20 中读出两个字节的温度数据 MOV R4,#2 ; 将温度高位和低位从 DS18B20 中读出 MOV R1,#29H ; 低位存入 29H(TEMPER_L),高位存入 28H(TEMPER_H) RE00: MOV R2,#8;数据一共有 8 位 RE01: CLR C SETB P2.2 NOP NOP CLR P2.2 NOPNOP NOP SETB P2.2 MOV R3,#8 RE10: DJNZ R3,RE10 MOV C,P2.2 MOV R3,#21 RE20: DJNZ R3,RE20 RRC A DJNZ R2,RE01 MOV @R1,A DEC R1 DJNZ R4,RE00 RET ;显示子程序 display: mov a,29H;将 29H 中的十六进制数转换成 10 进制 mov b,#10 ;10 进制/10=10 进制 div ab mov b_bit,十位在 a mov a_bit,个位在 b mov dptr,#指定查表启始地址 mov r0,#4 dpl1: mov r1,#250 ;显示 1000 次 dplop: mov a,a_取个位数 MOVC A,@A DPTR ;查个位数的 7 段代码 mov p0,送出个位的 7 段代码 clr p2.7 ;开个位显示 acall d1显示 1ms setb p2.7 mov a,b_取十位数 MOVC A,@A DPTR ;查十位数的 7 段代码 mov p0,送出十位的 7 段代码 clr p2.6 ;开十位显示 acall d1显示 1ms setb p2.6 djnz r1,100 次没完循环 djnz r0,dpl1 ;4 个 100 次没完循环1MS 延时 D1MS: MOV R7,#80 DJNZ R7,$ RET ;实验板上的 7 段数码管 0~9 数字的共阴显示代码 numtab: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH END 2.4 检测电路 (1)温度检测电路 温度检测电路选用dallas公司生产的一线式数字温度传感器ds18b 20作为温度检测器件,该器件只有3个引脚(即电源vdd、地线gnd、数 据线dq),且不需要外部元件,而是共用一条数据线进行通信,使用一根i/ o线通信时,ds18b20的电源电压是以寄生方式供电的,因此,只需将其v dd和gnd端接地即可。该电路的检测温度范围为-55~+125℃;精度 为0.5℃;用9bit数字量来表示温度;每次将温度转换成数字量需200 ms。 笔者采用三块ds18b20来实现对实验室环境温度的检测, 之所以用三块, 是为了更好地保持温度的恒定。 使用时可分别将这三块ds18b20放置在房间 的不同位置。获得温度信息时,先由pic16c73的ra2脚发送一个1m s的复位脉冲, 以使ds18b20复位后将向pic16c73发送一个回应脉 冲,pic16c73接到回应脉冲后将发送读ds1820序列号的读rom 命令,以分别读取三个ds18b20的序列号(每一块ds18b20有唯一的 序列号);然后,pic16c73再发出定位命令以选择在线的ds18b20 并进行温度转换。此时pic16c73的ra1脚应输出一个保持2s以上的 高电平信号来使sk214导通, 从而提供ds18b20在总线供电下进行温度 转换时所需的1ma电流。当温度转换完成后,pic16c73的ra2脚会 发送ds18b20的存储命令,从而完成温度信息数据的转换和读取。 (2)湿度信号的获取采用电容式湿敏传感器作为湿度检测器件。环境湿度与 传感器电容成线性关系,所以可方便地将湿度转换成pic16c73可以接受 的电信号,本例中采用el7556来实现转换。el7556由积分电路、基 准电路、频率转换电路及频率―电压(f/v)转换电路等组成,积分电路及r 1、r2、c1用于产生一定频率的脉冲信号并从5脚送至8脚。调节r2可对 该脉冲信号频率进行调整,从而使湿度传感器的线性和灵敏度处于较好状态;基 准电路和频率转换电路可将湿度传感器的电容变化转换成频率变化,再经频率― 电压转换电路后从9脚输出与频率成线性的电压,然后经c3等滤波后送入pi c16c73的ra0端,再进行a/d转换以将其转换成数字信号。本例中的 湿敏传感器为mxs型电容式湿敏传感器,湿度为76%rh时的电容值为50 0pf,电容相对变化率为+1.7pf/%。当湿度为0%~100%rh时, 9脚输出的相应信号频率为0~1000hz,精度为2%,f/v电路输出的 电压为0~5v。调整时,可先设定湿度为5%rh,然后调节r2,使9脚输 出100mv电压即可。第三章 软 件3.1 定时及控制电路 定时主要用于提前预热仪器设备和定时语音提醒等, 该功能的实现由单片机来 完成。时钟频率选用32.768khz,该频率可使单片机工作在最小功耗状 态并可简化分频、定时程序的编写。可选用看门狗电路来作为定时基准,看门狗 每18ms复位一次可确保时钟的准确及语音电路的播放操作。 控制驱动电路用于保护仪器。各个电磁阀的导通要有一定的时间间隔,本例中 为2分钟。推荐的工作方式为:6:00电磁阀1导通,接通稳压电源;6:02 以后每间隔2分钟接通一个相应设备(应先启动感性及大功率设备)。这样,当 8: 00上班后即可保证有些需要预热1~2小时的仪器设备进入最佳工作状态, 从而提高工作效率,保证计量检定的质量。电器驱动电路控制的设备主要包括空 调机、吹风机、吸湿机、加湿机等,可分别采用过零型固态继电器来控制工作。 为了便于扩展该装置的功能,系统应留有足够的扩展空间。因此,设计时可用p ic16c73的ra3口作控制口, 另外可外扩两片pcf8574以作备用。 该系统最多可控制16个设备以满足不同需要。继电器采用交流固态继电器,其 内部采用光电隔离方式,可有效地避免电磁干扰。当单片机检测到温湿度信号超 过设定值时,将从ra3口发出控制信号,并通过光耦产生大于5ma的触发电 流使固态继电器启动相应的电器工作,从而实现对相应设备的控制。设计时应注 意各个电器不要同时启动以免冲击电网,这部分工作可由软件延时完成。固态继 电器可选择国产的h220d15。 3.2 主程序设计 主程序是控制和管理的核心, 主要完成在系统上电后进行定时器和中断处理操 作的初始化。初始化主要完成对温湿度的设定和检查除定时器t0外的所有中断 禁止,同时断开各电器的电源。初始化完成后,系统将开始正常运行,并进行温 湿度检测、键盘扫描及定时处理等操作。 下面是本文的主程序: #include &reg51.h& //#include&absacc.h& #include &intrins.h& sbit sbit sbit sbit RS = P3^0; RW = P3^1; E = P3^2; PSB = P3^5;//串并口选择 sbit RES = P3^3; bit RD1 ; #define FIRST_ADDR 0 Unsigned char code logo[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07, 0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xF0,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0xF8, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x30, 0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00, 0x00,0x20,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00, 0x00,0x00,0x10,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xC0,0x00,0x00, 0x00,0x00,0x00,0x00,0x10,0x06,0x00,0x00,0x30,0x00,0x00,0x37,0xF8,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x06,0x00,0x01,0x20,0x00,0x00,0x3F, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x06,0x00,0x02,0x60,0x00, 0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x06,0x00,0x16, 0x40,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x06, 0x00,0x24,0x00,0x3F,0x80,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00, 0x3C,0x0F,0x00,0x64,0x01,0xFF,0xF0,0x00,0x00,0x40,0x00,0x00,0x00,0x00, 0x00,0x00,0x3F,0x1F,0x00,0x60,0x0F,0xFF,0xFC,0x00,0x00,0xC0,0x00,0x00, 0x00,0x00,0x00,0x00,0x17,0xBF,0xE0,0x60,0x3F,0xFF,0xFE,0x7F,0xFF,0xC0, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x80,0xFF,0x00,0x3F,0x7F, 0xFF,0xC0,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x7E,0x01,0x81,0xF8,0x00, 0x0F,0x01,0xE0,0x00,0x00,0x00,0x00,0x01,0xE6,0x00,0x00,0x0E,0x03,0x43, 0xEF,0xFC,0x0F,0x80,0xC0,0x00,0x00,0x00,0x00,0x03,0x7F,0x00,0x00,0x0E, 0x03,0x07,0xCF,0xFE,0x0F,0x80,0xC0,0x00,0x00,0x00,0x00,0x06,0x19,0x80, 0x00,0x0E,0x06,0x0F,0xBF,0xFE,0x0F,0x80,0xC0,0x00,0x3F,0x80,0x00,0x06, 0x00,0xC0,0x60,0x0E,0x06,0x1F,0x3F,0xBE,0x0F,0x00,0xC0,0x00,0xFF,0xC0, 0x00,0x04,0x00,0xC0,0x60,0x0E,0x0E,0x3C,0x7F,0x9E,0x0F,0x10,0xC0,0x81, 0x80,0x60,0x01,0x84,0x00,0xC0,0x60,0x0E,0x0C,0x38,0xFF,0xFE,0x1E,0x10, 0xC1,0x83,0x00,0x21,0xC6,0x8C,0x00,0x60,0x38,0x1E,0x18,0x70,0xFF,0xFE, 0x3C,0x30,0xC3,0x0E,0x00,0x63,0x2C,0x8C,0xE0,0x30,0x7F,0x9E,0x18,0x71, //定义字符/汉字显示起始位置 0xFF,0xFC,0x78,0x70,0xC3,0x18,0x00,0x62,0x29,0x8D,0xF8,0x18,0x3E,0xBF, 0x18,0xE1,0xFF,0xFC,0xF0,0x7C,0xC2,0x10,0x01,0xC2,0x25,0xF9,0x1E,0x08, 0x30,0x76,0x18,0xC1,0xFF,0xF1,0xE0,0xEC,0xC0,0x30,0x03,0x02,0x24,0xF9, 0x03,0x8C,0x20,0x66,0x11,0xC0,0xFF,0xE7,0x80,0x82,0x60,0x10,0x02,0x06, 0x64,0x19,0x00,0x84,0x20,0xC6,0x11,0x80,0xFF,0x9F,0x00,0x00,0xF0,0x19, 0xC2,0x06,0x64,0x1F,0x10,0xCC,0x01,0xC4,0x09,0x80,0x7F,0x7C,0x00,0x00, 0xF8,0x0F,0x63,0x06,0x2C,0x1E,0x38,0xC8,0x01,0x84,0x01,0x80,0x00,0xF8, 0x0C,0x00,0xD8,0x00,0x23,0x06,0x38,0x12,0x01,0x98,0x01,0x04,0x01,0x80, 0x07,0xE0,0x18,0x00,0xCC,0x00,0x31,0x03,0x19,0xF6,0x01,0xF0,0x00,0x04, 0x01,0x98,0x7F,0x00,0x30,0x00,0x86,0x00,0x11,0x01,0x18,0x37,0x81,0x80, 0x00,0x04,0x01,0xC7,0xFC,0x00,0xE0,0x00,0x87,0x00,0x19,0x81,0x98,0x1D, 0x9F,0x00,0x00,0x04,0x01,0xC0,0x00,0x01,0x80,0x01,0x83,0x80,0x18,0xF0, 0x98,0x18,0x03,0x00,0x03,0x04,0x00,0xE0,0x00,0x07,0x00,0x01,0x01,0xC0, 0xF8,0xD8,0x98,0xA8,0x03,0x00,0x07,0x04,0x00,0xF0,0x00,0x1E,0x00,0x03, 0x00,0xE0,0xC0,0x08,0x99,0xEF,0x3E,0x00,0x0E,0x04,0x00,0x7C,0x00,0x7C, 0x00,0x06,0x00,0x60,0xC0,0x08,0x99,0x12,0x36,0x00,0x1C,0x04,0x00,0x3F, 0xCF,0xF0,0x00,0x0C,0x00,0x30,0x40,0x0C,0x99,0x10,0x02,0x00,0x3C,0x04, 0x00,0x0F,0xFF,0xC0,0x00,0x38,0x00,0x18,0x7F,0xF8,0xFF,0x18,0x06,0x00, 0x3C,0x04,0x00,0x03,0xFF,0x00,0x00,0x60,0x00,0x00,0x3F,0xF0,0x66,0x1F, 0xFC,0x00,0x3C,0x04,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x3C,0x0C,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x0C,0x00,0x00,0x00,0x00,0x3C,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x0C,0x00,0x00,0x00,0x00, 0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x0C,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x04, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00, }; //延时子程序 void delay(unsigned int t) { unsigned int i,j; for(i=0;i&t;i++) for(j=0;j&10;j++) ; } //测忙 void chk_busy() { RD1=1; delay(5); RS=0; RW=1; E=1; while((P2&0x80)==0x80); E=0; RD1=0; } //读数据 unsigned char lcdrd() { RD1=1; P3=0xFB; _nop_(); E=1; delay(5); i=P2; _nop_(); E=0; } //写数据 void lcdwd(unsigned char dispdata) { chk_busy(); RD1=1; _nop_(); RS=1; RW=0; E=1; P2= delay(5); _nop_(); E=0; _nop_(); P2=0 } //写指令代码 void lcdwc(unsigned char cmdcode) { chk_busy(); RD1=1; _nop_(); RS=0; RW=0; E=1; P2= delay(5); _nop_(); E=0; _nop_(); P2=0 } void Disp_img(unsigned char *img) //图形方式 12864 显示字模 221 横向取 膜 { unsigned char i,j; unsigned int k = 0; lcdwc(0x36); //图形方式 for(i=0;i&32;i++) { lcdwc(0x80+i); lcdwc(0x80); for(j=0;j&16;j++) { lcdwd(img[k++]); } } for(i=0;i&32;i++) { lcdwc(0x80+i); lcdwc(0x88); for(j=0;j&16;j++) { lcdwd(img[k++]); }}} //初始化 void lcdreset() { delay(2000); lcdwc(0x30); lcdwc(0x30); delay(5); lcdwc(0x0c); delay(5); lcdwc(0x01); delay(5); lcdwc(0x06); 指定显示的移位 }//选择基本指令集 //选择 8bit 数据流//开显示(无游标、不反白)//清除显示,并且设定地址指针为 00H//指定在资料的读取及写入时,设定游标的移动方向及void hzkdis(unsigned char code *s) { while(*s&0) { lcdwd(*s); s++; delay(500); } } void hzklib() { lcdwc(0x80+FIRST_ADDR); hzkdis(&少小离家老大回&); lcdwc(0x90+FIRST_ADDR); hzkdis(&乡音无改鬓毛衰。&); lcdwc(0x88+FIRST_ADDR); hzkdis(&儿童相见不相识,&); lcdwc(0x98+FIRST_ADDR); hzkdis(&笑问客从何处来。&); } //整屏显示 //当 ii=0 时显示上面 128×32 //当 ii=8 时显示下面 128×32 void lcdfill(unsigned char disdata) { unsigned char x,y, for(ii=0;ii&9;ii+=8) for(y=0;y&0x20;y++) for(x=0;x&8;x++) { lcdwc(0x36); lcdwc(y+0x80); lcdwc(x+0x80+ii); lcdwc(0x30); lcdwd(disdata); lcdwd(disdata); }} main() { RES=0; _nop_(); RES=1; while(1) { PSB=1 ; RW=0; lcdreset(); lcdwc(0x01); delay(1000); //lcdfill(0xff); delay(6000); //lcdfill(0); lcdwc(0x01); delay(1000); //初始化 LCD 屏 //行地址 //列地址 hzklib(); delay(4000); lcdwc(0x01); delay(1000); Disp_img(logo); //显示湘灵电子 LOGO delay(4000); }} 3.3 子程序设计 温度传感器选用ds1820,其软件的编写相对简单,ds1820输入单片 机的信号为9位数字信号,它不需要进行转换。这里应注意的是,软件控制单片 机向ds1820发送的复位脉冲一定要大于1ms, 否则软件将无法正常运行。 这主要与ds1820的写时间有关,在用软件进行写0之后和写1之前,必须 有800μs的低脉冲,写1后再写1也是如此,否则将出现数据写错误。 #include &reg51.h& #include&intrins.h& #define sbit BUSY1 DQ1 = (DQ1==0) P0^4;unsigned char idata TMP; unsigned char idata TMP_d; void wr_ds18_1(char dat); unsigned char rd_ds18_1(); /***************延时程序,单位 us,大于 10us*************/ void time_delay(unsigned char time) {time=time-10; time=time/6; while(time!=0)time--; } /*****************************************************/ /* reset ds18b20 *//*****************************************************/ void ds_reset_1(void) { unsigned char idata count=0; DQ1=0; time_delay(240); time_delay(240); DQ1=1; } void check_pre_1(void) { while(DQ1); while(~DQ1); time_delay(30);} void read_ROM(void) { ds_reset_1(); check_pre_1(); wr_ds18_1(0x33); for(n=0;n&8;n++){ROM[n]=rd_ds18_1();} } /*****************************************************/ /* Read a bit from 1820 位读取 *//*****************************************************/ bit tmrbit_1(void) { idata char i=0; DQ1=0;_nop_(); DQ1=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); dat = DQ1; time_delay(50); } /*****************************************************/ /* read a bety from ds18b20 字节读取 *//*****************************************************/ unsigned char rd_ds18_1() { unsigned char idata i,j,dat=0; for(i=1;i&=8;i++) { j=tmrbit_1(); dat=(j&&(i-1))| } } /*****************************************************/ /* write a bety from ds18b20 写字节 *//****************************************************/ void wr_ds18_1(char dat) { signed char idata i=0;u for(j=1;j&=8;j++) { testb=dat & 0x01; dat = dat&&1; if(testb) { DQ1=0; _nop_(); _nop_(); DQ1=1; time_delay(60); } else { DQ1=0; time_delay(50); DQ1=1; _nop_(); _nop_();}}} int get_temp_1(void) { unsigned char idata a=0,b=0; u EA=0; ds_reset_1(); check_pre_1(); wr_ds18_1(0xcc); wr_ds18_1(0x44); while(BUSY1); ds_reset_1(); check_pre_1(); wr_ds18_1(0xcc); wr_ds18_1(0xbe); a=rd_ds18_1(); b=rd_ds18_1(); i=b; /*若 b 为 1 则为负温 */i=(i&&4); if(i==0) { f=0; TMP=((a&&4)|(b&&4)); a=(a&0x0f); if (a&8) { else { TMP=(TMP+1);}} f=1; a=a&&4; b=b&&4; TMP=(a|b); TMP=~TMP; TMP=(TMP+1); } EA=1; return(TMP); } int get_temp_d(void) { unsigned char idata a=0,b=0; unsigned char idata i,m; EA=0; ds_reset_1();//复位 check_pre_1(); wr_ds18_1(0xcc); wr_ds18_1(0x44); while(BUSY1); ds_reset_1(); check_pre_1(); wr_ds18_1(0xcc); wr_ds18_1(0xbe); a=rd_ds18_1(); b=rd_ds18_1(); i=b; /*若 b 为 1 则为负温 */i=(i&&4); if(i==0) { f=0; TMP=((a&&4)|(b&&4)); a=(a&0x0f); TMP_d=a; } else { f=1; a=~a; a=(a+1); b=~b; b=(b+1); m=a; a=a&&4; b=b&&4; TMP=(a|b); m=(m&0x0f); TMP_d=m; } EA=1; return(TMP); 结 束 语通过本次设计使我认识并了解了基本的设计开发过程,在这个过程中,我的老 师与同学们给了我很多的启示与帮助,而且我觉得对以前不了解的单片机知识有 了一个更高更深的认识。我相信我所学的知识在以后的工作学习中会起到很大的 作用。
更多搜索:
All rights reserved Powered by
文档资料库内容来自网络,如有侵犯请联系客服。}

我要回帖

更多关于 上海最低温度 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信