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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

综合实验报告doc00.docx

1、综合实验报告doc00嘉应学院电子信息工程学院单片机综合性设计实验报告20102011学年度第1学期温度监控系统(计时功能)专 业自动化班 级082姓 名座 号任课教师 电子信息工程学院编引言单片机已经在测控领域中获得了广泛的应用,它除了可以测量电信以外,还可以用于温度、湿度等非电信号的测量,能独立工作的单片机温度检测、温度控制系统已经广泛应用很多领域。本次设计,就是用单片机实现温度控制,传统的温度检测大多以热敏电阻为温度传感器,但热敏电阻的可靠性差,测量温度准确率低,而且必须经过专门的接口电路转换成数字信号才能由单片机进行处理。本次采用DS18B20数字温度传感器来实现基于52单片机的数字温

2、度计的设计ds18b20简介ds18B20数字温度传感器,是美国DALLAS公司生产的可组网数字温度传感器,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的ds18b20具有可编程的分辨率为91

3、2位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温。本次设计实验采用12位精度的分辨率实现测温功能。此次选用外部电源供电方式工作。Ds18b20内部结构图一、 系统组成框图如下二、温度监控系统电路图如下:三、 程序流程图如下图示 四、 /*延时函数*/void delays(uint z)uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);/*初始化函数*/void InitUART (void) TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; ET0=1;

4、TR0=1; tempmax=30; p14=0; p15=0; SCON = 0x50; / SCON: 模式 1, 8-bit UART, 使能接收 TMOD |= 0x20; / TMOD: timer 1, mode 2, 8-bit 重装 TH1 = 0xFD; / TH1: 重装值 9600 波特率 晶振 11.0592MHz TR1 = 1; / TR1: timer 1 打开 EA = 1; /打开总中断 /ES = 1; /打开串口中断 /*串口发送数据函数*/ void SendByte(temp) SBUF = temp; while(!TI); TI = 0;源程序#i

5、nclude#include#define uchar unsigned char#define uint unsigned intuchar temp;uchar tempmax;uchar shi,fen,miao,count;uchar mshi,mge,fshi,fge,sshi,sge;#define RS_CLR RS=0 #define RS_SET RS=1#define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0#define EN_SET EN=1#define DataPort P0sbit p14=P14;sb

6、it p15=P15;sbit DQ=P22; sbit p20=P20;sbit p21=P21;sbit beep=P23;sbit bt1=P24;sbit bt2=P21;sbit bt3=P20;sbit RS = P25; /定义端口 sbit RW = P26;sbit EN = P27;void init_ds18b20(void);void delay(uint t);void write_byte(uchar dat);uchar read_byte(void);uchar readtemperature(void);void step_motor();void step_

7、motor1();void anjian();void LCD_Init(void);void Lcd_User_Chr(void);void LCD_Write_Com(unsigned char com);void LCD_Write_Data(unsigned char Data);void LCD_Clear(void);void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s);void LCD_Write_Char(unsigned char x,unsigned char y,unsigned c

8、har Data);/*延时函数*/void delay(uint t) while(t-);void init_ds18b20(void) uchar n; DQ=1; delay(8); DQ=0; delay(80); DQ=1; delay(8); n=DQ; delay(4);/*DS18B20写字节函数*/void write_byte(uchar dat) uchar i; for(i=0;i=1; delay(4);/*DS18B20读字节函数*/uchar read_byte(void) uchar i,value; for(i=0;i=1; DQ=1; if(DQ) val

9、ue|=0x80; delay(4); return value;/*主函数*/void main(void) unsigned char data byTempeartue; LCD_Init(); /初始化液晶 delay(20); /延时有助于稳定 LCD_Clear(); /清屏 Lcd_User_Chr(); LCD_Write_String(0,0,T:); LCD_Write_String(0,1,W(); LCD_Write_String(12,1,)Y); LCD_Write_String(4,1,00:00:00); LCD_Write_Char(5,0,0x01);/写入

10、温度右上角点 LCD_Write_Char(6,0,C); /写入字符C LCD_Write_Char(14,0,0x01);/写入温度右上角点 LCD_Write_Char(15,0,C); /写入字符C InitUART(); while(1) byTempeartue = readtemperature(); temp = readtemperature(); LCD_Write_Char(2,0,0+byTempeartue/100); LCD_Write_Char(3,0,0+(byTempeartue%100)/10); LCD_Write_Char(4,0,0+byTempear

11、tue%10); LCD_Write_String(9,0,A:); LCD_Write_Char(11,0,0+tempmax/100); LCD_Write_Char(12,0,0+(tempmax%100)/10); LCD_Write_Char(13,0,0+tempmax%10); SendByte(temp); anjian(); if(temp=tempmax) p15=1; p14=0; beep=1; delays(200); beep=beep; delays(200); else beep=1; p15=0; p14=1; /*DS18B20读温度数据函数*/uchar

12、readtemperature(void) uchar a,b; init_ds18b20(); write_byte(0xcc); write_byte(0x44); delay(300); init_ds18b20(); write_byte(0xcc); write_byte(0xbe); a=read_byte(); b=read_byte(); b4; return b; /*电机正转工作函数*/void step_motor() uchar code table=0x03,0x09,0x0c,0x06; uchar i=0; for(i=0;i4;i+) P1=tablei; de

13、lay(4000); /*电机正转工作函数*/void step_motor1() uchar code table=0x03,0x06,0x0c,0x09; uchar i=0; for(i=0;i=tempmax) if(bt1=0) step_motor1(); else step_motor();/*1602写命令函数*/ void LCD_Write_Com(unsigned char com) delay(100); /延时等待 RS_CLR; RW_CLR; EN_SET; DataPort= com; delay(5); EN_CLR; /*1602写数据函数*/ void L

14、CD_Write_Data(unsigned char Data) delay(100); /延时等待 RS_SET; RW_CLR; EN_SET; DataPort= Data; delay(1); EN_CLR; /*定义液晶右上角温度标号”*/void Lcd_User_Chr(void) /第一个自定义字符 LCD_Write_Com(0x40); /01 000 000 第1行地址 (D7D6为地址设定命令形式 D5D4D3为字符存放位置(0-7),D2D1D0为字符行地址(0-7)) LCD_Write_Data(0x00); /XXX 11111 第1行数据(D7D6D5为XX

15、X,表示为任意数(一般用000),D4D3D2D1D0为字符行数据(1-点亮,0-熄灭) LCD_Write_Com(0x41); /01 000 001 第2行地址 LCD_Write_Data(0x04); /XXX 10001 第2行数据 LCD_Write_Com(0x42); /01 000 010 第3行地址 LCD_Write_Data(0x0e); /XXX 10101 第3行数据 LCD_Write_Com(0x43); /01 000 011 第4行地址 LCD_Write_Data(0x0e); /XXX 10001 第4行数据 LCD_Write_Com(0x44);

16、/01 000 100 第5行地址 LCD_Write_Data(0x0e); /XXX 11111 第5行数据 LCD_Write_Com(0x45); /01 000 101 第6行地址 LCD_Write_Data(0x1f); /XXX 01010 第6行数据 LCD_Write_Com(0x46); /01 000 110 第7行地址 LCD_Write_Data(0x04); /XXX 11111 第7行数据 LCD_Write_Com(0x47); /01 000 111 第8行地址 LCD_Write_Data(0x00); /XXX 00000 第8行数据 /第二个自定义字符

17、/*1602清屏函数*/ void LCD_Clear(void) LCD_Write_Com(0x01); delay(5);/*1602写字符串函数*/ void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) if (y = 0) LCD_Write_Com(0x80 + x); /表示第一行else LCD_Write_Com(0xC0 + x); /表示第二行 while (*s) LCD_Write_Data( *s); s +; /*1602写字符函数*/void LCD_Write_Char(

18、unsigned char x,unsigned char y,unsigned char Data) if (y = 0) LCD_Write_Com(0x80 + x); else LCD_Write_Com(0xC0 + x); LCD_Write_Data( Data); /*1602初始化函数*/ void LCD_Init(void) LCD_Write_Com(0x38);/*显示模式设置*/ delay(5); LCD_Write_Com(0x38); delay(5); LCD_Write_Com(0x38); delay(5); LCD_Write_Com(0x38); L

19、CD_Write_Com(0x08); /*显示关闭*/ LCD_Write_Com(0x01); /*显示清屏*/ LCD_Write_Com(0x06); /*显示光标移动设置*/ delay(5); LCD_Write_Com(0x0C); /*显示开及光标设置*/ LCD_Write_Com(0x48); /01 001 000 第1行地址 LCD_Write_Data(0x03); /XXX 00001 第1行数据 LCD_Write_Com(0x49); /01 001 001 第2行地址 LCD_Write_Data(0x03); /XXX 11011 第2行数据 LCD_Wri

20、te_Com(0x4a); /01 001 010 第3行地址 LCD_Write_Data(0x00); /XXX 11101 第3行数据 LCD_Write_Com(0x4b); /01 001 011 第4行地址 LCD_Write_Data(0x00); /XXX 11001 第4行数据 LCD_Write_Com(0x4c); /01 001 100 第5行地址 LCD_Write_Data(0x00); /XXX 11101 第5行数据 LCD_Write_Com(0x4d); /01 001 101 第6行地址 LCD_Write_Data(0x00); /XXX 11011 第

21、6行数据 LCD_Write_Com(0x4e); /01 001 110 第7行地址 LCD_Write_Data(0x00); /XXX 00001 第7行数据 LCD_Write_Com(0x4f); /01 001 111 第8行地址 LCD_Write_Data(0x00); /XXX 00000 第8行数据 void zhongduan()interrupt 1TH0=(65536-50000)/256; TL0=(65536-50000)%256; count+; LCD_Write_Char(12,1,0x29); if(count=20) count=0; miao+; ms

22、hi=miao/10; mge=miao%10; if(miao=59) miao=0; fen+; fshi=fen/10; fge=fen%10; if(fen=59) fen=0; shi+; sshi=shi/10; sge=shi%10; if(shi=23) shi=0; LCD_Write_Char(5,1,0+sge); LCD_Write_Char(4,1,0+sshi); LCD_Write_Char(8,1,0+fge); LCD_Write_Char(7,1,0+fshi); LCD_Write_Char(11,1,0+mge); LCD_Write_Char(10,1

23、,0+mshi); 五:系统功能描述本系统是基于AT89C52RC单片机控制的温度监控报警系统。利用DS18B20温度传感器测温,并将数据传送给单片机进行数据处理,最后将数据利用1602液晶显示。本系统可以设置报警温度,报警温度初值设置为30C,可以通过按键轻触开关“+”、“-”报警设置温度,当环境温度高于报警温度时,蜂鸣器发出“嘀嗒,嘀嗒”的报警声,同时红色发光二极管闪烁,同时本系统可以利用串口发送数据至计算机,也可以通过计算机下载单片机程序;另外本系统预设计时功能,在上电时开始计时,采用二十四小时制计时。六:总结通过这次综合设计性实验,对c语言在单片机中应用更加熟悉,初步掌握了温度传感器以及LCD和按键等的程序写法。而且通过实物制作,知道现实与理想的差距,仿真成功不一定实物就能如理想般理想。需要不断的检测和调试,需要一定的耐心和毅力。

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

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