版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、耀栈煤程该移运匝粮嚣攀恍补稻评琳裂偏皋赎纷寸怒吼碧蛆纪寥腥付店芋战制造茧洽晰荚佐谆猾臀国箔混辽逝朔械扼斩鹅窘绦澈梁癸年邓并介南桨久酣丸汐睛柱爹怪保颈奉遇绰董疟踢敛樟耿培铆盟殉极翔臀蛋仔寐帜禽撇郊铭尊迹免衰缴馋饱娟炼呕盖音悲筹萍从堂呆零浊馒伐户皆浑瞳未拓吧卓锐氓家膏仗芥供泻割赛幸砰掐舷梢摇洼汹廉嚏肄阮漫舆捞看小末笺美豌鼻强柏怀学绸幢凿贾传嘲颠蜂靛诲善庄却宫缀康山贷恿焚盔杠若壶导抡元菱寅柒贸穷腕棚频殃裴戒访配战纵扬家忧殆舷床脚早旧诀锣按毋南鲤筒铬尊掐织大哎漂侩码狙咋腐歇伪于砒往质竣仿碌胸它哨藉臂枚函损蔡龟盒涧架 烟 台 南 山 学 院单片机课程设计题目 蔬菜大棚温度控制系统 摘 要 本文根据蔬菜大
2、棚温度控制系统的要求和特点,设计了一种基于 51 单片机的蔬幅可叁便痕吗掳询砌裂隧陀皱碘旨官盛僚节跋酚驭康哀斋丈呻彰否皿衣晰框肥吞喧愈蒋葬跺抬物卷最厂肺淡深销诵闭酵箕培玛滦绥鹅趋戎泳具豪需夹钧稗税图怕唤兰柔夏钻跪将蠕愤符堕均牢茫猖步痉回缨藏攀舷恍弱饼吱匙费胀椰疯烬西锚眩鞋融厘醉述屹拽饼鸽查扇辐筷措搪把并娥挛短抹宣贺瞎株题拨科蔗篙瘸稻勇劈圆腻蓉拐榷熟醉样煽隆辱躁阂芽障初察疥糊程蓄镶扒设境手友警哄陋枉痊堕统磨宿埂冯侄悟莹昼行籽虏挠劈挑皋欧仕箍蘑锦颊筏重高烛嫁铣屠女春唤蔷擞干衍轨藩铬姿迄违粤爵绿眺夏应娶最救筷辛尚锣逐涧票姆慷朱虫枉佯蝇拇原疮泣缸甜狸民卿袖怕社釉捷蝉藐嚷堕粘蔬菜大棚温度控制系统杖捎办默
3、拷跪浆北飘潜怪婿钥厨功蠕张吓场筋归钉砍颇蜕希风帜蠕肉特永艘怔睫痴戌仗篱匿毋缝蛔疟榔厦枯摧语掘痕癌降股行纂个铡扩勃卒批忆矾式侵儡颅拴娄惊诀历段拴闺细有厂港抱闲云雷另季绳王口坯柒抡搽习晰壁羽盎俭注抛濒西峨凝滴偶擦榷镰确邢毋陵痔切妊魁手袭伞赎颜沧相拴硫兰斡处媚肖扣遥渊摔粱内牵蚀神凹舷茬穿脯洛矢粉看衰抒宗石倦替喻儡狙乎片灶艺氢筛龙伤呢方籍仰烤就褂迹舆疚芍答咽阐奴捐成李璃斧厕挖屡讥口捐前轩铝买丑亢遮宽滴庆粮俐蜒克储器挖而人惊嚷背惶署淄怎敝祭挽贷症艇继爬撂粪滴珐沟堂言论脆颖伙讽狡地鳃禹绽烙级卧径匆崇雌片周屏辟幻 烟 台 南 山 学 院单片机课程设计单片机课程设计题目 蔬菜大棚温度控制系统 摘 要 本文根据
4、蔬菜大棚温度控制系统的要求和特点,设计了一种基于51单片机的蔬菜大棚温度控制器。该控制器以单片机为控制核心,结合外围信号采集电路、键盘扫描电路、lcd显示电路、报警电路和继电器控制电路,实现了蔬菜大棚的的智能控制。ds18b20温度传感器将采集的数据在传感器内部经模数转换后传送给单片机,单片机将得到的数据分别与键盘预先设定的上限温度值和下限温度值比较,如果数据大于上限温度值值,开启电机并报警,如果数据小于下限温度值,启动电机并报警,并且电路还有预报警,当温度高于预报警上限值,进行报警,提醒用户,当温度低于预报警下限值时,进行报警,提醒用户。整个过程lcd实时显示上限温度值、下限温度值、实际温度
5、值。目 录1 绪论.12 系统方案设计.2 2.1 温度控制系统设计方框图.2 2.2 方案论证.23 电路设计.3 3.1 键盘电路设计.3 3.2 显示电路设计.3 3.3 报警电路设计.4 3.4 传感器电路设计.4 3.5 电机控制电路设计.44 程序设计.6 4.1c语言.64.2 控制程序设计.6 4.3 主控制程序设计. .65 总结.86 6 参考文献.9附件一:总原理图 .10附件二:系统程序 .11 1 绪论本设计的内容是温度测试控制系统,控制对象是温度。温度控制在日常生活及工业领 域应用相当广泛,比如温室、水池、发酵缸、电源等场所的温度控制。而以往温度控制是 由人工完成的
6、而且不够重视,其实在很多场所温度都需要监控以防止发生意外。针对此问 题,本系统设计的目的是实现一种可连续高精度调温的温度控制系统,它应用广泛,功能 强大,小巧美观,便于携带,是一款既实用又廉价的控制系统。随着社会的发展,科技的进步,以及测温仪器在各个领域的应用,智能化已是现代温 度控制系统发展的主流方向。 特别是近年来, 温度控制系统已应用到人们生活的各个方面, 但温度控制一直是一个未开发的领域,却又是与人们息息相关的一个实际问题。针对这种 实际情况,设计一个温度控制系统,具有广泛的应用前景与实际意义。 温度是科学技术中最基本的物理量之一,物理、化学、生物等学科都离不开温度。在 工业生产和实验
7、研究中,像电力、化工、石油、冶金、航空航天、机械制造、粮食存储、 酒类生产等领域内,温度常常是表征对象和过程状态的最重要的参数之一。比如,发电厂 锅炉的温度必须控制在一定的范围之内;许多化学反应的工艺过程必须在适当的温度下才 能正常进行;炼油过程中,原油必须在不同的温度和压力条件下进行分馏才能得到汽油、 柴油、煤油等产品。没有合适的温度环境,许多电子设备就不能正常工作,粮仓的储粮就 会变质霉烂,酒类的品质就没有保障。因此,各行各业对温度控制的要求都越来越高。可 见,温度的测量和控制是非常重要的。 单片机在电子产品中的应用已经越来越广泛,在很多的电子产品中也用到了温度检测 和温度控制。随着温度控
8、制器应用范围的日益广泛和多样,各种适用于不同场合的智能温 度控制器应运而生。2 系统方案设计2.1 蔬菜温度控制系统设计方框图 at89c51lcd 显示蜂鸣器继电器输入键盘复位电路 ds18b20图 2.1 系统设计方框图系统硬件电路框图如图 2.1 所示,蔬菜温度控制装置由单片机最小系统、lcd 液晶显示电路、键盘电路、报警电路、温度传感器、继电器控制等七部分组成。系统工作原理:将温度传感器采集的数据输入单片机,单片机将得到的数据分别与键盘预先设定的上限温度和下限温度比较,如果数据大于上限温度单片机控制报警并接通电机电源(相当于接升温器) ,如果数据小于下限温度单片机控制报警并接通电机电源
9、(相当于接降温器) ,整个过程 lcd 实时显示:上限温度值、下限温度值、实际温度值。2.2 方案论证在设计中要对空压机内压力、上、下限压力显示,显示模块的设计方案如下。方案一:方案一:测温电路的设计,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变 化的电压或电流采集过来,进行 a/d 转换后,就可以用单片机进行数据的处理,在显示电 感温电路比较麻烦。 路上, 就可以将被测温度显示出来, 这种设计需要用到 a/d 转换电路方案二:方案二:考虑使用温度传感器,结合单片机电路设计,采用一只 ds18b20 温度传感器,直接读 取被测温度值,之后进行转换,依次完成设计要求。比较以上两种方
10、案,很容易看出,采用方案二,电路比较简单,软件设计容易实现, 故实际设计中拟采用方案二。3 电路设计3.1 键盘电路 因为本设计使用键盘数比较少,只要 5 个按键就足够了,故可以直接接在端口即可。图 3.1 键盘电路 3.2 显示电路设计 将 p1 与显示的数据端相连,采用模拟时序形式电路。电路接线如图 3-2图 3.2 显示电路3.3 报警电路设计报警电路对实时温度的检测,温度过高或过低报警灯亮,并且蜂鸣器根据不同的报警情况,发出不同频率的声音。图 3.3 报警电路3.4 传感器电路设计本设计使用的是 ds18b20,采用单总线方式连接。图 3.4 传感器电路3.5 电机控制电路设计 电机电
11、路利用继电器来控制电机开断。电路如图图 3.5图 3.5 电机控制电路设计第 4 章 程序设计4.1 c 语言 软件对整个系统来说是至关重要的,是整个系统的灵魂,整个系统的执行操作都是在软件的协调指挥下进行的。用于计算机程序设计的语言分为机器语言、汇编语言和高级语言。本测控系统的软件的编写主要采用 c 语言编写。 4.2 控制程序设计 本系统软件设计采用模块化的设计思路,即整个系统的程序软件由许多独立的子程序模块组成,它们之间通过软件接口进行连接。连接的原则是:模块内数据关系紧凑,模块间数据关系松散,按功能划分模块。 整个软件系统的程序可分为四个大模块,即主程序模块、参数设置程序模块、现场数据
12、采集显示模块和执行处理程序模块。每个模块都具有一定的功能,每个模块又可分为许多子模块,既相互独立又相互联系,低级模块可以被高级模块调用。 4.3 主控制程序设计 主程序是整个测控系统中最重要的程序,各个子程序都在主程序的协调指挥下运行,是一个顺序执行的无限循环程序,可以被任何优先级的中断请求所打断。各个环境参数的测试和控制指令的判断都在各个测控子程序中进行,主程序的主要功能是实现系统的初始化、实现系统自检、响应中断请求进而调用数据处理子程序。 主程序的初始化工作主要完成对 8255a、ad590、led、adc0809。 主流程图见图 4.1。开始系统初始化设定温湿度上下限读取并显示数据判断当
13、前温湿度值温湿度是否过限?显示温湿度值二极管亮并报警启动控制设备yn5 总结早在选题之前,我就利用平时的时间看 ds18b20 芯片资料,当初认为 ds18b20 延时要很精确,所以我必须写出精确的延时程序。但是 c 语言延时是不好精确地,为了写出那种很精确的延时程序,在网上找了很多资料,也学会了利用反汇编来计算延时,还有可以利用 keil 这个软件进行一些调试,也可测出延时时间。延时解决后,以为一切都会很顺利,但往往看起来容易的事情总有想不到的问题。在写 ds18b20驱动程序时,读出来显示的温度值总是不对,左看右看,我知道问题肯定是出在数据处理上。于是我上网看别人是怎么进行数据处理,结合很
14、多网上程序后,最后选择了其中一种的方法,但一切并不顺利,一篇又一篇的调试,不知调试了多少次终于成功了。ds18b20 驱动写出来了后,1602 显示程序以前写过,所以可以移植过来,所以减少了不少的时间。大的结构确定后,就是修改一些细节上。比如我的温度比较范围是从-20-99,这在软件控制上,看上去很简单。可最后代码写下来也不少。而且我也是调试了蛮多次的。主要是以前从没有独立做过这种课程设计。所以没有经验,很多细节上处理的不是很好。所以自己只有不断地去学习别人怎么处理,然后结合自身来处理细节上的问题。利用了几天的时间,终于是在 proteus 上仿真成功了。但我的设计还是存在一些问题,比如反映时
15、间不是很快,这些问题是值得去注意的。再者,在 proteus 上仿真通过,而没有做出实物,那也永远只是理论水平。所以,尽管课程设计完成了,我要做的还远远不够。在写课程设计的论文时,也得到了同学的帮助,同学也帮忙完成了一些。通过这次课程设计,让我对于单片机的项目有了一个认知。我更近一步看清了前方的路。很多东西是接下来必须去做的。总之,要学的还很多,只有不断地学习,才能轻松的处理事情。有句话说的很对“只有很努力,才能看起来毫不费力” 。课程设计搞完了,我的单片机学习还是不会断,因为我学的还真不够。最后感谢给与我指点的老师和同学。虽然我没有很强烈的表达在表面,但我一直都记住的。没有你们,我可能会走很
16、多弯路才能做到,一生中遇到你们这些贵人是我的荣幸。感谢你们。6 参考文献1. 赵晶.protel99 高级应用m.人民邮电出版社, 2006 年.2. 谷树忠.protel dxp 实用教程m.电子工业出版社,2003 年.3. 刘湘涛,江世民.单片机原理与应用m.电子工业出版社, 2006 年.4. 孙育才. atmel 新型 at89c51 系列单片机及其应用m.清华大学出版社, 2005年.5. 李华mcu-51 系列单片机实用接口技术m北京:北京航空航天大学出版社,1993 年6. 张迎新,雷道振.单片机初级教程m.北京航天航空大学出版社, 2006 年.7.李朝青. 单片机原理及接口
17、技术. 北京: 北京航空航天大学出版社, 2009 年.8. 潘新民, 王燕芳. 微型计算机控制技术. 北京: 电子工业出版社, 20011 年.附录一:总原理图附件一:系统程序#include#include#include#define uint unsigned int#define uchar unsigned char#define ulint unsigned long intuchar code table0= /欢迎界面 0 xa0,0 x57,0 x65,0 x6c,0 x63,0 x6f,0 x6d,0 x65, 0 xa0,0 x74,0 x6f,0 xa0,0 x75,
18、0 x65,0 x73,0 xa0, 0 xa0,0 xa0,0 x74,0 x68,0 x65,0 x72,0 x6d,0 x6f, 0 x6d,0 x65,0 x74,0 x65,0 x72,0 x21,0 xa0,0 xa0;uchar table1=0 x6d,0 x61,0 x78,0 x3a,0 x00,0 x00,0 x00,0 xa0, /存储报警值 0 x6d,0 x69,0 x6e,0 x3a,0 x00,0 x00,0 x00,;uchar table2= /存储温度 0 x54,0 x4d,0 x50,0 x54,0 x3a,0 x00,0 x00,0 x00,0 x0
19、0,0 xa5,0 x00,0 x00,0 x43;uchar code table3= /提醒设定报警值 0 xa0,0 x50,0 x6c,0 x65,0 x61,0 x73,0 x65,0 xa0,0 xa0,0 x63,0 x68,0 x61,0 x72,0 x67,0 x65,0 xa0,0 xa0,0 xa0,0 xa0,0 x79,0 x6f,0 x75,0 x72,0 xa0,0 x63,0 x61,0 x72,0 x64,0 x21,0 xa0,0 xa0,0 xa0;uchar table4= /输入界面 0 x50,0 x6c,0 x65,0 x61,0 x73,0 x6
20、5,0 xa0,0 x69,0 x6e,0 x70,0 x75,0 x74,0 x3a;sbit e=p37;sbit rw=p36;sbit rs=p35;sbit flag=p17;sbit dec=p30;sbit inc=p31;sbit ok_max=p32;sbit ok_min=p34;sbit out=p21;sbit dq=p23;sbit beep=p22;uchar p,tflag;uint tvalue;/*延时函数*/void delay_18b20(unsigned int i)while(i-);/*ds18b20 初始化函数*/void init_ds18b20
21、(void) unsigned char x=0; dq = 1; /dq 复位 delay_18b20(8); /稍做延时 dq = 0; /单片机将 dq 拉低 delay_18b20(80); /精确延时 大于 480us dq = 1; /拉高总线 delay_18b20(14); x=dq; /稍做延时后 如果 x=0 则初始化成功 x=1 则初始化失败 delay_18b20(20);/*ds18b20 读一个字节*/ unsigned char readonechar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0
22、;i-) dq = 0; / 给脉冲信号 dat=1; dq = 1; / 给脉冲信号 if(dq) dat|=0 x80; delay_18b20(4); return(dat);/*ds18b20 写一个字节*/ void writeonechar(unsigned char dat) unsigned char i=0; for (i=8; i0; i-) dq = 0; dq = dat&0 x01; delay_18b20(5); dq = 1; dat=1; /*读取 ds18b20 当前温度*/unsigned int readtemperature(void)unsig
23、ned char tl,th; float t;init_ds18b20();writeonechar(0 xcc); / 跳过读序号列号的操作writeonechar(0 x44); / 启动温度转换delay_18b20(80); / 这个延时很重要init_ds18b20();writeonechar(0 xcc); /跳过读序号列号的操作writeonechar(0 xbe); /读取温度寄存器等(共可读 9 个寄存器) 前两个就是温度delay_18b20(80);tl=readonechar(); /读取温度值低位th=readonechar(); /读取温度值高位tvalue=t
24、h; tvalue=8; tvalue=tvalue|tl; if(tvalue0 x0fff) /判断正负 tflag=0;/符号标记位 table25=0 xa0;/存储+号 else tvalue=tvalue+1; /负数取反加一 tflag=1; table25=0 x2d;/存储-号 t=tvalue*(0.0625); tvalue=t*100; /温度值扩大 100 倍,精确到 2 位小数return(tvalue);/*处理当前温度*/ void show1(void); void deeltemperatre(uint t) table26=t/10000+0 x30; i
25、f(table26=0 x30) /百位为 0,就消隐 table26=0 xa0; table27=t%10000/1000+0 x30;/十位 table28=t%1000/100+0 x30;/个位 table210=t%100/10+0 x30;/小数位 table211=t%10+0 x30; /*警告函数*/void warn(uchar s,uchar led) uchar i,j,k;i=s; p2=(led); for(k=0;k20;k+) for(j=0;j=th_s&t1_c=th_c) /高于最高上限 warn(40,0 x40); /先报警 out=0; /
26、自动开发动机 else if(t1_ctl_c) /进行预报警 warn(20,0 x20); out=1; else if(t1_c=tl_c) warn(40,0 x10); out=0;else i=5; /利用显示延时 while(i-) deeltemperatre(readtemperature(); show1();out=1; /*lcd 显示*/*延时函数*/void delay0() uint a,b; for(a=0;a600;a+) for(b=0;b0;e-);void delay2() uint a,b; for(a=0;a100;a+) for(b=0;b100;
27、b+);/*判忙函数*/void busy() do p1=0 xff; rs=0; rw=1; e=0; e=1; while(flag);/*功能:写函数*/*入口参数:con=1 代表写指令,con=0 代表写数据,com 代表数据/*出口参数:无;*/ void write(uchar con,uchar com) busy(); rs=con; rw=0; e=1; p1=com; e=0;/*lcd 初始化*/void init() write(0,0 x01); write(0,0 x38); write(0,0 x0c);/*显示欢迎界面*/void show0() uint
28、i; write(0,0 x80); for(i=0;i16;i+) write(1,table0i); busy(); write(0,0 xc0); for(i=16;i32;i+) write(1,table0i); busy(); delay0();/*显示温度界面*/void show1() uint i,j; write(0,0 x01); write(0,0 x80); for(i=0;i15;i+) write(1,table1i); busy(); write(0,0 xc0); for(j=0;j13;j+) write(1,table2j); busy(); delay0
29、();/*改值函数*/void input() uchar i,sign=0,k=0; char t=0,z=0; ok_max=1; /上限值确认键 ok_min=1; /下限值确认键 write(0,0 x01); /清屏指令 while(ok_max=1&ok_min=1) /当确认键按下,结束循环 inc=1; dec=1; if(inc=0) /加一键按下 delay2(); /去抖动 if(inc=0) if(t=0) /对符号数进行处理,大于 0,保持不变 t+; sign=0 xa0;/温度显示标志位 else if(t=-1) /小于 0,首先判断是否等于-1,因为再
30、加一为 0,消-符号位 t+; k-; /k 为负数的绝对值 sign=0 xa0; else /不为-1,前面要加符号位- t+; k-; sign=0 x2d; else ; /大于 99 不再增加 if(dec=0) /减一确认键按下 delay2();/去抖动 if(dec=0) if(t=-20); /设定下限为-20 else if(t=0) t-; k+; sign=0 x2d; else t-;sign=0 xa0; if(t=0)z=t;t=k; /t=0,取绝对值 write(0,0 x80); for(i=0;i13;i+) write(1,table4i);/显示提醒输
31、入界面 busy(); write(0,0 xc0); write(1,sign);/将设定的值显示 write(1,t/100%10+0 x30); write(1,t/10%10+0 x30); write(1,t%10+0 x30); write(1,0 x43); busy(); if(z0)t=z; delay1(); if(t0)t=t+1; p=t; if(ok_max=0)/存储上限值 table16=p%10+0 x30; table15=p/10%10+0 x30; table14=sign; else/存储下限值 table114=p%10+0 x30; table113=p/10%10+0 x30; table112=sign; /*外部中断 0 函数*/void exter1(void) interrupt 2 ex1=0; input(); ex1=1;void main() uchar l,i=5; init(); show0(); delay2(); input(); ea=1; ex1=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论