《电子测量与系统课程设计报告题 远程智能测温控制系统.doc》由会员分享,可在线阅读,更多相关《电子测量与系统课程设计报告题 远程智能测温控制系统.doc(23页珍藏版)》请在三一办公上搜索。
1、成绩 电子测量与系统课程设计报告题 目: 远程智能测温控制系统 姓 名: 学 号: 班 级: 07电信 专 业:电 子 信 息 科 学 与 技 术信电学院 2010年12月20日目录一、实验内容.21、设计内容2、设计要求二、实验原理.3三、实验器材5四、实验框图.6五、实验电路图.11六、实验程序.12七、参考文献21八、总结.22一、实验内容1、设计内容 1)完成温度的采集。 2)用单工方式传送数据实现两机通信。 3)完成双机通信的设计制作及仿真。2、设计要求1)能本机显示温度采集的数值。2)能向对方机发送采集的温度的值。3)能接收对方机发送的数并显示。4)发送数及按键用查询实现。5)用串
2、行口的单工方式通信。6)用按键控制上下限并通过LCD显示。7)温度超过额定范围则自动报警。二、实验原理计算机与外界的信息交换称为通信,常用的通信方式有两种:并行通信和串行通信。51单片机用4个接口与外界进行数据输入与数据输出就是并行通信,并行通信的特点是传输信号的速度快,但所用的信号线较多,成本高,传输的距离较近。串行通信的特点是只用两条信号线(一条信号线,再加一条地线作为信号回路)即可完成通信,成本低,传输的距离较远。串行数据通信要解决两个关键问题,一个是数据传送,另一个是数据转换。所谓数据传送就是指数据以什么形式进行传送。所谓数据转换就是指单片机在接收数据时,如何把接收到的串行数据转化为并
3、行数据,单片机在发送数据时,如何把并行数据转换为串行数据进行发送。单片机的串行通信使用的是异步串行通信,所谓异步就是指发送端和接收端使用的不是同一个时钟。异步串行通信通常以字符(或者字节)为单位组成字符帧传送。字符帧由发送端一帧一帧地传送,接收端通过传输线一帧一帧地接收。51单片机的串行接口是一个全双工的接口,它可以作为UART(通用异步接受和发送器)用,也可以作为同步移位寄存器用。51单片机串行接口的结构如下:(1)数据缓冲器(SBUF)接受或发送的数据都要先送到SBUF缓存。有两个,一个缓存,另一个接受,用同一直接地址99H,发送时用指令将数据送到SBUF即可启动发送;接收时用指令将SBU
4、F中接收到的数据取出。(2)串行控制寄存器(PCON)SCON用于串行通信方式的选择,收发控制及状态指示,各位含义如下:SM0SM1SM2RENTB8RB8TIRISM0,SM1:串行接口工作方式选择位,这两位组合成00,01,10,11对应于工作方式0、1、2、3。串行接口工作方式特点见下表SM0SM1工作方式功能波特率 0008位同步移位寄存器(用于I/O扩展)fORC/1201110位异步串行通信(UART)可变(T1溢出率*2SMOD/32)10211位异步串行通信(UART)fORC/64或fORC/3211311位异步串行通信(UART)可变(T1溢出率*2SMOD/32)SM2:
5、多机通信控制位。REN:接收允许控制位。软件置1允许接收;软件置0禁止接收。TB8:方式2或3时,TB8为要发送的第9位数据,根据需要由软件置1或清0。RB9:在方式2或3时,RB8位接收到的第9位数据,实际为主机发送的第9位数据TB8,使从机根据这一位来判断主机发送的时呼叫地址还是要传送的数据。TI:发送中断标志。发送完一帧数据后由硬件自动置位,并申请中断。必须要软件清零后才能继续发送。RI:接收中断标志。接收完一帧数据后由硬件自动置位,并申请中断。必须要软件清零后才能继续接收。(3)输入移位寄存器接收的数据先串行进入输入移位寄存器,8位数据全移入后,再并行送入接收SBUF中。(4)波特率发
6、生器波特率发生器用来控制串行通信的数据传输速率的,51系列单片机用定时器T1作为波特率发生器,T1设置在定时方式。波特率时用来表示串行通信数据传输快慢程度的物理量,定义为每秒钟传送的数据位数。(5)电源控制寄存器PCON其最高位为SMOD。(6)波特率计算当定时器T1工作在定时方式的时候,定时器T1溢出率=(T1计数率)/(产生溢出所需机器周期)。由于是定时方式,T1计数率= fORC/12。产生溢出所需机器周期数=模M-计数初值X。18b20芯片的主要功能:1、基本功能(1)检测两点温度(2)两秒间隔循环显示温度2、主要技术参数测温范围:6到15 显示精度:1显示方法:LCD循环显示DS18
7、B20有4个主要的数据部件: 64位激光ROM。64位激光ROM从高位到低位依次为8位CRC、48位序列号和8位家族代码(28H)组成。 温度灵敏元件。 非易失性温度报警触发器TH和TL。可通过软件写入用户报警上下限值。三、实验器材1、41键盘2、2个AT89C513、2个LCD4、串口连接线5、一个DS18B20温度传感器6、一个蜂鸣器,两个三极管模仿加热和报警显示四、实验框图 (1)发送端流程图主程序开始从机是否回答BBH?程序初始化主机发送AAHN主机发送数据,检验和输出完成?N清除标志位(2)接收端流程图主程序开始检验和相等?程序初始化接收数据,计算检验和N发送00H至主机接收完成?N
8、清除标志位发送FFH,重新接收显示(3)LCD初始化流程图:开始使用8位数据,显示两行,使用5*7的字型清屏字符不动,光标自动右移一格(0x06)开显示,无光标退出返回LCD初始化流程图(4)读取温度程序:DS18B20初始化发跳过ROM命令发温度读取命令清DQ准备发送延时1us以上读一位数据延时15us释放总线延时1545us2位是否读完结束读取NY开始读取温度程序(5)温度显示程序:开始取得18B20测得温度数值将数值转化为液字符型再将数值转换为十进制调用报警程序字符给LCD显示温度值判断温度范围是否越限是否结束显示 温度显示程序五、实验电路图六、实验程序发送端:#include#defi
9、ne uchar unsigned char#define uint unsigned intsbit DQ=P17;/ds18b20与单片机接口sbit RS=P24;sbit RW=P25;sbit EN=P26; sbit BEEP = P36; /蜂鸣器 sbit BEEP1 = P37;/小灯报警 sbit BEEP2 = P10; /加热 sbit key0=P20; sbit key1=P21; sbit key2=P22; sbit key3=P23;unsigned char code str1=TL: TH: ;unsigned char code str2=temp: ;
10、 uchar data disdata5;uint tvalue,a1,b1;/温度值uchar tflag;/温度符号正负标志static uchar key;uchar tempL=6,tempH=15; unsigned char TT19; unsigned char TT017=0x54,0x48,0x3a,0x2b,0x31,0x32,0x35,0x20,0x54,0x4c,0x3a,0x2b,0x31,0x32,0x34,0x43,0; void delay(uint n) /延时1us while (-n); void speak() / 蜂鸣器响一小声 unsigned ch
11、ar i; for (i=0;i200;i+) /喇叭发声的时间循环,改变大小可以改变发声时间长短 delay(90); /数决定发声的频率,估算值 BEEP=!BEEP; /BEEP取反 BEEP=1; delay(400) ;/喇叭停止工作,间歇的时间的长短,可改变 /*lcd1602程序*/ void delay1ms(unsigned int ms)/延时1毫秒(不够精确的) unsigned int i,j; for(i=0;ims;i+) for(j=0;j0;i-) DQ = 0; /给脉冲信号 dat=1; DQ = 1; /给脉冲信号 if(DQ) dat|=0x80; de
12、lay_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);/*跳过读序列号*/ ds1
13、820wr(0xbe);/*读取温度*/ a1=ds1820rd(); b1=ds1820rd(); tvalue=b1; tvalue=8; tvalue=tvalue|a1; if(tvaluetempH) speak(); BEEP1=0; BEEP2=1; else if(ztempL) speak(); BEEP1=0; BEEP2=0; else BEEP1=1; TT11=(tempH%100)/10+0x30;/分离出十位 TT12=(tempH%100)%10+0x30; /分离出个位 TT13=(tempL%100)/10+0x30;/分离出十位 TT14=(tempL%1
14、00)%10+0x30; /分离出个位 wr_com(0x85); wr_dat(flagdat);/显示符号位 wr_com(0x86); wr_dat(disdata0);/显示百位 wr_com(0x87); wr_dat(disdata1);/显示十位 wr_com(0x88); wr_dat(disdata2);/显示个位 wr_com(0x89); wr_dat(0x2e);/显示小数点 wr_com(0x8A); wr_dat(disdata3);/显示小数位 wr_com(0xcb); wr_dat(TT11); wr_com(0xcc); wr_dat(TT12); wr_c
15、om(0xc3); wr_dat(TT13); wr_com(0xc4); wr_dat(TT14); key=tvalue; void send() /发送并接收 while(TI=0); TI=0; while(RI=0); RI=0; /*主程序*/ void main() TMOD=0X20; TH1=0Xe6; /设定波特率 TL1=0Xe6; TR1=1; SCON=0X50; PCON=0x00; init_play();/初始化显示 while(1) EA=0;EX0=0; if(P32=0) delay(255); if(P32=0) EA=1;EX0=1; read_tem
16、p();/读取温度 ds1820disp();/显示 SBUF=key; send(); 接收端:#include/#include#define uchar unsigned char #define uint unsigned int uchar r; unsigned char code str1=DISINER:ZWS;unsigned char code str2=temp: ;unsigned char bur; sbit DQ=P17;/ds18b20与单片机接口sbit RS=P24;sbit RW=P25;sbit EN=P26;uchar data disdata5; in
17、t i; uchar tflag;void receive() while(RI=0); r=SBUF; RI=0; SBUF=r;while(TI=0); TI=0; void delay(uint n) /延时1us while (-n); /*lcd1602程序*/ void delay1ms(unsigned int ms)/延时1毫秒(不够精确的) unsigned int i,j; for(i=0;ims;i+) for(j=0;j100;j+); void wr_com(unsigned char com)/写指令/ delay1ms(1); RS=0; RW=0; EN=0;
18、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 display(unsigned char *p)/显示/ while(*p!=0) wr_dat(*p); p+; delay1ms(1); void lcd_init()/初始化设置/delay1ms(15); wr_com(0x38);delay1ms(5); wr
19、_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);delay1ms(5); init_play()/初始化显示 lcd_init(); wr_com(0x80); display(str2); wr_com(0xc0); display(str1); void ds1820disp() uchar flagdat; if(r0x0fff) tflag=0; else r=r+1; tflag=1; disdata1=r%1000/100+0x30;/百位数 disda
20、ta2=r%100/10+0x30;/个位数 disdata3=r%10+0x30;/小数位 if(disdata1=0x30) disdata1=0x20;/如果百位为0,不显示 if(tflag=0) flagdat=0x20;/正温度不显示符号 else flagdat=0x2d;/负温度显示负号:- wr_com(0x85); wr_dat(flagdat);/显示符号位 wr_com(0x87); wr_dat(disdata1);/显示十位 wr_com(0x88); wr_dat(disdata2);/显示个位 wr_com(0x89); wr_dat(0x2e);/显示小数点
21、wr_com(0x8A); wr_dat(disdata3);/显示小数位 void main()TMOD=0X20; TH1=0Xe6; TL1=0Xe6; SCON=0X50; PCON=0; TR1=1; init_play(); while(1) EA=0;EX0=0; receive(); delay(154);ds1820disp(); 七、参考文献:1左文香,DSl8B20在农业大棚温控系统中的应用,20032胡汉才,单片机原理及其接口技术M,清华大学出版社,20043郑惟晖,单片机智能温度控制系统的设计,20084 张靖,刘少强检测技术与系统设计M中国电力出版社,20025 李
22、华MCS一51系列单片机实用接口技术M电子工业出版社,19996 何立民MCS5l系列单片机应用系统设计系统配置与接口技术【M】北京:航空航天大学出版社,2000八、总结经过三周的课程设计,我们小组终于完成了设计任务。虽然在这段时间里有时很迷茫、沮丧,但是这一过程让我们获益良多。课程设计中,我们小组三个成员查阅了大量的资料,得到了老师的有力支持。我们掌握了基于单片机的C语言程序设计,了解了单片机串行通信的基本知识。在学习的过程中,也遇到了一些困难,比如开始的时候,由于发送端和接收端的通信协议没有做好,导致数据不能正确的传输,在解决问题的过程中,对于通信协议的实现有了深刻的认识。通过这次课程设计,我们学会了独立思考的能力,同时在设计过程中也培养了团结协作的精神。