基于单片机的数字温度计设计(含程序、仿真图)
基于单片机的数字温度计设计_课程设计(仿真+C程序))
基于单片机的数字温度计设计_课程设计(仿真+C程序))前言科技发展到今天,人们的生活中涌现出各种各样的科技产品,各种各样的电子产品更是花样百出、遍及人们生活中的每一部分,现在人们更是感觉到了科技给人们带来的巨大发展,科学技术作为第一生产力在人类社会的发展中起了很大的推动作用,人类从原始向先进的发展都伴随着科学的发展。
当今微型计算机技术发展形成两大分支,一是以微处理器(Micro Processor Unit)为核心所构成的通用微机系统,主要用于科学计算、数据处理、图形图像处理、数据库管理、人工智能、数字模拟与仿真等领域。
另一分支是为控制器( Micro Controller Unit),俗称单片机。
单片机主要用于工业测控,如家用电器、计算机外围设备、工业智能化仪表、机器人、生产过程的自动控制、农业、化工、军事、航空航天等领域。
单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。
单片机也被称为微控制器(Microcontroller Unit),常用英文字母的缩写MCU 表示单片机,它最早是被用在工业控制领域。
单片机由芯片内仅有CPU的专用处理器发展而来。
最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。
INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。
随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术。
摘要:单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。
基于STC89C52单片机的数字温度计(附源代码,完美实现)
基于STC89C52单片机的数字温度计学院:信息科学与工程学院专业:电子信息科学与技术一、摘要温度的检测是工业生产中比较典型的应用之一,随着传感器在生产和生活中的更加广泛的应用,利用新型数字温度传感器实现对温度的测试与控制得到更快的开发。
本文设计了一种基于STC89C52单片机的温度检测系统,该系统将温度传感器DS18B20接在控制器的端口上,对温度进行采集,将采集到的温度值显示在1602液晶屏上。
经实验测试表明,该系统设计和布线简单,结构紧凑,有可读性高,反应速度快,测量准确,抗干扰能力强,性价比高,扩展方便等优点,具有关阔的应用前景。
关键词:STC89C52 数字温度计 DS18B20二、前言随着人民生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便是不可否定的,其中数字温度计就是一个典型的例子。
单片机控制温度检测系统的温感系统主要是DS18B20芯片,该芯片由一根总线控制,电压范围为3.0v--5.5v。
DS18B20具有测温方便、测温范围广、测温精度高等特点。
出于对此类问题的探索,我们设计并制作了此温度检测系统。
本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确。
其输出温度采用数字显示,主要用于对测温比较准确的场所,该设计控制器模块主要使用STC89C52单片机,测温传感模块使用DS18B20;显示模块使用1602液晶显示屏,可以只管、准确的显示所测温度值。
三、系统组成及工作原理3.1、总体设计方案经分析,将系统分为两个部分,一个是由温度传感器DS18B20组成的检测部分,另一个是由单片机和1602液晶组成的主控与显示部分。
如图所示DS18B20将检测到的数据送到单片机,单片机对接收到的数据进行处理并送到1602显示,6V电源给各个部分供电。
3.2系统单元的选择与论证3.2.1单片机控制模块的选择与论证方案一:采用XC9000系列的FPGA。
基于单片机的数字温度计设计(课程设计有电路图和程序)
课程设计题目数字式温度计设计学院计信学院专业测控技术与仪器班级2006级2班学生姓名徐春数字式温度计设计组长:徐春 2006004071组员:蒋薇薇 2006004041 张静 2006004039 雷小利 2006004042 叶赛虎 2006004068 杨欣 2006004012摘要:随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数字温度计,本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。
关键词:单片机,数字控制,温度计,DS18B20,AT89S520 引言随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。
本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用单片机AT89S52,测温传感器使用DS18B20,用3位共阳极LED数码管以串口传送数据,实现温度显示,能准确达到以上要求1、设计方案本设计方案的选择主要是感温元件的选择,经查阅资料,IC式感温器在市场上应用比较广泛的有以下几种:(1)AD590:电流输出型的测温组件,温度每升高1摄氏度K(凯式温度),电流增1uA,温度测量范围在-55℃~150℃之间。
其所采集到的数据需经A/D转换,才能得到实际的温度值。
.(2)DSl8B20:除了测量温度外,它还可以把温度值以数字的方式(9Bit)送出,温度送出的精度为O.5℃,温度测量范围在-55℃~125℃之间,可以做恒温控制。
(3)SMARTEC感温组件:这是一只3个管脚感温IC,温度测量范围在—45℃~130。
基于单片机的数字显示体温计设计
基于单片机的数字显示体温计设计摘要本文针对传统的测温仪器自身存在的诸多缺点以及在现实生活中所暴露的使用不便,缺少安全性等缺陷,提出了一种非接触式红外测温系统设计方案。
该系统是以STC89C52作为红外测温传感器数据传输和控制核心。
此外,还设计了液晶显示器、功能按键等外围模块。
该系统最大的创新之处在于实现基本的非接触式温度测量功能,它的安全性,方便性更有利于普通百姓的使用。
本次红外测温系统的设计简化了电路结构,提高了测温的稳定性及可靠性。
该系统的反应速度快、传输效率高、测量精度高、可靠性高等优点,将会在和传统测温仪器的竞争中脱颖而出,在不久的将来一定会具有广阔的市场前景。
关键词:STC89C52;红外测温;数字显示Digital Display Thermometer Design Dased on single chip microcomputerAiming at disadvantages of the traditional temperature measurement instrument own existence and exposure of difficult to use in real life, the lack of security, this paper proposes a non-contact infrared temperature measurement system design. The system is based on STC89C52 as infrared measuring temperature sensor data transmission and control core. In addition, design the function of liquid crystal displays, buttons and other peripheral modules. The biggest innovation in the system realizes the basic contactless temperature measurement function, its safety, convenience is more advantageous to the use of the common people. The infrared temperature measurement system is designed to simplify the circuit structure, improves the stability and reliability of measuring temperature. The system response speed, high transmission efficiency, high measurement precision, high reliability, etc. Will be in competition and the traditional temperature measurement instruments, in基于单片机的数字显示体温计设计the near future will have broad market prospects.Key words:STC89C52;Infrared Temperature Measurement;Digital Display目录1总设计方案论述 (6)1.1选题的背景及意义 (6)1.2 课题的研究现状与发展趋势 (5)1.2.1 研究现状 (5)1.2.2发展趋势 (6)2红外数字显示测温系统硬件电路设计 (7)2.1红外数字显示测温系统基本原理与构成 (7)2.1.1红外数字显示测温系统基本原理 (7)2.1.2红外数字显示测温系统构成 (7)2.2单片机的主控电路设计 (8)2.2.1STC89C52芯片简介 (8)2.2.2系统主控电路 (9)2.3红外温度传感器模块电路的设计 (10)2.3.1TN901红外测温模块 (10)2.3.2红外测温原理 (10)2.3.3红外测温模块的工作时序 (12)2.3.4 红外测温模块温度值计算 (12)2.3.5 红外测温模块电路 (12)2.4 LCD1602显示电路设计 (13)2.4.1 LCD1602显示器简介 (13)2.4.2 LCD1602显示电路 (14)2.5 按键电路的设计 (15)2.6系统其它硬件电路 (16)2.6.1系统的电源电路 (16)2.6.2系统晶振电路 (16)2.6.3复位电路的设计 (17)3系统软件设计 (18)3.1软件编译KeilC51开发环境 (18)3.2系统软件设计要求及任务 (18)3.3系统主程序流程图 (18)3.4系统子程序流程图 (19)3.4.1功能按键流程图 (19)3.4.2红外测温流程图 (20)参考文献 (21)致谢 (23)附录A (24)附录B (26)基于单片机的数字显示体温计设计1总设计方案论述1.1选题的背景及意义随着经济的发展,社会生活水平的提高,人们对自身身体情况愈来愈重视。
基于单片机的数字温度计设计(附代码及仿真)
基于STC89C52的数字温度计目录1、方案选择1.1、主控芯片选择 (2)1.2、显示模块 (2)1.3、温度检测模块 (2)2、系统硬件设计2.1、51单片机最小系统设计 (2)2.2、温度检测电路设计 (2)3、系统软件设计3.1、LED显示电路设计 (2)3.2、温度检测电路设计 (2)3.3、仿真界面 (3)4、实训与焊接过程4.1、焊接与调试 (4)4.2、焊接实物图 (4)6、总结 (4)7、附录附录1、原理图 (5)附录2、程序清单………………………………………….5~91、系统方案选择1.1 主控芯片选择STC89C52RC是采用8051核的ISP在线可编程芯片,最高工作时钟频率80MHz,片内含8KB的可反复擦写1000次的Flash只读存储器,器件兼容MCS-51指令系统及8051引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,具有在线可编程特定,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。
STC89C52RC系列单片机是单时钟周期、高速、低功耗的新一代8051单片机。
1.2 时钟及显示模块数码管亮度高,显示大,特别是显示的温度很直观,价格比较便宜。
1.3 温度检测模块DS18B20数字温度传感器是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。
因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
它在实际应用中不需要外部任何元器件即可实现测温,测量温度范围在-55到+125摄氏度之间。
2、系统硬件设计2.1 51单片机最小系统设计以STC89C52单片机为核心,选用12M的晶振,这是最常用的选择,外接电容没有特别的要求,但是外接电容的大小会影响振荡器的频率高低、振荡器的稳定性和起振的快速性,因此我们选用30pf的电容作为起振电容。
复位电路为按键低电平复位,当按键按下,RET端为高电平,当高电平持续4us的时间就可以使单片机复位。
基于单片机的数字温度计设计方案
基于单片机的数字温度计设计方案1.1 数字式温度计的设计目的与要求要想基于AT89C51系列单片机的应用与开发,就要了解单片机的构造及原理,熟悉单片机最小系统及其应用。
同时巩固和加强“单片机接口技术”课程的理论知识,掌握单片机系统一般的设计方法,并了解电子产品研制开发过程。
在设计完成过程中,学会培养独立分析问题和解决问题的能力以及创新能力和创新思维。
不断提高自身分析问题和解决问题的能力以及创新能力和创新思维。
作为此次毕业设计的最终成果,本文对数字式温度计的设计要求如下:1、数字式温度计的基本围在-50 C -110 C之间;2、数字式温度计的精度误差小于0.5 C;3、数字式温度计要用LED数码管直读显示;4、同时要具有支持扩展的相关功能;5、要具有任意设定数字式温度计温度上下限功能;6、超过温度计上下限,要具有报警功能。
1.2 数字式温度计设计思路本次设计将以AT89C51单片机作为核心器件,组成一个具有多种拓展功能的数字式温度计。
此次设计采用模块化编程方法,将各个功能细化,逐个完成,最终实现整个温度计功能。
在最初的设计方案中,有两种方式可供选择:一种是可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到 A/D 转换电路。
另外一种则是考虑到用温度传感器。
采用一只温度传感器DS18B20可以很容易直接读取被测温度值,进行转换,就可以 满足设计要求。
以上两种方案第二种更为简单明了,避免了 AD 转换电路的复杂应用。
因此本次设计采用了第二种方案。
1.3数字式温度计设计原理框图图1.1数字式温度计设计原理框图1.4数字式温度计工作过程简要分析当系统启动后,各模块电路开始工作,温度传感器随机提供 一个温度值,生成的温度信号脉冲经过 AT89C51单片机处理显示 在LED 数码显示管上。
基于单片机的简易数字温度计的设计
基于单片机的简易数字温度计的设计张逊摘要本文介绍了一种基于单片机的简易数字温度计的设计。
该设计主要由三个模块组成:温度采集模块,数据处理模块及显示模块。
温度采集主要由温度传感器DS18B20来完成,它负责把采集到的模拟量转换为相应的数字量在传送到数据处理模块。
数据处理则由芯片STC89C52RC来完成,其负责把DS18B20传送来的数字量经过一定的数据处理,产生相应的显示码送到显示模块进行显示;此外,它还控制着芯片DS18B20相互通讯。
该系统的数字温度计电路简单,所用的元件较少,成本低,且测量精度和可靠性较高。
此数字温度计可以测量得温度范围—55~+125℃并通过一个四位一体的7段数码管显示出来。
关键词单片机;数字温度计;温度传感器;STC89C52RC;DS18B20Based on single chip simple digitalthermometer designZhangXunAbstract This paper introduces a kind of based on single chip simple digital thermometer design. This design mainly consists of three modules: temperature acquisition module, data processing module and display module. Temperature acquisition is mainly composed of temperature sensor DS18B20 to complete, it is responsible for the collection of the analog conversion to the corresponding digital quantity in the transfer to the data processing module. Data processing by the chip STC89C52RC to complete, which is responsible for the DS18B20 transfer to the digital quantity in the course of data processing, produce the corresponding display code to display module display; In addition, it also control the chip DS18B20 mutual communication.The system of the digital thermometer circuit is simple, the element used less, low cost, and high measuring accuracy and reliability. The digital thermometer can measure temperature range - 55 ~ + 125 ℃ and through a quaternity seven period of digital tube display.Keywords Single-chip microcontroller; Digital thermometer; Temperature sensor; AT89C51; DS18b20目录1 引言 (1)2 设计总体方案 (2)2.1设计要求 (3)2.2 设计思路 (4)2.3 设计方案 (5)3 硬件电路设计 (6)3.1 温度采集模块 (3)3.2 单片机系统 (9)3.3 复位电路和时钟电路 (16)3.4 数码管显示系统设计 (18)3.5 总体电路设计 (21)4 程序设计 (14)4.1 程序设计总方案 (23)4.2 系统子程序设计 (23)5面包电路的搭建 (25)5.1 硬件的调试 (25)5.2 显示结果分析 (18)6实物的制作 (19)结论 (37)参考文献 (38)附录程序代码 (22)致谢 (39)1 引言在环境的舒适度测量中,温度、湿度和空气质量是最基本的三个被测量,其中温度的测量最为经常。
基于51单片机数字温度计设计
课题:基于51单片机数字温度计设计专业:电子信息工程班级:(1)班学号:姓名:峰指导教师:周冬芹设计日期:成绩:重庆大学城市科技学院电气学院基于51单片机数字温度计设计一、设计目的1、掌握单片机电路的设计原理、组装与调试方法。
2、掌握LED数码显示电路的设计和使用方法。
3、掌握DS18B20温度传感器的工作原理及使用方法。
二、设计要求1、本次单片机课程设计要求以51系列单片机为核心,以开发板为平台。
2、设计一个数字式温度计,要求使用DS18B20温度传感器测量温度。
3、经单片机处理后,要求用4位一体共阴LED数码管来设计显示电路,以显示测量的温度值。
4、另外还要求在设计中加入报警系统,如果我们所设计的系统用来监控某一设备,当设备的温度超过或低于我们所设定的温度值时,系统会产生报警。
5、要求在设计中加入上下限警报温度设置电路。
三、设计的具体实现1数字温度计设计的方案在做数字温度计的单片机电路中,对信号的采集电路大多都是使用传感器,这是非常容易实现的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。
采集之后,通过使用51系列的单片机,可以对数据进行相应的处理,再由LED显示电路对其数据进行显示。
2系统设计框图温度计电路设计总体设计方框图如下图所示,控制器采用单片机A T89C51,温度传感器采用DS18B20,用4位一体共阴LED数码管以串口传送数据实现温度显示。
此外,还添加了报警系统,对温度实施监控。
3主控器AT89C51芯片对于单片机的选择,可以考虑使用8031与8051系列,由于8031没有内部RAM,系统又需要大量内存存储数据,因而不适用。
AT89C51 以低价位单片机可为提供许多高性价比的应用场合,可灵活应用于各种控制领域,对于简单的测温系统已经足够。
单片机AT89C51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要该器件是INTEL公司生产的MCS一5l系列单片机中的基础产品,采用了可靠的CMOS工艺制造技术,具有高性能的8位单片机,属于标准的MCS—51的CMOS产品。
数字温度计仿真图+源程序
源程序#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intucharyear,mon,day,xinqi;ucharsecond,minute,hour;ucharReadValue;uchardown,count;uchar flag; // 加减标志位char newsec,newmin,newhour; //重写数据用的秒,分,时char newyear,newmon,newday,newxinqi;uchar q;//---------------------ucharbai,shi,ge,fen,miao;#define t_cont 0.0625#define conever 0x44#define config 0x5f#define read 0xbe#define write 0x4e#define jmp 0xcc#define copy 0x48#define recall 0xb8sbitfmq=P2^3;sbitrs = P2^0;sbitrw = P2^1;sbit e = P2^2;sbit K1=P3^4;sbit K2=P3^5;sbit K3=P3^6;sbit K4=P3^7;sbit DATA=P1^0; //位定义1302芯片的接口sbit SCLK=P1^1; //位定义1302芯片的接口sbit RST =P1^4; //位定义1302芯片的接口bit t_sign;bit flag1;sbit a=ACC^0;sbitdq=P1^5;float temp=0;//----------------------------------------//函数声明//----------------------------------------void delayus(uint n);void delayms(uint k);void mingling(uchar com);void Write1302(uchardat);uchar Read1302(void);void WriteSet1302(ucharCmd,uchardat);uchar ReadSet1302(ucharCmd);void Int1302(void);void readtime(void);void display(void);void Setdisplay(void);void menu(void);void inmenu(void);void max();void min();void funcinc();void turn_sub(ucharnewval,ucharnewaddr); void scanquit();void funcquit();//--------------------------------------------------------//函数功能:us延时//-------------------------------------------------------- void delayus(uint n){uchar i;for(i=0;i<n;i++);}void delayms(uint k){uchar i;for(i=0;i<k;i++)delayus(100);}void delaya(uint m){while(m--);}void init_1820(){uchar i=1;while(flag1==0){dq=1;delaya(8);dq=0;delaya(52);dq=1;delaya(2);while(1){i=dq;if(i==0){flag1=1;delaya(10);break;}}}flag1=0;}/*************向1820发送字节************/ void byte_1820(uchardat){uchar i=0;for(i=0;i<8;i++){dq=0;ACC=dat&0x01;dq=a;delaya(5);dq=1;dat>>=1;}}/**************读1820的数据*************/ uchar read_1820(void){uchari,indat;indat=0;for(i=0;i<8;i++){dq=0;indat>>=1;dq=1;if(dq) indat|=0x80;delaya(4);}return(indat);}/************获取TEM*****************/ void readtem(){uint y;uchar td=0;uchartg=0;uchar k;init_1820();byte_1820(jmp);byte_1820(conever);init_1820();byte_1820(jmp);byte_1820(read);td=read_1820();tg=read_1820();k=tg&0x08;if(k==0x08){t_sign=1;tg=tg&0x07;temp=(tg*256+td)*t_cont;temp=(-temp*100+52800);}else {t_sign=0;tg=tg&0x07;temp=(tg*256+td)*t_cont;temp=temp*100;}bai=(uint)temp/10000;y=(uint)temp%10000;shi=y/1000;y=(uint)y%1000;ge=y/100;y=(uint)y%100;fen=y/10;miao=(uint)y%10;}//----------------------------------------------------------------------//函数功能:向1302写一个字节数据//----------------------------------------------------------------------void Write1302(uchardat){uchar i;SCLK=0; //拉低SCLK,为脉冲上升沿写入数据做好准备delayus(2); //稍微等待,使硬件做好准备for(i=0;i<8;i++) //连续写8个二进制位数据{DATA=dat&0x01; //取出dat的第0位数据写入1302delayus(2); //稍微等待,使硬件做好准备SCLK=1; //上升沿写入数据delayus(2); //稍微等待,使硬件做好准备SCLK=0; //重新拉低SCLK,形成脉冲dat>>=1; //将dat的各数据位右移1位,准备写入下一个数据位}}//-----------------------------------------------------------------------//函数功能:从1302读一个字节数据//-----------------------------------------------------------------------uchar Read1302(void){uchari,dat;delayus(2); //稍微等待,使硬件做好准备for(i=0;i<8;i++) //连续读8个二进制位数据{dat>>=1; //将dat的各数据位右移1位,因为先读出的是字节的最低位if(DATA==1) //如果读出的数据是1dat|=0x80; //将1取出,写在dat的最高位SCLK=1; //将SCLK置于高电平,为下降沿读出delayus(2); //稍微等待SCLK=0; //拉低SCLK,形成脉冲下降沿delayus(2); //稍微等待}return dat; //将读出的数据返回}//-----------------------------------------------------------------------//函数功能:根据命令字,向1302写一个字节数据//-----------------------------------------------------------------------void WriteSet1302(ucharCmd,uchardat){RST=0; //禁止数据传递SCLK=0; //确保写数居前SCLK被拉低RST=1; //启动数据传输delayus(2); //稍微等待,使硬件做好准备Write1302(Cmd); //写入命令字Write1302(dat); //写数据SCLK=1; //将时钟电平置于已知状态RST=0; //禁止数据传递}//----------------------------------------------------------------------//函数功能:根据命令字,从1302读取一个字节数据//----------------------------------------------------------------------uchar ReadSet1302(ucharCmd){uchardat;RST=0; //拉低RSTSCLK=0; //确保写数居前SCLK被拉低RST=1; //启动数据传输Write1302(Cmd); //写入命令字dat=Read1302(); //读出数据SCLK=1; //将时钟电平置于已知状态RST=0; //禁止数据传递return dat; //将读出的数据返回}//----------------------------------------------------------------------//读取1302内部时间到second,minute,hour;//----------------------------------------------------------------------void readtime(void){ReadValue = ReadSet1302(0x81); //从秒寄存器读数据second=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //将读出数据转化ReadValue = ReadSet1302(0x83); //从分寄存器读minute=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //将读出数据转化ReadValue = ReadSet1302(0x85); //从分寄存器读hour=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //将读出数据转化ReadValue = ReadSet1302(0x87); //从分寄存器读day=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = ReadSet1302(0x89); //从分寄存器读mon=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = ReadSet1302(0x8d); //从分寄存器读year=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = ReadSet1302(0x8b); //从分寄存器读xinqi=(ReadValue&0x0F);}//--------------------------------------------------------------------------------//DS1302的充电设置//--------------------------------------------------------------------------------void Int1302(void){second=ReadSet1302(0x81);second=((second&0x70)>>4)*10+(second&0x0f);WriteSet1302(0x8e,0x00); //允许写入1302WriteSet1302(0x90,0xa9); //打开充电二极管WriteSet1302(0x80,(((second&0x7f)/10)<<4)|(second%10)); //保存当前秒并允许ds1302工作WriteSet1302(0x8e,0x10); //禁止写入1302}//----------------------------------------------------//调时菜单进入//----------------------------------------------------void menu(void){if(!K1){delayms(1);if(!K1){down=1;while(K1!=1); //等待按键松开,如果按键不松,while条件成立进行空的死循环count++; //记录menu按下的次数if(count>7)count=1;WriteSet1302(0x8e,0x00); //允许写入1302second=ReadSet1302(0x81);WriteSet1302(0x80,0x80|second); //按下menu键后禁止ds1302工作,把秒写回1302WriteSet1302(0x8e,0x10); //禁止写入1302}}}//----------------------------------------------------------------------//进入菜单,调时程序//----------------------------------------------------------------------void inmenu(void){switch(count){case 1:{max();min();mingling(0xc7);mingling(0x0f);//开显示显示光标scanquit();}break;case 2:{max();min();mingling(0xc4);mingling(0x0f);//开显示显示光标scanquit();}break;case 3:{max();min();mingling(0xc1);mingling(0x0f);//开显示显示光标scanquit();}break;case 4:{max();min();mingling(0x89);mingling(0x0f);//开显示显示光标scanquit();}break;case 5:{max();min();mingling(0x86);mingling(0x0f);//开显示显示光标scanquit();}break;case 6:{max();min();mingling(0x83);mingling(0x0f);//开显示显示光标scanquit();}break;case 7:{max();min();mingling(0x8d);mingling(0x0f);//开显示显示光标scanquit();}break;default:break;}}//---------------------------------------------------//---------------------------------------------------void max() //判断加{if(!K2){delayms(1);if(!K2)while(!K2);flag=1;funcinc();}}void min() //判断减{if(!K3){delayms(1);if(!K3)while(!K3);flag=0;funcinc();}}//----------------------------------------------------void funcinc(){switch(count){case 1:turn_sub(newsec,0x81);second=ReadSet1302(0x81);WriteSet1302(0x80,0x80|second);break;case 2:turn_sub(newmin,0x83);break;case 3:turn_sub(newhour,0x85);break;case 4:turn_sub(newday,0x87);break;case 5:turn_sub(newmon,0x89);break;case 6:turn_sub(newyear,0x8d);break;case 7:turn_sub(newxinqi,0x8b);break;default: break;}}//--------------------------------------------------------------- void turn_sub(ucharnewval,ucharnewaddr){newval=ReadSet1302(newaddr); //读取当前时间newval=((newval&0x70)>>4)*10+(newval&0x0f); //将bcd码转换成十进制if(flag==1)newval++;else newval--;switch(count){case 1: if(newval>59) newval=0;break;case 2: if(newval>59) newval=0;break;case 3: if(newval>23) newval=0;break;case 4: if(newval>31) newval=0;break;case 5: if(newval>12) newval=0;break;case 6: if(newval>99) newval=0;break;case 7: if(newval>6) newval=0;break;default:break;}WriteSet1302(0x8e,0x00); //允许写入1302WriteSet1302((newaddr-1),((newval/10)<<4)|(newval%10)); //将新数据写入寄存器WriteSet1302(0x8e,0x10); //禁止写入1302display(); //将修改后的值显示出来}//-----------------------------------------------------//-----------------------------------------------------void scanquit(){if(!K4){mingling(0x0c);delayms(1);if(!K4)while(!K4);funcquit();}}void funcquit(){mingling(0x0c);count=0;down=0;second=ReadSet1302(0x81);second=((second&0x70)>>4)*10+(second&0x0f);WriteSet1302(0x8e,0x00);WriteSet1302(0x80,(((second&0x7f)/10)<<4)|(second%10)); //保存当前秒并允许ds1302工作WriteSet1302(0x8e,0x10);}//---------------------------------------------------------------------- //显示程序//---------------------------------------------------------------------- //////////////命令/////////////////////void delay(uint m){uinti,j;for(i=0;i<m;i++)for(j=0;j<570;j++);}bit lcd_bz(){bit result;rs=0;rw=1;e=1;_nop_();_nop_();_nop_();_nop_();result=(bit)(P0&0x80);e=0;return(result);}void mingling(uchar com){while(lcd_bz());rs=0;e=0;rw=0;P0=com;e=1;e=0;delay(1);}void lcd_pos(ucharpos){mingling(pos);}//////////////数据/////////////////////void shuju(ucharshu){rs=1;rw=0;e=0;P0=shu;e=1;e=0;delay(1);}////////////初始化//////////////////////void init_1602(void){mingling(0X38);//功能设置delay(1);mingling(0X0c);//显示开关控制delay(1);mingling(0X06);//输入方式设置delay(1);mingling(0X01);//清显示delay(1);}//////////////显示//////////////////void date(void){switch(xinqi){case 0: shuju('S');shuju('u');shuju('n');break;case 1: shuju('M');shuju('o');shuju('n');break;case 2: shuju('T');shuju('u');shuju('e');break;case 3: shuju('W');shuju('e');shuju('d');break;case 4: shuju('T');shuju('h');shuju('u');break;case 5: shuju('F');shuju('r');shuju('i');break;case 6: shuju('S');shuju('a');shuju('t');break;default:break;}}void display(void){readtem();readtime();while(lcd_bz());delay(100);lcd_pos(0x80);shuju('2');shuju('0');shuju(year/10+0x30);lcd_pos(0x83);shuju(year%10+0x30);shuju('/');shuju(mon/10+0x30);shuju(mon%10+0x30);shuju('/'); shuju(day/10+0x30);shuju(day%10+0x30);lcd_pos(0xc0);shuju(hour/10+0x30);shuju(hour%10+0x30);shuju(':'); shuju(minute/10+0x30);shuju(minute%10+0x30);shuju(':'); shuju(second/10+0x30);shuju(second%10+0x30);lcd_pos(0x8c);date();lcd_pos(0xc8);if(t_sign==1){shuju(0x2d);delaya(10);if(bai!=0)shuju(0x20);shuju(shi+0x30);shuju(ge+0x30);shuju(0x2e);shuju(fen+0x30);shuju(miao+0x30);shuju(0xdf);shuju(0x43);}else{shuju(0x20);delaya(10);if(bai!=0)shuju(bai+0x30);else shuju(0x20);shuju(shi+0x30);shuju(ge+0x30);shuju(0x2e);shuju(fen+0x30);shuju(miao+0x30);shuju(0xdf);shuju(0x43);}/********/if((shi>=3&&ge>=3)||(shi<=2&&ge<=9)){fmq=0;}if((shi<=3&&ge<3)||(shi>=2&&ge>9))fmq=1;}//---------------------------------------------------------------------- //函数功能:主函数//---------------------------------------------------------------------- void main(void){Int1302();init_1602();init_1820();down=0;count=0;while(1){menu(); //检测是否调时if(down==1){inmenu(); //进入调时模式}else{while(lcd_bz());display();}}}。
基于单片机的数字温度计设计
基于单片机的数字温度计设计引言随着现代信息技术的飞速发展和传统工业改造的逐步实现.能够独立工作的温度检测和显示系统使用于诸多领域。
传统的温度检测以热敏电阻为温度敏感元件。
热敏电阻的成本低,但需后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。
和传统的温度计相比,这里设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。
选用AT89C51型单片机作为主控制器件,DSl8B20作为测温传感器通过4位共阳极LED 数码管串口传送数据,实现温度显示。
通过DSl8B20直接读取被测温度值,进行数据转换,该器件的物理化学性能稳定,线性度较好,在0℃~100℃最大线性偏差小于0.1℃。
该器件可直接向单片机传输数字信号,便于单片机处理及控制。
另外,该温度计还能直接采用测温器件测量温度,从而简化数据传输和处理过程。
2 系统硬件设计方案根据系统功能要求,构造图1所示的系统原理结构框图。
图1 系统原理结构框图2.1 单片机的选择AT89C51作为温度测试系统设计的核心器件。
该器件是INTEL 公司生产的MCS 一5l 系列单片机中的基础产品,采用了可靠的CMOS 工艺制造技术,具有高性能的8位单片机,属于标准的MCS —51的CMOS 产品。
不仅结合了HMOS 的高速和高密度技术及CHMOS 的低功耗特征,而且继承和扩展了MCS —48单片机的体系结构和指令系统。
单片机小系统的电路图如图2所示。
图2 单片机小系统电路 AT89C51单片机的主要特性: (1)和MCS-51 兼容,4K 字节可编程闪烁存储器; (2)灵活的在线系统编程,掉电标识和快速编程特性; (3)寿命为1000次写/擦周期,数据保留时间可10年以上; (4)全静态工作模式:0Hz-33Hz ; (5)三级程序存储器锁定; (6)128*8位内部RAM ,32可编程I/O 线; (7)两个16位定时器/计数器,6个中断源;432P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78RST 9RXD/P3.010TXD/P3.111INT0/P3.212INTI/P3.313T0/P3.414T1/P3.515WR/P3.616RD/P3.717XTAL218XTAL119VSS 20P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P2.7/A1528PSEN 29ALE 30BA 31P0.7/AD732P0.6/AD633P0.5/AD534P0.4/AD435P0.3/AD336P0.2/AD237P0.1/AD138P00/AD039VCC40P2.0/A821UAT89C51Y112M C222PFC322PFC110UFS1RESETR110K VCC(8)全双工串行UART通道,低功耗的闲置和掉电模式;(9)看门狗(WDT)及双数据指针;(9)片内振荡器和时钟电路;2.2 温度传感器介绍DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。
单片机的数字温度计设计方案(附代码及仿真)
基于STC89C52的数字温度计目录1、绪论…………………………………………………………………… (3)2、方案选择2.1、主控芯片选择 (3)2.2、显示模块 (3)2.3、温度检测模块 (4)3、系统硬件设计3.1、51单片机最小系统设计 (4)3.2、电源供电电路设计 (5)3.3、LCD显示电路设计 (6)3.4、温度检测电路设计 (7)4、系统软件设计4.1、温度传感器数据读取流程图 (9)4.2、系统程序设计 (10)5、编程和仿真5.1、Keil编程软件 (1)15.2、proteus (11)5.3、仿真界面 (11)6、总结..................................................................................... .. (12)7、附录附录1、原理图 (12)附录2、程序清单 (13)1、绪论在信息高速发展的21世纪,科学技术的发展日新月异,科技的进步带动了测量技术的发展,现代控制设备的性能和结构发生了翻天覆地的变化。
我们已经进入了高速发展的信息时代,测量技术也成为当今科技的一个主流,广泛地深入到研究和应用工程的各个领域。
温度和人们的生活息息相关,温度的测量也就变得很重要。
2、系统方案选择2.1 主控芯片选择方案一:STC89C52RCSTC89C52RC是采用8051核的ISP在线可编程芯片,最高工作时钟频率80MHz,片内含8KB的可反复擦写1000次的Flash只读存储器,器件兼容MCS-51指令系统及8051引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,具有在线可编程特定,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。
STC89C52RC系列单片机是单时钟周期、高速、低功耗的新一代8051单片机。
方案二:ATmega8ATmega8是ATMAL公司在2002年第一季度推出的一款新型AVR 高档单片机。
基于单片机的数字温度计设计与仿真
基于单片机的数字温度计设计与仿真盘桂云(吉首大学物理科学与信息工程学院,湖南吉首 416000)摘要本课题以单片机为控制核心,设计了一款数字温度计。
该系统由51单片机、DS18B20温度传感器以及1602 LCD液晶显示屏等部件组成。
系统上电后进入实时温度显示状态,此时将DS18B20中的温度值读到单片机中并将其显示在LCD液晶显示屏上。
系统可以设置上下限报警温度值,当测得结果超过设定值时进行相应的报警,提供一个接口可以将温度值传送给其它控制器或计算机,测量准确且误差小,其误差在±0.02℃。
关键词:单片机;温度采集;LCD显示;温度传感器;数字温度计;Emluater and Design of Digital Thermometer Based onMicrocomputer ControlPanguiyun(College of Physics Science and Information Engineering,JishouUniversity,Jishou,Hunan 416000)AbstractThis topic with the microcontroller as control core , and design a digital thermometer.It consists of 51 single -chip microcomputer, 18B20 temperature sensor and 1602 LCD screen display etc.After power on, the system into real-time temperature display state, then the temperature 18B20 will read in the single-chip microcomputer and displayed in the LCD screen.System can set upper temperature alarm, when the alarm measured results than the setting measured corresponding alarm, System can provide an interface which sends the temperature to other controller or computer. There is little measuring error, measuring error at ±0.02℃.Key words:Microcontroller;Temperature acquisition;LCD display;Temperatere sensor;Digital thermometer目录第一章绪论 (1)1.1 系统背景 (1)1.2 系统概述 (1)1.2.1 系统功能 (1)1.2.2 系统所用器件及其作用 (1)第二章系统总体设计2.1 系统硬件电路总体设计 (3)2.2系统软件的总体设计 (4)2.3主程序的流程设计与实现程序 (6)3.2.1 主程序的流程设计 (6)3.2.2 主程序的实现程序 (7)第三章主要器件介绍3.1 18B20温度传感器 (8)3.2 1602液晶显示器 (8)第四章系统详细设计4.1控制模块电路设计 (10)4.1.1晶振电路设计 (10)4.1.2复位电路设计 (10)4.2温度传感器模块 (11)4.2.1温度传感器模块电路设计 (11)4.2.2温度传感器模块程序设计 (12)4.3 液晶显示模块 (16)4.3.1液晶显示模块电路设计 (16)4.3.2液晶显示模块程序设计 (17)4.4 键盘输入模块 (17)4.4.1键盘输入模块电路设计 (17)4.4.2键盘输入模块程序设计 (18)4. 5报警模块 (19)4.5.1报警模块电路设计 (19)4.5.1报警模块程序设计 (20)4. 6串行输出模块 (20)第五章软件仿真与测试5.1软件的仿真分析与仿真结果 (21)结束语 (25)参考文献 (26)致谢 (27)附录1:系统电路图 (28)附录2:源程序清单 (29)第一章绪论1.1 系统背景在工农业生产和日常生活中,对温度的测量占据着极其重要地位。
基于51单片机的数字温度计-毕业设计
数字测温计设计摘要:随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术。
在工业生产中温度是常用的被控参数,而采用单片机来对这些被控参数进行控制已成为当今的主流。
本文介绍了基于AT89S51单片机的测温系统,描述了利用DS18B20开发测温系统的过程,对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详实的分析,对各部分的电路也逐一进行了介绍,该系统灵活的实现了温度采集和显示,且可设定上下限报警温度,使用起来十分方便,适合于我们日常生活和生产中的温度测量,该系统结构相对简单,抗干扰能力较强,适合于不同环境下温度测量,有着广阔的应用前景。
关键词:AT89S51单片机DS18B20 温度测量Abstract:With the progress and development of era,microcontroller technology has become popular in our life,in the work,the scientific research and various fields,has become a relatively mature technology.The temperature measurement method and device of the highlights is very important.Posed by the single chip temperature sensor and temperature measurement system can be widely applied in many fields.目录第1章绪论 (1)1.2 选题的目的和意义 (1)1.2.1选题的目的 (1)1.2.2选题的意义 (1)第2章数字温度计的设计方案 (4)2.1 设计方案的确立及论证 (4)2.1.1 温度传感器DS18B20的选择 (4)2.1.2 显示器的选择 (5)2.1.3 单片机STC89C52的选择 (5)第3章系统硬件电路的设计 (4)3.1 主控制器 (4)3.1.1 AT89S51的介绍 (4)3.1.2 DS18B20的介绍 (9)3.1.3 DS18B20使用的注意事项 ......................................... 错误!未定义书签。
51单片机设计数字温度计(流程图+源码+实物图片)
DS18B20获取温度程序流程图DS18B20的读字节,写字节,获取温度的程序流程图如图所示。
DS18B20初始化程序流程图DS18B20读字节程序流程图DS18B20写字节程序流程图DS18B20获取温度程序流程图图3-4 DS18B20程序流程图显示程序设计显示电路是由四位一体的数码管来实现的。
由于单片机的I/O 口有限,所以数码管采用动态扫描的方式来进行显示。
程序流程图如图所示。
图显示程序流程图按键程序设计按键是用来设定上下限报警温度的。
具体的程序流程图如图所示。
N图按键程序流程图附1 源程序代码/********************************************************************* 程序名; 基于DS18B20的测温系统* 功能:实时测量温度,超过上下限报警,报警温度可手动调整。
K1是用来* 进入上下限调节模式的,当按一下K1进入上限调节模式,再按一下进入下限* 调节模式。
在正常模式下,按一下K2进入查看上限温度模式,显示1s左右自动* 退出;按一下K3进入查看下限温度模式,显示1s左右自动退出;按一下K4消除* 按键音,再按一下启动按键音。
在调节上下限温度模式下,K2是实现加1功能,* K1是实现减1功能,K3是用来设定上下限温度正负的。
* 编程者:ZPZ* 编程时间:2009/10/2*********************************************************************/#include<AT89X52.h> //将AT89X52.h头文件包含到主程序#include<intrins.h> //将intrins.h头文件包含到主程序(调用其中的_nop_()空操作函数延时)#define uint unsigned int //变量类型宏定义,用uint表示无符号整形(16位)#define uchar unsigned char //变量类型宏定义,用uchar表示无符号字符型(8位)uchar max=0x00,min=0x00; //max是上限报警温度,min是下限报警温度bit s=0; //s是调整上下限温度时温度闪烁的标志位,s=0不显示200ms,s=1显示1s左右bit s1=0; //s1标志位用于上下限查看时的显示void display1(uint z); //声明display1()函数#include"ds18b20.h" //将ds18b20.h头文件包含到主程序#include"keyscan.h" //将keyscan.h头文件包含到主程序#include"display.h" //将display.h头文件包含到主程序/***********************主函数************************/void main(){beer=1; //关闭蜂鸣器led=1; //关闭LED灯timer1_init(0); //初始化定时器1(未启动定时器1)get_temperature(1); //首次启动DS18B20获取温度(DS18B20上点后自动将EEPROM中的上下限温度复制到TH和TL寄存器)while(1) //主循环{keyscan(); //按键扫描函数get_temperature(0); //获取温度函数keyscan(); //按键扫描函数display(temp,temp_d*0.625);//显示函数alarm(); //报警函数keyscan(); //按键扫描函数}}/********************************************************************* 程序名; __ds18b20_h__* 功能:DS18B20的c51编程头文件* 编程者:ZPZ* 编程时间:2009/10/2* 说明:用到的全局变量是:无符号字符型变量temp(测得的温度整数部分),temp_d* (测得的温度小数部分),标志位f(测量温度的标志位‘0’表示“正温度”‘1’表* 示“负温度”),标志位f_max(上限温度的标志位‘0’表示“正温度”、‘1’表* 示“负温度”),标志位f_min(下限温度的标志位‘0’表示“正温度”、‘1’表* 示“负温度”),标志位w(报警标志位‘1’启动报警‘0’关闭报警)。
基于51单片机的数字温度计设计21557
用5v的直流电源串电阻接在数码管十二个引脚上,可以判断出各个引脚代表哪一段和哪一位,其中6号引脚不起作用。哪个是6号引脚呢?让三位数码管正对自己右下角的引脚为1号引脚,逆时针依次为2、3、4、5、6、7、8、9、…、12号引脚。判断出它的内部电路图如下图所示。
图6.1数码管内部电路图
4.3.2DS18B20温度传感器特性
(1) 适应电压范围宽,电压范围在3.0~5.5V,在寄生电源方式下可由数据线供电。
(2) 独特的单线接口方式,他与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通信。
(3) 支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。
基于51单片机的数字温度计设计
作 者
系(院)物理与电气工程学院
专 业电子信息工程
年 级
学 号
指导教师
日 期2012.05.12
成绩
学生诚信承诺书
本人郑重承诺:所呈交的论文是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写的研究成果,也不包含为获得安阳师范学院或其他教育机构的学位或证书所使用过的材料。所有合作者对本研究所作的任何贡献均已在论文中作了明确的说明和表示了。
④延时时间为45μs。
⑤将数据线拉到高电平1。
重复循环①~⑤步骤,直到发送完整个字节,注意最后将数据线拉到高位1。
(1)DS18B20读数据
时序图如下图7所示。
(3)DS18B20写数据
时序图如上图所示。
写数据步骤:
①将数据线拉高到1.
②延时2μs。
③将数据线拉低到0.