课程设计(论文)基于AT89C51单片机的测温系统_第1页
课程设计(论文)基于AT89C51单片机的测温系统_第2页
课程设计(论文)基于AT89C51单片机的测温系统_第3页
课程设计(论文)基于AT89C51单片机的测温系统_第4页
课程设计(论文)基于AT89C51单片机的测温系统_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录 引言-1 设计目的-1 设计背景-1 1 设计方案-2 1.1 度计软件设计流程图 -2 1.2 元器件的选取: -2 1.3 系统仿真图 -2 2 设计框图-3 2.1 硬件电路框图: -3 2.2 硬件电路概述: -3 2.3 显示电路 -3 2.4 温度传感器 ds18b20-4 3 软件设计-8 3.1 主程序 -8 3.2 读出温度子程序 -9 3.3 计算温度子程序 -10 3.4 显示数据刷新子程序 -10 3.5 1602 的液晶显示程序设计 -10 3.6 proteus程序设计 -11 4 总结与体会 -12 参考文献 -13 附录 1 -14 附录 2 -15 附录

2、 3 -16 引言引言 设计目的 本文主要介绍了一个基于 at89c51 单片机的测温系统,详细描述了利用数 字温度传感器 ds18b20 开发测温系统的过程,重点对传感器在单片机喜爱的硬 件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也进 行一一介绍,该系统可以方便的是实现温度采集和显示。可满足以下要求: (1) 能够测量的温度范围是-50c 到+110c。 (2) 测量误差在0.5c 之内。 (3) 在 proteus 软件上进行仿真,修改。 设计背景 随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研, 各个领域,已经成为一种比较成熟的技术,本文将介绍一种基

3、于单片机控制的数 字温度计,本温度计属于简易温度计,只提供了温度的测量及 lcd1602 液晶显 示功能。 本设计使用起来方便,具有精度高、量程宽、灵敏度高、体积小、功耗低 等优点,适合我们日常生活和工农业生产中的温度测量,也可以当做温度处理 模块嵌入其他系统中,作为其他主系统的辅助扩展。ds18b20 和 at89c51 结 合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合与恶劣环境 下进行现场温度测量,有广泛的应用前景。 本设计首先是确定目标,然后是各个功能模块的设计,还在 proteus 软件上 进行仿真,修改,仿真。 本设计思路简洁明了,分块化模式使得程序灵活性大大增强。通过

4、本次设 计,是我们所学的知识得以实践的验证,对将来顺利走向工作岗位或者科研事 业将发挥重要意义。 1 设计方案 1.1 度计软件设计流程图 温度计软件设计流程图见附录 1.1:温度计软件设计流程图 1.2 元器件的选取: 1.单片机芯片的选取: at89c51 单片机片内程序存储器采用闪存,使程序的写入更加方便,整个 硬件电路的体积更小,管脚数目为 40 个。本课设中单片机芯片正是采用 at89c51。 2.温度传感器的选取: 采用 ds18b20 温度传感器。ds18b20 的内部 3 脚(或 8 脚)封装;使用特 有的温度测量技术,将被测温度转换成数值信号;3.05.5v 的电源供电方式

5、和寄生电源供电方式;rom 由 64 位二进制数字组成,共分为 8 个字节;ram 由 9 个字节的高速暂存器和非易失性电擦写 rom 组成。 3.本设计显示电路采用 1602 液晶显示模块芯片。 综上各方案所述,对此次课设的方案选定: 采用 at89c51 作为主控制系统; 1602 液晶显示模块芯片作为温度数据显示装置;而智能温度传感器 ds18b20 器 件作为测温电路主要组成部分。至此,系统最终方案确定。 1.3 系统仿真图 系统仿真连线图见附录 2.1。连线比较简洁,简易温度计操作简单,可以 直接用来上电读取温度。 2 设计框图 温度计电路设计总体设计方框图如图 2.1 所示,控制器

6、采用单片机 at89c51,温度传感器采用 ds18b20,用 1602 液晶显示屏以串口传送数据实 现温度显示。 2.1 硬件电路框图: 晶振控制1602 显示器 温度检测电路 ds18b20 图2.1总体设计方框图 2.2 硬件电路概述: 本电路是由 at89c2051 单片机为控制核心,具有与 mcs-51 系列单片机完全 兼容,程序加密等功能,带 2kb 字节可编程闪存,工作电压范围为 2.76v, 全静态工作频率为 024mhz;显示电路由 1602 液晶显示模块芯片,可以进行 多行显示;温度报警按键设为五个,可以显示华氏温度,调节高低报警温度; 温度传感器电路主要由 ds18b20

7、 测温器件构成,该器件主要功能有:采用单总 线技术;每只 ds18b20 具有一个独立的不可修改的 64 位序列号;低压供电,电 源范围为 35v;测温范围为-20+125,误差为0.5;复位电路是 10k 电阻构成的上电自动复位。 2.3 显示电路 本设计显示电路采用 1602 液晶显示模块芯片,该芯片可现实 16x2 个字符, 比以前的七段数码管 led 显示器在显示字符的数量上要多得多。另外,由于 1602 芯片编程比较简单,界面直观,因此更加易于使用者的操作和观测。 1602a 芯片的接口信号说明如下表: 单片机芯片 at89c51 表2.1:1602a芯片的接口信号说明 引脚号引脚名

8、电平输入/输出作用 1vss 电源地 2vcc 电源(+5v) 3vee 对比调整电压 4rs0/1 输入0=输入指令 1=输入数据 5r/w0/1 输入 0=向 lcd 写入指令或数据 1=从 lcd 读取数据 4e 1,下降沿(1 到 0) 输入 使能信号,1 时读取数据, 下降沿时执行指令 图2.2 液晶显示 2.4 温度传感器 ds18b20 ds18b20 温度传感器是美国 dallas 半导体公司最新推出的一种改进型智能 温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并 且可根据实际要求通过简单的编程实现 9-12 位的数字值读数方式。ds18b20 的 性能特

9、点如下: (1)独特的单线接口仅需要一个端口引脚进行通信,ds18b20在与微处理 器连接时仅需要一条口线即可实现微处理器与ds18b20的双向通讯。 (2)ds18b20 支持多点组网功能,多个 ds18b20 可以并联在惟一的三线上, 实现多点组网测温; (3)无须外部器件,全部传感元件及转换电路集成在形如一只三极管的集 成电路内; (4)可通过数据线供电,电压范围为 3.0-5.5; (5)零待机功耗; (6)温度以9或12位数字,对应的可分辨温度分别为0.5、0.25、 0.125和0.0625,可实现高精度测温; (7)用户可定义报警设置; (8)报警搜索命令识别并标志超过程序限定温

10、度(温度报警条件)的器件; (9)负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正 常工作; (10)测量结果直接输出数字温度信号,以一线总线串行传送给cpu,同 时可传送crc校验码,具有极强的抗干扰纠错能力 ds18b20 采用 3 脚 pr35 封装或 8 脚 soic 封装,其引脚排列及内部结构 框图如图及测温原理图如下所示: 图2.3 引脚排列 预置斜率累加器 比较低温度系数振荡器计数器 1 温度寄存器 tx 预置 =0高温度系数振荡器 -0计数器 2 t1 加 1 停止 t2 图2.4 ds18b20测温原理图 64 位 rom 的结构开始 8 位是产品类型的编号,接着

11、是每个器件的惟一的序 号,共有 48 位,最后 8 位是前面 56 位的 crc 检验码,这也是多个 ds18b20 可 以采用一线进行通信的原因。温度报警触发器 th 和 tl,可通过软件写入户报 警上下限。 ds18b20 温度传感器的内部存储器还包括一个高速暂存 ram 和一个非易失性的 ds18b20 123 gndi/ovcc 可电擦除的 eeram。高速暂存 ram 的结构为 8 字节的存储器,结构如图 2.6 所 示。 图 2.6 高速暂存 ram (1) 、温度 lsb,温度 msb:字节包含测得的温度信息 (2) 、第 3 和第 4 字节 th 和 tl 的拷贝,是易失的,每

12、次上电复位时被刷新 (3) 、最后 8 位是前面 56 位的 crc 检验码 (4) 、第 5 个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨 率。 该字节各位的定义如图 2.7 所示。 图 2.7 ds18b20 的字节定义 ds18b20 工作时寄存器中的分辨率转换为相应精度的温度数值。低 5 位一 直为 1,tm 是工作模式位,用于设置 ds18b20 在工作模式还是在测试模式, ds18b20 出厂时该位被设置为 0,用户不要去改动,r1 和 r0 决定温度转换的精 度位数,来设置分辨率。 ds18b20 的分辨率定义如表 2.2 所示 表 2.2 分辨率设置表 r0r1

13、分辨率最大温度转移时间 00 9 位 96.75ms 01 10 位 187.5ms 10 11 位 375ms 11 12 位 750ms 由表 1 可见,ds18b20 温度转换的时间比较长,而且分辨率越高,所需要的 温度 lsb 温度 msb th 用户字节 1 tl 用户字节 2 配置寄存器 保留 保留 保留 crc tmr1r011111 温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。 主机控制 ds18b20 完成温度转换过程是:每一次读写之前都要对 ds18b20 进行 复位,即将数据总线下拉 500us,然后释放,ds18b20 收到信号后等待 16-6

14、0us 左右,之后发出 60-240us 的存在低脉冲,主 cpu 收到此此信号表示复位成功; 复位成功后发送一条 rom 指令,然后发送 ram 指令,这样才能对 ds18b20 进行 预订的读写操作。 表 2 rom 指令集 指令约定代码功能 读 rom 33h 读 ds18b20 中的编码 符合 rom 55h 发出此命令后,接着发出 64 位 rom 编码,访问单线总线上与该 编辑相对应的 ds18b20 使之做出响应,为下一步对该 ds18b20 的读写作准备 搜索 rom 0f0h 用于确定挂接在同一总线上的 ds18b20 个数和识别 64 位 rom 地 址,为操作各器件作准备

15、 跳过 rom 0cch 忽略 64 位 rom 地址,直接向 ds18b20 发送温度变换指令 告警搜索 命令 0ech 执行后,只有温度跳过设定值上限或下限的片子才能做出反应 表 3 ram 指令集 指令约定代码功能 温度转换 44h 启动 ds18b20 进行温度转换 读暂存器 0beh 读暂存器 9 个字节内容 写暂存器 4eh 将数据写入暂存器的 th、tl 字节 复制暂存器 48h 把暂存器的 th、tl 字节写到 e2ram 中 重调 e2ram 0b8h 把 e2ram 中的 th、tl 字节写到暂存器 th、tl 字节 读供电方式 0b4h 启动 ds18b20 发送电源供电

16、方式的信号给主 cpu ds18b20 的测温原理:器件中低温度系数晶振的振荡频率受温度的影响很小, 用于产生固定频率的脉冲信号送给减法计数器 1;高温度系数晶振随温度变化 其振荡频率明显改变,所产生的信号作为减法计数器 2 的脉冲输入。器件中还 有一个计数门,当计数门打开时,ds18b20 就对低温度系数振荡器产生的时钟 脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决 定,每次测量前,首先将最低温所对应的一个基数分别置入减法计数器 1、温 度寄存器中,计数器 1 和温度寄存器被预置在最低温所对应的一个基数值。 减法计数器 1 对低温度系数晶振产生的脉冲信号进行减法计数,

17、当减法计数器 1 的预置值减到 0 时,温度寄存器的值将加 1,减法计数器 1 的预置将重新被装 入,减法计数器 1 重新开始对低温度系数晶振产生的脉冲信号进行计数,如此 循环直到减法计数器计数到 0 时,停止温度寄存器的累加,此时温度寄存器中 的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门 仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。 3 软件设计 整个系统是由硬件配合软件来实现的,在硬件确定后,编写的软件的功能 也就基本定型了。所以软件的功能大致可分为两个部分:一是监控,这也是系 统的核心部分,二是执行部分,完成各个具体的功能。 系统程序主要包括主程序,读

18、出温度子程序,温度转换命令子程序,计算 温度子程序,显示数据刷新子程序等。 3.1 主程序 主程序的主要功能是负责温度的实时显示、读出并处理 ds18b20 的测量的 当前温度值,温度测量每 1s 进行一次。这样可以在一秒之内测量一次被测温度, 其程序流程见图 3.1 所示。 图 3.1 主程序流程图 初始化 调用显示子程序 1s 到? 初次上电 读出温度值温度 计算处理显示数 据刷新 发温度转换开始命令 n y n y y 发 ds18b20 复位命令 发跳过 rom 命令 发读取温度命令 读取操作,crc 校验 9 字节完? crc 校验正? 确? 移入温度暂存器 结束 n n y 发 d

19、s18b20 复位命令 发跳过 rom 命令 发温度转换开始命令 结束 图 3.2 读温度流程图 主程序如下,它包含和编程的准备工作和调用子程序功能。这种模块化编 成结构对于程序的移植再用提供了很大的方便。 只要我们提供相应的子程序,系统就可以算作是完成了。下面我们重点分 析几个比较重要的子程序编程: (1)ds18b20 复位子程序(初始化) 这段程序算是必要的准备工作之一。 (2)ds18b20 数据读取操作子程序 其流程图如图 3.2 所示。 (3)温度值 bcd 码处理子程序 这部分比较重要,很核心,是处理数据的关键部分。它把各个数据位进行了分 离,只要经过二-十进制转换子程序便可用于

20、数据显示。流程如图 3.4,图 3.3 所 示。 (4)bcd 码温度值刷新子程序 流程图如图 3.5 所示。 3.2 读出温度子程序读出温度子程序 读出温度子程序的主要功能是读出 ram 中的 9 字节,在读出时需进行 crc 校验,校验有错时不进行温度数据的改写。温度转换命令子程序流程图如 图 3.3 所示: 图 3.3 温度转换流程图 图 3.4 温度流程图 图 3.5 示数据刷新流程图 3.3 计算温度子程序 计算温度子程序将 ram 中读取值进行 bcd 码的转换运算,并进行温度值正 负的判定,其程序流程图如图 3.4 所示。 3.4 显示数据刷新子程序 显示数据刷新子程序主要是对显

21、示缓冲器中的显示数据进行刷新操作,当 最高显示位为 0 时将符号显示位移入下一位。程序流程图如图 3.5 所示。 3.5 1602 的液晶显示程序设计 液晶显示流程如图 3.6 所示。温度值显示程序如下: 开始 温度零下? 温度值补码置“”标 志 计算小数位温度 bcd 值 计算整数位温度 bcd 值 结束 置“+”标 志 n y 温度数据移入显示寄 存器 十位数 0? 百位数 0? 十位数显示符号 百位数不显示 百位数显示数 据 结束 n n y y 初始化 1602 开 始 延时 调用子程序设置第一行 显示位置与内容 调用子程序设置第二行显 示位置与内容 图 3.6 1602 液晶显示流程

22、图 3.6 proteusproteus 程序设计 本设计是在 proteus 环境下进行仿真的,仿真所用到的器件有:单片机 at89c51,ds1820 温度传感器,液晶显示器,一些电阻,电容等。 仿真结果见附录 2:系统原理图。 4 总结与体会 经过这一周的单片机课程设计,我们完成了数字温度计的设计,虽然还有 很多不足与欠缺之处,但感觉自己还是取得了很大进步。从没有尝试读写这么 长的程序,应该说这是自己学习单片机以来第一次具有现实意义的尝试吧! 在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但 这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计, 需要有很巧

23、妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并 不是一件简单的事,举个例子,以前写的那几次,数据加减时,我用的都是 bcd 码,这一次,我全部用的都是 16 进制的数直接加减,显示处理时在用除法 去删分,感觉效果比较好,有好多的东西,只有我们去试着做了,才能真正的掌 握,只学习理论有些东西是很难理解的,更谈不上掌握。 从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联 系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序 只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收 获。通过这次对数字温度计的设计与制作,让我了解了设计电路的程序

24、,也让 我了解了关于数字温度计的原理与设计理念,要设计一个电路总要先用仿真仿 真成功之后才实际接线的。但是最后的成品却不一定与仿真时完全一样,因为, 再实际接线中有着各种各样的条件制约着。而且,在仿真中无法成功的电路接 法,在实际中因为芯片本身的特性而能够成功。所以,在设计时应考虑两者的 差异,从中找出最适合的设计方法。 通过这次学习,让我对汇编语句有了更深的了解,也相信这对自己以后的 工作学习都有很大意义。会以此为契机,不断开发自己创造能力,开发自己对 软件硬件设计的兴趣,力争做一个身怀技能的人。 参考文献 1肖看,李群芳. .单片机原理、接口及应用. .清华大学出版社,2010.9 2楼然

25、苗. .单片机课程设计指导. .北京:北京航空航天大学出版社,2002 3阎石. .数字电子技术基础(第三版). . 北京:高等教育出版社,1989 4孙育才主编.mcs-51 系列单片微型计算机及其应用.东南大学出版社 5张毅刚单片机原理与应用设计m.电子工业出版社,2008 年 设置堆栈指针 将温度转换为 bcd 码 发读存储器命令 读温度数据 复位 ds18b20 发跳过 rom 命令 显示缓冲区初始化 更新数据缓冲区 延时 发温度转换命令 复位 ds18b20 发跳过 rom 命 令 开始 附录 1 附录图 1.1 温度计软件设计流程图 附录 2 附录图 2.1:proteus 仿真系

26、统图 附录图 2.2:proteus 仿真系统结果图 附录 3 简易温度计完整程序:(模块化设计) temp_zh equ 24h ;实测温度值存放单元 templ equ 25h temph equ 26h temphc equ 29h ;正、负温度值标记 templc equ 2ah tempfc equ 2bh sit_x equ 2fh ;lcd 字符显示位置 rs equ p2.0 ;lcd 寄存器选择信号 rw equ p2.1 ;lcd 读写信号 en equ p2.2 ;lcd 允许信号 dq equ p3.3 ;ds18b20 数据信号 org 0000h main: mov

27、 sp,#50h mov a,#00h mov r0,#20h ;将 20h2fh 单元清零 mov r1,#10h clear: mov r0,a inc r0 djnz r1,clear lcall set_lcd start: lcall rst ;调用 18b20 复位子程序 lcall menu_ok;ds1820 存在,调用显示正确信息子程序 lcall temp_bj ;显示温度标记 jmp start2 start2: lcall rst;调用 ds18b20 复位子程序 mov a,#0cch ;跳过 rom 匹配命令 lcall write mov a,#44h ;温度转换

28、命令 lcall write lcall rst mov a,#0cch ;跳过 rom 匹配 lcall write mov a,#0beh ;读温度命令 lcall write lcall read;调用 ds18b20 数据读取操作子程序 lcall convtemp;调用温度数据 bcd 码处理子程序 lcall dispbcd;调用温度数据显示子程序 lcall conv;调用 lcd 显示处理子程序 sjmp start2 ;循环 ;. 显示温度标记子程序 . temp_bj: mov a,#0cbh lcall wcom mov dptr,#bj1 ;指针指到显示消息 mov r

29、1,#0 mov r0,#2 bbjj1: mov a,r1 movc a,a+dptr lcall wdata inc r1 djnz r0,bbjj1 ret bj1: db 00h,c ;. 显示正确信息子程序. menu_ok: mov dptr,#m_ok1 ;指针指到显示消息 mov a,#1 ;显示在第一行 lcall lcd_print mov dptr,#m_ok2 ;指针指到显示消息 mov a,#2 ;显示在第一行 lcall lcd_print ret m_ok1: db 4090208315 ,0 m_ok2: db temp: ,0 ;.ds18b20 复位子程序(

30、初始化). rst: setb dq nop clr dq mov r0,#6bh ;主机发出延时复位低脉冲 mov r1,#04h tsr1: djnz r0,$ mov r0,#6bh djnz r1,tsr1 setb dq ;拉高数据线 nop nop nop tsr5: mov r0,#06bh tsr6: djnz r0,$ ; 时序要求延时一段时间 tsr7: setb dq ret ;. 将自定义字符写入 lcd 的 cgram 中. store_data: mov a,#40h lcall wcom mov r2,#08h mov dptr,#d_data mov r3,#0

31、0h s_data: mov a,r3 movc a,a+dptr lcall wdata ;写入数据 inc r3 djnz r2,s_data ret d_data: db 0ch,12h,12h,0ch,00h,00h,00h,00h ;. ds18b20 数据写入操作子程序. write: mov r2,#8 ;一共 8 位数据 clr c wr1: clr dq ;开始写入 ds18b20 总线要处于复位(低) 状态 mov r3,#07 djnz r3,$ ;总线复位保持 16 微妙以上 rrc a ;把一个字节 data 分成 8 个 bit 环移给 c mov dq,c ;写入

32、一位 mov r3,#3ch djnz r3,$ ;等待 100 微妙 setb dq ;重新释放总线 nop djnz r2,wr1 ;写入下一位 setb dq ret ;. ds18b20 数据读取操作子程序 . read: mov r4,#4 ;将温度低位、高位、th、tl 从 ds18b20 中 读出 mov r1,#templ ;存入 25h、26h、27h、28h 单元 re00: mov r2,#8 re01: clr cy setb dq nop nop clr dq ;读前总线保持为低 nop nop nop setb dq ;开始读总线释放 mov r3,#09 ;延时

33、18 微妙 djnz r3,$ mov c,dq ;从 ds18b20 总线读得一位 mov r3,#3ch djnz r3,$ ;等待 100 微妙 rrc a ;把读得的位值环移给 a djnz r2,re01 ;读下一位 mov r1,a inc r1 djnz r4,re00 ret ;. 温度值 bcd 码处理子程序 . convtemp: mov a,temph ;判温度是否零下 anl a,#08h jz tempc1 ;温度零上转 clr c mov a,templ ;二进制数求补(双字节) cpl a ;取反加 1 add a,#01h mov templ,a mov a,t

34、emph cpl a addc a,#00h mov temph,a mov temphc,#0bh;负温度标志 mov tempfc,#0bh sjmp tempc11 tempc1: mov temphc,#0ah ;正温度标志 mov tempfc,#0ah tempc11: mov a,temphc swap a mov temphc,a mov a,templ anl a,#0fh ;乘 0.0625 mov dptr,#tempdottab movc a,a+dptr mov templc,a ;templc low=小数部分 bcd mov a,templ ;整数部分 anl a

35、,#0f0h ;取出高四位 swap a mov templ,a mov a,temph ;取出低四位 anl a,#0fh swap a orl a,templ ;重新组合 mov temp_zh,a lcall hex2bcd1 mov templ,a anl a,#0f0h swap a orl a,temphc ;temphc low = 十位数 bcd mov temphc,a mov a,templ anl a,#0fh swap a ;templc hi = 个位数 bcd orl a,templc mov templc,a mov a,r4 jz tempc12 anl a,#

36、0fh swap a mov r4,a mov a,temphc ;temphc hi = 百位数 bcd anl a,#0fh orl a,r4 mov temphc,a tempc12: ret ;. 二-十进制转换子程序 . hex2bcd1: mov b,#064h div ab mov r4,a mov a,#0ah xch a,b div ab swap a orl a,b ret tempdottab: db 00h,00h,01h,01h,02h,03h,03h,04h ; 小数部分码表 db 05h,05h,06h,06h,07h,08h,08h,09h ;. lcd 显示子

37、程序 . show_dig2h: mov b,#100 div ab add a,#30h push b mov b,sit_x lcall lcdp2 pop b mov a,#0ah xch a,b div ab add a,#30h inc sit_x push b mov b,sit_x lcall lcdp2 pop b inc sit_x mov a,b mov b,sit_x add a,#30h lcall lcdp2 ret show_dig2l: mov b,#100 div ab mov a,#0ah xch a,b div ab add a,#30h push b mo

38、v b,sit_x lcall lcdp2 pop b inc sit_x mov a,b mov b,sit_x add a,#30h lcall lcdp2 ret ;. 显示区 bcd 码温度值刷新子程序. dispbcd: mov a,templc anl a,#0fh mov 70h,a ;小数位 mov a,templc swap a anl a,#0fh mov 71h,a ;个位 mov a,temphc anl a,#0fh mov 72h,a ;十位 mov a,temphc swap a anl a,#0fh mov 73h,a ;百位 ret ;. lcd 显示数据处理

39、子程序. conv: mov a,73h ;加载百位数据 mov sit_x,#6 ;设置位置 cjne a,#1,conv1 jmp conv2 conv1: cjne a,#0bh,conv11 mov a,#- ;-号显示 jmp conv111 conv11: mov a,#0 ;+号不显示 conv111: mov b,sit_x lcall lcdp2 jmp conv3 conv2: lcall show_dig2 ;显示数据 conv3: inc sit_x mov a,72h ;十位 lcall show_dig2 inc sit_x mov a,71h ;个位 lcall

40、show_dig2 inc sit_x mov a,#. mov b,sit_x lcall lcdp2 mov a,70h ;加载小数点位 inc sit_x ;设置显示位置 lcall show_dig2 ;显示数据 ret ;. 第二行显示数字子程序. show_dig2:add a,#30h mov b,sit_x lcall lcdp2 ret ;. 第二行显示数字子程序 . lcdp2: push acc mov a,b ;设置显示地址 add a,#0c0h ;设置 lcd 的第二行地址 lcall wcom ;写入命令 pop acc ;由堆栈取出 a lcall wdata ;写入数据 ret ;. 对 lcd 做初始化设置及测试. set_lcd: clr en lcall init_lcd ;初始化 lcd lcall store_data ;将自定义字符存入 lcd 的 cgram ret ;. lcd 初

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论