单片机应用系统设计说明书.doc_第1页
单片机应用系统设计说明书.doc_第2页
单片机应用系统设计说明书.doc_第3页
单片机应用系统设计说明书.doc_第4页
单片机应用系统设计说明书.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

此文档收集于网络,如有侵权,请联系网站删除单片机应用系统设计说明书 设计题目: 温度控制系统设计 自动化学院 一、系统设计小组工作分工序号成员工作分工1 LCD1602显示2 18b20温度检测3二系统设计目标我的设计是基于STC98C52系列单片机的温度控制系统,以DS18B20作为温度检测元件,实时监测温度;以LCD1602显示实时温度、预设温度以及PID调节参数的设定。三系统方案设计1. 单片机选型STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统 8051 单片机,12 时钟/机器周期和 6 时钟/机器周 期可以任意选择。单片机主要特性如下: 1. 增强型 8051 单片机,6 时钟/机器周期和 12 时钟/机器周期可以任 意选择,指令代码完全兼容传统 8051. 2. 工作电压:5.5V3.3V(5V 单片机)/3.8V2.0V(3V 单片机) 3. 工作频率范围:040MHz,相当于普通 8051 的 080MHz,实际工 作频率可达 48MHz 4. 用户应用程序空间为 8K 字节 5. 片上集成 512 字节 RAM 6. 通用 I/O 口 (32 个) 复位后为: , P1/P2/P3/P4 是准双向口/弱上拉, P0 口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 I/O 口用时,需加上拉电阻。 7. ISP(在系统可编程)/IAP(在应用可编程) ,无需专用编程器,无 需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程 序,数秒即可完成一片 8. 具有 EEPROM 功能 9. 具有看门狗功能 10. 共 3 个 16 位定时器/计数器。即定时器 T0、T1、T2 11. 外部中断 4 路,下降沿中断或低电平触发电路,Power Down 模式可 由外部中断低电平触发中断方式唤醒 12. 通用异步串行口(UART) ,还可用定时器软件实现多个 UART 13. 工作温度范围:-40+85(工业级)/075(商业级) P0 端口(P0.0P0.7 P0.7,3932 引脚) :P0 口是一个漏极开路的 8 位双向 I/O 口。作为输出端口,每个引脚能驱动 8 个 TTL 负载,对端口 P0 写入 每个引脚能驱动 写入“1”时,可 以作为高阻抗输入。在访问外部程序和数据存储器时 在访问外部程序和数据存储器时,P0 口也可以提供低 8 位 地址和 8 位数据的复用总线 位数据的复用总线。此时,P0 口内部上拉电阻有效。在 Flash ROM 编 在 程时,P0 端口接收指令字节 端口接收指令字节;而在校验程序时,则输出指令字节 则输出指令字节。验证时,要求外接上拉电阻。 P1 端口(P1.0P1.7,18 引脚):P1口是一个带内部上拉电阻的8位双向 I/O口。P1 的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL 输入。对端口写入 1 时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流 。 P2 端口(P2.0P2.7,2128 引脚):P2口是一个带内部上拉电阻的8位双 向 I/O 端口。P2 的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。对端口写入 1 时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。P2 作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会 输出一个电流(I) 。 P3 端口(P3.0P3.7,1017 引脚) :P3 是一个带内部上拉电阻的 8 位双向 I/O 端口。P3 的输出缓冲器可驱动(吸收或输出电流方式)4 个 TTL 输入。对端 口写入 1 时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P3 做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流。 RST(9 引脚) :复位输入。当输入连续两个机器周期以上高电平时为有效, 用来完成单片机单片机的复位初始化操作。看门狗计时完成后,RST 引脚输出 96 个晶振周期的高电平。特殊寄存器 AUXR(地址 8EH)上的 DISRTO 位可以使此功 能无效。DISRTO 默认状态下,复位高电平有效。 ALE/ ROG (30 引脚) 地址锁存控制信号 : (ALE) 是访问外部程序存储器时, 锁存低 8 B位地址的输出脉冲。在 Flash 编程时,此引脚( ROG)也用作编程输入 脉冲。 2.温度传感器DS18B20单线数字温度传感器。提供计9位(二进制)温度读数,指示器件温度。信息经过单线接口送入DS18B20送出,因此从主机CPU到DS18B20仅需一条线(和地线)。DS18B20的电源可以有数据本身提供而不需要外部电源。以为每一个DS18B20在出厂时已经给定了唯一的序号,因此任意多个DS18B20可以放在同一条单线总线上。这允许在许多不同的地方放置温度敏感器件DSl820的测量范围从-55到+125增量值为0.5可在l s(典型值)内把温度变换成数字。DSl8B20中还有用于贮存测得的温度值的两个8位存贮器RAM编号为0号和1号。1号存贮器存放温度值的符号,如果温度为负(),则1号存贮器8位全为1,否则全为0。0号存贮器用于存放温度值的补码,LSB(最低位)的“1”表示0.5将存贮器中的二进制数求补再转换成十进制数并除以2就得到被测温度值(-55125)。每只DS18B20都可以设置成两种供电方式,即数据总线供电方式和外部供电方式。采取数据总线供电方式可以节省一根导线,但完成温度测量的时间较长;采取外部供电方式则多用一根导线,但测量速度较快。 3.液晶显示 1602液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。管脚功能:第1脚:VSS为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第714脚:D0D7为8位双向数据端。第15脚背光正极。第16脚背光负极。四硬件电路设计及描述五软件设计及描述1.主程序流程图:单片机上电,LCD1602液晶初始化,定时器T0、T1初始化,之后进入循环函数,键盘扫描;读取温度;送去LCD1602显示。定时器T0 2秒终端一次,调用PID程序,即每两秒进行一次PID运算。定时器T1为PWM波形生成函数。2、源程序代码#include#include #define uchar unsigned char#define uint unsigned intsbit DQ=P23;/ds18b20与单片机连接口sbit RS=P25;/1602sbit RW=P26;/1602sbit EN=P27;/1602sbit out=P17;unsigned char code str1=T . ;unsigned char code str2=t . ;unsigned char code str3=P . I . D . ;char data disdata5;uint tvalue;/温度值 k 为return返回值uchar k,flag;uint a;/a timer1定时时间参数uchar tflag;/温度正负标志uchar setflag;/模式标志uchar flagdat;char num,bai,shi,ge,xiaoshu,Kp_ge,Kp_xiao,Ki_ge,Ki_xiao,Kd_ge,Kd_xiao;sbit setkey=P32;/模式键1sbit up_key=P33; /加键sbit down_key=P34;/减键uchar count,EkFlag3; / 输出时间单位计数器uint Ek3,RK,CK,Uk,KP,KI,KD; /RK设定值;CK实际值;Uk输出电压/*函数声明*/ void PIDOutput ();void PIDOperation (); /*PID调节程序*/void delay1ms( uchar ms)/延时1毫秒(不够精确的) uchar i,j; for(i=0;ims;i+) for(j=0;j CK ) /设定值大于实际值否?if( RK - CK 100 ) /偏差大于10否? Uk = 100; /偏差大于10为上限幅值输出(全速加热) else Temp0 = RK - CK; /偏差=10,计算E(k)Ek2 = Ek1; Ek1 = Ek0; Ek0 = Temp0;Uk=KP*Ek0-KI*Ek1+KD*Ek2; else Uk=0; void PIDOutput (void) static char i;i=Uk;if(i=100) ET1=0;TR1=0;out=1; if(i=0)ET1=0;TR1=0;out=0;if(i0)/如定时中断为40MS,40MS*5=0.2S(输出时间单位),加热周期20S(100等份) /每20S PID运算一次 ET1=1; TR1=1; a=655*i+3*i/10; /*lcd1602程序*/void wr_com(unsigned char com)/写指令/ delay1ms(1); RS=0; RW=0; EN=0; P0=com; delay1ms(1); EN=1; delay1ms(1); EN=0;void wr_dat(unsigned char dat)/写数据/ delay1ms(1); RS=1; RW=0; EN=0; P0=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(0x88);display(str2);wr_com(0xc0);display(str3);num=0;bai=0;shi=0;ge=0;xiaoshu=0;return(k);/*温度按键程序*/void key()if(setkey=0)delay1ms(100);if(setkey=0)setflag+;if(setflag=12)setflag=0;while(setkey=0);if(up_key=0)&(setflag!=0) delay1ms(100); if(up_key=0) num+;if(num=10)num=0;switch(setflag)case 0: ;break;case 1: if(num%2=0) wr_com(0x89);wr_dat(0x20); elsewr_com(0x89);wr_dat(0x2d);break;case 2: if(num=0)wr_com(0x8a);wr_dat(0x20);bai=num;elsewr_com(0x8a);wr_dat(num+0x30);bai=num;break;case 3: if(bai=0)&(num=0)wr_com(0x8b);wr_dat(0x20);shi=num;elsewr_com(0x8b);wr_dat(num+0x30);shi=num;break;case 4: wr_com(0x8c);wr_dat(num+0x30);wr_com(0x8d); wr_dat(0x2e);/显示小数点 ge=num;break;case 5: wr_com(0x8e);wr_dat(num+0x30);xiaoshu=num;break;case 6: wr_com(0xc1);wr_dat(num+0x30);Kp_ge=num;wr_com(0xc2); wr_dat(0x2e);/显示小数点 break;case 7: wr_com(0xc3);wr_dat(num+0x30);Kp_xiao=num;break;case 8: wr_com(0xc6);wr_dat(num+0x30);wr_com(0xc7); wr_dat(0x2e);/显示小数点 Ki_ge=num;break;case 9: wr_com(0xc8);wr_dat(num+0x30);Ki_xiao=num;break;case 10: wr_com(0xcb);wr_dat(num+0x30);Kd_ge=num;wr_com(0xcc); wr_dat(0x2e);/显示小数点 break;case 11: wr_com(0xcd);wr_dat(num+0x30);Kd_xiao=num;break; if(down_key=0)&(setflag!=0) delay1ms(100); if(down_key=0) num-;if(num0;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; i0; 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(tvalue0x0fff) tflag=0; else tvalue=tvalue+1;tflag=1; tvalue=tvalue*(0.625);/温度值扩大10倍,精确到1位小数return(tvalue);/*/void ds1820disp()/温度值显示 uchar flagdat; disdata0=tvalue/1000+0x30;/百位数 disdata1=tvalue%1000/100+0x30;/十位数 disdata2=tvalue%100/10+0x30;/个位数 disdata3=tvalue%10+0x30;/小数位 if(tflag=0) flagdat=0x20;/正温度不显示符号 else flagdat=0x2d;/负温度显示负号:- if(disdata0=0x30) disdata0=0x20;/如果百位为0,不显示 if(disdata1=0x30) disdata1=0x20;/如果百位为0,十位为0也不显示 wr_com(0x81); wr_dat(flagdat);/显示符号位 wr_com(0x82); wr_dat(disdata0);/显示百位 wr_com(0x83); wr_dat(disdata1);/显示十位 wr_com(0x84); wr_dat(disdata2);/显示个位 wr_com(0x85); wr_dat(0x2e);/显示小数点 wr_com(0x86); wr_dat(disdata3);/显示小数位 /*加热程序*/void init_time0()TMOD=0x11;/T0初始化方式1,定时TH0=(65536-50000)/256;/TH0,TL0装入定时50mS的初值TL0=(65536-50000)%256;TH1=(65536-20000)/256;TL0=(65536-20000)%256;TR0=1;/启动T0工作ET0=1;/允许T0溢出中断EA=1;void timer0_isr(void) interrupt 1 static uchar s=0;/秒计数器TH0=(65536-50000)/256;/TH0,TL0装入定时50mS的初值TL0=(65536-50000)%256;s+;if(s=40)s=0;PIDOperation (); if(RK=0)&(RK!=CK)/刚开始上电空操作;elsePIDOutput ();TR1=1; void timer1_isr(void) interrupt 3if(flag=1)flag=0;out=1;TH1=(65536-a)/256;/TH0,TL0装入定时50mS的初值TL1=(65536-a)%256; else flag=1;out=0;TH1=a/256;/TH0,TL0装入定时50mS的初值TL1=a%256;/*主程序*/void main() out=0;init_play(); /初始化显示init_time0(); /定时器T0初始化 while(1) key(); /键盘温度扫描read_temp(); /读取温度 ds1820disp();/显示 六设计调试过程及结果1.调试结果2.结果分析 在运行仿真结果时通过改变温度传感器DS18B20的温度,然后调用各种子函数,可以改变液晶显示1602的第二行显示数据,说明程序编写正确。 3.系统设计电路的特点和方案的优缺点 我们组设计的数字温度计系统知识运用简单的AT89S52芯片的I/O口传输功能,通过几个小的读数据、传递数据、延时子函数实现温度的读取传输功能,是比较简单,容易实现的,所以我们的系统只是实现了一些简单的功能,系统整体来说比较简易,但好像这个温度计没有多大的应用价值,所以我们后续分析觉得这个系统可以加一个温度复位系统提高AT89S52芯片的功能价值,也提高数字温度计的智能价值,还可以增加一个报警子函数,实现智能数字温度计更高的应用价值七系统设计体会1.心得体会李键: 本次设计是基于STC89C52单片机的温度调节系统设计。刚开始打算用数码管显示实时温度、预设温度以及PID调节参数显示,可是由于数码管的位数限制显示不方便,就决定采用LCD1602进行显示,而且需要调节电阻来调节背光,使显示的字符更加清晰。PID的参数和预设温度是通过独立按键实现的。还有在编写数字PID程序时,定义的字符占用的空间太大导致超出了单片机的容量,通过降低精度的要求将变量位数定义减小,以达到减小占用的目的。由于整个系统的程序很长,导致单片机运行有时混不稳定,反映会很慢,有些参数的调节会出现显示与实际输入值不相符的现象。通过本次设计了解的更多关于单片机的知识,对书本上学到的东西进行了强化。1.心得体会禹鑫:通过这次对数字温度计的设计与制作,让我了解了设计电路的程序,也让我了解了关于数字温度计的原理与设计理念,要设计一个电路总要先用仿真仿真成功之后才实际接线的。但是最后的成品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。通过这次学习,让我对各种电路都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高。问题一:改变环境温度时,LCD1602上的显示温度值有很大延迟;解决办法:经过查找资料重新改写了LCD1602的驱动程序,并减少使用case语句,最终达

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论