




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数字温度计课程设计课 程 设 计设计名称 数字温度计的设计 .全套设计加扣3012250582 学年学期 2014-2015(上) 课程名称 单片机课程设计 专业年级 电气112班 姓 名 学 号 提交日期 2014年6月7日 成 绩 指导教师 水利与建筑工程学院前言时至今日,单片机已广泛应用于各个领域,从家用电器到办公自动化、工业自动化以及各种智能仪表、智能接口。虽然单片机的性能无法和PC机相比,但它具有体积小、价格低、可靠性高、智能、实时、可塑性好等诸多优点,使其成为开发嵌入式要用心太软和小型智能化产品的首选机种。 随着电子技术,特别是随大规模集成电路的产生而出现的微型计算机技术的飞速发展,人类生活发生了根本性的改变。如果说微型计算机的出现使现代科学研究得到了质的飞跃,那么可以毫不夸张地说,单片机技术的出现则是给现代工业测控领域带来了一次新的技术革命。目前,单片机以其体积小、重量轻、抗干扰能力强、对环境要求不高、高可靠性、高性能价格比、开发较为容易,在工业控制系统、数据采集系统、智能化仪器仪表、办公自动化等诸多领域得到极为广泛的应用,并已走人家庭,从洗衣机、微波炉到音响、汽车,到处都可见到单片机的踪影。因此,单片机技术开发和应用水平已逐步成为一个国家工业发展水平的标志之一。微型计算机作为嵌入式控制系统的主体与核心,代替了传统的控制系统的常规电子线路。同时楼宇智能化的发展与成熟,也为基于单片机的照明控制系统的普及与应用奠定了坚实的基础。本课题研究的内容就是以单片机为主要控制元件,通过温度传感器DS18B20实现对温度的测量,并通过数码管直接显示所测温度。目录前言目录3第1章 设计目的及要求41.1、设计目的41.2、设计要求4第2章 方案设计52.1、几种常见温度传感器52.2、研究背景52.3、本文研究的主要内容52.4、方案论证5第3章 主要元器件介绍63.1、AT89C51单片机介绍63.1.1 AT89C51芯片简介63.1.2 引脚说明74.1、控制和设置电路114.2、外部振荡电路124.3、显示电路12第5章 软件设计及主要子程序145.1、软件设计思路145.2、DS18B20的读写程序145.3、 LCD1602的初始化175.4、温度检测主程序20第6章 系统仿真与调试236.1、Keil编译236.2、Protues8仿真平台246.2.1、Protues8仿真简介及部分模块仿真246.2.2、硬件电路总图与仿真24第7章 操作方法26第8章 课程设计总结26附录28PCB28程序28参 考 文 献38第1章 设计目的及要求1.1、设计目的1)掌握51系列单片机的基本硬件结构及工作原理;2)掌握51系列单片机的汇编语言及基本程序设计方法;3)学习并掌握使用51系列单片机开发控制系统的基本步骤及方法。1.2、设计要求 能熟练运用51单片机实现硬件与软件结合完成电子产品的设计,把理论真正运用于实践,会用Keil等软件编程调试运行,熟悉应用Proteus软件仿真。强化编程练习,注意查询方式与中断方式的区别等等。 数字温度传感器DS18B20作为温度传感器模块,它具有独特的单总线接口方式,需一根总线就能实现控制模块与DS18B20之间的半双工通信。DS18B20是集传感元件和转换电路于一体的小芯片上。另外,DS18B20也支持一线总线接口,测量温度范围为-55C+125C,在-10+85C范围内,精度为0.5C。现场温度直接以一线总线的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V5.5V的电压范围,使系统设计更灵活、方便,体积更小。 设计以DS18B20为传感器的数字温度计,显示用LCD1602液晶屏显示。不但要完成软件仿真,还要在单片机上做出硬件仿真,要求自行标定,显示和实际温度一致。 第2章 方案设计2.1、几种常见温度传感器(一)模拟温度传感器,比如普通的热敏电阻。 (二)数字温度传感器DS18B20作为温度传感器模块,它具有独特的单总线接口方式,需一根总线就能实现控制模块与DS18B20之间的半双工通信。2.2、研究背景随着电子技术,特别是随大规模集成电路的产生而出现的微型计算机技术的飞速发展,人类生活发生了根本性的改变。如果说微型计算机的出现使现代科学研究得到了质的飞跃,那么可以毫不夸张地说,单片机技术的出现则是给现代工业测控领域带来了一次新的技术革命。目前,单片机以其体积小、重量轻、抗干扰能力强、对环境要求不高、高可靠性、高性能价格比、开发较为容易,在工业控制系统、数据采集系统、智能化仪器仪表、办公自动化等诸多领域得到极为广泛的应用,并已走人家庭,从洗衣机、微波炉到音响、汽车,到处都可见到单片机的踪影。因此,单片机技术开发和应用水平已逐步成为一个国家工业发展水平的标志之一。本课题研究的内容就是以单片机为主要控制元件,通过温度传感器DS18B20实现对温度的测量,并通过数码管直接显示所测温度。温度数我们日常生产和生活中实时在接触到的物理量,但是它是看不到的,仅凭感觉只能感觉到大概的温度值,传统的指针式的温度计虽然能指示温度,但是精度低,使用不够方便,显示不够直观,数字温度计的出现可以让人们直观的了解自己想知道的温度到底是多少度。本设计对温度进行检测,并对检测的温度进行显示,根据设计的要求,系统有三部分组成:温度检测、单片机处理、温度显示。对温度进行和显示的的硬件设计,我们通过上面的框图1进行描述,我们可以清楚的对本次设计的思路进行描述。2.3、本文研究的主要内容设计内容完全按照前面的设计要求完成,完全满足前面的设计要求。2.4、方案论证方案:温度数我们日常生产和生活中实时在接触到的物理量,但是它是看不到的,仅凭感觉只能感觉到大概的温度值,传统的指针式的温度计虽然能指示温度,但是精度低,使用不够方便,显示不够直观,数字温度计的出现可以让人们直观的了解自己想知道的温度到底是多少度。图2.1 设计思路框图本设计对温度进行检测,并对检测的温度进行显示,根据设计的要求,系统有三部分组成:温度检测、单片机处理、温度显示。对温度进行和显示的的硬件设计,我们通过上面的框图1进行描述,我们可以清楚的对本次设计的思路进行描述。 第3章 主要元器件介绍3.1、AT89C51单片机介绍3.1.1 AT89C51芯片简介AT89C51是MCS51系列单片机中的一种低功耗、高性能的片内含有4KB快闪可编程/擦除只读存储器的8位CMOS微控制器,使用高密度、非易失存储技术制造,并且与80C51引脚和指令系统完全兼容。 主要性能:与MCS-51 微控制器产品系列兼容。 片内有4KB可在线重复编程的快闪擦写存储器存储数据保存时间为10年。宽工作电压范围:Vcc可为2.7V到6V全静态工作;可从0Hz至16MHz 程序存储器具有3级加密保护 128*8位内部RAM 32条可编程I/O线、两个16位定时器/计数器、中断结构具有5个中断源和2个优先级、可编程全双工串行通道、空闲状态维持低功耗和掉电状态保存存储内容。89C51单片机是把那些作为控制应用所必需的基本内容都集成在一个尺寸有限的集成电路芯片上。如果按功能划分,它由如下功能部件组成,即微处理器、数据存储器、程序存储器、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能寄存器。它们都是通过片内单一总线连接而成,其基本结构依旧是CPU加上外围芯片的传统结构模式。但对各种功能部件的控制是采用特殊功能寄存器的集中控制方式。微处理器、数据存储器、程序存储器、并行I/O口、串行口、定时器/计数器、中断系统各部分功能及说明类似于8051单片机内部结构说明。 特殊功能寄存器共有21个,用于对片内的各功能的部件进行管理、控制、监视。实际上是一些控制寄存器和状态寄存器,是一个具有特殊功能的RAM区。 由上可见, 89C51单片机的硬件结构具有功能部件种类全,功能强等特点。特别值得一提的是该单片机CPU中的位处理器,它实际上是一个完整的1位微计算机,这个1位微计算机有自己的CPU、位寄存器、I/O口和指令集。1位机在开关决策、逻辑电路仿真、过程控制方面非常有效;而8位机在数据采集,运算处理方面有明显的长处。MCS-51单片机中8位机和1位机的硬件资源复合在一起,二者相辅相承,它是单片机技术上的一个突破,这也是MCS-51单片机设计的精美之处。3.1.2 引脚说明 图3.1是标准的双列直插式集成电路芯片。图3.1 80C51引脚图P00P07 P0口8位双向口线(在引脚的3932号端子)。P10P17 P1口8位双向口线(在引脚的18号端子)。P20P27 P2口8位双向口线(在引脚的2128号端子)。P30P37 P3口8位双向口线(在引脚的1017号端子)。1、P0口有三个功能: (1)外部扩展存储器时,用作数据总线(如图中的D0D7为数据总线接口)(2)外部扩展存储器时,用作地址总线(如图中的A0A7为地址总线接口)(3)不扩展时,可做一般的I/O口使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。2、P1口功能:P1口只做I/O口使用,其内部有上拉电阻。3、P2口有两个功能:(1)扩展外部存储器时,当作地址总线使用;(2)做一般I/O口使用,其内部有上拉电阻。4、P3口有两个功能:除了作为I/O口使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置。当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源;所以如果P0口作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效。5、ALE/PROG 地址锁存控制信号:在系统扩展时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。PROG为编程脉冲的输入端,在89C51单片机内部有一个4KB的程序存储器(ROM),ROM的作用就是用来存放用户需要执行的程序的,那么我们是怎样把编写好的程序存入进这个ROM中的呢?实际上是通过编程脉冲输入才能写进去的,这个脉冲的输入端口就是PROG。6、PSEN 外部程序存储器读选通信号:在读外部ROM时PSEN低电平有效,以实现外部ROM单元的读操作:(1)内部ROM读取时,PSEN不动作;(2)外部ROM读取时,在每个机器周期会动作两次;(3)外部RAM读取时,两个PSEN脉冲被跳过不会输出;(4)外接ROM时,与ROM的EA脚相接。7、EA/VPP 访问程序存储器控制信号:(1)接高电平时:CPU读取内部程序存储器(ROM)(2)接低电平时:CPU读取外部程序存储器(ROM)。8031单片机内部是没有ROM的,那么在应用8031单片机时,这个脚是一直接低电平的。8、RST 复位信号:当输入的信号连续2个机器周期以上高电平时即为有效,用以完成单片机的复位初始化操作,当复位后程序计数器PC=0000H,即复位后将从程序存储器的0000H单元读取第一条指令码。9、XTAL1和XTAL2 :外接晶振引脚。当使用芯片内部时钟时,此二引脚用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。10、VCC:电源端接+5V电压输入。11、GND:接地端。3.2、DS18B20的简介 DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。数字温度计采用温度敏感元件(温度传感器DS18B20),将温度变化转换为电信号,通过D/A转换将模拟信号转换为数字信号,通过单片机处理将数字信号和温度联系起来,最终在LED或LCD上显示出来,方便人们观察。满足在工业或者农业上温度的检测。DS18B20是一款新型的温度检测芯片,无需A/D转换。可用数据供电,电压范围3.0V-5.5V。测量温度范围:-55125摄氏度。通过编程可实现912位数字的读数方式。用户可自设定非易失性的报警上限。支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现多点测温。负压特性,电源极性接反时,温度计不会发热而烧毁,但是不能正常工作。DS18B20的电路典型连接电路图如下所示: 图3.2 DS18B20电路参考图DS1820使用中注意事项:DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:1) 较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用PL/M、C等高级语言进行系统程序设计时,对DS1820操作部分最好采用汇编语言实现。2) 在DS1820的有关资料中均未提及单总线上所挂DS1820数量问题,容易使人误认为可以挂任意多个DS1820,在实际应用中并非如此。当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。 3) 连接DS1820的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用DS1820进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。4) 在DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要等待DS1820的返回信号,一旦某个DS1820接触不好或断线,当程序读该DS1820时,将没有返回信号,程序进入死循环。这一点在进行DS1820硬件连接和软件设计时也要给予一定的重视。3.3、LCD1602液晶显示器简介 1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线。 VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中具体的引脚功能如表1所示:表1 LCD1602各引脚的功能引脚符号功能说明1VSS 一般接地2VDD接电源(+5V)3 V0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 4RS RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。5R/W 为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 6E E(或EN)端为使能(enable)端,下降沿使能。7DB0 低4位三态、 双向数据总线 0位(最低位)8DB1 低4位三态、 双向数据总线 1位 9DB2 低4位三态、 双向数据总线2位 10DB3 低4位三态、 双向数据总线 3位 11DB4 高4位三态、 双向数据总线 4位 12DB5 高4位三态、 双向数据总线5位 13DB6 高4位三态、 双向数据总线 6位 14DB7 高4位三态、 双向数据总线7位 15BLA 背光电源正极 16BLK 背光电源负极 LCD1692的电路原理图如图3.2所示:图3.2 LCD1692电路原理图 第4章 硬件电路设计温度计电路设计原理图如图4.1所示,控制器使用单片机AT89C2051,温度计传感器使用DS18B20,用液晶实现温度显示。本温度计大体分三个工作过程。首先,由DS18820温度传感器芯片测量当前的温度,并将结果送入单片机。然后,通过89C205I单片机芯片对送来的测量温度读数进行计算和转换,井将此结果送入液晶显示模块。最后,SMC1602A芯片将送来的值显示于显示屏上。由图1可看到,本电路主要由DSl8820温度传感器芯片、SMCl602A液晶显示模块芯片和89C2051单片机芯片组成。其中,DSI8B20温度传感器芯片采用“一线制”与单片机相连,它独立地完成温度测量以及将温度测量结果送到单片机的工作4.1、控制和设置电路如图所示电路 图4.1 控制和设置电路4.2、外部振荡电路单片机外部振荡电路单片机必须在 80C51 的驱动下才能工作.在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元。外部振荡电路如下:图4.2 外部震荡电路4.3、显示电路LED显示器工作在静态显示时,其公共阳极(或阴极)接VCC(或GND),一直处于显示有效状态,所以每一位的显示内容必须由锁存器加以锁存,显示各位相互独立。静态显示时,LED的亮度高,控制容易,但功耗大,所需口线多。若显示位数增多,则静态显示方式很难适应。一般需要采用动态显示方式。对于动态显示,一般将所有位的段选线的同名端联在一起,由一个8位I/O口控制,形成段选线的多位复用。而各位的公共阳极或公共阴极则分别由相应的I/O口线控制,实现各位形成段的时分选通,即同一时刻只有被选通位是能显示相应的字符,而其他所有位都是熄灭的。由于人眼有视觉暂留现象,只要每位显示间隔足够短,则会造成多位同时点亮的假象。这就需要单片机不断的对显示进行控制,牺牲单片机的CPU时间来换取元件的减少以及显示功耗的降低。工作过程:将字型代码送入字型锁存器,这时所有的显示块都有可能显示同样的字符;再将需要显示的位置代码送入字位锁存器。为防止闪烁,每位显示时间在12ms,然后显示另一位,CPU需要不断地进行显示刷新。由N个LED显示块可构成N位LED显示器。N位LED显示器需要N根位线和8*N根选线。根据显示电路不同,位选线和段选线的连接方式不同,实际所需的位选线和段选线的根数也不一样如下: 图4.3 显示电路 第5章 软件设计及主要子程序5.1、软件设计思路图5.1 软件设计思路5.2、DS18B20的读写程序DS18B20的读写操作是数字温度计软件的重要组成部分。它读取的数据是单片其处理数据的主要来源,其源程序如下所示:#include /#include sbit DQ = P34;/定义DQ引脚为P3.4void delay_18B20(unsigned int i)while(i-);/*ds18b20初始化函数*/void Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ复位 delay_18B20(8); /稍做延时 DQ = 0; /单片机将DQ拉低 delay_18B20(80); /精确延时 大于 480us DQ = 1; /拉高总线 delay_18B20(14); x=DQ; /稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay_18B20(20);/*ds18b20读一个字节*/ unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; delay_18B20(4); return(dat);/*ds18b20写一个字节*/ void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; delay_18B20(5); DQ = 1; dat=1; /*读取ds18b20当前温度*/unsigned char *ReadTemperature(char TH,char TL,unsigned char RS)unsigned char tt2;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x4E); / /写入写暂存器命令,修改TH和TL和分辩率配置寄存器/先写TH,再写TL,最后写配置寄存器WriteOneChar(TH);/写入想设定的温度报警上限WriteOneChar(TL);/写入想设定的温度报警下限WriteOneChar(RS);/写配置寄存器,格式为0 R1 R0 1,1 1 1 1/R1R0=00分辨率娄9位,R1R0=11分辨率为12位delay_18B20(80); / this message is wery importantInit_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换delay_18B20(80); / this message is wery importantInit_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度delay_18B20(80);tt0=ReadOneChar(); /读取温度值低位tt1=ReadOneChar(); /读取温度值高位return(tt);5.3、 LCD1602的初始化对LCD1602进行操作前要对其进行初始化,初始化完成后才能正常显示。如果想在 LCD1602中显示,要先写入一个指令,要指明显示的数据。相应的 LCD1602初始化的程序如下所示:#include /#include #include sbit LcdRs= P20;sbit LcdRw= P21;sbit LcdEn = P22;sfr DBPort = 0x80;/P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口unsigned char LCD_Wait(void)LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();LcdEn=0;return DBPort;#define LCD_COMMAND0 / Command#define LCD_DATA1 / Data#define LCD_CLEAR_SCREEN0x01 / 清屏#define LCD_HOMING 0x02 / 光标返回原点void LCD_Write(bit style, unsigned char input)LcdEn=0;LcdRs=style;LcdRw=0;_nop_();DBPort=input;_nop_();/注意顺序LcdEn=1;_nop_();/注意顺序LcdEn=0;_nop_();LCD_Wait();#define LCD_SHOW0x04 /显示开#define LCD_HIDE0x00 /显示关 #define LCD_CURSOR0x02 /显示光标#define LCD_NO_CURSOR0x00 /无光标 #define LCD_FLASH0x01 /光标闪动#define LCD_NO_FLASH0x00 /光标不闪动void LCD_SetDisplay(unsigned char DisplayMode)LCD_Write(LCD_COMMAND, 0x08|DisplayMode);#define LCD_AC_UP0x02#define LCD_AC_DOWN0x00 / default#define LCD_MOVE0x01 / 画面可平移#define LCD_NO_MOVE0x00 /defaultvoid LCD_SetInput(unsigned char InputMode)LCD_Write(LCD_COMMAND, 0x04|InputMode);void LCD_Initial()LcdEn=0;LCD_Write(LCD_COMMAND,0x38); /8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); /开启显示, 无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); /清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); /AC递增, 画面不动void GotoXY(unsigned char x, unsigned char y)if(y=0)LCD_Write(LCD_COMMAND,0x80|x);if(y=1)LCD_Write(LCD_COMMAND,0x80|(x-0x40);void Print(unsigned char *str)while(*str!=0)LCD_Write(LCD_DATA,*str);str+;void LCD_Print(unsigned char x, unsigned char y, unsigned char *str) GotoXY(x,y); Print(str);该程序显示了温度的测量范围。还有就是设计要求实现的,检测当前环境的温度。并显示出来。 5.4、温度检测主程序要完成设计要求的要在单片机上进行编程,完成温度的检测和显示,相应的程序如下所示:#include /#include #include #include #include #include #include #include DS18B20.h #include LCD1602.h/液晶显示头文件sbit DQ = P34;/定义DQ引脚为P3.4unsigned char t2,*pt; unsigned char TempBuffer19=0x2b,0x31,0x32,0x32,0x2e,0x30,0x30,0x43,0;unsigned char TempBuffer017=0x54,0x48,0x3a,0x2b,0x31,0x32,0x35,0x20,0x54,0x4c,0x3a,0x2b,0x31,0x32,0x34,0x43,0;unsigned char code dotcode4=0,25,50,75;void covert0( unsigned char TH, unsigned char TL)/将温度上下限转换为LCD显示 if(TH0x7F) /判断正负,如果为负温,将其转化为其绝对值 TempBuffer03=0x2d; /0x2d为-的ASCII码TH=TH;TH+; else TempBuffer03=0x2b; /0x2B为+的ASCII码 if(TL0x7f) TempBuffer011=0x2d; /0x2d为-的ASCII码 TL=TL+1; else TempBuffer011=0x2b;/0x2B为+的ASCII码 TempBuffer04=TH/100+0x30; /分离出TH的百十个位 if( TempBuffer04=0x30) TempBuffer04=0xfe; /百位数消隐 TempBuffer05=(TH%100)/10+0x30;/分离出十位 TempBuffer06=(TH%100)%10+0x30; /分离出个位 TempBuffer012=TL/100+0x30; /分离出TL的百十个位 if( TempBuffer012=0x30) TempBuffer012=0xfe; /百位数消隐 TempBuffer013=(TL%100)/10+0x30;/分离出十位 TempBuffer014=(TL%100)%10+0x30; /分离出个位void covert1(void) /将温度转换为LCD显示的数据 unsigned char x=0x00,y=0x00; t0=*pt; pt+; t1=*pt; if(t10x07) /判断正负温度 TempBuffer10=0x2d; /0x2d为-的ASCII码t1=t1; /下面几句把负数的补码/t0=t0;x=t0+1;t0=x;if(x255) t1+; else TempBuffer10=0x2b; /0xfe为变+的ASCII码 t1=4; /右移4位 x=x&0x0f;/和前面两句就是取出t0的高四位 t1=t1|x;/将高低字节的有效值的整数部分拼成一个字节 TempBuffer11=t1/100+0x30; /+0x30 为变 09 ASCII码 if( TempBuffer11=0x30) TempBuffer11=0xfe; /百位数消隐 TempBuffer12=(t1%100)/10+0x30; /分离出十位 TempBuffer13=(t1%100)%10+0x30; /分离出个位 t0=t0&0x0c;/取有效的两位小数 t0=2;/左移两位,以便查表 x=t0; y=dotcodex;/查表换算成实际的小数 TempBuffer15=y/10+0x30;/分离出十分位 TempBuffer16=y%10+0x30;/分离出百分位void delay(unsigned char i)while(i-);main() unsigned char TH=110,TL=-20; /下一步扩展时可能通过这两个变量,调节上下限 /测温函数返回这个数组的头地址 while(1) pt=ReadTemperature(TH,TL,0x3f); /上限温度-22,下限-24,分辨率10位,也就是0.25C /读取温度,温度值存放在一个两个字节的数组中,delay(100); covert1();covert0(TH,TL);LCD_Initial();/第一个参数列号,第二个为行号,为0表示第一行/为1表示第二行,第三个参数为显示数据的首地址LCD_Print(0,0,TempBuffer0);LCD_Print(0,1,TempBuffer1); 第6章 系统仿真与调试6.1、Keil编译Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势, Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。如果使用C语言编程,那么Keil几乎就是不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。本次设计采用汇编语言编程,生成.hex文件以供装载到Protues中的单片机进行仿真。6.2、Protues8仿真平台6.2.1、Protues8仿真简介及部分模块仿真Protues软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。迄今为止是世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等。在编译方面,它也支持IAR、Keil和MATLAB等多种编译。目标代码的加载方法为,在Protues编辑环境双击AT89C51,弹出下图所示的对话框,在PROGRAM FILM一栏中单击打开按钮,选中Keil中生成的lzy.hex文件,在CLOCK FREQUENCY栏中设置系统工作频率为12MHZ,单击OK完成目标代码的加载。图6.1 程序代码加载6.2.2、硬件电路总图与仿真点击运行按钮启动系统仿真,为了保护密码的隐蔽,输入密码时不显示数字而是显示一横线。硬件总图如下:图6.2 总图第7章 操作方法DS18B20虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:DS18B20从测温结束到将温度值转换成数字量需要一定的转换时间,这是必须保证的,不然会出现转换错误的现象,使温度输出总是显示85。在实际使用中发现,应使电源电压保持在5V左右,若电源电压过低,会使所测得的温度精度降低。较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用PL/M、C等高级语言进行系统程序设计时,对DS1820操作部分最好采用汇编语言实现。在DS18B20的有关资料中均未提及单总线上所挂DS18B20数量问题,容易使人误认为可以挂任意多个DS18B20,在实际应用中并非如此,当单总线上所挂DS18B20超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意第8章 课程设计总结通过这次用单片机对数字温度计的设计与仿真,让我对电子产品的设计程序与步骤牢牢把握,也让我对51单片机的基本原理与设计理念有深刻的理解,第一次用Proteus做仿真,开始很茫然不知道从什么地方下手,在软件上经常找不到自己想要的元器件,下载了一个教程学习后很快着手。短短的一个星期,从开始选题到完成设计,虽然碰到的很多让我头痛的问题,但是通过查阅资料,温习了以前所学过的知识,用理论联系实际并结合单片机原理与接口技术课程解决实际问题,巩固、加深和扩展了有关单片机设计方面的知识,尤其重要的是让我明白无论做什么事情都不能自认为简单或是困难,需要去实践以后才会真正理解,才能真正的解决问题。本次课程设计学到了许多知识,比如单片机编程实现控制温度检测和液晶屏示。过程中我对单片机的工作原理有了更深一步的体会。还有DS18B20温度传感器的功能与性质,它是一款新型的温度检测芯片,无需A/D转换。可以对多点温度进行检测。LCD1602可以对检测的结果进行显示。在这将近一周的时间里,基本上掌握了本次设计的基本理论基础,并完成了软件部分和硬件部分的设计,并最终设计出检测温度的数字温度计。通过检测,设计的成品能很好的完成传感器所处环境的温度,运行良好。在这两周的时间里,我们不仅学到了知识,还磨练了一种意志。在学习的过程中,我们要勤于思考,善于发现和解决问题,对于遇到的困难,要学会利用身边的资源。而且还要脚踏实地,实事求是的学习态度。 在这次设计过程中,学到了一些专业知识,将课本的理论得以实践,也非常感谢各位老师给我们提供这样的机会,让我对学到的知识很好的掌握,也锻炼了自己动手的能力。这次设计无论是现在还是以后对我的影响都很深刻,让我学会了许多,也体验了许多在课本上学不到的东西。附录PCB程序;电气112班-王磊-2011011937;数字温度计的设计#include /#include sbit DQ = P34;/定义DQ引脚为P3.4void delay_18B20(unsigned int i)while(i-);/*ds18b20初始化函数*/void Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ复位 delay_18B20(8); /稍做延时 DQ = 0; /单片机将DQ拉低 delay_18B20(80); /精确延时 大于 480us DQ = 1; /拉高总线 delay_18B20(14); x=DQ; /稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay_18B20(20);/*ds18b20读一个字节*/ unsigned char ReadOneChar(void)unsigned char i=0;unsigned char d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信息处理技术员核心知识与试题及答案
- 逐渐明朗2025年法学概论考试试题及答案
- 计算机社会责任试题及答案
- VB学习障碍的试题及答案解决方案
- 软件架构评估与优化试题及答案
- 行政管理重要条例试题及答案
- 经济模型与政策决策的关联试题及答案
- 行政管理理论架构与试题答案解析
- 2025年软考课程资料及试题及答案分享
- 【盐城】2025年江苏盐城市部分事业单位招聘退役大学生士兵10人笔试历年典型考题及考点剖析附带答案详解
- 关于电子旅游合同范例
- 中国经导管左心耳封堵术临床路径专家共识(2025版)解读
- 煤矿数字化智慧矿山整体解决方案(技术方案)
- 理化外包合同协议
- 水务集团笔试题目及答案
- 实际施工人装修合同协议
- 无人机在水利行业的应用
- 特种设备-叉车应急预案
- 粘土心墙土石坝设计计算书
- 2025黔西南民族职业技术学院辅导员考试题库
- 2024年食品安全员考试必会试题与答案
评论
0/150
提交评论