基于51单片机的温湿度与时钟显示器
基于51单片机的1602液晶显示温度和时间的C程序
//液晶显示温度#include "AT89X52.H"#define Ddata P0sbit RS=P2^7; //命令数据控制端sbit RW=P2^6; //读写选择端sbit LCDE=P2^5; //液晶使能端sbit DQ=P2^0; //ds18b20与单片机连接口#define uchar unsigned char#define uint unsigned intunsigned char hour=0,min=0,sec=0; //定义初值unsigned int count=0;unsigned char line1[16]={" temp: "}; //16个字符unsigned char line2[16]={" time: 00:00:00"}; //16个字符unsigned char tab[]={'0','1','2','3','4','5','6','7','8','9'}; //数组uchar data disdata[5];uint tvalue; //温度值uchar tflag; //温度正负标志void time();/*************************lcd1602程序**************************/ void delay1ms(unsigned int ms)//延时1毫秒(不够精确的){unsigned int i,j;for(i=0;i<ms;i++)for(j=0;j<110;j++);}void delay5ms()//延时5毫秒(不够精确的){unsigned int i;for (i=0;i<1000;i++);}void delay50us(){register int i;for (i=0;i<20;i++);}void delay(){unsigned char m,n;for(m=255;m>0;m--)for(n=255;n>0;n--);}void wr_com(unsigned char comm) //********写控制字符程序E=1 RS=0RW=0 **********//{LCDE=0; //使能端RS=0; //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。
基于51单片机的数字温湿度计设计及实现
U1
17 16 15 14 13 12 11 10 DATA SCK 2 3 RS RW E 28 27 26 25 24 23 22 21 32 33 34 35 36 37 38 39 E RW RS P3.7/RD P3.6/WR P3.5/T1 P3.4/T0 P3.3/INT1 P3.2/INT0 P3.1/TXD P3.0/RXD P2.7/A15 P2.6/A14 P2.5/A13 P2.4/A12 P2.3/A11 P2.2/A10 P2.1/A9 P2.0/A8 P0.7/AD7 P0.6/AD6 P0.5/AD5 P0.4/AD4 P0.3/AD3 P0.2/AD2 P0.1/AD1 P0.0/AD0 89C51 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1/T2EX P1.0/T2 8 7 6 5 4 3 2 1 VCC VCC
本次基于 51单片机的数 字温湿度计的 设计,结构简 单,使用方便, 测量精确,可 以满足一般性 要求。测量结 果分两行显示 温湿度值,如 右图所示。
结论
总结与展望
• 近几十年内,由于电子行业的迅速发展 和集成电路和高集成电路的产生,控制 仪走向微型化、多功能化。 • 该智能化系统具有成本较低、使用简单、 工作可靠等特点,在多个领域中具有一 定应用前景。
基于51单片机的多功能电子钟设计
基于51单片机的多功能电子钟设计1. 本文概述随着现代科技的发展,电子时钟已成为日常生活中不可或缺的一部分。
本文旨在介绍一种基于51单片机的多功能电子钟的设计与实现。
51单片机因其结构简单、成本低廉、易于编程等特点,在工业控制和教学实验中得到了广泛应用。
本文将重点阐述如何利用51单片机的这些特性来设计和实现一个具有基本时间显示、闹钟设定、温度显示等功能的电子钟。
本文的结构安排如下:将详细介绍51单片机的基本原理和特点,为后续的设计提供理论基础。
接着,将分析电子钟的功能需求,包括时间显示、闹钟设定、温度显示等,并基于这些需求进行系统设计。
将详细讨论电子钟的硬件设计,包括51单片机的选型、时钟电路、显示电路、温度传感器电路等。
软件设计部分将介绍如何通过编程实现电子钟的各项功能,包括时间管理、闹钟控制、温度读取等。
本文将通过实验验证所设计的电子钟的功能和性能,并对实验结果进行分析讨论。
通过本文的研究,旨在为电子钟的设计提供一种实用、经济、可靠的方法,同时也为51单片机的应用提供一个新的实践案例。
2. 51单片机概述51单片机,作为一种经典的微控制器,因其高性能、低功耗和易编程的特性而被广泛应用于工业控制、智能仪器和家用电器等领域。
它基于Intel 8051微处理器的架构,具备基本的算术逻辑单元(ALU)、程序计数器(PC)、累加器(ACC)和寄存器组等核心部件。
51单片机的核心是其8位CPU,能够处理8位数据和执行相应的指令集。
51单片机的内部结构主要包括中央处理单元(CPU)、存储器、定时器计数器、并行IO口、串行通信口等。
其存储器分为程序存储器(ROM)和数据存储器(RAM)。
程序存储器通常用于存放程序代码,而数据存储器则用于存放运行中的数据和临时变量。
51单片机还包含特殊功能寄存器(SFR),用于控制IO端口、定时器计数器和串行通信等。
51单片机的工作原理基于冯诺伊曼体系结构,即程序指令和数据存储在同一块存储器中,通过总线系统进行传输。
基于51单片机的温度检测报警系统与时钟毕业设计论文
基于51单片机的温度检测报警系统与时钟毕业设计论文基于51单片机的温度检测报警系统与时钟是一种将温度检测与报警功能与时钟功能相结合的设备。
本文通过介绍系统的设计思路、硬件电路和软件编程实现等方面,全面阐述了基于51单片机的温度检测报警系统与时钟的设计过程和实现方法。
首先,本文详细介绍了设计思路和目标。
基于51单片机的温度检测报警系统与时钟旨在实时监测环境温度,并在温度超过设定阈值时触发报警。
同时,系统还具备显示当前时间的时钟功能。
通过温度检测和报警功能以及时钟功能的结合,使得系统具有更多的实用价值和功能。
其次,本文详细描述了硬件电路的设计和实现。
硬件电路主要由传感器模块、温度检测模块、控制模块、报警模块和显示模块等组成。
传感器模块负责实时采集环境温度数据,温度检测模块根据采集到的数据进行温度判断和比较,控制模块根据判断结果决定是否触发报警,报警模块负责发出报警信号,显示模块则用于显示当前时间和报警状态等信息。
接下来,本文详细介绍了软件编程实现的过程。
软件编程主要包括系统初始化、温度检测、报警触发以及时钟显示等功能。
系统初始化主要用于初始化各个模块和参数设置,温度检测则通过读取传感器采集到的数据,进行温度判断和比较。
报警触发功能主要根据温度判断结果决定是否触发报警,以及如何触发报警。
时钟显示功能则通过调用系统时间,将当前的时间显示在显示模块上。
最后,本文总结了整个设计过程,对系统的优点和不足进行了总结,并对未来的改进方向进行了展望。
基于51单片机的温度检测报警系统与时钟不仅具有实时监测温度和触发报警的功能,还增加了时钟功能,使得系统更加实用。
然而,现有的系统仍有一些不足之处,例如温度检测精度有待提高,报警方式可以进一步优化等。
因此,在未来的研究中,可以对系统进行优化和改进,以提升系统的性能和功能。
总之,基于51单片机的温度检测报警系统与时钟是一种结合温度检测、报警和时钟显示功能的设备,具有一定的实用价值和应用前景。
51单片机时钟显示+温度显示
湘南学院物电系学院:电气工程学院题目:单片机LCD时钟显示和温度测量学生姓名:专业班级:指导老师:教研室主任:2012年6月29日一、概述:本次设计的LCD时钟显示和温度测量系统是由中央控制器、温度检测器、时钟系统、显示器及键盘部分组成。
控制器采用单片机STC89C51RC,温度检测部分采用DS18B20温度传感器,时钟系统用时钟芯片DS1302,用LCD液晶1602作为显示器,用蜂鸣器构成闹铃模块。
单片机通过时钟芯片DS1302获取时间数据,对数据处理后显示时间;温度传感器DS18B20采集温度信号送该给单片机处理;单片机再把时间数据和温度数据送液晶显示器1602显示;键盘是用来调整时间的。
二、方案设计及方案论证1. 时钟显示和温度测量的总体设计思路按照系统的设计功能要求,本时钟显示和温度测量系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合按键控制,来控制时钟、温度的调整及显示。
获得时钟显示和温度测量数据信息,单片机对其进行一系列的处理,最后通过液晶显示出来。
2.时钟显示和温度测量系统方案论证2.1时钟系统方案选择方案1:通过单片机内部的定时器/计数器,用软件实现,直接用单片机的定时器编程以实现时钟;方案2:用专门的时钟芯片实现时钟的记时,再把时间数据送入单片机,由单片机控制显示。
虽然用软件实现时钟硬件线路简单,但是程序运行的每一步都需要时间,多一步或少一步程序都会影响记时的准确度,对定时器定时也不是十分准确,时钟精度很低,对于我们实现所需要的功能造成软件编程非常复杂。
用专用时钟芯片硬件成本相对较高,但它的精度很高,软件编程很简单。
综上所述,选择方案2。
本次设计采用具有涓细电流充电能力的低功耗实时时钟电路DS1302。
它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿等多种功能。
它采用主电源和备用电源双电源供电。
它的工作电压范围2.0~5.5V,在2.2V时,小于300nA。
基于单片机的带温度显示的数字钟设计(c51语言编程)【开题报告】
开题报告电气工程及其自动化基于单片机的带温度显示的数字钟设计(c51语言编程)一、课题研究意义及现状1980年因特尔公司推出了MCS-51单片机,近30年来,其衍生系列不断出现,从Atmel加入FLASH ROM,到philips加入各种外设,再到后来的Cygnal推出C8051F,使得以8051为核心的单片机在各个发展阶段的低端产品应用中始终扮演着一个重要的角色,其地位不断升高,资源越来越丰富,历经30年仍在生机勃勃地发展,甚至在SoC时代仍占有重要的一席之地。
单片机具有体积小、功能强、低功耗、可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域智能仪表、机电一体化、实时控制、国防工业普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。
C语言已经成为当前举世公认的高效简洁而又贴近硬件的编程语言之一。
将C语言向单片机8051上移植十余20世纪80年代的中后期,经过几十年的努力,C语言已成为专业化单片机上的实用高级语言。
C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。
此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。
与汇编语言相比,C51在功能、结构、可读性、可维护性上有明显的优势,因而易学易用。
另外C51可以缩短开发周期,降低成本,可靠性,可移植性好。
因此,使用C语言进行程序设计已成为软件开发的一个主流,用C语言进行8051单片机程序设计是单片机开发与应用的必然趋势。
随着人们生活水平的提高,对物质需求也越来越高,人们已不再满足于钟表原先简单的报时功能,希望出现一些新的功能,诸如环境温度显示、日历的显示、重要日期倒计时、显示跑表功能等,用以带来更大的方便。
而所有这些,又都是以数字化的电子时钟为基础的,不仅应用了数字电路技术,而且还加入了需要模拟电路技术和单片机技术。
基于51单片机的粮仓温湿度检测系统毕业设计
基于51单片机的粮仓温湿度检测系统[摘要]粮仓温度湿度监测控制系统是基于STC12C52A60S2的数据采集、对比、控制的系统。
以STC12C52A60S2单片机为控制器,对温度传感器DS18B20传送的数字量信号和对湿度传感器HR202传送的模拟量信号进行采集和处理,当前值和设定温度上限值进行对比,进而执行控制作用,通过对继电器的控制进而控制设备的启停,对粮仓温度湿度进行调节,使其维持在适当范围,维护粮仓正常运行。
[关键词] 单片机、温湿度、检测、控制Abstract:The granary’s temperature and humidity control and detect system is based on the micro control unit of STC12C5A60S2,the system is used for date acquisition,comparison,and control.In this system,STC12C5A60S2 is the controller,the controller is designed to deal with temperature and humidity signal from the temperature sensor and humidity sensor.Then compare these data with limits the value of temperature and humidity.If the date is out of limits,then the controller send a control signal to warn people,besides,the controller will make the fan running to make the temperature and humidity lower.In this way,the granary can be working at usual status.Key words: MCU、temperature and humidity、control目录第一章绪论 (1)1.2相关领域国内外应用的现状及发展趋势 (1)1.3 粮仓温湿度检测控制系统原理 (2)1.4 本章小结 (2)第二章:系统分析、设计要求及模块选择 (3)2.1 设计要求 (3)2.2 单片机型号的选择 (3)2.21 采用STC89C52单片机 (3)2.22 采用STC12C5A60S2单片机 (3)2.3 显示系统模块的选择 (3)2.31采用LED数码管显示 (3)2.32采用1602液晶显示 (3)2.4 测温模块的选择 (4)2.41 采用模拟量温度传感器 (4)2.42 采用数字量温度传感器 (4)2.5 测湿模块的选择 (4)2.6 控制模块的选择 (4)2.7 通讯模块的选择 (4)2.8本章小结 (4)第三章系统总体方案及硬件电路模块设计 (5)3.1 系统总体设计思路: (5)3.2 系统硬件设计 (5)3.2.1 单片机最小系统 (5)3.2.2 温度信号采样电路模块 (9)3.2.3 湿度采样电路模块 (12)3.3 串口模块 (14)3.4显示模块 (15)3.5 控制模块 (16)3.6 继电器模块 (17)3.7 本章小结 (18)第四章系统的软件设计 (19)4.1 流程图设计 (19)4.1.1系统总体流程图 (19)4.1.2温度检测流程图 (19)4.1.3湿度检测流程 (20)4.2系统的程序设计 (20)4.2.1 DS18B20测温程序 (20)4.2.2 A/D转换程序 (25)4.2.3 1602显示程序 (26)4.3 本章小结 (29)第五章硬件调试部分 (30)结束语 (31)参考文献 (32)第一章绪论1.1 本课题的研究意义及必要性民以食为天,粮食是社会安定的保证,自1990年我国建立粮食储备制度以来,储备粮在国家宏观调控中占据了重要地位,无论何时,必须时刻保持储备粮的调控作用不动摇,是维持社会安定、粮食市场稳定、农民增收的重要保证。
基于51单片机的温湿度检测控制系统
摘要本次设计是采用MSC-51系列单片机中的AT89S51和DHT11构成的低成本的温湿度的检测控制系统。
单片机AT89S51是一款低消耗、高性能的CMOS8位单片机,由于它强大的功能和低价位,因此在很多领域都是用它。
DHT11温湿度传感器是一款含有已校准数字输出的温湿度复合传感器,传感器包括一个电阻式感湿原件和一个NTC测温元件,该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
设计主要包括硬件电路的设计和系统软件的设计。
硬件电路主要包括单片机、温湿度传感器、显示模块、报警器以及控制设备等5部分。
其中由DHT11温湿度传感器及1602字符型液晶模块构成系统显示模块;测温湿度控制电路由温湿度传感器和预设温度值比较报警电路组成;用户根据需要预先输入预设值,当实际测量的温湿度不符合预设的温湿度标准时,发出报警信号(蜂鸣器蜂鸣),启动相应控制。
软件部分包括了主程序、显示子程序、测温湿度子程序。
关键词:AT89S51;DHT11;温湿度传感器AbstractMicrocontroller AT89S51 is a low consumption, high performance CMOS8 bit microcontroller.Because of its powerful features and low price, so it is used in many areas.DHT11 temperature and humidity sensor is a temperature and humidity combined sensor contains a calibrated digital output, the sensor consists of a resistor in the original sense of wet and a NTC temperature measurement devices.The product has many advantage,such as excellent quality, fast response, strong anti-jamming capability . This design is fromed by the AT89S51 in MSC-51 Series and DHT11 constitute which is a low-cost temperature and humidity measurement and control system. The design includes the design of hardware circuit design and system software.The hardware has Five modules.They are a microcontroller, temperature and humidity sensors, display module, alarm and control equipment. The 1602-character LCD module constitute the system display module.The temperature and humidity control circuit by the temperature and humidity sensors and preset temperature alarm circuit.According to the need of pre-enter the default value, when the actual measurement of the temperature humidity does not conform the preset temperature and humidity standards, send the alarm signal (buzzer will beep), and start the corresponding control.The software part includes the main program, the display routines, temperature and humidity subroutine.Key words:Temperature and humidity measurement;Temperature and humidity control;AT89S51 ;DHT11目录前言 (1)1.1本文研究的背景及意义 (1)1.2研究现状 (1)1.3本文研究的主要内容 (1)第2章设计任务分析及方案论证 (4)2.1设计过程及其工艺要求设计 (4)2.2设计总体方案及其论证 (4)2.3器件选定 (5)2.4AT89S51单片机 (11)2.5中断系统 (15)2.6复位电路 (16)2.7时钟电路 (17)2.8显示部分 (18)2.9本章小结 (26)第3章硬件设计 (27)3.1主控制电路和测温时控制电路 (27)3.2主要模块的电路 (28)3.3硬件实施控制 (33)3.4设备运行 (35)3.5控制设备: (36)3.6本章小结 (38)第4章软件设计 (39)4.1系统流程图 (39)4.2按键流程图 (41)4.3P ROTUES运行结果 (42)4.4本章小结 (43)结论 (44)参考文献 (45)附录 (47)前言1.1本文研究的背景及意义粮库已经被广泛的运用,是存储粮食的一个重要方式。
基于51单片机的温湿度及万年历设计概要
仪器设计实验课程设计名称:基于51单片机的温湿度及万年历设计专业班级: xxxxx学生姓名:xxx学号: xxxxxxxxx组员:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx指导教师: xxxxxxx 课程设计地点: xxxxxxxxx 课程设计时间: xxxxxxxxxxxxxxxxx目录1 系统概述 (1)1.1 电子万年历发展背景 (1)1.2 电子万年历的特点 (1)1.3 电子万年历的发展现状 (1)2 方案论证 (2)2.1 单片机芯片的选择方案和论证 (2)2.2 显示模块的选择方案和论证 (2)2.3 时钟芯片的选择方案和论证 (3)2.4 温湿度传感器的选择方案和论证 (4)3硬件设计 (5)3.1 系统功能模块划分 (5)3.2 各单元模块功能分析及模块电路设计 (6)3.2.1 时钟模块 (6)3.2.2 温湿度模块 (7)3.2.3 显示模块 (8)3.2.4 独立键盘模块 (13)4 软件设计 (14)4.1 万年历软件系统的流程图 (14)4.2 温湿度信息的采集 (16)4.3 时钟的读取 (17)4.3.1 DS1302控制字节的说明 (17)4.3.2 DS1302时间日期寄存器及相应位定义 (18)4.3.3 DS1302数据的输入和输出 (18)4.4 温度的显示控制 (19)5 系统调试 (20)1 系统概述1.1 电子万年历发展背景随着电子技术的发展,人类不断研究,不断创新纪录。
万年历目前已经不再局限于以书本形式出现。
以电脑软件或者电子产品形式出现的万年历被称为电子万年历。
与传统书本形式的万年历相比,电子万年历得到了越来越广泛的应用,采用电子时钟作为时间显示已经成为一种时尚。
目前市场上各式各样的电子时钟数不胜数,但多数是只针对时间显示,功能单一不能满足人们日常生活需求。
1.2 电子万年历的特点电子万年历显示功能,包括公历年、月、日,时间、温度、湿度、星期、农历等等;附带功能有:定时闹铃、以及按钮是否可以正常调动。
51单片机的温度和时间显示源程序
}
uintget_tem()
{
uchartem_L,tem_H;
DS18B20_init();
delay(1);
temwritebyte(0xcc); //写跳过ROM指令;
temwritebyte(0xbe); //读数据
tem_L=temreadbyte();
tem_H=temreadbyte();
write_1602dat('E');
break;
case 3:write_1602dat('W'); //星期数据为3时显示
write_1602dat('E');
write_1602dat('D');
break;
case 4:write_1602dat('T'); //星期数据为4是显示
write_1602dat('H');
tem=tem_H<<8|tem_L;
f_tem=tem*0.0625;
tem=f_tem;//*10+0.5;****好啊家0.5缩小误差;
return (tem);
}
/********液晶写入指令函数与写入数据函数,以后可调用**************/
write_1602com(ucharcom) //****液晶写入指令函数****
dat=0;
for(i=0;i<8;i++)
{
j=temreadbit() ;
dat=;
}
return(dat);
}
voidtemwritebyte(ucharinstru)
基于51单片机的温湿度与时钟显示器本科论文
1、背景知识随着电子技术的发展和人们生活水平的不断提高。
人类对科学技术的不断研究,不断创新纪录。
单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中温度传感器就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。
本设计所介绍的温度传感器与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,该设计控制器使用单片机STC89C52RC增强型芯片,测温传感器使用DHT11,用LCD1602A实现温度显示,能准确达到以上要求。
2、课程设计目的通过基于MCS-51系列单片机STC89C52RC增强型和DHT11温湿度传感器检测温度和湿度,熟悉对DHT11传感器的使用,温度传感器的功能,LCD1602A液晶显示,C语言的设计;并且把我们这两年所学的数字和模拟电子技术、检测技术、以及这个学期学的单片机应用等知识,通过理论联系实际,从题目分析、电路设计调试、程序编制调试到传感器的选定等这一完整的实验过程,培养了学生正确的设计思想,使学生充分发挥主观能动性,去独立解决实际问题,以达到提升学生的综合能力、动手能力、文献资料查阅能力的作用,为毕业设计和以后工作打下一个良好的基础3、工具/准备工作准备工具材料如表1所示:表14、设计步骤及原理步骤1:原理图分析与设计单片机最小系统原理图如图4-1-1所示:图4-1-151单片机最小系统包括了主要由电源、复位、振荡电路以及扩展部分等部分组成。
对于电源供电模块可以通过USB电源线连接电脑供给,另外也可以用外部稳定的5V电源供电模块供给。
对于复位电路,本设计中采用按键复位方法。
按键复位就是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平,而且由于电容的充电,会保持一段时间的高电平来使单片机复位。
对于时钟震荡电路,所以外部只要连接一个晶振和两个电容即可,电容容量一般在15pF至50pF之间。
毕业设计论文—基于51单片机的温度报警电子时钟设计,附原程序
编号:审定成绩:重庆邮电大学毕业设计(论文)设计(论文)题目:基于51单片机的温度报警电子时钟的设计学院名称:自动化学院学生姓名:杨召专业:电气工程与自动化班级:0830905学号:2009212598指导教师:李锐答辩组负责人:填表时间:2013 年 5 月重庆邮电大学教务处制摘要基于单片机的定时和控制装置在许多行业有着广泛的应用,而电子时钟是其中最基本的,但带有温度报警的电子时钟却不多见。
在基于51单片机的温度报警电子时钟电路中,除了基本的单片机系统和外围电路外,还需要外部的控制和显示装置。
本电路主要以单片机AT89S52为核心而设计,通过单片机对信息的分析与处理,控制外围设备。
系统由复位模块、晶振模块、时钟模块、温度模块、测温模块、蜂鸣模块及显示模块共七个模块组成。
本设计以单片机AT89S52为切入点,通过使用AT89S52连接外接晶振的调节来确定一个合适的振荡周期,从而确定出内部的机器周期,通过单片机与DS1302的信息交互来设计出时钟程序,即设计出了电子时钟的核心。
然后在核心电路的基础上设计出了相应的扩展电路,使本设计更加实用。
本设计能够实现年月日和十分秒的正常显示和时间调节,也能根据需要设定闹铃,还能检测周围环境温度并送LCD1602显示,当环境温度超过设定的上限温度或者低于下限温度时蜂鸣器响起且警报灯闪烁。
【关键词】单片机1602LCD 温度检测DS1302ABSTRACTBased on single-chip timing and control device has been widely applied in many industries, and the electronic clock is one of the most basic electronic clock with temperature alarm is rare.51 microcontroller-based temperature alarm electronic clock circuit, in addition to the basic SCM system and the peripheral circuit, external control and display device. The circuit microcontroller AT89S52 as the core design, analysis and processing of information through the microcontroller to control peripheral devices. The system consists of the reset module, crystal module, clock module, module temperature, temperature measurement module, beep module and display module of seven modules.The design of single-chip AT89S52 as the starting point, through the using AT89S52 connection adjustment of the external crystal oscillator to determine an appropriate period of oscillation in order to determine the internal machine cycle design, information exchange through the MCU and the DS1302 clock program design the core of the electronic clock. Then out on the basis of the core circuit design corresponding to the expansion of the circuit, so that the design is more practical.This design can be achieved adjust the date and tenth of seconds the normal display and time, also need to set an alarm, can also detect ambient temperature and sent LCD1602 display, when the ambient temperature exceeds the set limit temperature or below the lower limit temperature when the buzzer sounds and the warning light is flashing.【Key words】Micro control unit LCD1602 Temperature detection DS1302目录前言 (1)第一章绪论 (3)第一节研究背景和意义 (3)第二节电子时钟的发展史 (4)一、电子时钟的发展史 (4)第三节单片机介绍 (4)一、单片机的发展 (4)二、单片机的组成及特点 (5)第四节本章小结 (6)第二章系统设计 (7)第一节方案设计与论证 (7)一、键盘方式论证 (7)二、显示方式论证 (7)三、计时方式论证 (7)四、测温方式论证 (8)第二节系统的硬件设计 (8)一、AT89S52简介 (9)2、AT89S52单片机硬件结构的特点 (11)二、显示部分电路的设计 (12)三、时钟模块设计 (17)四、温度电路 (19)五、蜂鸣电路 (20)六、复位模块 (21)七、按键模块 (21)第三节系统的软件设计 (22)一、系统程序框图 (22)二、各模块的子程序设计 (23)第四节本章小结 (29)第三章系统的仿真、制作与调试 (30)第一节Proteus仿真 (30)一、Proteus操作见面简介 (30)二、系统仿真电路原理图设计 (31)三、仿真结果 (32)第二节电路硬件焊接制作与调试 (34)一、电路焊接 (34)二、系统调试 (34)三、调试中遇到的问题及解决方法 (35)第三节本章小结 (38)结论 (39)致谢 (40)参考文献 (41)附录 (43)一、英文原文: (43)二、英文翻译: (54)三工程设计图纸: (63)四、源程序 (64)前言20世纪末,电子技术获得了非常快速的发展,现代电子产品几乎渗透到了社会的各个领域,家用电子就是其中之一。
51单片机闹钟和显示温度系统设计
51单片机闹钟和显示温度系统设计摘要现代化的校园生活和智能化系统息息相关。
校园是一个生活非常有规律的地方,良好的作息时间制度是学生能够安心学习的有力保证。
因此每天的上下课都需要按课表严格执行,不能出现一丝混乱。
由单片机组成的作息时间控制系统可以保证可靠、安全的校园时间控制系统,避免人为控制中出现的差错。
本论文以 DS1302 时钟和 51 单片机为核心设计可设定闹钟、显示温度的作息时间控制器。
作息时间和闹钟都能随时通过按键调整,拥有最多 64 个闹钟,采用液晶显示屏并加入温度显示。
整个系统以 51 单片机核心,由按键模块、LED 模块、显示模块、闹钟模块和温度模块组成。
设计分为硬件部分和软件部分,硬件电路在 Proteus 连接,软件部分在 Keil 中用C51 语言编写。
30478 毕业论文关键词单片机液晶显示智能作息Title Intelligent Schedule Control SystemAbstractModern campus life and intelligent systems are closely related.The campus is aplace where life is very regular, good work and rest time is a powerful systemto ensure that students can learn at ease. Therefore, the school day are requiredby the strict implementation of the curriculum, not a traceof confusion occurs.Schedule control system consists of SCM can ensure reliable, safe campus timecontrol systems, to avoid errors occurring in human control.In this paper,the core is DS1302 clock system and 51 microcontroller,the designcan realize alarm and temperature-display functions. Schedules and alarm clockcan be adjusted at any time via the key, with a maximum of 64 alarm clock withLCD display and temperature display added. The whole system consists of the keymodule, LED module, display module, alarm module, and temperature modules. Designis pided into hardware and software components, hardware circuit connection inProteus , the software part using C51 language in Keil .Keywords SCM LCD screen Intelligent rest system 目次1绪论11.1研究背景及意义11.2研究现状11.3研究内容22总体设计方案32.1方案概述32.2设计工具选择4 2.3时钟工作过程43硬件电路设计63.1主控模块63.2DS1302时钟芯片11 3.3LCD显示133.4温度模块143.5外接储存器153.6继电器输出模块16 3.7键盘输入模块18 4软件设计194.1主程序设计194.2打铃按键扫描18 4.3打铃参数流程图20 4.4校时子程序214.5显示模块流程图23 4.6时钟芯片流程图23 4.7响铃子程序245系统编译与调试26 5.1硬件编译265.2软件编译275.3系统仿真结果28结论33致谢34参考文献35附录A硬件总电路361 绪论 1.1 研究背景及意义学校和一些企业通常使用传统的电钟,且不说繁琐的人工钟声,敲响了单调和乏味,那忽大忽小的按铃往往刺激周围居民。
基于51单片机的温湿度检测系统设计与实现
3、无线通信模块
本系统的无线通信模块采用nRF24L01无线通信芯片。nRF24L01是一款具有 2.4GHz全球开放频率的无线通信芯片,具有低功耗、高速率、高稳定性等特点。 它将主控制器处理后的数据通过无线方式发送给接收器。
4、电源模块
本系统的电源模块采用9V电池供电。我们将9V电池通过稳压器转换为5V电源, 为整个系统提供稳定的电力支持。
三、测试与结果分析
为了验证本系统的可靠性和准确性,我们进行了一系列的测试。测试结果表 明,本系统能够准确快速地采集环境中的温湿度数据,并且能够稳定地将数据上 传至计算机或其他数据采集设备。同时,本系统的按键电路和液晶显示电路也表 现良好,用户可以通过按键调整系统的参数设置,并直观地查看温湿度数据。
2、液晶显示屏
为了方便用户直观地查看温湿度数据,本系统选用了一块16×2字符型液晶 显示屏。液晶屏的驱动电路简单易懂,且具有较低的功耗。
3、按键电路
为了便于用户对温湿度检测系统的参数进行设置,本系统加入了一个按键电 路。用户可以通过按键对系统的采样间隔、数据上传频率等参数进行设置。
4、串口通信电路
图1主程序流程图
2.温湿度采集模块
温湿度采集模块主要负责通过DHT11传感器采集环境中的温湿度数据。该模 块首先对DHT11传感器进行初始化,然后通过单总线接口接收传感器输出的温湿 度数据,最后对数据进行处理并存储。
3、液晶显示模块
液晶显示模块主要负责将温湿度数据显示在液晶屏上。该模块首先对液晶屏 进行初始化,然后根据主程序传递过来的温湿度数据,控制液晶屏的字符输出。
三、软件设计
本系统的软件设计主要分为以下几个步骤:
1、系统初始化:在系统上电后,首先进行各模块的初始化操作,包括DHT11 传感器、AT89C51单片机、nRF24L01无线通信芯片等。
基于51单片机设计的带有测温功能的电子时钟
目录一、设计要求二、课程设计的方案、目的及意义三、硬件设计方案四、软件设计方案五、总结六、参考资料一、设计要求用51单片机设计带温度显示的电子时钟,具体要求如下:1、利用DS1302时钟芯片实现时钟功能模块。
2、时钟要求可以调节时间:年、月、日、时、分、秒。
3、利用LCD1602显示。
4、利用DS18B20芯片实现温度功能模块。
5、利用按键完成各项功能。
二、课程设计方案、目的及意义1、总体方案:用STC89C51单片机作为CPU主控制器,DS1302时钟芯片提供准确时钟信号,DS18B20温度传感器采集温度信息,三个按键进行加减调整、功能切换作用,通过LCD1602对外多功能显示。
2、具体方案:CPU控制所有模块,通过循环反复从DS1302中读取时钟信息,传送至LCD1602显示,得到基本时钟功能。
当分为59,秒为56时开始,每隔一秒LED 灯点亮240毫秒,0分0秒时LED灯点亮700毫秒。
从而实现整点光报时。
定时循环从DS18B20中读取温度信息,传送至LCD1602显示,得到基本温度计功能。
当温度高于30度(包括30度)时,点亮红色LED灯,提醒当天为高温天气。
低于0度时,点亮蓝色LED灯,提醒当天为冰冻天气。
键盘使用扫面方式,MENU键控制功能切换,完成时钟和温度间的转换。
OK键控制时间调整与确定,UP、DOWN键调节时间,R、L 键选择调整对象。
进入调整时,暂停DS1302数据读取,并将改变的时间数据写入DS1302,并送LCD1602显示,同时,启动LCD1602光标闪烁,确定调整对象,完成人机对话。
退出调整时,停止写入数据,重新读取DS1302时钟信息。
从而完善时钟功能。
3、目的及意义可作为产品生产,作为居家的时钟显示与温度计。
三、硬件设计方案1、原理图2、PCB图3、各功能模块分析(一)、主控制器:STC单片机89C51功能:程序存储器16K、RAM数字存储器1280、可直接通过串口下载程序,单一+5V电源供电,五个中断源的中断控制系统,片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。
基于51单片机的电子时钟和温度测量
//延时 //复位置高
//Extended Function Set :8BIT 设置,RE=0: basic instruction
//大于 100uS 的延时程序 //Function Set
////大于 37uS 的延时程序 //Display on Control
TransferData('T',1);delay2(5); TransferData('U',1);delay2(5); TransferData('E',1); break;
TransferData('W',1);delay2(5); TransferData('E',1);delay2(5); TransferData('D',1); break;
b<<=8; t=a+b;
return(t); }
#ifndef _18B20_H #define _18B20_H
#include<reg52.h> #define uint unsigned int #define uchar unsigned char #include<math.h> #include<INTRINS.H>
//uint temp;
//uchar flag_get,count,num,minute,second;
/******************************************************************/
/*
函数声明
*/
/******************************************************************/
基于51单片机的DHT11温湿度监测+液晶LCD1602显示程序源代码
基于51单片机的DHT11温湿度监测+液晶LCD1602显示程序源代码/***************DHT11温湿度监测+液晶LCD1602显示程序源代码******************单片机型号:STC15W4K56S4,内部晶振:22.1184M。
功能:DHT11温湿度监测+液晶LCD1602显示。
操作说明:通过温湿度传感器DHT11监测温湿度数值,并将温湿度数值显示在液晶LCD1602上。
**************************************************************************/#include "stc15.h" //包含头文件stc15.h#include <intrins.h> //包含头文件intrins.h#define Busy 0x80 //LCD忙sbit LCD_D0 = P0^0; //LCD_D0对应P0.0sbit LCD_D1 = P0^1; //LCD_D1对应P0.1sbit LCD_D2 = P0^2; //LCD_D2对应P0.2sbit LCD_D3 = P0^3; //LCD_D3对应P0.3sbit LCD_D4 = P0^4; //LCD_D4对应P0.4sbit LCD_D5 = P0^5; //LCD_D5对应P0.5sbit LCD_D6 = P0^6; //LCD_D6对应P0.6sbit LCD_D7 = P0^7; //LCD_D7对应P0.7sbit LCD_RS = P1^0; //LCD_RS对应P1.0sbit LCD_RW = P1^1; //LCD_RW对应P1.1sbit LCD_EN = P3^4; //LCD_EN对应P3.4sbit DHT11_PIN = P4^0; //DHT11管脚对应P4.0void delay(unsigned int t); //delay延时函数void delay_us(unsigned int t); //delay_us延时函数void delay_ms(unsigned int t); //delay_ms延时函数void Delay5Ms(void); //5Ms延时函数void GPIO_1602_Configuration(void); //LCD1602液晶IO口初始化void WriteDataLCD(unsigned char WDLCD); //LCD写数据函数void WriteCommandLCD(unsigned char WCLCD,BuysC); //LCD写命令函数unsigned char ReadDataLCD(void); //LCD读数据函数unsigned char ReadStatusLCD(void); //LCD读状态函数void LCDInit(void); //LCD初始化void DisplayOneChar(unsigned char X,unsigned char Y,unsigned char DData);//LCD显示一个字符void DisplayListChar(unsigned char X,unsigned char Y,unsigned char code *DData); //LCD显示一个字符串void DHT11_Init(void); //初始化DHT11void DHT11_Delay(unsigned int j); //延时函数,用于DHT11 void DHT11_Delay_10us(void); //延时函数,用于DHT11 void COM(void);void RH(unsigned char *temp,unsigned char *humi);void DHT11_Display(void);unsigned char code welcome[] = {"DHT 11"}; //LCD显示内容DHT 11 unsigned char code Dht11[] = {"T: H: "}; //LCD显示内容T: H: unsigned char code Space[] = {" "};//LCD显示内容空白unsigned char U8FLAG,k;unsigned char U8count,U8temp;unsigned char U8T_data_H_temp,U8T_data_L_temp;unsigned char U8RH_data_H_temp,U8RH_data_L_temp;unsigned char U8checkdata_temp;unsigned char U8comdata;unsigned char temperature;unsigned char humidity;unsigned char disbuff_T[4]={0,0,0,0};unsigned char disbuff_H[4]={0,0,0,0};void delay(unsigned int t) //delay延时函数{while(t--);}void delay_us(unsigned int t) //delay_us延时函数{unsigned char i;while(t--){i = 3;while(i--) delay(1);}}void delay_ms(unsigned int t) //delay_ms延时函数{while(t--){delay_us(t);}}void Delay5Ms(void) //5ms延时函数{unsigned int TempCyc = 3552;while(TempCyc--);}void GPIO_1602_Configuration(void) //LCD1602液晶IO口初始化{P0M1 = P3M1&0x00;P0M0 = P3M0&0x00;P1M1 = P3M1&0xfc;P1M0 = P3M0&0xfc;P3M1 = P4M1&0xef;P3M0 = P4M0&0xef;}unsigned char ReadStatusLCD(void) //测试LCD忙碌状态{LCD_D7 = 1; //LCD的D7置1LCD_RS = 0; //LCD管脚RS设置成低电平LCD_RW = 1; //LCD管脚RW设置成高电平LCD_EN = 0; //LCD管脚E设置成低电平LCD_EN = 0; //LCD管脚E设置成低电平LCD_EN = 1; //LCD管脚E设置成高电平while(LCD_D7); //检测忙信号return(Busy); //表示当前忙}void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测{if(BuysC) ReadStatusLCD(); //根据需要检测忙LCD_EN = 0; //LCD管脚E设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_RS = 0; //LCD管脚RS设置成低电平LCD_RW = 0; //LCD管脚RW设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时P0 = WCLCD; //将数据送入P0口,即写入指令或地址 _nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 1; //E置高电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}void WriteDataLCD(unsigned char WDLCD) //LCD写数据函数{ReadStatusLCD(); //读取LCD状态LCD_EN = 0; //LCD管脚E设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_RS = 1; //LCD管脚RS设置成高电平LCD_RW = 0; //LCD管脚RW设置成低电平P0 = WDLCD; //将数据送入P0口_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 1; //E置高电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}void LCDInit(void) //LCD初始化{WriteCommandLCD(0x38,0); //三次显示模式设置,不检测忙信号Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);WriteCommandLCD(0x08,1); //关闭显示WriteCommandLCD(0x01,1); //显示清屏WriteCommandLCD(0x06,1); //显示光标移动设置WriteCommandLCD(0x0C,1); //显示开及光标设置}void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData){Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;X |= 0x80; //算出指令码WriteCommandLCD(X,0); //这里不检测忙信号,发送地址码WriteDataLCD(DData); //发送数据}void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) {unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1while (DData[ListLength]>=0x20) //若到达字串尾则退出{if (X <= 0xF) //X坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]);//显示单个字符ListLength++;X++;}}}void DHT11_Init(void) //初始化DHT11 {P4M1 = P4M1&0xfe;P4M0 = P4M0&0xfe;}void DHT11_Delay(unsigned int j){unsigned char i;for(;j>0;j--){for(i=0;i<250;i++);}}void DHT11_Delay_10us(void){unsigned char i;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;}void COM(void){unsigned char i;for(i=0;i<8;i++){U8FLAG=2;while((!DHT11_PIN)&&U8FLAG++);DHT11_Delay_10us();DHT11_Delay_10us();DHT11_Delay_10us();U8temp=0;if(DHT11_PIN)U8temp=1;U8FLAG=2;while((DHT11_PIN)&&U8FLAG++); //超时则跳出for循环if(U8FLAG==1)break;//判断数据位是0还是1,如果高电平高过预定0高电平值则数据位为 1U8comdata<<=1;U8comdata|=U8temp;}}void RH(unsigned char *temp,unsigned char *humi){DHT11_PIN = 0;DHT11_Delay(180);DHT11_PIN = 1; //总线由上拉电阻拉高主机延时20us DHT11_Delay_10us();DHT11_Delay_10us();DHT11_Delay_10us();DHT11_Delay_10us(); //主机设为输入判断从机响应信号DHT11_PIN = 1;//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行if(!DHT11_PIN){U8FLAG=2;//判断从机是否发出 80us 的低电平响应信号是否结束while((!DHT11_PIN)&&U8FLAG++);U8FLAG=2;//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态while((DHT11_PIN)&&U8FLAG++); //数据接收状态COM();U8RH_data_H_temp=U8comdata;COM();U8RH_data_L_temp=U8comdata;COM();U8T_data_H_temp=U8comdata;COM();U8T_data_L_temp=U8comdata;COM();U8checkdata_temp=U8comdata;DHT11_PIN=1; //数据校验U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp==U8checkdata_temp){*temp = U8T_data_H_temp;*humi = U8RH_data_H_temp;}}}void DHT11_Display(void){RH(&temperature,&humidity);disbuff_T[2]=temperature/100+0x30;disbuff_T[1]=temperature/10%10+0x30;disbuff_T[0]=temperature%10+0x30;disbuff_H[2]=humidity/100+0x30;disbuff_H[1]=humidity/10%10+0x30;disbuff_H[0]=humidity%10+0x30;DisplayOneChar(2,1,disbuff_T[2]);delay_ms(10); //延时DisplayOneChar(3,1,disbuff_T[1]);delay_ms(10); //延时DisplayOneChar(4,1,disbuff_T[0]);delay_ms(10); //延时DisplayOneChar(8,1,disbuff_H[2]);delay_ms(10); //延时DisplayOneChar(9,1,disbuff_H[1]);delay_ms(10); //延时DisplayOneChar(10,1,disbuff_H[0]);delay_ms(10); //延时}void main(void){GPIO_1602_Configuration(); //LCD1602液晶IO口初始化delay_ms(10); //延时LCDInit(); //LCD1602初始化delay_ms(10); //延时DHT11_Init(); //初始化DHT11DisplayListChar(5,0,welcome); //LCD1602显示Hello My Friends delay_ms(10); //延时while(1){DisplayListChar(0,1,Space); //LCD1602显示P: K1delay_ms(10); //延时DisplayListChar(0,1,Dht11); //LCD1602显示delay_ms(10); //延时DHT11_Display();delay_ms(200); //延时}}程序源代码是编译通过的DHT11温湿度监测模块接口电路图该程序的实际运行效果。
基于51单片机的温度检测报警系统与时钟课程设计
基于单片机的温度检测报警与万年历系统目录摘要〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃 1一、设计要求与方案论证1.1设计要求〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃 1 1.2系统方案选择和论证〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃 1 1.3电路最终方案确定〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃 1二、电子万年历与温度采集报警硬件设计和实现2.1系统设计〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃 2 2.1.1系统设计框图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃 22.1.2系统硬件需求介绍〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃 3 2.2系统硬件各模块作用〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃 3 2.2.1单片机核心控制模块〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃 42.2.2数字温度传感器模块〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃42.2.3彩屏显示电路模块〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃 52.2.4蜂鸣器电路模块〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃5 2.3系统电路图设计〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃6 2.3.1系统电路原理框图和原理图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃7三、软件设计与分析3.1系统软件流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃8 3.1.1DS18B20程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃8四、系统测试4.1测试工具〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃9 4.2软件测试〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃9 4.3硬件测试〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃10 参考文献〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃11 附录一:程序清单〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃12 附录二:PCB电路图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃13基于单片机的温度检测报警与万年历系统摘要温度检测报警系统也是在日常生活和工业应用非常广泛的工具,能实时采集周围的温度信息进行显示,程序内部设定有报警上下限,根据应用环境不同可设定不同的报警上下限。
基于51单片机温湿度监控系统毕业设计
基于51单片机温湿度监控系统毕业设计1. 引言温湿度监控系统是一种用于实时监测环境温度和湿度的设备,广泛应用于工业生产、农业种植、仓储物流等领域。
本文将介绍基于51单片机的温湿度监控系统的设计和实现过程。
2. 设计目标本设计旨在开发一款简单易用、功能稳定的温湿度监控系统。
具体设计目标如下:- 实时监测环境温度和湿度; - 提供用户界面,显示当前温湿度数据; - 当温湿度超出设定范围时,发出警报信号。
3. 硬件设计3.1 单片机选择本设计选用51系列单片机作为主控芯片,因其成本低廉、易于编程和广泛应用等优点。
3.2 温湿度传感器采用常见的DHT11数字式温湿度传感器,具有价格低廉、精确可靠等特点。
3.3 显示模块使用LCD1602液晶显示模块,能够直观地显示当前环境温湿度数据。
3.4 警报器选用蜂鸣器作为警报器,当温湿度超出设定范围时,发出警报信号。
3.5 其他外围电路为了实现与单片机的通信和控制,还需设计适当的电源、电压转换、数据传输等外围电路。
4. 软件设计4.1 系统框架本系统采用基于C语言的嵌入式软件开发,主要包括初始化、数据采集、数据处理和用户界面显示等模块。
4.2 初始化模块在系统启动时,需要对硬件进行初始化设置,包括配置串口通信、LCD1602显示模块和DHT11传感器等。
4.3 数据采集模块通过DHT11传感器采集环境温湿度数据,并将其转换为数字信号供单片机处理。
4.4 数据处理模块根据用户设定的温湿度范围,对采集到的温湿度数据进行判断和处理。
当温湿度超出设定范围时,触发警报信号。
4.5 用户界面显示模块通过LCD1602显示当前环境温湿度数据,并提供简单的操作界面,包括设定温湿度范围和查看历史数据等功能。
5. 系统实现5.1 硬件连接根据设计需求,将单片机、DHT11传感器、LCD1602显示模块和蜂鸣器等进行正确的连接。
5.2 软件编程使用C语言编写嵌入式软件程序,实现系统框架中各个模块的功能。
基于单片机的带温度显示的数字钟设计(c51语言编程)
基于单片机的带温度显示的数字钟设计(c51语言编程)开题报告电气工程及其自动化一、课题研究意义及现状1980年因特尔公司推出了MCS-51单片机,近30年来,其衍生系列不断出现,从Atmel加入FLASH ROM,到philips加入各种外设,再到后来的Cygnal推出C8051F,使得以8051为核心的单片机在各个发展阶段的低端产品应用中始终扮演着一个重要的角色,其地位不断升高,资源越来越丰富,历经30年仍在生机勃勃地发展,甚至在SoC时代仍占有重要的一席之地。
单片机具有体积小、功能强、低功耗、可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域智能仪表、机电一体化、实时控制、国防工业普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。
C语言已经成为当前举世公认的高效简洁而又贴近硬件的编程语言之一、将C语言向单片机8051上移植十余20世纪80年代的中后期,经过几十年的努力,C语言已成为专业化单片机上的实用高级语言。
C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。
此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。
与汇编语言相比,C51在功能、结构、可读性、可维护性上有明显的优势,因而易学易用。
另外C51可以缩短开发周期,降低成本,可靠性,可移植性好。
因此,使用C语言进行程序设计已成为软件开发的一个主流,用C语言进行8051单片机程序设计是单片机开发与应用的必然趋势。
随着人们生活水平的提高,对物质需求也越来越高,人们已不再满足于钟表原先简单的报时功能,希望出现一些新的功能,诸如环境温度显示、日历的显示、重要日期倒计时、显示跑表功能等,用以带来更大的方便。
而所有这些,又都是以数字化的电子时钟为基础的,不仅应用了数字电路技术,而且还加入了需要模拟电路技术和单片机技术。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、背景知识随着电子技术的发展和人们生活水平的不断提高。
人类对科学技术的不断研究,不断创新纪录。
单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中温度传感器就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。
本设计所介绍的温度传感器与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,该设计控制器使用单片机STC89C52RC增强型芯片,测温传感器使用DHT11,用LCD1602A实现温度显示,能准确达到以上要求。
2、课程设计目的通过基于MCS-51系列单片机STC89C52RC增强型和DHT11温湿度传感器检测温度和湿度,熟悉对DHT11传感器的使用,温度传感器的功能,LCD1602A液晶显示,C语言的设计;并且把我们这两年所学的数字和模拟电子技术、检测技术、以及这个学期学的单片机应用等知识,通过理论联系实际,从题目分析、电路设计调试、程序编制调试到传感器的选定等这一完整的实验过程,培养了学生正确的设计思想,使学生充分发挥主观能动性,去独立解决实际问题,以达到提升学生的综合能力、动手能力、文献资料查阅能力的作用,为毕业设计和以后工作打下一个良好的基础3、工具/准备工作准备工具材料如表1所示:表15 排针若干6 按钮及开关若干7 电烙铁1个8 焊锡若干9 蜂鸣器1个10 LCD1602液晶显示器1个11 DHT11温湿度传感器1个12 电位器1个13 PNP三极管1个14 电源线1条4、设计步骤及原理步骤1:原理图分析与设计单片机最小系统原理图如图4-1-1所示:图4-1-151单片机最小系统包括了主要由电源、复位、振荡电路以及扩展部分等部分组成。
对于电源供电模块可以通过USB电源线连接电脑供给,另外也可以用外部稳定的5V电源供电模块供给。
对于复位电路,本设计中采用按键复位方法。
按键复位就是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平,而且由于电容的充电,会保持一段时间的高电平来使单片机复位。
对于时钟震荡电路,所以外部只要连接一个晶振和两个电容即可,电容容量一般在15pF至50pF之间。
而本次设计采用了12MHz的晶体振荡器作为震荡源。
温湿度传感器温湿度数据采集模块如图4-1-2所示,DHT11是一款有已校准数字信号输出的温湿度传感器。
精度湿度+-5%RH,温度+-2℃,量程湿度20-90%R温度0~50℃。
DHT11数图4-1-2字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。
传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。
因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
每个DHT11传感器都在极为精确的湿度校验室中进行校准。
校准系数以程序的形式存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。
单线制串行接口,使系统集成变得简易快捷。
超小的体积、极低的功耗,使其成为该类应用中,在苛刻应用场合的最佳选择。
产品为4针单排引脚封装,连接方便。
本设计中采用DHT11传感器将采集的温度传送给单片机,然后内部进行BCD码转换,最后通过LCD1602液晶显示器显示出来。
LCD1602液晶显示器模块如图4-1-3所示,602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样。
本次设计中将多出来的15脚接上VCC,然后GND(16脚)接到单片机的P24口,然后通过按键K5 图4-1-3来控制P24口输出电平的状态从而控制LCD1602液晶显示器的背光的开关。
仿真中由于无法仿真背光效果,只能通过LED 状态图4-1-4确定,如图4-1-4所示。
通过网上查阅LCD1602液晶显示器的芯片手册可以知道,将D0-D7八个数据口连接P0,然后通过RS 、RW 以及使能端E 控制LCD 的读写操作。
步骤2:流程设计通过对课本的学习以及课外学习的知识,然后根据自己的构想来设计实现怎么样的效果,通过对软件设计思路的分析,得到该设计的系统主程序流程图如图4-2-1所示:图4-2-1系统开始后,先对定时器以及显示器进行初始化,然后写入框架显示时间和温度。
当定时器中断时,内部对秒进行自加,加到60s 后自动归零且分自加,其开始系统初始化 显示器初始化写入框架显示调用键盘扫描调用温湿度函数定时器中断定时器初始化 对时分秒位进行运算Flag=1刷新温度数据它时间标志位也是一样。
当然,每1s满时显示会刷新一次从新显示新的数据,温度函数也是按照指定时间进行测量刷新。
步骤3:软件编程1.建立LCD.H文件#ifndef __LCD_H_#define __LCD_H_#include<reg51.h>#define uchar unsigned char#define uint unsigned int#define LCD1602_DATAPINS P0sbit LCD1602_E=P2^7;sbit LCD1602_RW=P2^5;sbit LCD1602_RS=P2^6;void Lcd1602_Delay1ms(uint c);void LcdWriteCom(uchar com);void LcdWriteData(uchar dat) ;void LcdInit();#endif2.建立LCD.C函数#include"LCD.h"//包含自建立库文件void Lcd1602_Delay1ms(uint c) //延时函数{uchar a,b;for (; c>0; c--){for (b=199;b>0;b--){for(a=1;a>0;a--);}}}void LcdWriteCom(uchar com){LCD1602_E = 0;LCD1602_RS = 0;LCD1602_RW = 0;LCD1602_DATAPINS = com;Lcd1602_Delay1ms(1);LCD1602_E = 1;Lcd1602_Delay1ms(5);LCD1602_E = 0;LCD1602_DATAPINS = com << 4; Lcd1602_Delay1ms(1);LCD1602_E = 1;Lcd1602_Delay1ms(5);LCD1602_E = 0;}void LcdWriteData(uchar dat){LCD1602_E = 0;LCD1602_RS = 1;LCD1602_RW = 0;LCD1602_DATAPINS = dat;Lcd1602_Delay1ms(1);LCD1602_E = 1;Lcd1602_Delay1ms(5);LCD1602_E = 0;LCD1602_DATAPINS = dat << 4; Lcd1602_Delay1ms(1);LCD1602_E = 1;Lcd1602_Delay1ms(5);LCD1602_E = 0;}void LcdInit() //初始化{LcdWriteCom(0x32);LcdWriteCom(0x28);LcdWriteCom(0x0c);LcdWriteCom(0x06);LcdWriteCom(0x01);LcdWriteCom(0x80);}3.建立DHT11.H库文件#ifndef __DHT11_H__#define __DHT11_H__#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit DHT_DATA = P1^0;bit DHT_Start();bit DHT_ByteRead(unsigned char *dat);#endif4.建立DHT11.C文件#include"DHT11.h"void delay_ms(unsigned char x){unsigned char a;while(x--)for(a=0;a<114;a++);}void delay_30us(void){unsigned char a;for(a=12;a>0;a--);}void delay_40us(void){unsigned char a,b;for(b=3;b>0;b--)for(a=4;a>0;a--);}bit DHT_Start(){ unsigned char m=0;DHT_DATA=1;DHT_DATA=0;delay_ms(20);DHT_DATA=1;delay_40us();if(DHT_DATA==1)return 0;elsewhile((DHT_DATA==0)&&(m<200))m++; delay_40us();delay_40us();return 1;}bit DHT_ByteRead(unsigned char *dat){ unsigned char temp=0;unsigned char x,y;unsigned char m=0;unsigned char n=0;unsigned char mask=0x01;unsigned char sum=0;for(y=0;y<5;y++){for(mask=0x80;mask!=0;mask>>=1){while(DHT_DATA==0&&m<200)m++;delay_30us();if(DHT_DATA)temp|=mask;elsetemp&=(~mask);while(DHT_DATA==1&&n<200)n++;}*(dat+y)=temp;temp=0;}for(x=0;x<4;x++)sum+=*(dat+x);if((sum&=0xff)==*(dat+4))return 1;elsereturn 0;}5.建立主函数main.c文件#include<reg51.h>#include"LCD.h"#include"DHT11.h"#define uchar unsigned char#define uint unsigned intsbit beep=P1^0;//sbit BG=P2^4;//sbit K1=P1^1;//sbit K2=P1^2;//sbit K3=P1^3;//sbit K4=P1^4;//sbit K5=P1^5;////sbit beep=P2^0;uchar code table0[]="H:";uchar code table1[]="T:";uchar code table2[]="%";uchar code table3[]="C";uchar code table_1[]="2016-06-03";uchar code table_2[]="16:00:00 5";uchar DHT[5];uchar tmp,i,j,k;uchar count,shi,fen,miao,month,day,week,year;uchar K1num,K2num,K3num;bit flag_1s=1;void Delay10ms(unsigned int x);void Keyscan();void Keyscan2();void Wtimer(uchar ad,uchar dat);void main(){LcdInit();BG = 1;beep;TMOD = 0X01;TH0 = (65536 - 50000)/256; /*11.0592MHz 46080*/ TL0 = (65536 - 50000)%256;EA = 1;ET0 = 1;TR0 = 1;LcdWriteCom(0X86);for (j = 0;j < 10;j++){LcdWriteData(table_1[j]);}LcdWriteCom(0Xc6);for (j = 0;j < 10;j++){LcdWriteData(table_2[j]);}while(1){Keyscan();Keyscan2();if(flag_1s){flag_1s=0;DHT_Start();tmp=DHT_ByteRead(&DHT);//******************LcdWriteCom(0x80);for(i=0;i<2;i++)LcdWriteData(table0[i]);LcdWriteData(DHT[0]/10+'0');LcdWriteData(DHT[0]%10+'0');LcdWriteData(table2[0]);//******************LcdWriteCom(0xC0);for(i=0;i<2;i++)LcdWriteData(table1[i]);LcdWriteData(DHT[2]/10+'0');LcdWriteData(DHT[2]%10+'0');LcdWriteData(table3[0]);//LcdWriteCom(0x07); //ÒÆÆÁ }}}void Delay10ms(unsigned int x){unsigned int t;while(x--)for(t=0;t<114;t++);}void Timer0() interrupt 1{unsigned char t;TH0=(65536 - 50000)/256; /*11.0592MHz*/TL0=(65536 - 50000)%256;t++;if(t%40==0){flag_1s=1;}count++;if (20 == count){count = 0;miao++;if (60 == miao){miao = 0;fen++;if (60 == fen){fen = 0;shi++;if (24 == shi){shi = 0;day++;week++;if(week>7)week=1;if (31 == day){day = 1;month++;if (12 == month){month = 1;year++;Wtimer(6-0x40+2,year);}Wtimer(6-0x40+5,month);}Wtimer(6-0x40+8,day);}Wtimer(6,shi);}Wtimer(9,fen);}Wtimer(12,miao);}}void Keyscan(){K1 = 1;K2 = 1;K3 = 1;if (0 == K1){Delay10ms(5);if (0 == K1){K1num++;while (!K1);if (1 == K1num){TR0 = 0;LcdWriteCom(0XC0+13);LcdWriteCom(0X0F);}if (2 == K1num){LcdWriteCom(0XC0+10);}if (3 == K1num){LcdWriteCom(0XC0+7);}if (4 == K1num){LcdWriteCom(0x89);}if (5 == K1num){LcdWriteCom(0x8C);}if (6 == K1num){LcdWriteCom(0x8F);}if (7 == K1num){TR0 = 1;K1num = 0;LcdWriteCom(0x0c);}}}if (0 != K1num){if (0 == K2){Delay10ms(5);while (!K2);if(1 == K1num){miao++;if(60 == miao)miao = 0;LcdWriteCom(0xc0+12);Wtimer(12,miao);LcdWriteCom(0xc0+13);}if(2 == K1num){fen++;if(60 == fen)fen = 0;LcdWriteCom(0xc0+9);Wtimer(9,fen);LcdWriteCom(0xc0+10);}if(3 == K1num){shi++;if(24 == shi)shi = 0;LcdWriteCom(0xc0+6);Wtimer(6,shi);LcdWriteCom(0xc0+7);}if(4 == K1num){year++;if(30 == year)year = 16;LcdWriteCom(0x88);Wtimer(0x08-0x40,year);LcdWriteCom(0x89);}if(5 == K1num){month++;if(13 == month)month = 1;LcdWriteCom(0x8B);Wtimer(0x0B-0x40,month);LcdWriteCom(0x8C);}if(6 == K1num){day++;if(day>31)day = 1;LcdWriteCom(0x8E);Wtimer(0x0E-0x40,day);LcdWriteCom(0x8F);}}}if (0 != K1num){if (0 == K3){Delay10ms(5);while (!K3);if(1 == K1num){miao--;if(255 == miao)miao = 59;LcdWriteCom(0xc0+10+2);Wtimer(12,miao);LcdWriteCom(0xc0+11+2);}if(2 == K1num){fen--;if(255 == fen)fen = 59;LcdWriteCom(0xc0+9);Wtimer(9,fen);LcdWriteCom(0xc0+10); }if(3 == K1num){shi--;if(255 == shi)shi = 23;LcdWriteCom(0xc0+6);Wtimer(6,shi);LcdWriteCom(0xc0+7);}if(4 == K1num){year--;if(255 == year)year = 16;LcdWriteCom(0x88);Wtimer(0x08-0x40,year);LcdWriteCom(0x89);}if(5 == K1num){month--;if(255 == month)month = 12;LcdWriteCom(0x8B);Wtimer(0x0B-0x40,month);LcdWriteCom(0x8C);}if(6 == K1num){day--;if(day<1)day = 31;LcdWriteCom(0x8E);Wtimer(0x0E-0x40,day);LcdWriteCom(0x8F);}}}}void Wtimer(uchar ad,uchar dat){uchar sw,gw;sw = dat/10;gw = dat%10;LcdWriteCom(0x80+0x40+ad);LcdWriteData(0x30+sw);LcdWriteData(0x30+gw);}void Keyscan2(){K4 = 1;K5 = 1;if(K4 == 0){Delay10ms(10);beep=!beep;while (!K4);}//********************if(K5 == 0){Delay10ms(10);BG=!BG;while (!K5);}}5、设计结果及分析按照设计进行软件仿真,仿真结果如图5-1:图5-1结果分析,由于protues中并没有DHT11这个芯片,因此仿真的时候无法仿真温度,若用其它芯片则要更改函数以及重新学习新的芯片资料,因此并没有进行仿真。