单片机原理与接口技术-基于单片机的温度采集器设计实验_第1页
单片机原理与接口技术-基于单片机的温度采集器设计实验_第2页
单片机原理与接口技术-基于单片机的温度采集器设计实验_第3页
单片机原理与接口技术-基于单片机的温度采集器设计实验_第4页
单片机原理与接口技术-基于单片机的温度采集器设计实验_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机原理与接口技术课程实验报告 实验十二 温度采集器的设计院 系: 班 级: 同组人员: 指导老师; 设计时间:2012年1月6日一:实验目的和设备1.1实验目的本设计要使用新的开发箱,要求开始的时候LCD12864能够显示开机欢迎的图形画面。设置一个按键,按下就开始采集温度值。使用DS18B20温度传感器获取温度数据,使用LCD12864显示出来。1.2实验设备 直流电源.一台计算机.一个12864液晶.一个集成51单片机芯片 各种数据线等二: 系统总体设计方案本系统是一个基于单片机AT89C51的数字温度计的设计,用来测量环境温度。整个设计系统分为4部分:单片机控制、温度传感器、lcd显

2、示以及按键控制电路。整个设计是以AT89C52为核心,通过数字温度传感器DS18B20来实现环境温度的采集和A/D转换。单片机把采集到的温度进行相应的转换后,使之能够方便地在LCD上输出。采用12864液晶屏显示温度。三:系统硬件分析与设计 1.总体结构 PC机51集成芯片(内含18b20)USB连接12864液晶显示屏2.各部件原理图: 12864与单片机接口的连接图。1.模块主要引脚说明1 RS 数据选择信号/并行的指令2 R/W 并行的读写选择信号3 E 并行的使能信号4 DB0DB7 数据口 (对应单片机的P0口)2.接口时序8位并行连接时序图MCU写资料到模块MCU从模块读出资料汉字

3、显示坐标起始位置:18b20原理图1. DS18B20引脚定义: (1)DQ(p13口)为数字信号输入/输出端; (2)GND为电源地; (3)VCC为外接供电电源输入端(在寄生电源接线方式时接地)。2. 测温工作:温度传感器DS18B20连接时I/O口上要接一个上拉10K左右的电阻,这样可以保证温传感器工作时候的精度,还有抗干扰的作用。温度传感器检测外界的温度,得到的数据,将进行数据的转换,转换完成的温度数字将会保留,然后在液晶上显示。3. 重要特性: 1.独特地单线接口只要一个端口引脚进行通信。必须先建立ROM通信协议,才能进行存储器和控制操作。因此,控制器必须首先提供下面5个ROM操作命

4、令之一:1.读ROM 2.写ROM 3. 搜索ROM 4. 跳过ROM 5. 报警搜索。 2.简单的多点分布应用。 3.无需外部器件 4.可通过数据线供电 5.零待机功耗 6.测温范围-55+125度 ,以0.5度递增。 7.温度以九位数字量读出。 三:软件设计1. 程序流程图 开始初始化显示及DS18B20按键检测显示欢迎界面无键按下或状态为0有键按下状态为1读出温度在LCD上显示温度2. 程序代码:#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit key = P32; sbit

5、lcden=P26; /定义lcd使能端sbit lcdrs=P24; /定义lcd数据命令选择端sbit lcdwr=P25; /定义lcd读写选择端sbit lcdrd=P21; /定义并串选择端sbit DQ=P13; /定义DS18B20数据线引脚端uchar high,low;char a,d2,d1,d0; float f_temp;uint i,j,temp;uchar code line1="欢迎进入:"uchar code line2="当前室温:"uchar code line3="00.0度"void delay

6、_ms(uint z) /延时z毫秒 uint x,y;for(x=z;x>0;x-) for(y=115;y>0;y-);LCD驱动/-用户界面文字显示函数void face_dis() wr_cmd(0x30); /选择功能:8位数据基本指令操作wr_cmd(0x0c); /整体显示开,不显示光标wr_cmd(0x01); /lcd清屏wr_cmd(0x02); /游标归原点wr_cmd(0x80); /设置第零行起始位for(a=0;a<10;a+) /写入第零行数据 wr_dat(line1a);wr_cmd(0x90); /设置第一行起始位for(a=0;a<

7、10;a+) /写入第一行数据 wr_dat(line2a); /-用户界面数据显示函数-void dat_dis()wr_cmd(0x8c); /显示温度wr_dat(0x30+d2);wr_dat(0x30+d1);wr_dat(0x2e); /写入“.”号wr_dat(0x30+d0); /-初始化函数void init()delay_ms(20); /等待液晶输入电源稳定lcdrd=1; /选定lcd与单片机并行连接lcdwr=0; /因为我们不需要从lcd模块读数据,所以可直接将此端口清零,便于之后利用矩阵键盘face_dis(); /显示用户界面18b20驱动/-温度获取函数-vo

8、id get_temp() init_temp(); /初始化,复位并获取应答信号wr_temp(0xcc); /跳过ROMwr_temp(0x44); /开始温度转换delay_ms(100); /等待温度转换完成init_temp(); /将DS18B20复位wr_temp(0xcc); /跳过ROMwr_temp(0xbe); /读暂存器low=rd_temp(); /读取低8位high=rd_temp(); /读取高8位temp=high;temp<<=8;temp=temp|low; /将读取的低8位和高8位合并f_temp=temp*0.0625; /温度在寄存器中为1

9、2位 分辨率位0.0625°temp=f_temp*10+0.5; /精确到十分位,四舍五入d2=temp/100; /显示数据:十位d1=temp%100/10; /显示数据:个位d0=temp%10; /显示数据:十分位/-主函数-void main() bit flag; flag=0;init(); /lcd初始化 while(!flag) if(key = 0)flag=1; while(1) get_temp(); /获取温度 dat_dis(); /显示温度 四:设计中优缺点优点:结构简单易懂、并没有进行很多的修饰,温度采集是个实时采集的数据,并不是只取测试时的温度。缺

10、点:功能少,没有分屏,温度采集不是很精确。五:总结: 经过将两天的单片机课程设计,终于完成了我们的温度采集器的设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计最终还是做出结果来了。 在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,尤其是本次设计着实让我头大,改了很多,参考了很多,也请教了N个人,通过这次的设计我明白了时序才真正是数字芯片的灵魂,所有的程序我们都可以通过对其时序的理解来实现对其操作,同时体会

11、到了单总线结构的魅力。 从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中才是王道,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。 最重要的是本次设计是三个人一组,让我们有种组队做单片机开发项目的感觉,毕竟一个项目只靠一个人是很难完成的,今后我们做的项目肯定要多人协作。在这次设计过程中培养了我们的团队协作精神,便于我们走到工作岗位后能很快适应工作环境。六:评价 本次题目着实选的比较难,一开始觉得弄个12864的驱动18b20的驱动在通过自己的一点编程把温度通过液晶显示出来就可以了,可是实际

12、做起来可不是这样的,液晶是各种不显示啊,花了很多时间都在搞液晶的显示,到最后其实是开发板的接口有问题。我们又用的自己的51集成板子,经过我们的努力终究还是做出结果来了,但是并没有很好的完成题目所给的要求。七:意见希望1.课程设计时间能多一些。2.最好实验室能够上网,方便大家查阅资料。附录程序代码:#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit key = P32;sbit lcden=P26; /定义lcd使能端sbit lcdrs=P24; /定义lcd数据命令选择端sbit l

13、cdwr=P25; /定义lcd读写选择端sbit lcdrd=P21; /定义并串选择端sbit DQ=P13; /定义DS18B20数据线引脚端uchar high,low;char a,d2,d1,d0; float f_temp;uint i,j,temp;uchar code line1="欢迎进入:"uchar code line2="当前室温:"uchar code line3="00.0度"/-毫秒级延时函数-void delay_ms(uint z) /延时z毫秒 uint x,y;for(x=z;x>0;x-

14、) for(y=115;y>0;y-);/-lcd写指令函数-void wr_cmd(uchar cmd)lcden=0;lcdrs=0;P0=cmd;delay_ms(1);lcden=1;delay_ms(1);lcden=0; /-lcd写数据函数-void wr_dat(uchar dat)lcden=0;lcdrs=1;P0=dat;delay_ms(1);lcden=1;delay_ms(1);lcden=0; /-用户界面文字显示函数-void face_dis() wr_cmd(0x30); /选择功能:8位数据基本指令操作wr_cmd(0x0c); /整体显示开,不显示

15、光标wr_cmd(0x01); /lcd清屏wr_cmd(0x02); /游标归原点wr_cmd(0x80); /设置第零行起始位for(a=0;a<10;a+) /写入第零行数据 wr_dat(line1a);wr_cmd(0x90); /设置第一行起始位for(a=0;a<10;a+) /写入第一行数据 wr_dat(line2a);wr_cmd(0x8c); /设置第二行起始位/*for(a=0;a<6;a+) /写入第二行数据 wr_dat(line3a); */ /-用户界面数据显示函数-void dat_dis()/if(key = 0) wr_cmd(0x8c)

16、; /显示温度wr_dat(0x30+d2);wr_dat(0x30+d1);wr_dat(0x2e); /写入“.”号wr_dat(0x30+d0); /-初始化函数-void init()delay_ms(20); /等待液晶输入电源稳定lcdrd=1; /选定lcd与单片机并行连接lcdwr=0; /因为我们不需要从lcd模块读数据,所以可直接将此端口清零,便于之后利用矩阵键盘face_dis(); /显示用户界面/-获温部分:初始化函数-void init_temp()DQ=0; /拉低总线,产生复位信号i=80;while(i>0)i-; /延时480960usDQ=1; /拉

17、高总线i=4;while(i>0)i-; /延时1560uswhile(DQ); /等待产生应答脉冲i=70;while(i>0)i-; /延时至少480us/-获温部分:写函数-void wr_temp(uchar dat) /写1个字节bit testb;for(j=8;j>0;j-) testb=dat&0x01; dat=dat>>1; if(testb) /写1 DQ=0; /拉低总线,产生写时间隙 i+; /延时大于1us DQ=1; /拉高总线 i=8; while(i>0)i-; /延时至少60us,供DS18B20采样 else /

18、写0 DQ=0; /拉低总线,产生写时间隙 i=8;while(i>0)i-; /保持至少60us,供DS18B20采样 DQ=1; /拉高总线 i+;i+; /-获温部分:读函数-uchar rd_temp() /读1个字节bit b; /定义存放接收到的1个字节uchar i_b;uchar rdbyte;for(j=8;j>0;j-) DQ=0; /拉低总线,产生读时隙 i+; /延时大于1us DQ=1; /释放总线 i+;i+; /给一定时间让总线释放 b=DQ; /读取数据 i=8;while(i>0)i-; /延时至少60us i_b=b; rdbyte=(i_b<<7)|(rdbyte>>1);

温馨提示

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

评论

0/150

提交评论