《电子测量与系统》课程设计报告题 远程智能测温控制系统_第1页
《电子测量与系统》课程设计报告题 远程智能测温控制系统_第2页
《电子测量与系统》课程设计报告题 远程智能测温控制系统_第3页
《电子测量与系统》课程设计报告题 远程智能测温控制系统_第4页
《电子测量与系统》课程设计报告题 远程智能测温控制系统_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

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;/百位数 disdata2=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_co

温馨提示

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

评论

0/150

提交评论