基于单片机的智能温控系统的设计与实现.doc

上传人:飞****2 文档编号:16410902 上传时间:2022-05-17 格式:DOC 页数:15 大小:144KB
返回 下载 相关 举报
基于单片机的智能温控系统的设计与实现.doc_第1页
第1页 / 共15页
基于单片机的智能温控系统的设计与实现.doc_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《基于单片机的智能温控系统的设计与实现.doc》由会员分享,可在线阅读,更多相关《基于单片机的智能温控系统的设计与实现.doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上 课 程 设 计 报 告设计名称 基于单片机的智能温控系统的设计与实现 学 校 陕西电子科技职业学院 学 院 电子工程学院 学生姓名 王一飞 班 级 1507 指导教师 聂弘颖 时 间2017年10月23日 一、概述随着嵌入式技术、计算机技术、通信技术的不断发展与成熟。控制系统以其直观、方便、准确、适用广泛而被越来越广泛地应用于工业过程、空调系统、智能楼宇等。恒温控制系统,控制对象是温度。温度控制在日常生活及工作领域应用的相当广泛,比如温室、水池、发酵缸、电源等场所的温度控制,而以往温度控制是由人工完成的而且不够重视,其实在很多场所温度都需要监控以防止发生意外。针对此

2、问题,本系统设计的目的是实现一种可连续高精度调温的温度控制系统,它应用广泛,功能强大,小巧美观,便于携带,是一款既实用又廉价的控制系统。本项目设计是对温度进行实时监测与控制,设计的温度控制系统实现了基本的温度控制功能:被控温度范围可以调整,初始范围25=T=35。如果被测温度在25度到35度之间,则既不加热,又不报警;如果被测温度小于25度,则既加热,又报警;如果被测温度大于35度,则报警,不加热。 数码管显示温度,温度精确到整数。二、方案设计采用单片机+单总线DS18B20的方案,其中单片机采用51兼容系列 三、详细硬件设计及原件介绍3.1 单片机最小系统在基于单片机的应用系统中,其核心是单

3、片机的最小系统,而单片机又是最小系统的核心,为了方便起见,采用的单片机型号是:STC89C52RC,内部资源有:8KB FLASH ,512B SRAM,4个8位I/O,2个TC,1个UART,带ISP和IAP功能。是近年来流行的低端51单片机。时钟电路采用12.0M晶体,复位电路采用简单的RC复位电路。R=10K,C=10uF,详细电路见总体原理图3.2 DS18B20简介DS18B20是采用“1-wire”一线总线传输数据的集成温度传感器,信息经过单线接口送入DS18B20或从DS18B20送出,因此从中央处理器到DS18B20仅需连接一条线。可采用外部电源供电,也可采用总线供电方式,此时

4、,把VDD连接在一起作为数字电源。因为每一个DS18B20有唯一的系列号(silicon serial number),因此多个DS18B20可以存在于同一条单线总线上,这允许在许多地方放置温度灵敏器件。此特性的应用范围包括HVAC环境控制,建筑物、设备或机械内的温度检测。3.2 DS18B20与单片机接口四、总体原理图见附录1五、程序设计1、主程序流程图六、项目总结通过对该项目的设计制作,我对简单的单片机控制系统的开发过程有了比较全面的理解,在这次实习中,我的体会有:1.细心,制作硬件和编写程序,调试程序,都需要细心,否则很容易失败。2.基础,单片机不是万能的,它需要外部硬件电路的配合,这些

5、电路不复杂,但是要弄明白它的原理,还是要下一番功夫的。像基础的电子焊接,测量,元件的识别等都是。3.团队合作,由于时间的关系,每个项目由几个人合作,这时就特别需要团队合作意识。4.撰写设计文档,对写设计文档总感到是一种累赘反正实物已经出来了,有没有文档关系不大。现在需要在设计过程中随时记录一些东西,最后整理成设计文档。5.将一个大的问题分割成几个相对独立的部分,更容易解决。附录1:电路原理图附录2:代码:(1)名称:温控系统#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义/#include#define uchar unsigned char#define u

6、int unsigned int/*/* 定义端口 */*/sbit DQ=P27;/ds18b20 端口sbit ledj=P11;/加热sbit ledb=P17;/报警sbit keyup=P30; /温度加sbit keydn=P31; /温度减/*/* 全局变量 */*/uint tmax=30;uint tmin=26;uint temp;uchar shi,ge,temph,i,j,x;uchar code tab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; /7

7、段数码管段码表共阳/*/* 函数声明 */*/unsigned int ReadWD(void);void csh(void);unsigned char ReadOneChar(void);void WriteOneChar(uchar dat);void delay(uint i);void xs(uchar shi,uchar ge);void sjcl();/*/* 主函数 */*/void main()/unsigned char temph;while(1)if(keyup=0)for(j=0;j20;j+)for(i=0;i20;i+)shi=tmax/10;ge=tmax%10

8、;xs(shi,ge);delay(5000);shi=10;ge=10;xs(shi,ge);if(keyup=0)tmax+;while(keyup=0);if(keydn=0)tmax-;while(keydn=0);else if(keydn=0)for(j=0;j20;j+)for(i=0;i4;shi=temph/10; /十位温度 ge=temph%10; /个位温度xs(shi,ge); /显示温度 sjcl(); /数据处理/*/* 显示函数 */*/void xs(uchar shi,uchar ge)P2=2; P0=tabshi;delay(500); P2=3; P0

9、=tabge;delay(500);P2=4; P0=0xc6;delay(500);/*/* 数据处理函数 */*/void sjcl() if(temphtmax)ledj=1;ledb=0;else if(temph=tmin&temph0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ=1) dat|=0x80; delay(5); return(dat);/*/* 写一个字节 */*/void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8;i0;i-) DQ =

10、 0; DQ = dat&0x01; delay(5); DQ = 1; dat=1; delay(5);/*/* 读取温度 */*/unsigned int ReadWD(void)unsigned char a=0;unsigned int b=0;unsigned int t=0;csh();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换delay(200);csh();WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前

11、两个就是温度a=ReadOneChar(); /低位b=ReadOneChar(); /高位b=8;t=a+b;return(t);(2)名称:DS18B20温度计,温度值由单片机发给上位机并显示(扩展功能程序)/*- 名称:18B20温度传感器,温度在上位机显示 公司:陕西圣弘科技有限公司 编写:赵进全 日期:2010.8-*/#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include/#include#define uchar unsigned char#define uint unsigned int/*/* 定义端口 */*/sbit DQ=P2

12、7;/ds18b20 端口/*/* 全局变量 */*/uint temp;uchar shi,ge,bh;uchar code tab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; /7段数码管段码表共阳/*/* 函数声明 */*/unsigned int ReadWD(void);void csh(void);unsigned char ReadOneChar(void);void WriteOneChar(uchar dat);void delay(uint i);void

13、xs(uchar shi,uchar ge);/*/* 主函数 */*/void init_com(void) /串口初始化函数TMOD=0X20; /定时器1定时方式2/PCON=0X00; SCON=0X50; /串口方式1,允许接收TH1=0XFD; /波特率为9600TL1=0XFD;TR1=1; void comm(char *parr) /串口发送数据函数doSBUF=*parr+; /发送数据while(!TI); /数据发送完标志位1TI=0; /标志清0while(*parr); /保持循环直到字符为0main() /主函数unsigned char TempH,buff2;

14、init_com();while(1) temp=ReadWD();/定时读取当前温度TempH=temp4;shi=TempH%100/10; /十位温度 ge=TempH%100%10; /个位温度 bh=0x39; /显示C符号xs(shi,ge); sprintf(buff,%d,temp4); /将整型温度转换成字符型comm(buff); /将字符型温度由串口发送到上位机 void xs(uchar shi,uchar ge)P2=1; P0=tabshi;delay(500); P2=2;P0=0; P0=tabge;delay(500);P0=0;P2=3; P0=bh;del

15、ay(500);P0=0;/*/* 延时函数 */*/void delay(unsigned int i)/延时函数 while(i-);/*/* 初始化 */*/void csh(void) unsigned char x=0; DQ = 1; /DQ复位 delay(8); /稍做延时 DQ = 0; /单片机将DQ拉低 delay(80); /精确延时大于 480us DQ = 1; /拉高总线 delay(10); x=DQ; /稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay(5);/*/* 读一个字节 */*/unsigned char ReadOneChar(v

16、oid)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; delay(5); return(dat);/*/* 写一个字节 */*/void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8;i0;i-) DQ = 0; DQ = dat&0x01; delay(5); DQ = 1; dat=1; delay(5);/*/* 读取温度 */*/uns

17、igned int ReadWD(void)unsigned char a=0;unsigned int b=0;unsigned int t=0;csh();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换delay(200);csh();WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar(); /低位b=ReadOneChar(); /高位b=8;t=a+b;return(t);专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁