基于stc89c52单片机的温度检测LCD1602显示
(完整word版)基于89C52单片机和液晶显示的温度测量系统
![(完整word版)基于89C52单片机和液晶显示的温度测量系统](https://img.taocdn.com/s3/m/377758881711cc7930b71657.png)
JIANGSU TEACHERS UNIVERSITY OF TECHNOLOGY测控系统综合训练基于单片机和液晶显示的温度测量系统学院名称:电气信息工程学院专业:测控技术与仪器班级:08测控2班姓名:董亮学号:08314237指导教师:王久龙2011年12月基于单片机及液晶显示的温度测量系统摘要:本文将介绍一种基于单片机控制的数字温度测量系统,本温度计属于多功能温度计,可以软件预设置上下报警温度,当温度不在设置范围内时,可以报警。
本文设计的数字温度计具有读数方便,测温范围广,测温精确,液晶显示,适用范围宽等特点。
它的主要组成部分有:AT89C52单片机、温度传感器、温度显示电路、温度报警电路等。
关键词:温度测量;温度传感器;液晶显示;仿真目录前言 (1)第一章设计目的及设计要求 (2)1.1 设计目的 (2)1.2 设计要求 (2)第二章设计方案论证 (3)2.1 总体设计原理 (3)2.2 单片机AT89C51介绍 (3)2.3 温度传感器的选择 (5)2.4 显示元件的选择 (7)第三章硬件电路设计 (8)3.1 时钟振荡电路 (8)3.2 测温电路 (8)3.3 复位电路 (8)3.4 报警电路 (9)3.5 显示电路 (9)第四章软件设计 (10)4.1 主程序设计 (10)4.2 液晶显示程序设计 (10)4.3 温度采集程序设计 (11)第五章安装调试与分析 (12)结束语 (13)参考文献 (14)附录 (15)附录一系统仿真图 (15)附录二实物组装图 (16)附录三元器件清单 (17)附录四程序清单 (18)前言在这个信息化高速发展的时代,单片机作为一种最经典的微控制器,单片机技术已经普及到我们生活、工作、科研等各个领域,已经成为一种比较成熟的技术。
随着科技的不断进步,在工业生产中温度是常用的参数,而采用单片机来对这些参数进行测量与控制已成为当今的主流,现代社会对各种信息参数的准确度和精确度的要求也在不断增长,而如何准确而又迅速的获得这些参数就取决于现代信息基础的发展水平。
基于STC89C52的温湿度检测系统的设计
![基于STC89C52的温湿度检测系统的设计](https://img.taocdn.com/s3/m/182e9432bfd5b9f3f90f76c66137ee06eff94e37.png)
基于STC89C52的温湿度检测系统的设计摘要:本文介绍了一种基于STC89C52单片机的温湿度检测系统的设计,该系统采用DHT11传感器来获取环境温度和湿度数据,通过STC89C52单片机采集和处理数据,并将结果通过LCD1602液晶屏幕进行显示。
设计结果表明,该系统能够准确地检测环境温湿度并将结果显示出来,可以满足普遍的应用需求。
关键词:STC89C52;DHT11;温湿度检测;LCD1602;单片机引言温湿度的检测在日常生活中非常重要,尤其是在工业生产和生命科学领域。
传统的温湿度检测方法需要专业设备和技术支持,但随着单片机技术的逐步发展和成熟,利用单片机可以轻松地设计和制造一种能够准确检测温湿度的系统。
本文介绍了一种基于STC89C52单片机的温湿度检测系统的设计。
系统硬件设计本系统主要由STC89C52单片机、DHT11温湿度传感器和LCD1602液晶屏幕等组成。
1. STC89C52单片机STC89C52单片机具有较高的工作速度、存储容量以及强大的数据处理能力。
由于其低成本和易于开发的特点,STC89C52广泛应用于各种嵌入式系统中。
本系统的数据采集、处理和控制都通过STC89C52进行。
2. DHT11温湿度传感器DHT11是一种数字式温湿度传感器,使用单总线连接方式进行数据传输。
DHT11具有高准确性、低成本和简单的使用方法等特点,应用范围广泛。
该传感器可以实时测量环境温度和湿度,并将数据以数字信号的形式输出。
3. LCD1602液晶屏幕LCD1602液晶屏幕是一种常用的字符型液晶屏幕,可以通过单总线方式进行数据通讯。
该液晶屏幕具有低功耗、高可靠性和易于使用等特点,常用于各种嵌入式系统中。
系统软件设计本系统的软件设计主要包括系统初始化、数据采集、数据处理和数据显示等部分。
1. 系统初始化系统初始化包括设置IO口方向、定时器、外部中断和串口等,使得系统能够正常工作。
2. 数据采集数据采集通过DHT11传感器和STC89C52单片机之间的单总线方式进行数据通讯。
基于STC89C52单片机的温湿度检测系统设计_课程设计说明书
![基于STC89C52单片机的温湿度检测系统设计_课程设计说明书](https://img.taocdn.com/s3/m/9524afa1fd0a79563d1e7204.png)
基于STC89C52单片机的温湿度检测系统设计摘要:温湿度是生活生产中的重要的参数。
本设计为基于单片机的温湿度检测与控制系统,采用模块化、层次化设计。
用新型的智能温湿度传感器DHT11主要实现对温度、湿度的检测,将温度湿度信号通过传感器进行信号的采集并转换成数字信号,再运用单片机STC89C52进行数据的分析和处理,为显示和报警电路提供信号,实现对温湿度的控制报警。
报警系统根据设定报警的上下限值实现报警功能,显示部分采用LCD1602液晶显示所测温湿度值。
系统电路简单、集成度高、工作稳定、调试方便、检测精度高,具有一定的实用价值。
关键词:单片机;温湿度传感器; LCD显示Summary:Temperature and humidity is important in the life of the production parameters. The design of microcontroller-based temperature and humidity measurement and control system, modular, hierarchical design. With the new intelligent temperature and humidity sensors DHT11 main achievement of the temperature, humidity testing, the temperature and humidity sensor signal acquisition and signal into digital signal, then the use of single-chip STC89C52RC for data analysis and processing, to provide for the display and alarm circuit signal, the control of temperature and humidity alarm. Alarm system alarm according to the upper and lower limits set an alarm function, some use LCD1602 display the temperature and humidity values. System circuit is simple, highly integrated, stable, easy debugging, high precision and has some practical value.Keyword:SCM; temperature and humidity sensor; LCD display目录第1章概述 (3)1.1课题背景 (3)1.2主要内容 (4)第2章系统总体方案设计 (4)2.1 温湿度传感器 (5)1、DHT11产品概述 (5)2、引脚说明 (6)3、电源引脚 (6)4、串行接口(单线双向) (6)2.2 RS232接口 (7)2.3 单片机STC89C52 (7)1、主要特性如下: (7)2、 STC89C52RC单片机的工作模式 (8)第3章系统的硬件设计和连接 (11)3.1、时钟电路 (11)3.2、复位电路 (12)3.3、晶振电路 (12)3.4、LCD1602 (13)3.5、报警电路 (15)第4章仿真软件介绍 (16)4.1、Proteus软件 (16)4.2、Keil C51软件 (17)第5章硬件电路的调试 (18)第6章总结 (19)参考文献 (20)附录: (21)第1章概述1.1课题背景温湿度的检测与控制是工业生产过程中比较典型的应用之一,随着传感器在生产和生活中的更加广泛的应用。
89C52RC温湿度传感器DHT11液晶1602显示程序
![89C52RC温湿度传感器DHT11液晶1602显示程序](https://img.taocdn.com/s3/m/ee2e92f29fc3d5bbfd0a79563c1ec5da50e2d60e.png)
89C52RC温湿度传感器DHT11液晶1602显示程序#include#define uint unsigned int#define uchar unsigned charuchar DHT11[5],RTflag=0;uchar FLAG; //超时标志位uchar a;sbit dat=P2^3;sbit RS=P3^4;sbit RW=P3^6;sbit EN=P3^7;uchar table[5];uint wd,sd;void Delay_t(uint j){ uchar i;for(;j>0;j--){for(i=0;i<27;i++);}}void Delay_10us(void) //10us延时函数{uchar i;i--;i--;i--;i--;i--;i--;}void delay(uint z)//1毫秒延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void lcd_write_com(uchar com) //1602写指令{RS=0;RW=0;EN=1;P0=com;delay(1);EN=0;}void lcd_init() //1602初始化{lcd_write_com(0x38);delay(1);lcd_write_com(0x08);delay(1);lcd_write_com(0x01);//1602清屏指令delay(1);lcd_write_com(0x06);delay(1);lcd_write_com(0x0C);delay(1);}void lcd_write_data(uchar date)//1602写数据{RS=1;RW=0;EN=1;P0=date;delay(1);EN=0;}void write_str(uchar x,uchar y,uchar *s)//在任意地址写符号字母或数字{if(y==0)lcd_write_com(0x80+x);elselcd_write_com(0xc0+x);while(*s){lcd_write_data(*s);s++;}}void write_shu(uchar x,uchar y,uchar num)//数据显示函数{uchar s,g;if(y==0)lcd_write_com(0x80+x);elselcd_write_com(0xc0+x);s=num/10;// 数据分离显示lcd_write_data(0x30+s);g=num%10;//数据分离显示lcd_write_data(0x30+g);}uchar write_byte1() //读一个字节{uchar i,comdata,temp1;for(i=0;i<8;i++){FLAG=2;while((!dat)&&FLAG++);//判断数据位是0还是1Delay_10us();Delay_10us();Delay_10us();temp1=0;if(dat)temp1=1; // 如果高电平高过预定0高电平值则数据位为 1 FLAG=2;while((dat)&&FLAG++);//flag先与后加1 如果dat一直为1uchar型变量 flag 溢出变为0 再自加1if(FLAG==1)break; //超时则跳出for循环comdata<<=1;//左移一位高位在前低位在后comdata|=temp1;}return (comdata);}void DHT11_5() //读5个字节数据两个字节为温度数据两个字节为湿度数据最后一个字节为校验{uchar i,temp;//主机拉低18msdat=0;Delay_t(180);dat=1;//总线由上拉电阻拉高主机延时20usDelay_10us();Delay_10us();Delay_10us();Delay_10us();//主机设为输入判断从机响应信号dat=1;//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行if(!dat) //T !{FLAG=2; //超时标志位while((!dat)&&FLAG++);//判断从机是否发出80us 的低电平响应信号是否结束FLAG=2;while((dat)&&FLAG++); //判断从机拉高80us是否结束for(i=0;i<5;i++)//数据接收状态{DHT11[i]=write_byte1();}dat=1; //释放数据总线为下一次读取做好准备temp=(DHT11[0]+DHT11[1]+DHT11[2]+DHT11[3]);if(temp==DHT11[4]) //数据校验{RTflag=1;}if(RTflag==1) //如果RTflag=1 说明读取到得数据正确{RTflag=0;// tm[0]=DATARHT[0]/10;// tm[1]=DATARHT[0]%10;// tm[2]=DATARHT[1]/10; //湿度// tm[3]=DATARHT[2]/10;// tm[4]=DATARHT[2]%10;// tm[5]=DATARHT[3]/10; //温度write_str(0,0,"measurement ");//第一行显示湿度write_shu(12,0,DHT11[0]);write_str(14,0,"RH");write_str(0,1,"Temperature ");//第二行为显示温度write_shu(12,1,DHT11[2]);write_str(14,1,"^C");}}}void main(){lcd_init(); //1602初始化delay(1000); //等待DHT11温湿度传感器数据稳定开始激活DHT11while(1)//循环读取并更新数据显示{delay(1000);//等待DHT11温湿度传感器数据稳定开始激活DHT11write_byte1();//读一个字节DHT11_5(); //读数据delay(1000); //延时等待}}。
STC89C52RC单片机的智能大棚温度自动控制系统
![STC89C52RC单片机的智能大棚温度自动控制系统](https://img.taocdn.com/s3/m/86b44cd64028915f804dc2a6.png)
大棚温湿度自动控制系统设计摘要:本设计是基于STC89C52RC单片机的大棚温湿度自动控制系统,采用SHT10作为温湿度传感器,LCD1602液晶屏进行显示。
SHT10使用类似于I2C总线的时序与单片机进行通信,由于它高度集成,已经包括A/D转换电路,所以使用方便,而且准确、耐用。
LCD1602能够分两行显示数据,第一行显示温度,第二行显示湿度。
这个控制系统能够测量温室大棚中的温度和湿度,将其显示在液晶屏LCD1602上,同时将其与设定值进行对比,如果超出上下限,将进行报警并启动温湿度调节设备。
此外,还可以通过独立式键盘对设定的温湿度进行修改。
通过设计系统原理图、用Proteus软件进行仿真,证明了该系统的可行性。
关键词:STC89C52RC,SHT10,I2C总线,独立式键盘,温湿度自动控制Abstract: This design is an automatic temperature and humidity controller for greenhouses, with the STC89C52RC MCU being its main controller. It uses the SHT10 as the temperature and humidity sensor, and the LCD1602 to display the messages. The SHT10 uses a timing sequence much like the I2C to communicate with the micro-controller. Because it’s a highly integrated chip, it already includes an analog to digital converter. Therefore, it’s quite convenient to use, and also accurate and durable. The LCD1602 can display two lines of messages, with the first line for temperature and the second line for humidity. The design can measure the temperature and humidity in a greenhouse, and then display it on a LCD1602. Meanwhile, it compares the data with the set limit. If the limit is exceeded, then the system will send out a warning using a buzzer and activate the temperature and humidity controlling equipment. Besides, the set limit can be modified with the independent keyboard. Through schematic design and Proteus simulation, the feasibility of this design has been proved. Keywords: STC89C52RC, SHT10, I2C bus, independent keyboard, temperature and humidity control目录1 前言 (1)2 总体方案设计 (3)2.1 温湿度控制系统的设计指标要求 (3)2.2 系统设计的原则 (3)2.2.1 可靠性 (3)2.2.2 性价比 (3)2.3 方案比较 (4)2.3.1 方案一 (4)2.3.2 方案二 (4)2.4 方案论证 (5)2.5 方案选择 (5)3 单元模块设计 (6)3.1 各单元模块功能介绍及电路设计 (6)3.1.1 单片机最小系统 (6)3.1.2 液晶显示模块 (8)3.1.3 温湿度传感器模块 (8)3.1.4 报警电路的设计 (9)3.1.5 输出电路设计 (10)3.1.6 电源的设计 (12)3.1.7 按键电路设计 (13)3.1.8 串口通信电路 (14)3.2 元件清单 (15)3.3 关键器件的介绍 (17)3.3.1 STC89C52RC (17)3.3.2 SHT10温湿度传感器 (19)4 系统软件设计 (22)4.1 软件设计的总体结构 (22)4.2 主要模块的设计流程框图 (24)4.2.1 主程序流程图 (24)4.2.2 SHT10子程序流程图 (25)4.2.3 LCD1602子程序流程图 (27)4.2.4 输出控制子程序流程图 (28)4.2.5 键盘扫描子程序流程图 (29)4.3 软件设计所用工具 (31)4.3.1 Keil uVision4 (31)4.3.2 Proteus (31)5 系统调试 (32)5.1 用Proteus搭建仿真总图 (32)5.2 用Keil对程序进行调试、编译 (33)6 结论 (36)6.1 系统的功能 (36)6.2 系统的指标参数 (36)6.3 系统功能分析 (36)7 总结与体会 (38)8 致谢 (39)9 参考文献 (40)附录1 系统的电路原理图 (41)附录2 系统仿真总图 (42)附录3 系统实物照片 (43)附录4 系统源程序 (44)附录5 英文参考资料 (46)1 中文翻译 (46)2 英文原文 (49)1 前言温室大棚作为一种高效的农业生产方式,与传统农业生产方式相比具有很大的优点。
基于单片机的室内温湿度检测系统的设计
![基于单片机的室内温湿度检测系统的设计](https://img.taocdn.com/s3/m/7bf43758571252d380eb6294dd88d0d233d43c01.png)
基于单片机的室内温湿度检测系统的设计
一、系统简介
本系统基于单片机,能够实时检测室内的温度和湿度,显示在
液晶屏幕上,并可通过串口输出到PC端进行进一步数据处理和存储。
该系统适用于家庭、办公室和实验室等场所的温湿度检测。
二、硬件设计
系统采用了DHT11数字温湿度传感器来实时检测室内温度和湿度,采用STC89C52单片机作为控制器,通过LCD1602液晶屏幕显示
温湿度信息,并通过串口与PC进行数据通信。
三、软件设计
1、采集数据
系统通过DHT11数字温湿度传感器采集室内的温度和湿度数据,通过单片机IO口与DHT11传感器进行通信。
采集到的数据通过计算
得到实际温湿度值,并通过串口发送给PC端进行进一步处理。
2、显示数据
系统将采集到的室内温湿度数据通过LCD1602液晶屏幕进行显示,可以实时观察室内温湿度值。
3、通信数据
系统可以通过串口与PC进行数据通信,将数据发送到PC端进
行存储和进一步数据处理。
四、系统优化
为了提高系统的稳定性和精度,需要进行优化,包括以下几点:
1、添加温湿度校准功能,校准传感器的测量误差。
2、添加系统自检功能,确保系统正常工作。
3、系统可以添加温湿度报警功能,当温湿度超过设定阈值时,系统会自动发送报警信息给PC端。
以上是基于单片机的室内温湿度检测系统的设计。
基于单片机的热敏电阻温度计的设计
![基于单片机的热敏电阻温度计的设计](https://img.taocdn.com/s3/m/9e960ca94bfe04a1b0717fd5360cba1aa9118c71.png)
基于单片机的热敏电阻温度计的设计引言:热敏电阻是一种根据温度变化而产生变阻的元件,其电阻值与温度成反比变化。
热敏电阻广泛应用于温度测量领域,其中基于单片机的热敏电阻温度计具有精度高、控制方便等特点,因此被广泛应用于各个领域。
本文将介绍基于单片机的热敏电阻温度计的设计,并通过实验验证其测量精度和稳定性。
一、系统设计本系统设计使用STC89C52单片机作为控制核心,热敏电阻作为测量元件,LCD1602液晶显示屏作为温度显示设备。
1.系统原理图2.功能模块设计(1)温度采集模块:温度采集模块主要由热敏电阻和AD转换模块组成。
热敏电阻是根据温度变化而改变阻值的元件,它与AD转换模块相连,将电阻变化转换为与温度成正比的电压信号。
(2)AD转换模块:AD转换模块将热敏电阻的电压信号转换为数字信号,并通过串口将转换结果传输给单片机。
在该设计中,使用了MCP3204型号的AD转换芯片。
(3)驱动显示模块:驱动显示模块使用单片机的IO口来操作LCD1602液晶显示屏,将温度数值显示在屏幕上。
(4)温度计算模块:温度计算模块是通过单片机的计算功能将AD转换模块传输过来的数字信号转换为对应的温度值。
根据热敏电阻的特性曲线,可以通过查表或采用数学公式计算获得温度值。
二、系统实现1.硬件设计(1)单片机电路设计单片机电路包括单片机STC89C52、晶振、电源电路等。
根据需要,选用合适的外部晶振进行时钟信号的驱动。
(2)AD转换电路设计AD转换电路采用了MCP3204芯片进行温度信号的转换。
根据芯片的datasheet,进行正确的连接和电路设计。
(3)LCD显示电路设计LCD显示电路主要由单片机的IO口控制,根据液晶显示模块的引脚定义,进行正确的连接和电路设计。
(4)温度采集电路设计温度采集电路由热敏电阻和合适的电阻组成,根据不同的热敏电阻特性曲线,选择合适的电阻和连接方式。
2.软件设计(1)初始化设置:单片机开机之后,需要进行一系列的初始化设置,包括对IO口、串口和LCD液晶显示屏的初始化设置。
基于STC89C52单片机的温湿度检测电路设计
![基于STC89C52单片机的温湿度检测电路设计](https://img.taocdn.com/s3/m/15e6a023ba0d4a7302763adb.png)
基于单片机的车间温湿度控制系统学生姓名:霍晓东学号:20084073831指导教师:孟洁所在学院:信息技术学院专业:电气工程及其自动化中国·大庆2012年 5 月黑龙江八一农垦大学本科毕业设计(论文)任务书摘要本设计是基于STC89C52单片机的温湿度检测电路设计,采用单总线传输模式的AM2301传感器,对温度湿度分别测量并通过液晶显示屏1602显示。
单片机采集到AM2301温湿度传感器给出的数据进行处理与计算,得出当前的温度与湿度并送给液晶屏显示。
本系统具有可读性高,稳定性高,反应速度快,测量值准确的特点。
关键词:温度湿度单片机目录摘要ﻩ错误!未定义书签。
ABSTRACTﻩ错误!未定义书签。
前言 (IV)1设计要求............................... 错误!未定义书签。
2方案设计及论证ﻩ12.1系统主要单元的选择与论证ﻩ错误!未定义书签。
2.2 总体方案设计ﻩ错误!未定义书签。
3 单片机主模块设计....................... 错误!未定义书签。
3.1单片机主电路设计................. 错误!未定义书签。
3.2主程序流程图ﻩ错误!未定义书签。
3.3主程序设计ﻩ错误!未定义书签。
4温湿度检测模块设计................... 错误!未定义书签。
4.1温湿度检测电路设计.............. 错误!未定义书签。
4.2温湿度检测流程图.................. 错误!未定义书签。
4.3温湿度检测程序设计................ 错误!未定义书签。
5液晶显示模块设计....................... 错误!未定义书签。
5.1 1602液晶显示模块电路设计....... 错误!未定义书签。
5.2液晶显示流程图.................. 错误!未定义书签。
5.3 液晶显示程序设计................. 错误!未定义书签。
基于89c52单片机LCD1602显示温度与串口接收温度程序
![基于89c52单片机LCD1602显示温度与串口接收温度程序](https://img.taocdn.com/s3/m/e6178a2fa22d7375a417866fb84ae45c3b35c21e.png)
for(i=0; i<6; i++)
{
SBUF = CNCHAR[i];//将接收到的数据放入到发送寄存器
while (!TI);//等待发送数据完成
TI = 0;
}
}
/*******************************************************************************
TI = 0;
LcdWriteCom(0x83);//写地址 80表示初始地址
LcdWriteData('0'+datas[1]); //十位
SBUF = '0'+datas[1];//将接收到的数据放入到发送寄存器
while (!TI);//等待发送数据完成
TI = 0;
LcdWriteCom(0x84);//写地址 80表示初始地址
Main.c
#include<reg52.h>
#include"lcd.h"
#include"temp.h"
uchar CNCHAR[6] = "摄氏度";
void LcdDisplay(int);
void UsartConfiguration();
/*******************************************************************************
datas[3] = temp % 100 / 10;
datas[4] = temp % 10;
LcdWriteCom(0x82);//写地址 80表示初始地址
基于STC89C52单片机时钟的设计与实现
![基于STC89C52单片机时钟的设计与实现](https://img.taocdn.com/s3/m/2534c374cdbff121dd36a32d7375a417866fc1b3.png)
基于STC89C52单片机时钟的设计与实现1. 本文概述本文主要介绍了基于STC89C52单片机和DS1302时钟芯片的电子时钟设计与实现。
该电子时钟系统具有年月日等基本时间显示功能,并集成了秒表计时处理、闹钟定时、蜂鸣器和温度显示等附加功能。
系统采用LCD1602作为液晶显示器件,通过单片机对时钟和温度等数据进行处理后传输至LCD进行显示。
用户可以通过按键对时间进行调节,同时,单片机还通过扩展外围接口实现了温度采集等功能。
本文的目标是提供一个功能丰富、易于操作的电子时钟系统,为学习和应用单片机技术提供一个实用的案例。
2. 系统设计要求在设计基于STC89C52单片机的时钟系统时,我们需要考虑以下几个关键的设计要求:时钟系统必须具备基本的时间显示功能,能够以小时、分钟和秒为单位准确显示当前时间。
系统还应支持设置闹钟功能,允许用户设定特定的时间点进行提醒。
系统需要保证长时间稳定运行,具备良好的抗干扰能力,确保在各种环境下都能准确计时。
还应具备一定的容错能力,即使在操作失误或外部干扰的情况下,也能保证系统的正常运行。
用户界面应简洁直观,便于用户快速理解和操作。
时钟的显示部分应清晰可见,即使在光线较暗的环境下也能保持良好的可视性。
同时,设置和调整时间的操作应简单易懂,方便用户进行日常使用。
在设计时钟系统时,应考虑到未来可能的功能扩展,如温度显示、日期显示等。
系统的设计应具有一定的灵活性和扩展性,以便在未来可以轻松添加新的功能模块。
鉴于时钟系统可能需要长时间运行,能耗是一个重要的考虑因素。
设计时应选择低功耗的元件,并优化电源管理策略,以延长电池寿命或减少能源消耗。
在满足上述所有要求的同时,还需要控制成本,确保产品的市场竞争力。
这可能涉及到对单片机的编程优化、选择性价比高的外围元件等措施。
通过满足上述设计要求,我们可以确保开发出一个功能完善、稳定可靠、用户友好、易于扩展、节能环保且成本效益高的STC89C52单片机时钟系统。
STC89C52单片机实验---DS18B20的1602显示
![STC89C52单片机实验---DS18B20的1602显示](https://img.taocdn.com/s3/m/c6dbcce1aeaad1f346933f12.png)
这是一个利用1602液晶显示温度和蜂鸣器报警的函数;使用的测温器件是单总线DS18B20;#include<reg52.h>#include<intrins.h>#include<math.h>#define uchar unsigned char#define uint unsigned intsbit dula=P2^6; //数码管的段选sbit wela=P2^7; //数码管的位选sbit RW=P1^1; //1602sbit RS=P1^0; //1602sbit LCDEN=P2^5;sbit DS=P2^2; //DS18B20的总线sbit FM=P2^3; //蜂鸣器void delayUs(){_nop_();//微秒级的延时}void delayMs(uint a) //毫秒级的延时。
{uint i,j;for(i=a;i>0;i--)for(j=100;j>0;j--);}void writecom(uchar com) //向1602写命令;{RS=0;P0=com;LCDEN=1;delayUs();LCDEN=0;delayMs(1);}void writedat(uchar dat) //写数据。
P0=dat;LCDEN=1;delayUs();LCDEN=0;delayMs(1);}void init() // 1602初始化{RW=0;dula=0;wela=0;writecom(0x38);writecom(0x0c);writecom(0x06);writecom(0x01);}void writeString(uchar *str) //向1602写字符串。
{uchar length;uchar i=0;do{length=1+i;i++;} while(str[i]);for(i=length;i>0;i--){writedat(str[length-i]);}}int DSinit() //DS18B20的初始化{uint i;DS=0;i=100;while(i>0) i--;while(i>0) i--;while(DS) //检验是否初始化成功{i++;if(i>40000)return 0;}return 1;}void DSwait(){uint i;while(DS);while(~DS);i=4;while(i>0) i--;}bit readbit() //读一个比特{uint i;bit b;DS=0;i++;DS=1;i++;i++;b=DS;i=8;while(i>0) i--;return b;}uchar readbyte()// 利用前面的函数读一个字节{uint i;uchar j,dat;dat=0;for(i=0;i<8;i++){j=readbit();//赋值给最低位dat=(j<<7)|(dat>>1);//每位放到高位;return dat;}void writebyte(uchar dat)//写一个字节;{uint i;uchar j;bit b;for(j=0;j<8;j++){b=dat&0x01;dat>>=1;if(b){DS=0;i++;i++;i++;DS=1;i=8;while(i>0)i--;}else{DS=0;i=8;while(i>0)i--;DS=1;i++;i++;}}}void sendChangecom(){DSinit();DSwait();delayMs(1);writebyte(0xcc);writebyte(0x44);void sendReadcom(){DSinit();DSwait();delayMs(1);writebyte(0xcc);writebyte(0xbe);}int getTmpvalue(){uint tmpvalue;int value;float t;uchar low,high;sendReadcom();low=readbyte();high=readbyte();tmpvalue=high,tmpvalue<<=8;tmpvalue|=low;value = tmpvalue;t=value*0.0625;value=t*100+(value>0?0.5:-0.5); return value;}void display(int v){int count;char datas[]={0,0,0,0,0,0};uint tmp=abs(v);datas[0]=tmp/10000;datas[1]=tmp%10000/1000;datas[2]=tmp%1000/100;datas[3]=tmp%100/10;datas[4]=tmp%10;{writedat('-');}else{writedat('+');}if(datas[0]!=0)writedat('0'+datas[0]);for(count = 1;count!=5;count++){writedat('0'+datas[count]);if(count==2)writedat('.');}}void warning(int x){if((x/100)>26){ delayMs(100);FM=~FM;delayMs(100);}}void main(){char table[]="WENDU:";while(!DSinit());init();P1=0x00;writecom(0x80);sendChangecom();writeString(table );while(1){delayMs(1000);writecom(0xc0);delayMs(850);warning(getTmpvalue());sendChangecom();}}。
利用STC89C52单片机控制LCD1602
![利用STC89C52单片机控制LCD1602](https://img.taocdn.com/s3/m/8e5c9ad6195f312b3169a544.png)
//液晶显示中文-版本0.0//作者:pcdian//定义液晶的一些功能位//RS 为数据、指令寄存器选择位//RW 为读写选择位//E 为使能位RS BIT p2.5RW BIT P2.6E BIT P2.7ORG 0000HSJMP STARTORG 000BHLJMP Timer_ITORG 0030HSTART:MOV SP,#60HMOV TMOD,#01HMOV TH0,#0A6HMOV TL0,#00HSETB EASETB ET0CLR TR0MAIN:MOV P0,#01H //清屏ACALL ENABLEMOV P0,#38H //显示模式设置为16字*2行ACALL ENABLEMOV P0,#0CH //不显示光标ACALL ENABLEMOV P0,#06H //显示方向正向且屏不移动ACALL ENABLEDISPLAY:ACALL DISPLAY_C0//我MOV P0,#80HACALL ENABLEMOV P0,#00HACALL WRITEMOV P0,#81HACALL ENABLEMOV P0,#01HACALL WRITEMOV P0,#82HACALL ENABLEMOV P0,#02HACALL WRITEMOV P0,#0C0HACALL ENABLEMOV P0,#03HACALL WRITEMOV P0,#0C1HACALL ENABLEMOV P0,#04HACALL WRITEMOV P0,#0C2HACALL ENABLEMOV P0,#05HACALL WRITELCALL DELAY1SMOV P0,#01HACALL ENABLEACALL DISPLAY_C1//们MOV P0,#83HACALL ENABLEMOV P0,#00HACALL WRITEMOV P0,#84HACALL ENABLEMOV P0,#01HACALL WRITEMOV P0,#85HACALL ENABLEMOV P0,#02HACALL WRITEMOV P0,#0C3HACALL ENABLEMOV P0,#03HACALL WRITEMOV P0,#0C4HACALL ENABLEACALL WRITEMOV P0,#0C5HACALL ENABLEMOV P0,#05HACALL WRITELCALL DELAY1SMOV P0,#01HACALL ENABLEACALL DISPLAY_C2//的MOV P0,#86HACALL ENABLEMOV P0,#00HACALL WRITEMOV P0,#87HACALL ENABLEMOV P0,#01HACALL WRITEMOV P0,#88HACALL ENABLEMOV P0,#02HACALL WRITEMOV P0,#0C6HACALL ENABLEMOV P0,#03HACALL WRITEACALL ENABLEMOV P0,#04HACALL WRITEMOV P0,#0C8HACALL ENABLEMOV P0,#05HACALL WRITELCALL DELAY1SMOV P0,#01HACALL ENABLEACALL DISPLAY_C3//0MOV P0,#89HACALL ENABLEMOV P0,#00HACALL WRITEMOV P0,#8AHACALL ENABLEMOV P0,#01HACALL WRITEMOV P0,#0C9HACALL ENABLEMOV P0,#02HACALL WRITEMOV P0,#0CAHACALL ENABLEMOV P0,#03HLCALL DELAY1SMOV P0,#01HACALL ENABLEACALL DISPLAY_C4//7MOV P0,#8BHACALL ENABLEMOV P0,#00HACALL WRITEMOV P0,#8CHACALL ENABLEMOV P0,#01HACALL WRITEMOV P0,#0CBHACALL ENABLEMOV P0,#02HACALL WRITEMOV P0,#0CCHACALL ENABLEMOV P0,#03HACALL WRITE//3MOV P0,#8DHACALL ENABLEMOV P0,#04HACALL WRITEMOV P0,#8EHACALL ENABLEMOV P0,#05HACALL WRITEMOV P0,#0CDHACALL ENABLEMOV P0,#06HACALL WRITEMOV P0,#0CEHACALL ENABLEMOV P0,#07HACALL WRITELCALL DELAY1SMOV P0,#01HACALL ENABLELJMP DISPLAY DISPLAY_C0:MOV DPTR,#TAB0MOV R2,#48ACALL DISPLAY_CRET DISPLAY_C1:MOV DPTR,#TAB1MOV R2,#48ACALL DISPLAY_CRET DISPLAY_C2:MOV DPTR,#TAB2MOV R2,#48ACALL DISPLAY_CRET DISPLAY_C3:MOV DPTR,#TAB3MOV R2,#32ACALL DISPLAY_CRET DISPLAY_C4:MOV DPTR,#TAB4MOV R2,#64ACALL DISPLAY_CRETDISPLAY_C:MOV P0,#40HACALL ENABLEMOV R3,#0DISPLAY_CC:MOV A,R3MOVC A,@A+DPTRMOV P0,ALCALL WRITEINC R3DJNZ R2,DISPLAY_CCRETENABLE:CLR RSCLR RWCLR EACALL DELAYSETB ERETWRITE:SETB RSCLR RWCLR EACALL DELAYSETB ERETDELAY1S:SETB TR0CJNE R0,#20,DELAY1SCLR TR0MOV R0,#0RETDELAY:MOV R5,#08HL1:MOV R4,#0FAHL0:DJNZ R4,L0DJNZ R5,L1RETTimer_IT:MOV TH0,#0A6HMOV TL0,#00HINC R0RETITAB0: //我DB 0x00,0x07,0x01,0x01,0x01,0x1F,0x01,0x01 DB 0x19,0x01,0x01,0x01,0x01,0x1F,0x01,0x01 DB 0x00,0x08,0x04,0x04,0x00,0x1F,0x00,0x04 DB 0x01,0x07,0x19,0x01,0x01,0x01,0x05,0x02 DB 0x18,0x00,0x00,0x01,0x06,0x00,0x00,0x00 DB 0x14,0x18,0x10,0x08,0x09,0x05,0x03,0x01TAB1: //们DB 0x01,0x01,0x02,0x02,0x06,0x04,0x0c,0x14 DB 0x08,0x04,0x06,0x04,0x10,0x10,0x10,0x10 DB 0x00,0x00,0x1e,0x02,0x02,0x02,0x02,0x02 DB 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00 DB 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00 DB 0x02,0x02,0x02,0x02,0x02,0x0a,0x04,0x00TAB2: //的DB 0x02,0x02,0x04,0x0f,0x08,0x08,0x08,0x0f DB 0x02,0x02,0x02,0x13,0x14,0x14,0x18,0x12DB 0x00,0x00,0x00,0x1e,0x02,0x02,0x02,0x02DB 0x08,0x08,0x08,0x08,0x0f,0x08,0x08,0x00DB 0x11,0x11,0x10,0x10,0x10,0x10,0x00,0x00DB 0x02,0x12,0x12,0x02,0x02,0x14,0x08,0x00TAB3: //0DB 0x00,0x00,0x03,0x04,0x08,0x08,0x08,0x08DB 0x00,0x00,0x18,0x04,0x02,0x02,0x02,0X02DB 0x08,0x08,0x08,0x08,0x04,0x03,0x00,0x00DB 0x02,0x02,0x02,0x02,0x04,0x18,0x00,0x00TAB4: //7DB 0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00DB 0x00,0x00,0x1E,0x1E,0x06,0x06,0x06,0X06DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00DB 0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x00//3DB 0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x0FDB 0x00,0x00,0x1E,0x1E,0x06,0x06,0x06,0X1EDB 0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00DB 0x1E,0x06,0x06,0x06,0x1E,0x1E,0x00,0x00END四、总结:虽然LCD1602可以利用自建字符显示中文,但最多不能超过8个字符位。
基于STC89C52单片机的温度测量及报警电路设计 精品
![基于STC89C52单片机的温度测量及报警电路设计 精品](https://img.taocdn.com/s3/m/669e9ac949649b6648d74731.png)
摘要摘要:在日常生活及工业生产过程中,经常要用到温度的检测及控制,温度是生产过程和科学实验中普遍而且重要的物理参数之一。
传统的测温元件有热电偶和二电阻。
而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,这些方法相对比较复杂,需要比较多的外部硬件支持。
我们用一种相对比较简单的方式来测量。
采用美国DALLAS半导体公司推出的一种改进型智能温度传感器DS18B20作为检测元件,温度范围为-55~125 ºC,最高分辨率可达0.0625 ºC。
DS18B20可以直接读出被测温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。
基于STC89C52单片机的温度测量及报警电路,电路采用DS18B20作为温度监测元件,测量范围0℃-~50℃,使用LCD模块显示,能设置温度报警上下限。
着重介绍软硬件系统的各部分电路,介绍了集成温度传感器DS18B20的原理,STC89C52单片机功能和应用。
该电路设计新颖、功能强大、结构简单。
关键词:温度测量报警 DS18B20 STC89C52AbstractAbstract:In daily life and industrial production process, often used in the detection and control of temperature, temperature is the production process and scientific experiments in general and one of the important physical parameter. Traditional thermocouple and temperature components are the second resistor. The thermocouple and thermal resistance are generally measured voltage, and then replaced by the corresponding temperature, these methods are relatively complex, requiring a relatively large number of external hardware support. We use a relatively simple way to measure.Use the United States following DALLAS Semiconductor DS1820 improved after the introduction of a smart temperature sensor DS18B20 as the detection element, a temperature range of -55 º C ~ 125 º C, up to a maximum resolution of 0.0625 º C. DS18B20 can be directly read out the temperature on the north side, and three-wire system with single-chip connected to a decrease of the external hardware circuit, with low-cost and easy use.The introduction of a cost-based STC89C52 MCU a temperature measurement circuits, the circuits used DS18B20 high-precision temperature sensor, measuring scope 0 º C~+100 º C, can set the warning limitation, the use of seven segments LCD that can be display the current temperature. The paper focuses on providing a software and hardware system components circuit, introduced the theory of DS18B20, the functions and applications of AT89C51 .This circuit design innovative, powerful, can be expansionary strong.Key words:Temperature measurement warning DS18B20 STC89C52目录1绪论 (1)1.1 引言 (1)1.2设计内容及要求 (1)1.3主体的部分 (2)2 AT89S52单片机介绍及应用 (4)2.1 AT89S52的主要功能 (4)2.2 引脚结构及说明 (5)2.2.1方框图 (6)2.2.2 引脚说明 (7)2.3 特殊功能寄存器 (10)2.4 存储器结构 (13)2.5 软件看门狗及串口 (14)2.5.1WDT的使用 (14)2.5.2掉电和空闲方式下的WDT (15)2.5.3 定时器2 (15)2.6 其他功能介绍 (16)3 系统软件的设计 (23)3.1 程序设计语言 (23)3.2主程序 (23)3.3 显示子程序 (24)3.4定时器T0中断服务程序 (25)3.5T1中断服务程序 (25)3.6调时功能程序 (25)3.7时钟/秒表功能程序 (25)4 硬件电路的操作和显示 (26)4.1 硬件工作过程 (26)4.2 LED的性能特点 (27)5其他外围电路设计 (28)5.1 时钟电路 (28)5.2复位电路 (29)5.3键盘电路 (30)结论 (32)致谢 (33)参考文献 (34)附录A英文和翻译 (35)附录B电路原理图 (43)第一章绪论1.1引言随着科技的发展,在工业、农业生产等重要领域对温度的控制要求越来越高,因而对温度报警系统的要求也越来越高。
基于AT89S52单片机SD18b20温度在1602液晶上的显示
![基于AT89S52单片机SD18b20温度在1602液晶上的显示](https://img.taocdn.com/s3/m/c5c98149e45c3b3567ec8bac.png)
#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit DQ=P0^1;sbit rs=P2^0;sbit rw=P2^1;sbit en=P2^2;uchar low,high;uchar num[]="00.00";//===============================================================函数的声明//*****sd18b20函数初始化**********void delayus();void init_18b20(void);void write_18b20(uchar com);uchar read_18b20(void);void read_wendu(void);void xianshi(void);//******1602液晶函数初始化********void delay();void init_1602(void);void write_com1602(uchar com);void write_date1602(uchar date);//===============================================================void delay(uint t){uint i,j;for(i=0;i<t;i++)for(j=0;j<100;j++);}void delayus(uint t){while(t--);}void init_18b20(void){uchar n;DQ=1;delayus(10);DQ=0;delayus(100);DQ=1;delayus(10);n=DQ;delayus(5);}void write_18b20(uchar com) {uchar i;for(i=0;i<8;i++){DQ=0;DQ=com&0x01;delayus(5);DQ=1;com>>=1;}delayus(5);}uchar read_18b20(void){uchar i;uchar date;for(i=0;i<8;i++){DQ=0;date>>=1 ;DQ=1;if(DQ){date|=0x80;}delayus(5);}return date;}void read_wendu(){init_18b20();write_18b20(0xcc);write_18b20(0x44);delayus(300);init_18b20();write_18b20(0xcc);write_18b20(0xbe);low=read_18b20();//低八位high=read_18b20();//高八位}void xianshi(void){high<<=4;high+=(low&0xf0)>>4;write_com1602(0x80);delayus(10);num[0]=high/10;write_date1602(0x30+num[0]);delay(2);num[1]=high%10;write_date1602(0x30+num[1]);}void main()//*******主函数******{init_1602();while(1){read_wendu();xianshi();}}void write_com1602(uchar mingling)//命令输入函数{uchar gao,di; //定义高、低四位gao=mingling&0xf0;//分出高四位di=(mingling<<4)&0xf0;//分出低四位//==========================================读走高四位P2=gao;//让数据(mingling)高四位有效rs=0;//rs端为低电平时,为接收命令delay(10);en=1; //en一个高脉冲读走高四位数据(mingling)delay(20);en=0;//把使能端拉回低电平//============================================读走低四位delay(10);P2=di;//让数据(mingling)低四位有效rs=0;//rs端为低电平时,为接收命令delay(10);en=1 ;//en一个高电平读走低四位命令(mingling)delay(20);en=0;//把使能端拉回低电平}void write_date1602(uchar shuju)//数据输入函数{uchar gao,di;gao=shuju&0xf0;//分出高四位di=(shuju<<4)&0xf0;//分出低四位//=======================================读走高四位delay(10);P2=gao;//让数据(shuju)高四位有效rs=1;//rs端为高电平时,为接收数据delay(10);en=1;//en一个高电平读走低四位数据(shuju)delay(20);en=0;//把使能端拉回低电平//============================================读走低四位delay(10);P2=di;//让数据(shuju)低四位有效rs=1;//rs端为高电平时,为接收数据delay(10);en=1;//en一个高电平读走低四位数据(shuju)delay(20);en=0;//把使能端拉回低电平}void init_1602(){rw=0;//把数据/命令选择端先置为零en=0;//把使能端先置为零delay(10);write_com1602(0x28);//设置16*12显示,5*7点阵,4位数据接口delay(40);write_com1602(0x01);//清屏delay(10);write_com1602(0x0c);//显示开启,不显示光标delay(10);write_com1602(0x06);//整屏不移动delay(10);write_com1602(0x14);delay(10);}。
基于STC89C52单片机的数字温度计(附源代码,完美实现)
![基于STC89C52单片机的数字温度计(附源代码,完美实现)](https://img.taocdn.com/s3/m/09bb5b6c7e21af45b207a804.png)
基于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。
基于STC89C52和LCD1602、DS1302的数字温度计(绝对正确、赋源代码)
![基于STC89C52和LCD1602、DS1302的数字温度计(绝对正确、赋源代码)](https://img.taocdn.com/s3/m/6613acf4f90f76c661371ac8.png)
《数字显示温度计》论文学校:华侨大学学院:信息科学与工程学院班级:10级集成电路设计与集成系统组别:自控06组组员:*** *** **目录摘要 (3)第一章总体设计方案 ............................................................... 错误!未定义书签。
1.1设计思路 (3)1.2总体设计框图 (5)第二章硬件设计 (5)2.1主电路原理图 (5)2.2 DS18B20温度传感器 (5)2.3 DS1302时钟电路 (6)2.4 声光报警电路 (6)2.5 LCD1602显示电路 (7)第三章软件设计 (7)3.1 系统整体流程图 (7)第四章总结与体会 (8)第五章总结与体会 (8)第六章源代码 (8)摘要随着现代化信息技术的飞速发展,单片机技术已经十分普及,在实时检测和自动控制的单片机应用系统中,单片机往往是作为核心部件来使用。
本论文介绍了一种以单片机AT89C52为主要控制器件,以DS18B20为温度传感器通过LCD液晶屏传送数据,实现温度显示的新型数字温度计。
该数字温度计的测量范围为0~100℃,显示分辨率为0.1℃。
高、低两路限温控制点可在0~100 0C范围内独立设置,当温度达到高、低限温控制点发出声光报警。
由于采用了温度传感器DS18B20作为检测元件,与传统的温度计相比,本文设计的数字温度计减少了外部的硬件电路,具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。
DS18B20温度计还可以在高温报警、远距离多点测温控制等方面进行应用开发。
该系统结构简单,抗干扰能力强,适合于各种环境下进行现场温度测量,可广泛应用于工业控温系统、温度计、消费产品以及其它温度测控系统。
关键词:单片机AT89C52;温度传感器DS18B20;数字温度计;LCD1602液晶屏显示第一章总体设计方案1.1设计思路:1)、单片机的选择方案1:采用传统的STC89C52RC作为电机的控制核心。
基于STC89C52和DS18B20的温度检测装置设计
![基于STC89C52和DS18B20的温度检测装置设计](https://img.taocdn.com/s3/m/03df1720910ef12d2bf9e739.png)
《单片机应用系统设计》课程设计任务书一、课题名称《基于STC89C52和DS18B20的温度检测装置》二、设计任务1、.功能要求基本任务:(1) 采用STC89C52单片机(可选用其他89C51系列的单片机)和DS18B20温度传感器,1602字符液晶设计;(2) 根据数据手册编程读取DS18B20,用1602字符液晶显示温度(3) 通过4个键实现温度上限和下限设置。
发挥任务:实现一个时钟,显示时,分秒,并可以设置时间。
2.、设计要求(1)熟悉STC89C52单片机及其开发环境;熟悉汇编语言或C51程序设计;(2)掌握STC89C52单片机最小系统、按键电路、字符液晶显示电路的设计;掌握DS18B20编程方法,学会看数据手册;掌握1602字符液晶编程方法;掌握单片机时钟中断的编程方法;熟悉项目设计流程;(3)熟悉硬件软件调试的方法;(4)设计报告中详细写出硬件电路设计方案、画出软件流程图并总结调试中遇到的问题及解决方法。
三、设计报告撰写规范单片微机应用系统设计总结报告正文,主要含以下内容(硬件、软件各部分内容也可组合起来进行撰写说明):1.系统总体设计方案(画出系统原理框图、方案的论证与比较等内容);2.硬件系统分析与设计(各模块或单元电路的设计、工作原理阐述、参数计算、元器件选择、完整的系统电路图、系统所需的元器件清单。
等内容);3.软件系统分析与设计(各功能模块的程序设计流程图与说明、软件系统设计、软件抗干扰措施、完整的程序等内容);4.系统仿真调试与参数测量(使用仪器仪表、故障排除、电路硬件和软件调试的方法和技巧、指标测试的参数和波形、测量误差分析);5.总结(本课题核心内容及使用价值、电路设计、软件设计的特点和选择方案的优缺点、改进方向和意见等);6.按统一格式列出主要参考文献。
《基于STC89C52和DS18B20的温度检测装置》课程设计总结报告一、系统总体方案1.系统原理框图2.方案工作过程的论述本设计是一款简单实用的小型数字温度计,所采用的主要元件有传感器DS18B20,单片机STC89C52,LED1602字符液晶一个,电容电阻若干。
基于单片机温度控制系统设计
![基于单片机温度控制系统设计](https://img.taocdn.com/s3/m/94ea503e2f60ddccda38a0dd.png)
基于单片机的温度控制系统设计摘要:这次综合设计,主要是设计一个温度控制系统,用STC89C52单片机控制,用智能温度传感器DS18B20对温度进行采集,用LCD1602液晶显示屏将采集到的温度显示出来。
系统可以有效的将温度控制在设定的范围内。
如果实际温度超出了控制范围,则系统会有自动的提示信号,并且相应的继电器会动作。
我们的实际生活离不开对温度的控制,在很多情况下我们都要对我们所处的环境进行温度检测,然后通过一定的措施进行调节,从而达到我们自己想要的温度,使我们的生活环境更加适宜。
关键字:单片机;液晶显示屏;温度传感器;继电器;提示信号Abstract:This integrated design is the design of a temperature control system. A smart temperature sensor DS18B20 is used to collect temperature and a LCD1602 Liquid Screen is used to display the collected temperature. The system controlled by STC89C52 can effectively control the temperature within the setting limits. If the actual temperature exceeds the setting range, the system will automatically give signal, and the corresponding Relay will take related actions. It is necessary for us to control the temperature because in many situations the temperature around us is not proper for us. So we need to detect it and take some actions to adjust it to the temperature we want to make the environment around us better.Key Words:DS18B20;LCD1602;STC89C52;Relay;Signal引言目前,测控系统在工业生产中起着把关者和指导者的作用,它从生产现场到各种参数的获取,运用科学规律和系统工程的做法,综合有效地利用各种先进技术,通过自动手段和装备,使每个生产环节得到优化,进而保证生产规范化,提高产品质量,降低成本,满足需要,保证安全生产。
基于89c52单片机LCD1602显示红外遥控键值程序
![基于89c52单片机LCD1602显示红外遥控键值程序](https://img.taocdn.com/s3/m/4c6eda10ba68a98271fe910ef12d2af90242a8fc.png)
if(IrValue[5]>9)
{
LcdWriteCom(0xc0+0x0a);
LcdWriteData(IrValue[5]+0x37);//将数值转换为该显示的ASCII码
}
else
{
LcdWriteCom(0xc0+0x0a);
LcdWriteData(IrValue[5]+0x30);//将数值转换为该显示的ASCII码
void DelayMs(unsigned int x) //0.14ms误差 0us
{
unsigned char i;
while(x--)
{
for (i = 0; i<13; i++)
{}
}
}
/*******************************************************************************
* 函数功能: 主函数
* 输入 : 无
* 输出: 无
**************************************************************************/
void main()
{
unsigned char i;
IrInit();
LcdInit();
LcdWriteCom(0x80);
Main.c
#include<reg52.h>
#include"lcd.h"
sbit IRIN=P3^2;
unsigned char code CDIS1[13]={" Red Control "};
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P3^7;//ds18b20与单片机连接口
sbit RS=P3^0;
sbit RW=P3^1;
sbit EN=P3^2;
unsigned char code str1[]={"temperature: "};
unsigned char code str2[]={" "};
uchar data disdata[5];
uint tvalue;//温度值
uchar tflag;//温度正负标志
/*************************lcd1602程序**************************/ void delay1ms(unsigned int ms)//延时1毫秒(不够精确的){unsigned int i,j;
for(i=0;i<ms;i++)
for(j=0;j<100;j++);
}
void wr_com(unsigned char com)//写指令//
{ delay1ms(1);
RS=0;
RW=0;
EN=0;
P2=com;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void wr_dat(unsigned char dat)//写数据//
{ delay1ms(1);;
RS=1;
RW=0;
EN=0;
P2=dat;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void lcd_init()//初始化设置//
{delay1ms(15);
wr_com(0x38);delay1ms(5);
wr_com(0x08);delay1ms(5);
wr_com(0x01);delay1ms(5);
wr_com(0x06);delay1ms(5);
wr_com(0x0c);delay1ms(5);
}
void display(unsigned char *p)//显示// {
while(*p!='\0')
{
wr_dat(*p);
p++;
delay1ms(1);
}
}
init_play()//初始化显示
{ lcd_init();
wr_com(0x80);
display(str1);
wr_com(0xc0);
display(str2);
}
/******************************ds1820程序***************************************/ void delay_18B20(unsigned int i)//延时1微秒
{
while(i--);
}
void ds1820rst()/*ds1820复位*/
{ unsigned char x=0;
DQ = 1; //DQ复位
delay_18B20(4); //延时
DQ = 0; //DQ拉低
delay_18B20(100); //精确延时大于480us
DQ = 1; //拉高
delay_18B20(40);
}
uchar ds1820rd()/*读数据*/
{ unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{ DQ = 0; //给脉冲信号
dat>>=1;
DQ = 1; //给脉冲信号
if(DQ)
dat|=0x80;
delay_18B20(10);
}
return(dat);
}
void ds1820wr(uchar wdata)/*写数据*/
{unsigned char i=0;
for (i=8; i>0; i--)
{ DQ = 0;
DQ = wdata&0x01;
delay_18B20(10);
DQ = 1;
wdata>>=1;
}
}
read_temp()/*读取温度值并转换*/
{uchar a,b;
ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/
ds1820wr(0x44);//*启动温度转换*/
ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/
ds1820wr(0xbe);//*读取温度*/
a=ds1820rd();
b=ds1820rd();
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0x0fff)
tflag=0;
else
{tvalue=~tvalue+1;
tflag=1;
}
tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数return(tvalue);
}
/*******************************************************************/ void ds1820disp()//温度值显示
{ uchar flagdat;
disdata[0]=tvalue/1000+0x30;//百位数
disdata[1]=tvalue%1000/100+0x30;//十位数
disdata[2]=tvalue%100/10+0x30;//个位数
disdata[3]=tvalue%10+0x30;//小数位
if(tflag==0)
flagdat=0x20;//正温度不显示符号
else
flagdat=0x2d;//负温度显示负号:-
if(disdata[0]==0x30)
{disdata[0]=0x20;//如果百位为0,不显示
if(disdata[1]==0x30)
{disdata[1]=0x20;//如果百位为0,十位为0也不显示
}
}
wr_com(0xc0);
wr_dat(flagdat);//显示符号位
wr_com(0xc1);
wr_dat(disdata[0]);//显示百位
wr_com(0xc2);
wr_dat(disdata[1]);//显示十位
wr_com(0xc3);
wr_dat(disdata[2]);//显示个位
wr_com(0xc4);
wr_dat(0x2e);//显示小数点
wr_com(0xc5);
wr_dat(disdata[3]);//显示小数位
}
/********************主程序***********************************/
void main()
{ init_play();//初始化显示
while(1)
{read_temp();//读取温度
ds1820disp();//显示
}
}。