ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:42.02KB ,
资源ID:7478288      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7478288.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(B1209 周晓闪.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

B1209 周晓闪.docx

1、B1209 周晓闪洛阳理工学院实验报告系别计算机系班级B120502学号B12050209姓名周晓闪课程名称单片机原理与应用实验日期2014.6.4实验名称线数字式温度传感器DS18B20应用设计成绩实验目的: 掌握DS18B20温度传感器的原理,和LCD液晶显示的原理。实验条件: 电脑一台、Keil uVision4编程软件、Proteus仿真软件。【实验原理】电路原理图如图1所示,图中分别与传感器U2和U3相连,P0口接LCD液晶显示模块。 图1 实验原理图【实验内容】(1)掌握温度传感器和液晶显示的软件编程;(2)完成此次实验的C51语言编程。【实验步骤】(1)提前阅读与实验有关的阅读材

2、料;(2)在ISIS中完成电路原理图的绘制;(3)采用Keil uVision4编程软件进行编程。【仿真结果】 图2 仿真结果图【源程序】#include #include #define uchar unsigned char#define uint unsigned intsbit RS=P20; sbit RW=P21;sbit EN=P22;sbit DQ=P33; uchar code str1=0x28,0x08,0xA7,0xBA,0x02,0x00,0x00,0x18; /ROM1 序列号可用程序检测出来uchar code str2=0x28,0x0C,0xBA,0xBA,0

3、x02,0x00,0x00,0x54; /ROM2 uchar code table8=0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00; / 摄氏温度符号uchar data disdata5;uint tvalue;/温度值uchar tflag;/温度正负标志/*lcd1602程序*/void delay1ms(uint ms)/延时1毫秒(不够精确的) uint i,j; for(i=0;ims;i+) for(j=0;j100;j+);void wr_com(uchar com)/写指令/ delay1ms(1); RS=0; RW=0; P0=com;

4、 delay1ms(1); EN=1; delay1ms(1); EN=0;void wr_dat(uchar dat)/写数据/ delay1ms(1); RS=1; RW=0; P0=dat; delay1ms(1); EN=1; delay1ms(1); EN=0;void wr_new()/写新字符 uchar i; wr_com(0x40); for(i=0;i8;i+) wr_dat(tablei); void lcd_init()/初始化设置/ delay1ms(15); wr_com(0x38);delay1ms(5); /8位数据,双列,5*7字形 wr_com(0x08);

5、delay1ms(5); /关显示 wr_com(0x01);delay1ms(5); /清屏 wr_com(0x06);delay1ms(5); /读或写一个字符后地址指针加一,且光标加一,整屏不移动 wr_com(0x0c);delay1ms(5); /开启显示屏,关光标,光标不闪烁 wr_new(); wr_com(0x80); wr_dat(A); wr_com(0x81); wr_dat(:); wr_com(0x89); wr_dat(0x00); wr_com(0x8a); wr_dat(C); wr_com(0xc9); wr_dat(0x00);/摄氏温度字符 wr_com(

6、0xca); wr_dat(C); wr_com(0xc0); wr_dat(B); wr_com(0xc1); wr_dat(:);/*ds1820程序*/void delay_18B20(uint i)/延时1微秒 while(i-);void ds1820rst()/*ds1820复位*/ uchar x=0; DQ = 1; /DQ复位 delay_18B20(4); /延时 DQ = 0; /DQ拉低 delay_18B20(100); /精确延时大于480us DQ = 1; /拉高 delay_18B20(40); uchar ds1820rd()/*读数据*/ uchar i=

7、0; uchar dat = 0; for (i=0;i=1; / DQ = 1; /给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); return(dat);void ds1820wr(uchar dat)/*写数据*/ uchar i=0; for (i=0; i=1; void b20_Matchrom(uchar a) /匹配ROM char j; ds1820wr(0x55); /发送匹配ROM命令 if(a=1) for(j=0;j8;j+) ds1820wr(str1j); /发送18B20的序列号,先发送低字节 if(a=2) for(j=0;j

8、8;j+) ds1820wr(str2j); /发送18B20的序列号,先发送低字节 read_temp(uchar z)/*读取温度值并转换*/ uchar a,b; float tt; ds1820rst(); ds1820wr(0xcc);/读序列号 ds1820rst(); if(z=1) b20_Matchrom(1); /匹配ROM 1 if(z=2) b20_Matchrom(2); /匹配ROM 2 ds1820wr(0x44);/*启动温度转换*/ delay1ms(5); ds1820rst(); ds1820wr(0xcc); /读序列号 ds1820rst(); if(

9、z=1) b20_Matchrom(1); /匹配ROM 1 if(z=2) b20_Matchrom(2); /匹配ROM 2 ds1820wr(0xbe);/*读取温度*/ a=ds1820rd(); b=ds1820rd(); tvalue=b; tvalue=8; tvalue=tvalue|a; if(tvalue0x07ff) tflag=0; else tvalue=tvalue+1; tflag=1; tt=tvalue*0.0625; tvalue=tt*10; return(tvalue);/*显示函数*/void ds1820disp(uchar z)/温度值显示 uch

10、ar 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也不显示 if(

11、z=1) wr_com(0x82); wr_dat(flagdat);/显示符号位 wr_com(0x83); wr_dat(disdata0);/显示百位 wr_com(0x84); wr_dat(disdata1);/显示十位 wr_com(0x85); wr_dat(disdata2);/显示个位 wr_com(0x86); wr_dat(0x2e);/显示小数点 wr_com(0x87); wr_dat(disdata3);/显示小数位 if(z=2) wr_com(0xc2); wr_dat(flagdat);/显示符号位 wr_com(0xc3); wr_dat(disdata0)

12、;/显示百位 wr_com(0xc4); wr_dat(disdata1);/显示十位 wr_com(0xc5); wr_dat(disdata2);/显示个位 wr_com(0xc6); wr_dat(0x2e);/显示小数点 wr_com(0xc7); wr_dat(disdata3);/显示小数位 /*主程序*/void main() lcd_init();/初始化显示 while(1) read_temp(1);/读取温度 ds1820disp(1);/显示 read_temp(2);/读取温度 ds1820disp(2);/显示/ delay1ms(10000); 实验总结: 这次的试验,让我学到了很多。虽然这次的实验,虽然自己没有独立的编写出来这个程序,可以说几乎就没有编写,但是自己看懂了一点儿。这次的实验,我发现我不会的还有很多,特别是将实际与理论相结合,通过这次的实验,我发现自己真的还需要多看看书,多动手做一些实验,将实际与理论结合起来。 这次实验,我懂得了很多,不会就要问,而不是就那样简简单单的就过去了,不会就算了,而是要自己多多的琢磨,多多的努力,更加的勤奋。不管怎样,我想我以后会更加的努力,这几次的实验,我发现自己在慢慢的进步,我相信,以后会更好。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1