




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于基于 s08 的温度检测显示系统的设计的温度检测显示系统的设计 摘要 随着社会的进步和工业技术的发展,人们越来越重视温度对产品的影响, 许多产品对温度范围要求严格,目前市场上普遍存在的问题有温度信息传递不 及时、精度不够的缺点,不利于工业控制者根据温度变化及时做出决定。在这 样的形式下,开发一种实时性高、精度高的温度采集系统就很有必要。 本设计采用一种基于单片机的数据采集系统方案,该方案根据热敏电阻随 温度变化而变化的特性,采用串联分压电路。单片机采集热敏电阻的电压,通 过a/d转换将模拟量电压信号转换成数字量电压信号,经过查表转换得到温度值, 控制液晶屏实时显示温度值。本系统中所用到的器
2、件是飞思卡尔公司 mc9s08aw60单片机、ntc热敏电阻和lcd1602液晶显示屏。 关键词关键词:mc9s08aw60;热敏电阻;lcd1602 目目 次次 1 1 绪论绪论.1 1 1.1 设计背景 .1 1.2 数据采集系统简单介绍 .1 2 2 方案论证方案论证.3 3 2.1 微控制器的选择 .3 2.2 显示方案选择 .3 2.3 温度传感器的选择 .4 3 3 温度测量显示系统硬件设计温度测量显示系统硬件设计.6 6 3.1 温度采集模块硬件设计 .6 3.2 mcu 控制器模块设计.6 3.3 显示模块电路的设计 .7 4 4 温度测量显示系统软件设计温度测量显示系统软件设
3、计.9 9 4.1 微控制器程序的开发环境及语言 .9 4.2 程序设计 .10 总结总结.1717 参考文献参考文献.1818 附录附录 a a 温度采集与显示程序温度采集与显示程序 .1919 附录附录 b b 接线原理图接线原理图 .2525 1 1 绪论绪论 1.11.1 设计背景设计背景 在人类的生活环境中,温度扮演着极其重要的角色。无论你生活在哪里, 从事什么工作,无时无刻不在与温度打着交道。自18世纪工业革命以来,工业 发展对是否能掌握温度有着绝对的联系。在冶金、钢铁、石化、水泥、玻璃、 医药等等行业,可以说几乎80%的工业部门都不得不考虑着温度的因素。温度对 于工业如此重要,由
4、此推进了温度传感器的发展。进入21世纪后,温度传感器 正朝着高精度、多功能、总线标准化、高可靠性及安全性、开发虚拟传感器和 网络传感器、研制单片测温系统等高科技的方向迅速发展。 在工农业生产中,温度检测及其控制占有举足轻重的地位,随着现代信息 技术的飞速发展和传统工业改造的逐步实现 ,能够独立工作的温度检测和显示 系统已经应用于诸多领域。要达到较高的测量精度需要很好的解决引线误差补 偿问题、多点测量切换误差问题和放大电路零点漂移误差等问题,使温度检测 复杂化。模拟信号在长距离传输过程中,抗电磁干扰时令设计者伤脑筋的问题, 对于多点温度检测的场合,各被检测点到监测装置之间引线距离往往不同,此 外
5、,各敏感元件参数的不一致,这些都是造成误差的原因,并且难以完全清除。 单片机以其功能强、体积小、可靠性高、造价低和开发周期短等优点,成 为自动化和各个测控领域中必不可少且广泛应用的器件,尤其在日常生活中也 发挥越来越大的作用。采用单片机对温度采集进行控制,不仅具有控制方便、 组态简单和灵活性大等优点,而且可以大幅度提高被控数据的技术指标,从而 能够大大提高产品的质量和数量。 1.21.2 数据采集系统简单介绍数据采集系统简单介绍 随着自动控制的发展,数据采集越来越被广泛应用,如医疗、工业等方面, 数据采集是指将温度,压力,流量,位移等模拟量通过各种传感元件做适当转 换后,再经信号调理、采样、量
6、化、编码、传输等步骤采集,转换成数字量后, 传给pc 机进行存储,处理,显示或打印的过程,相应的系统称为数据采集系统, 可分为以下几种: 1.基于通用微型计算机的数据采集系统 将采集来的信号通过外部的采样和a/d转换后的数字信号通过接口电路送 入微机内进行处理,然后再显示处理结果或经过d/a 转换输出,主要有以下几 个特点: (1) 系统较强的软、硬件支持。通用微型计算机系统所有的软硬件资源都 可以用来支持系统进行工作。 (2) 具有自开发能力。 (3) 系统的软硬件的应用配置比较小,系统的成本较高,但二次开发时, 软硬件扩展能力较好。 (4) 在工业环境中运行的可靠性差,对安放的环境要求较高
7、;程序在ram 中运行,易受外界干扰破坏。 2.基于单片机的数据采集系统 它是由单片机及其些外围芯片构成的数据采集系统,是近年来微机技术快 速发展的结果,它具有如下特点: (1) 系统不具有自主开发能力,因此,系统的软硬件开发必须借助开发工 具。 (2) 系统的软硬件设计与配置规模都是以满足数据采集系统功能要求为原 则,因此系统的软硬件应用配置具有最佳的性价比。系统的软件一般都有应用 程序。 (3) 系统的可靠性好、使用方便。应用程序在rom 中运行不会因外界的干 扰而破坏,而且上电后系统立即进入用户状态。 3.基于dsp数字信号微处理器的数据采集系统 dsp数字信号微处理器从理论上而言就是一
8、种单片机的形式,常用的数字 信号处理芯片有两种类型,一种是专用dsp芯片,一种是通用dsp芯片。基于 dsp数字信号微处理器的数据采集系统的特点如下:精度高、灵活性好、可靠性 好、容易集成、分时复用等,但其价格不菲。 2 2 方案论证方案论证 2.12.1 微控制器的选择微控制器的选择 微控制器是测量显示装置的核心部分,它要负责数据的处理及控制液晶屏 显示。因此,需要一个高集成度、稳定性高和体积小的微控制器,同时还要注 重低成本及实际情况。 at89s52是一种低功耗、高性能8位微控制器,具有8k系统可编程flash 存储器和256字节rom,可实现0hz33hz的全静态操作,支持4.0v5.
9、5v电源。 使用atmel公司高密度非易失性存储器技术制造,与mcs-51产品指令和引脚完 全兼容。片上flash允许程序存储器在系统可编程,亦适于常规编程器。其内部 没有a/d转换模块,需要外部扩展模数转换芯片。 s08aw60 拥有 62kb 片上在线可编程 flash 存储器和 2kb 片上 ram, 具有模块保护与安全选项功能,支持 2.75.5v 电源。片内总线时钟最高可达 20mhz,可选择宽范围的时钟频率。其内部集成了高性能模/数转换器(adc) 和串行通信模块,具有很宽的工作温度范围(-40+125),可适应各类恶 劣环境。该芯片还可以通过 bdm 在计算机与微控制器进行在线编
10、程及后台调 试,避免频繁的插拔单片机,编译软件调试功能强大。 对比之后,根据实际的应用需求,本设计选择了飞思卡尔公司生产的增强 型8位微控制器mc9s08aw60(44引脚、lqfp封装)。其拥有足够大的flash存 储器和rom,并带有高性能模/数转换器。另外,体积小,稳定性高,调试方便。 2.22.2 显示方案选择显示方案选择 方案一: led数码管显示器可分为两种显示方式:静态显示和动态显示。led数码管 静态显示,多片七段译码器驱动显示,这不仅增加了成本,还需要占用单片机 多个i/o口,也给电路的焊接带来一定的困难,因此不选用这种方案作为显示模 块,所以排除此方案。 方案二: led数
11、码管显示器动态显示方式下,将所有位的段选线并联在起,由位选线 控制哪位接收字段码。采用动态扫描显示,也就是在显示过中,轮流向各位送 出字形码和相应的字位选择,同一时刻只有一位显示,其他各位熄灭。但是此 显示方案稳定性较差,并且还需要焊接外围电路,所以不采用此方案。 方案三: lcd液晶显示,由单片机驱动.它主要用来显示大量数据、文字、图形,能够 显示的位数多,显示得清晰多样、美观,同时液晶显示器的编写程序简单,价 格便宜,故采用此种方案。 lcd类型繁多,价格不等。根据本设计需要显示的信息量小的特点,选用价 格便宜的lcd1602液晶屏。其特点如下: (1) 液晶显示屏是以16列2行=32个5
12、10或57点阵块组成的显示字符群, 每个点阵为一个字符,字符间距和行距都为一个点的宽度。 (2) 具有字符发生器rom,可以显示192种字符。 (3) 具有64字节的自定义字符ram,可自定义8个57或4个510点阵字符。 (4) 具有80字节的ram。 (5) 结构紧凑、轻巧、装配容易。 (6) 单+5v电源供电,低功耗,长寿命,高可靠性。 2.32.3 温度传感器的选择温度传感器的选择 测量温度的关键是温度传感器,因此需要灵敏度高、测温范围宽、稳定性 好,同时还要考虑成本和实际情况。 ds18b20 数字式温度传感器,使用集成芯片,采用单总线技术,其能够 有效的减小外界的干扰,提高测量的精
13、度,同时,它可以直接将被测温度转化 成串行数字信号供微机处理,接口简单,使数据传输和处理简单化。部分功能 电路的集成,使总体硬件设计更简洁,能有效地降低成本, 搭建电路和焊接电 路时更快,调试也更方便简单化 。 热敏电阻的主要特点是:灵敏度较高,其电阻温度系数要比金属大 10100 倍以上,能检测出 10-6的温度变化;工作温度范围宽,常温器 件适用于-55315,高温器件适用温度高于 315(目前最高可达到 2000) ,低温器件适用于-27355;体积小,能够测量其他温度计无 法测量的空隙、腔体及生物体内血管的温度;使用方便,电阻值可在 0.1100k 间任意选择;易加工成复杂的形状,可大
14、批量生产;稳定性 好、过载能力强 对比之后,根据实际的应用需求,本设计采用热敏电阻。 热敏电阻包括正温度系数(ptc)和负温度系数(ntc)热敏电阻,以及 临界温度热敏电阻(ctr) 本设计采用 ntc 热敏电阻。 ntc(negative temperature coeff1cient)是指随温度上升电阻呈指 数关系减小、具有负温度系数的热敏电阻现象和材料该材料是利用锰、铜、 硅、鈷、铁、镍、锌等两种或两种以上的金属氧化物进行充分混合、成型、烧 结等工艺而成的半导体陶瓷,可制成具有负温度系数(ntc)的热敏电阻其 电阻率和材料常数随材料成分比例、烧结气氛、烧结温度和结构状态不同而变 化。它的
15、测量范围一般为-10+300,也可做到-200+10,甚至可用于 +300+1200环境中作测温用。 3 3 温度测量显示系统硬件设计温度测量显示系统硬件设计 温度采集系统的硬件部分是由温度采集模块、mcu 控制器模块、温度显示 模块组成。具体框图如下图 3.1 所示: 温度采集 模拟量输入 mcu lcd显示 输出 图 3.1 系统硬件框图 3.13.1 温度采集模块硬件设计温度采集模块硬件设计 该模块是根据热敏电阻阻值随温度变化而变化的特性,利用串联分压的特 点,将热敏电阻所分的电压送到 mc9s08aw60 的模拟量输入端。具体电路原 理如图 3.2 所示: 123456 a b c d
16、 654321 d c b a title numberrevisionsize b date:12-jan-2011sheet of file:e:creat_pretelm yd esign 召召召.ddbdraw n by: vcc r3 20k r4 re s4 pt b0 图 3.2 温度采集模块电路原理图 该电路中 r4 为热敏电阻,其电压传输到 mc9s08aw60 单片机的模拟量 输入端,即 b0 口。 3.23.2 mcumcu 控制器模块设计控制器模块设计 mc9s08aw60的外部工作电路如图3.3所示。vddad和vssad是mcu内部模拟 电路的电源,给模数转换器(a
17、dc)模块供电,vrefh和vrefl是模数转换的参 考电压。vdd和vss是s08mcu主要的电源引脚,工作电压范围是2.7v5.5v,在 该电路中提供的是5v电压。在vdd和vss之间接10f钽电容器和0.1f的陶瓷旁 路电容器,10f钽电容器来为系统提供大容量的电荷存储,同时应在离mcu 电源管脚尽可能近的地方安装一个0.1f的陶瓷旁路电容器来抑制高频噪音。 123456 a b c d 654321 d c b a title numberrevisionsize b date:12-jan-2011sheet of file:e:creat_pretelmyd esign 召召召.d
18、dbdraw n by: pt b0 pt b1 pt b2 pt b3 pt d0 pt d1 vssad vddad pt d2 pt d3 pt g3 vrefh vrefl bkgd ptg5 ptg6 vss ptc0 ptc1 ptc2 ptc3 ptc5 pt c4 irq re set pt f0 pt f1 pt f4 pt f5 pt e0 pt e1 pt e2 pt e3 pte4 pte5 pte6 pte7 vss vdd ptg0 ptg1 ptg2 pta0 pta1 mc9s08aw60 44-pin l qfp 4m r1 1m c1 27pf c2 27p
19、f c3 0.1uf r2 4.7k s1 c4 0.1uf vcc c5 10uf vcc 图3.3 mc9s08aw60外部工作电路原理图 该电路为mcu控制器电路,其中,g0、g1、g2口分别与lcd1602的 rs、r/w、e引脚连接;c0c3口与lcd1602的db0db3引脚连接;d0d3口 与lcd1602的db4db7引脚连接。.b0口是模拟量输入端,用于输入热敏电阻 的电压。 3.33.3 显示模块电路的设计显示模块电路的设计 该模块是利用 lcd1602 液晶屏显示,显示的清晰度是关键,其 vee 引脚 作用是对比调整,原理是该引脚输入电压不同,调整度不同,所以采用电位器
20、分压作为它的电压输入。vss 及 k 引脚分别是电源地、lcd 背光电源负极,直 接接地。vcc 及 a 引脚分别是电源、lcd 背光电源正极,采用+5v 电源供电。 其电路原理图如图 3.4 所示: 123456 a b c d 654321 d c b a title numberrevisionsize b date:12-jan-2011sheet of file:e:creat_pretelmydesign 召召召.ddbdrawn by: vss vcc vee rs r/w e db0 db1 db2 db3 db4 db5 db6 db7 a k lcd1602 r5 10k
21、vcc vcc ptg0 ptg1 ptg2 ptc0 ptc1 ptc2 ptc3 ptd0 ptd1 ptd2 ptd3 图 3.4 显示模块电路原理图 该电路中,lcd1602 的 rs、r/w、e 引脚分别与 mc9s08aw60 的 g0、g1、g2 口连接;db0db3 引脚分别与 mc9s08aw60 的 c0c3 口连接; db4db7 引脚与 mc9s08aw60 的 d0d3 口连接。 4 4 温度测量显示系统软件设计温度测量显示系统软件设计 4.14.1 微控制器程序的开发环境及语言微控制器程序的开发环境及语言 在前面,本设计已经选择了mc9s08aw60微控制器,飞思卡
22、尔的微控制器 有其专用的开发环境软件codewarrior ide。同时,codewarrior ide可以在不同 的操作系统(包括windows, macintosh和linux)下使用,而且在这些操作系统 下的界面完全相同。本设计使用codewarrior6.3版,其界面如图4.1所示,只要 在右边打开main.c窗口就可以进行程序编写。 图 4.1 codewarrior6.3 程序开发界面 在对微控制器进行编程时,可以用汇编语言或者c语言,甚至可以二者混 合编程。codewarrior ide支持汇编语言,c、c+和java高级语言。c语言功能 丰富、表达能力强、使用灵活方便、目标程序
23、效率高、可移植性好,既具有高 级语言的优点,又具有低级语言的许多特点,是国内外广泛使用的一种计算机 语言。本设计使用c语言对微控制器进行编程,其能直接操作微控制器的硬件 和接口,生成的机器代码也是高水平的。 4.24.2 程序设计程序设计 本设计程序主要包括 a/d 转换模块程序、热敏电阻阻值和温度的非线性对 性模块程序、温度显示模块程序,其总程序流程图如图 4.2 所示: 开始 mcu lcd初始 化 模拟量输入 启动a/d转换 查表得到温 度值 温度值处理 lcd显示 结束 图 4.2 系统程序总流程图 4.2.1 a/d 转换原理及程序 传感器获得的信号由于是模拟信号,而cpu处理的是数
24、字信号,故要经过 模数转换。在mc9s08aw60芯片中集成了一个8位/10位精度可选的逐次逼近式 adc模块,使用时不需再扩展片外的a/d转换器。 逐次逼近式adc是一个具有反馈回路的循环系统,主要部件有电压比较器、 逐次逼近寄存器(sar) 、结果寄存器、数字/模拟转换器(digital -to- analog,dac)和控制电路,如图4.3所示。逐次逼近式adc用dac的输出电压 来驱动比较器的反相端。转换时,要用一个逐次逼近寄存器存放转换出来的数 字量;转换结束时,将数字量送到结果寄存器。 逐次逼近 寄存器 (sar) 结果寄存器 clk 转换标志 d/a 转换 器 控制电路 + -
25、vi vo 电压比较器 图4.3 逐次逼近式adc原理图 逐次逼近adc原理是:首先设置sar中的最高位为1,其余位为0,经d/a 转换器转换成模拟电压vo,然后将vo与输入电压vi在电压比较器中进行比较。 如果vivo,则置1保留,并使下一位置1。如果vivo,则这一位给予清除, 然后使下一位置1。按上述方法对次高位进行转换、比较、判断,决定次高位应 取1还是0。重复上述过程,直到确定sar最低位为止。这时控制电路送出一个 转换结束标志信号,这个信号将sar中的数字量送入结果寄存器供cpu使用。 本设计中,由于在s08aw60芯片中的sci数据寄存器只有8位,所以模数转 换选择8位精度,以满
26、足实际情况。针对振动信号高频多变,在adc初始化中 选择连续转换、高速转换和短采样时间。 c语言编写的mc9s08aw60微控制器中a/d转换的节选程序代码如下: /* * *函数名称:adc_init() * *作用:a/d模块初始化 */ void adc_init(void) apctl1=0x01; /*adcp01引脚i/o无效,即b口0位*/ adc1cfg=0x00; /*高速模式 8位精度,adck=总线频率*/ adc1sc2=0x00; /*软件触发,比较功能禁止*/ adc1sc1=0x00; /*禁止转换完成中断,单次转换*/ /* * *函数名称:convert_be
27、gin() * *作用:启动a/d转换 */ unsigned int convert_begin(void) unsigned int vtemp; adc1sc1=0x00; /* 写adc1sc1启动转换*/ while(!(adc1sc1_coco); /* 等待转换结束 */ vtemp=adc1rl; /*读取转换结果 */ return vtemp; /* 返回结果 */ 4.2.2 热敏电阻阻值和温度的非线性对性模块原理及程序 热敏电阻的阻值温度特性曲线是一条指数曲线,非线性度较大,因此在使 用时要进行线性化处理。可采用简单的查表法从电压值中查出相应的温度值。 预先将一系列温度
28、与电压对应值存贮到 aw60 微控制器程序存储器中的一个表 内,当给定任意一个电压值时,即可通过查表得出所对应的温度值。当表中没 有对应的电压值时,可找出电压值在表中的区域,然后在区间的相邻两点经线 性插值得出对应温度值。存入表中点的多少影响温度值的精度。这里以选 16 个 点为例,选 8 位模式 a/d 可转换结果范围是 0255,因此每两个点的间隔是 16。使用插值算法如下: 1_12/121xvalueadxxyyyt (4.1) 式中:当前温度;t 当前温度的 a/d 转换值;valuead_ ,相邻点的温度值;2y1y ,相邻点的 a/d 转换值;2x1x 当 a/d 转换结果在区间
29、 016 或 240255 时,不再计算,直接按温度值 79或-40处理。 c语言编写的获得温度值的节选程序代码如下: /* * *函数名称: gettemperature() * *作用:查表及插值程序得到温度值 */ signed int gettemperature(int value) signed int t; int i; if(value= v_t_table015) t=v_t_table115; /* 当 a/d 转换值在 240255 时,按- 40 摄氏度赋值 */ else for(i=1;i v_t_table0i) t=t*(value-v_t_table0i);
30、/* 没有,找到区间并插 值 */ t=v_t_table1i+t/100; break; return t; /* 返回温度值 t */ 4.2.3 温度显示模块程序 lcd1602 采用+5v 电压驱动,其数据接口和读写控制引脚与 mc9s08aw60 单片机的 i/o 口直接相连。mc9s08aw60 单片机将采集到的模 拟电压值经过 a/d 转换后,查表得到温度值,通过 i/o 口传输给 lcd1602 显示。 c语言编写的温度值显示的节选程序代码如下: /* * *函数名称:lcd1602_init() * *作用lcd1602初始化 */ void lcd1602_init(voi
31、d) lcd1602_db(0 x08 ,0 x03); /*显示模式 8位总线 双行显示 5*7点阵*/ rs_rw_e_init(); lcd1602_db(0 x04 ,0 x01); /*光标移动 每输入一次该指令 光标向右移 一格 整体画面不滚动*/ rs_rw_e_init(); lcd1602_db(0 x0c ,0 x00); /* 屏幕开关 打开显示屏 不显示光标 不 闪烁 */ rs_rw_e_init(); lcd1602_db(0 x06 ,0 x00); /输入方式 rs_rw_e_init(); lcd1602_db(0 x01 ,0 x00); /清屏 rs_rw
32、_e_init(); /* * *函数名称:lcd1602_display() * *作用lcd1602 显示 */ void lcd1602_display(void) if(neg_flag) /* 如果是负,最高位显示-*/ lcd1602_db(0 x00,0 x08); /*需要显示的字符的地址*/ rs_rw_e_init(); lcd1602_write_dat(0 x0d,0 x02); else /* 如果是正,最高位显示+*/ lcd1602_db(0 x00,0 x08); /*需要显示的字符的地址*/ rs_rw_e_init(); lcd1602_write_dat(
33、0 x0b,0 x02); lcd1602_db(0 x01,0 x08); /*需要显示的字符的地址*/ rs_rw_e_init(); lcd1602_write_dat(disp_value0s,disp_value1s); lcd1602_db(0 x02,0 x08); /*需要显示的字符的地址*/ rs_rw_e_init(); lcd1602_write_dat(disp_value0g,disp_value1g); 总结总结 设计就是要讲究严谨,在这三周的创新设计中,我学到了很多知识,也使 我的能力得到了提升。 首先,硬件方面。选择硬件,要比较同类产品的稳定性、功耗、体积、价
34、格等,另外还要符合设计的全部要求。在显示方案上,我考虑的时间相对长了 一点。利用数码管显示,程序复杂,但是,自己编程比较熟悉,价格便宜。利 用 lcd1602 显示,程序简单,但是以前自己从未使用过。经过比较,我选择 lcd1602,这样可以学到新知识,提高自己的知识水平。在硬件电路的设计方 面,用 protel 绘制电路图时要标明元件的大小,有些封装元件要标明名称和封 装。 其次,软件方面。把程序分块编写能够有效地提高正确性和编程效率。在 本次设计中,编程采取了“两步走”:第一步,我把温度采集部分的程序调试 成功,其中包括 a/d 转换程序。这就要求必须对 a/d 转换原理了解及 a/d 转
35、 换寄存器熟悉。第二步,我把显示程序调试成功。这部分需要对 lcd1602 的时 序有充分的了解和足够的认识,这也是 lcd1602 与 led 数码管的不同之处。 经过查资料和编程实验,最后使 lcd1602 正常显示数据。在软件编写时,还要 注意添加注释,使程序更加清晰,便于理解。 总而言之,在王老师的带领和指导下,我顺利的完成了创新设计,完成了 老师交给的任务。 参考文献参考文献 1 王威嵌入式微控制器 s08aw 原理与实践m北京:北京航空航天大学出 版社,2009 2 陈杰. 传感器与检测技术m北京:高教出版社,2004 3 邵贝贝. 龚光华.单片机认识与实践m.北京:北京航空航天大
36、学出版社, 2006 4 阎石. .数字电子技术基础(第三版). . 北京:高等教育出版社,1989 5 沈兰荪.数据采集与处理m北京:能源出版社,1987 6 沙占友、王彦朋、孟志永.单片机外围电路设计.电子工业出版社,2003 7 谢宜仁.单片机实用技术问答. 人民邮电出版社,2003 8 孙传友、汉泽西.测控系统原理与设计.北京航空航天大学出版社,2002 9 章吉良,周勇,戴旭涵等微传感器原理、技术及应用m上海:上海交 通大学出版社,2005 附录附录 a a 温度采集与显示程序温度采集与显示程序 /* * *文件名temprature_lcd1602.c * *mcu:mc9s08a
37、w60 * *调试环境:codewarrior v6.3 * *日期:2010.12 */ #include /* for enableinterrupts macro */ #include derivative.h /* include peripheral declarations */ const unsigned char disp_value210=0 x00,0 x01,0 x02,0 x03,0 x04,0 x05,0 x06,0 x07,0 x08,0 x09, 0 x03,0 x03,0 x03,0 x03,0 x03,0 x03,0 x03,0 x03,0 x03,0 x
38、03 ; /*存放显示段码*/ const signed int v_t_table217=0,16,32,48,64,80,96,112,128,144,160,176,192,208,224,240,255, 0,79,56,43,34,27,21,15,10,5,-1,-6,-11,-18,-26,-40,0 /*存放 a/d 转换值和温度值的表*/ ; #define lcd1602_d03_ptb03 ptcd /*1602 液晶屏数据接口低 4 位接 c 口低 4 位*/ #define lcd1602_d47_ptd03 ptdd /*1602 液晶屏数据接口高 4 位接 d 口
39、低 4 位*/ #define lcd1602_rs ptgd_ptgd0 /*1602 液晶屏数据选择接口接 g 口 0 位*/ #define lcd1602_rw ptgd_ptgd1 /*1602 液晶屏读写选择接口接 g 口 1 位 */ #define lcd1602_e ptgd_ptgd2 /*1602 液晶屏信号使能接口接 g 口 2 位*/ signed int temperature; /*温度*/ char neg_flag=0; /*温度正负标志,正时为 0,负时为 1*/ int s,g; /*温度十位,个位*/ unsigned int adc_value; /*
40、通道电压值*/ /*函数声明*/ void data_deal(void); /*数据处理程序*/ void adc_init(void) ; /*adc 初始化程序*/ signed int gettemperature(int value); /*查表得到温度程序*/ unsigned int convert_begin(void); /*启动转换*/ void delay40us(int count); /*lcd 显示延时程序*/ void rs_rw_e_init(void); /*lcd1602 控制程序*/ void lcd1602_db(char x ,char y); /*l
41、cd1602 数据接口*/ void lcd1602_init(void); /*lcd1602 数据接口*/ void lcd1602_write_dat(char x,char y); /*写数据程序*/ void lcd1602_display(void); /*lcd1602 显示程序*/ void port_init(void) ; /*i/o 口初始化程序*/ /*/ /* * *函数名称:delay40us() * *作用:延时 */ void delay40us(int count) int i; for(i=0;icount;i+) _reset_watchdog(); /*
42、 * *函数名称:adc_init() * *作用:a/d 模块初始化 */ void adc_init(void) apctl1=0x01; /*adcp01 引脚 i/o 无效,即 b 口 0 位*/ adc1cfg=0x00; /*高速模式 8 位精度,adck=总线频率*/ adc1sc2=0x00; /*软件触发,比较功能禁止*/ adc1sc1=0x00; /*禁止转换完成中断,单次转换*/ /* * *函数名称:convert_begin() * *作用:启动 a/d 转换 */ unsigned int convert_begin(void) unsigned int vtem
43、p; adc1sc1=0x00; /* 写 adc1sc1 启动转换*/ while(!(adc1sc1_coco); /* 等待转换结束 */ vtemp=adc1rl; /*读取转换结果 */ return vtemp; /* 返回结果 */ /* * *函数名称: gettemperature() * *作用:查表及插值程序得到温度值 */ signed int gettemperature(int value) signed int t; int i; if(value= v_t_table015) t=v_t_table115; /* 当 a/d 转换值在 240255 时,按-40
44、 摄氏度赋值 */ else for(i=1;i v_t_table0i) t=t*(value-v_t_table0i); /* 没有,找到区间并插值 */ t=v_t_table1i+t/100; break; return t; /* 返回温度值 t */ /* * *函数名称:data_deal() * *作用:实现十位,个位的分离 */ void data_deal(void) if(temperature0) /* 温度为负 */ neg_flag=1; /* neg_flag 为 1*/ temperature=-temperature; /* 取正*/ else neg_fla
45、g=0; s= temperature/10; /* 分离十位*/ g= temperature-s*10; /* 分离个位*/ /* * *函数名称:rs_rw_e_init() * *作用:lcd1602 控制 */ void rs_rw_e_init(void) lcd1602_rs=0; lcd1602_rw=0; lcd1602_e =1; delay40us(10000); lcd1602_e =0; /* * *函数名称lcd1602_db() * *作用:数据接口 */ void lcd1602_db(char x ,char y) lcd1602_d03_ptb03 =x;
46、lcd1602_d47_ptd03 =y; /* * *函数名称:lcd1602_init() * *作用lcd1602 初始化 */ void lcd1602_init(void) lcd1602_db(0 x08 ,0 x03); /*显示模式 8 位总线 双行显示 5*7 点阵*/ rs_rw_e_init(); lcd1602_db(0 x04 ,0 x01); /*光标移动 每输入一次该指令 光标向右移一格 整体画面 不滚动*/ rs_rw_e_init(); lcd1602_db(0 x0c ,0 x00); /* 屏幕开关 打开显示屏 不显示光标 不闪烁 */ rs_rw_e_i
47、nit(); lcd1602_db(0 x06 ,0 x00); /输入方式 rs_rw_e_init(); lcd1602_db(0 x01 ,0 x00); /清屏 rs_rw_e_init(); /* * *函数名称:lcd1602_write_dat() * *作用lcd1602 写数据 */ void lcd1602_write_dat(unsigned char x,unsigned char y) lcd1602_db(x , y); /*需要显示的字符*/ lcd1602_rs=1; lcd1602_rw=0; lcd1602_e =1; delay40us(10000); l
48、cd1602_e =0; /* * *函数名称:lcd1602_display() * *作用lcd1602 显示 */ void lcd1602_display(void) if(neg_flag) /* 如果是负,最高位显示-*/ lcd1602_db(0 x00,0 x08); /*需要显示的字符的地址*/ rs_rw_e_init(); lcd1602_write_dat(0 x0d,0 x02); else /* 如果是正,最高位显示+*/ lcd1602_db(0 x00,0 x08); /*需要显示的字符的地址*/ rs_rw_e_init(); lcd1602_write_da
49、t(0 x0b,0 x02); lcd1602_db(0 x01,0 x08); /*需要显示的字符的地址*/ rs_rw_e_init(); lcd1602_write_dat(disp_value0s,disp_value1s); lcd1602_db(0 x02,0 x08); /*需要显示的字符的地址*/ rs_rw_e_init(); lcd1602_write_dat(disp_value0g,disp_value1g); /* * *函数名称:port_init() * *作用:i/o 口初始化 */ void port_init(void) ptcdd=0xff; ptddd=0xff; ptgdd=0xff; /* * *函数名称:main() * *作用:主函数 */ void main(void) port_init(); lcd1602_init(); adc_init(); enableinterrupts; /* enable interrupts
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贵州理工学院《人造板工艺学实验》2023-2024学年第二学期期末试卷
- 湖北青年职业学院《导航与信息融合技术》2023-2024学年第二学期期末试卷
- 河北北方学院《高等物流学》2023-2024学年第二学期期末试卷
- 海南工商职业学院《建筑美术Ⅲ》2023-2024学年第二学期期末试卷
- 兴安职业技术学院《集合与图论》2023-2024学年第二学期期末试卷
- 南京传媒学院《建筑材料》2023-2024学年第二学期期末试卷
- 钟山职业技术学院《嵌入式系统应用开发》2023-2024学年第二学期期末试卷
- 山东海事职业学院《材料失效诊断、预测和预防》2023-2024学年第二学期期末试卷
- 浙江金融职业学院《西方文明史》2023-2024学年第二学期期末试卷
- 贵州商学院《材料成型专业外语》2023-2024学年第二学期期末试卷
- YST 1070-2024《真空断路器用银及其合金钎料环》
- 2022年湖南省衡阳市部分校高一下学期期末考试英语试题
- 江苏省苏州市昆山、太仓、常熟、张家港市2023-2024学年七年级下学期语文期末试卷
- 华佗古本五禽戏智慧树知到期末考试答案章节答案2024年安徽中医药大学
- QBT 2262-1996 皮革工业术语
- 中西文化鉴赏 知到智慧树网课答案
- 2024年辽宁省大连市初中学业水平考试模拟道德与法治试卷
- 斯大林培训课件
- 外研版(2019)选择性必修第二册Unit 3 Times change!Understanding ideas 课件
- 心理干预各论家庭治疗
- 湖北省武汉市2024届高中毕业生四月调研考试数学试卷
评论
0/150
提交评论