《2022年多点温度监测系统 .pdf》由会员分享,可在线阅读,更多相关《2022年多点温度监测系统 .pdf(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、电子设计自动化实 训 报 告题目 : 多 点 温 度 监 测 系 统学 生 姓 名 : 宋 安 邦学 生 学 号 :2104020685学院 : 工 学 院专业 : 电 子 信 息 工 程班级 : 2 0 11 级指 导 教 师 : 林 君副 教 授名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 20 页 - - - - - - - - - 电子设计自动化实训1 一、实训目的和意义通过对多点温度检测系统的设计, 可以更深入的了解MC5.2单片机的特点以及应用技巧, 对单片
2、机的应用可以温习其中的结构以及原理。而且 proteus 的强大功能也能通过此次试验反应出来,熟悉其界面的风格以及各种应用,又重新的认识了 proteus 在单片机方面的强大功能。二、实训设计内容要求1.实现 4 点温度实时采集,温度传感器采用DS18B202.采用 LCD1602 显示 4 个采集点温度3.具有温度上下限报警功能:上限90C,下限 20C4.声音和光报警 2 种模式:光报警采用 4 只发光 LED ;声音报警采用扬声器,报警音调采用2KHz 方波。三、系统设计1方案设计2硬件电路设计采集温度显示温度8052 系统处理是否高于90C或低于 20C是相应的报警(灯光或蜂鸣器)名师
3、资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 20 页 - - - - - - - - - 电子设计自动化实训2 (1)工作原理:(a)通过四个温度采集器采集数字温度输入到单片机的p2.0p2.3口。(b)初始化 LCD1602 使 1602 能够接受数据,并分配其显示位置,此处采用两行两列式显示。(c)单片机读取信号。(d)单片机向 LCD1602 写信号,并延时。(e)判断是否有数据高于90 度或低于 20 度,如果有点亮相应的 led,并启动蜂鸣器。(2)硬件系统组成
4、(a)80C52(b)晶振电路(c)复位电路(d)LED 灯电路(e)LCD1602 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 20 页 - - - - - - - - - 电子设计自动化实训3 (f)温度检测 ds18b203. 软件设计(1)时间的设定:从此采用中断 T0 方式延时,而且是基本单位,无论蜂鸣器还是led,或是显示温度都用到此延时程序。延时程序如下: void tmpDelay(int num) while(num-) ; void Time0(v
5、oid) interrupt 1 using 0 sound=sound; TH0=(65536-5000)/256; TL0=(65536-5000)%256; (2)信号的读入与写出:读字节程序如下 unsigned char ReadOneChar1()/ unsigned char i=0; unsigned char dat1 = 0; for (i=8;i0;i-) DQ1 = 0; / 给脉冲信号dat1=1; DQ1 = 1; / 给脉冲信号if(DQ1) dat1|=0 x80; tmpDelay(4); 名师资料总结 - - -精品资料欢迎下载 - - - - - - -
6、- - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 20 页 - - - - - - - - - 电子设计自动化实训4 return(dat1); 一共读四个字节,接下来是写字节程序如下void WriteOneChar1(unsigned char dat1)/ unsigned char i=0; for (i=8; i0; i-) DQ1 = 0; DQ1 = dat1&0 x01; tmpDelay(5); DQ1 = 1; dat1=1; 注意度字节的返回值。读取温度unsigned int Readtemp1()/ unsigned
7、 char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B201(); WriteOneChar1(0 xCC); WriteOneChar1(0 x44); Init_DS18B201(); WriteOneChar1(0 xCC); WriteOneChar1(0 xBE); a=ReadOneChar1(); b=ReadOneChar1(); / 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第
8、5 页,共 20 页 - - - - - - - - - 电子设计自动化实训5 t=b; t900)|(t1;x-) for(y=z;y1;y-); void write_com(uchar com) /写命令函数 lcdrs=0; P0=com; delay(5); lcden=1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 20 页 - - - - - - - - - 电子设计自动化实训6 delay(5); lcden=0; void write_date(u
9、char date) /写数据函数 lcdrs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0; void init_lcd() /初始化函数 lcden=0; /默认开始状态为关使能端,见时序图lcdrw=0; /选择状态为写write_com(0 x0f); write_com(0 x38); /显示模式设置,默认为0 x38,不用变。write_com(0 x01); /显示清屏,将上次的内容清除write_com(0 x0c); /显示功能设置 0 x0f 为开显示,显示光标,光标闪烁; 0 x0c为开显示,不显光标,光标不闪write
10、_com(0 x06); /设置光标状态默认0 x06,为读一个字符光标加1. write_com(0 x80); /设置初始化数据指针for(i=0;i16;i+) /显示 The temperature write_date(t0i); delay(0); write_com(0 x80+0 x40); for(i=0;i16;i+) /显示 is C write_date(t1i); delay(0); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 20 页 -
11、- - - - - - - - 电子设计自动化实训7 (4)程序流程图如下图所示:四、调试方法及步骤1.用软件调试工具先调试设计好的程序,方法是打开调试工具后新建项目,设计开发环境,选择单片机种类,建立.c,然后加载到环境中,编写程序,生成HEX ,把他放虚拟单片机中,调试。2 出现错误,就要修改错误,编译全部通过后再接外围硬件电路,接上仿真头,硬件电路供电后再开启仿真头,然后正确设置好仿真器,最后全速运行,查看硬件电路显示结果是否与原设计思想一致。3. 显示结果正确后结束仿真,先停止运行程序,再关掉仿真头开关,最后断电,撬开仿真器。否否开始初始化读取温度是否大于 90 度是否小于 20 度显
12、示温度点 亮 相 应的 led,启动蜂鸣器点亮相应的 led, 启动蜂鸣器结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 20 页 - - - - - - - - - 电子设计自动化实训8 五、结果与讨论. 查看结果是否与自己想的一样,如果不一样,可以向同学和老师讨教,如果一样就记录下。六、实训心得通过本次试验学会了如何使用虚拟工具来进行单片机的编辑,通过写 c 语言又温习了以前的所学,回味看单片机和c 语言的魅力。通过调试程序锻炼了个人的耐心恒,恒心,毅力,和理论联
13、系实际的能力通过学习使得懂得了开发工具的使用,多了一门吃饭的的本领, 多了一门学习其他学科的实践基础。经过这次实训课程设计,我学到了很多书本上没有的,比较实际、实用的东西,学会了怎样将理论知识运用到实际设计当中,对实验设备和设计软件的使用和分析问题解决问题的能力也有了很大的提高。同时也明白了电路焊接和作品调试时,需要更多的耐心。通过这次实训课程设计,不仅可以在专业上可以学到更多的知识, 同时也对平时的学习和工作中产生了影响,那就是认认真真的去完成每一件事。附录(程序清单)#include / 包含 52 单片机寄存器定义的头文件/* 程序功能: LCD1602 显示温度*/ #define u
14、char unsigned char #define uint unsigned int sbit lcdrs=P26; /数据命令选择控制sbit lcdrw=P25; /读/写选择控制sbit lcden=P27; /使能信号sbit LED1=P10; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 20 页 - - - - - - - - - 电子设计自动化实训9 sbit LED2=P11; sbit LED3=P12; sbit LED4=P13; sbit
15、sound=P14; uchar code t0=T1: T2: ; uchar code t1=T3: T4: ; uchar code digital=0123456789; sbit DQ1=P20; /定义温度 DS18B20 接口,详情见原理图sbit DQ2=P21; /定义温度 DS18B20 接口,详情见原理图sbit DQ3=P22; /定义温度 DS18B20 接口,详情见原理图sbit DQ4=P23; /定义温度 DS18B20 接口,详情见原理图uchar i; /* 函数功能: DS18B20 相关函数*/ void tmpDelay(int num)/ 延时函数
16、while(num-) ; void Time0(void) interrupt 1 using 0 sound=sound; TH0=(65536-5000)/256; / 定时器 T0 的高 8 位重新赋初值TL0=(65536-5000)%256; / 定时器 T0 的高 8 位重新赋初值 void Init_DS18B201()/ 初始化 ds1820 unsigned char x=0; DQ1 = 1; /DS 复位tmpDelay(8); /稍做延时DQ1 = 0; /单片机将 DS 拉低tmpDelay(80); / 精确延时大于 480us DQ1 = 1; /拉高总线tmp
17、Delay(14); x=DQ1; /稍做延时后如果 x=0 则初始化成功x=1 则初始化失败tmpDelay(20); void Init_DS18B202()/ 初始化 ds1820 unsigned char x=0; DQ2 = 1; /DS 复位名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 20 页 - - - - - - - - - 电子设计自动化实训10 tmpDelay(8); /稍做延时DQ2 = 0; /单片机将 DS 拉低tmpDelay(80)
18、; / 精确延时大于 480us DQ2 = 1; /拉高总线tmpDelay(14); x=DQ2; /稍做延时后如果 x=0 则初始化成功x=1 则初始化失败tmpDelay(20); void Init_DS18B203()/ 初始化 ds1820 unsigned char x=0; DQ3 = 1; /DS 复位tmpDelay(8); /稍做延时DQ3 = 0; /单片机将 DS 拉低tmpDelay(80); / 精确延时大于 480us DQ3 = 1; /拉高总线tmpDelay(14); x=DQ3; /稍做延时后如果 x=0 则初始化成功x=1 则初始化失败tmpDela
19、y(20); void Init_DS18B204()/ 初始化 ds1820 unsigned char x=0; DQ4 = 1; /DS 复位tmpDelay(8); /稍做延时DQ4 = 0; /单片机将 DS 拉低tmpDelay(80); / 精确延时大于 480us DQ4 = 1; /拉高总线tmpDelay(14); x=DQ4; /稍做延时后如果 x=0 则初始化成功x=1 则初始化失败tmpDelay(20); unsigned char ReadOneChar1()/读一个字节 unsigned char i=0; unsigned char dat1 = 0; for
20、 (i=8;i0;i-) DQ1 = 0; / 给脉冲信号dat1=1; DQ1 = 1; / 给脉冲信号名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 20 页 - - - - - - - - - 电子设计自动化实训11 if(DQ1) dat1|=0 x80; tmpDelay(4); return(dat1); unsigned char ReadOneChar2()/读一个字节 unsigned char i=0; unsigned char dat2 = 0;
21、 for (i=8;i0;i-) DQ2 = 0; / 给脉冲信号dat2=1; DQ2 = 1; / 给脉冲信号if(DQ2) dat2|=0 x80; tmpDelay(4); return(dat2); unsigned char ReadOneChar3()/读一个字节 unsigned char i=0; unsigned char dat3 = 0; for (i=8;i0;i-) DQ3 = 0; / 给脉冲信号dat3=1; DQ3 = 1; / 给脉冲信号if(DQ3) dat3|=0 x80; tmpDelay(4); return(dat3); unsigned char
22、 ReadOneChar4()/读一个字节 unsigned char i=0; unsigned char dat4 = 0; for (i=8;i0;i-) DQ4 = 0; / 给脉冲信号dat4=1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 20 页 - - - - - - - - - 电子设计自动化实训12 DQ4 = 1; / 给脉冲信号if(DQ4) dat4|=0 x80; tmpDelay(4); return(dat4); void Writ
23、eOneChar1(unsigned char dat1)/ 写一个字节 unsigned char i=0; for (i=8; i0; i-) DQ1 = 0; DQ1 = dat1&0 x01; tmpDelay(5); DQ1 = 1; dat1=1; void WriteOneChar2(unsigned char dat2)/ 写一个字节 unsigned char i=0; for (i=8; i0; i-) DQ2 = 0; DQ2 = dat2&0 x01; tmpDelay(5); DQ2 = 1; dat2=1; void WriteOneChar3(unsigned c
24、har dat3)/ 写一个字节 unsigned char i=0; for (i=8; i0; i-) DQ3 = 0; DQ3 = dat3&0 x01; tmpDelay(5); DQ3 = 1; dat3=1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 20 页 - - - - - - - - - 电子设计自动化实训13 void WriteOneChar4(unsigned char dat4)/ 写一个字节 unsigned char i=0; fo
25、r (i=8; i0; i-) DQ4 = 0; DQ4 = dat4&0 x01; tmpDelay(5); DQ4 = 1; dat4=1; unsigned int Readtemp1()/ 读取温度 unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B201(); WriteOneChar1(0 xCC); / 跳过读序号列号的操作WriteOneChar1(0 x44); / 启动温度转换Init_DS18B201(); WriteOneChar1(0 xCC); / 跳过读序号列
26、号的操作WriteOneChar1(0 xBE); / 读取温度寄存器a=ReadOneChar1(); /连续读两个字节数据/读低 8 位b=ReadOneChar1(); /读高 8 位t=b; t900)|(t200) LED1=0; EA=1; TR0=1; else LED1=1; EA=0; TR0=0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 20 页 - - - - - - - - - 电子设计自动化实训14 return(t); unsigne
27、d int Readtemp2()/ 读取温度 unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B202(); WriteOneChar2(0 xCC); / 跳过读序号列号的操作WriteOneChar2(0 x44); / 启动温度转换Init_DS18B202(); WriteOneChar2(0 xCC); / 跳过读序号列号的操作WriteOneChar2(0 xBE); / 读取温度寄存器a=ReadOneChar2(); /连续读两个字节数据/读低 8 位b=ReadOneC
28、har2(); /读高 8 位t=b; t900|t200) LED2=0; EA=1; TR0=1; else LED2=1; EA=0; TR0=0; return(t); unsigned int Readtemp3()/ 读取温度 unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B203(); WriteOneChar3(0 xCC); / 跳过读序号列号的操作名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心
29、整理 - - - - - - - 第 15 页,共 20 页 - - - - - - - - - 电子设计自动化实训15 WriteOneChar3(0 x44); / 启动温度转换Init_DS18B203(); WriteOneChar3(0 xCC); / 跳过读序号列号的操作WriteOneChar3(0 xBE); / 读取温度寄存器a=ReadOneChar3(); /连续读两个字节数据/读低 8 位b=ReadOneChar3(); /读高 8 位t=b; t900|t200) LED3=0; EA=1; TR0=1; else LED3=1; EA=0; TR0=0; retu
30、rn(t); unsigned int Readtemp4()/ 读取温度 unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B204(); WriteOneChar4(0 xCC); / 跳过读序号列号的操作WriteOneChar4(0 x44); / 启动温度转换Init_DS18B204(); WriteOneChar4(0 xCC); / 跳过读序号列号的操作WriteOneChar4(0 xBE); / 读取温度寄存器a=ReadOneChar4(); /连续读两个字节数据/读低
31、 8 位b=ReadOneChar4(); /读高 8 位t=b; t900|t1;x-) for(y=z;y1;y-); void write_com(uchar com) /写命令函数 lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; void write_date(uchar date) /写数据函数 lcdrs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0; void init_lcd() /初始化函数 lcden=0; /默认开始状态为关使能端,见时序图lcdrw=0; /
32、选择状态为写write_com(0 x0f); write_com(0 x38); /显示模式设置,默认为0 x38,不用变。write_com(0 x01); /显示清屏,将上次的内容清除名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 20 页 - - - - - - - - - 电子设计自动化实训17 write_com(0 x0c); /显示功能设置0 x0f 为开显示,显示光标,光标闪烁;0 x0c为开显示,不显光标,光标不闪write_com(0 x06);
33、/设置光标状态默认0 x06,为读一个字符光标加1. write_com(0 x80); /设置初始化数据指针for(i=0;i16;i+) /显示The temperature write_date(t0i); delay(0); write_com(0 x80+0 x40); for(i=0;i16;i+) /显示is C write_date(t1i); delay(0); void display1() /显示函数 uint num; /定义的时候用uchar 宏定义就会出错uint shi,ge,xiaoshu; /定义的时候用uchar 宏定义就会出错num=Readtemp1()
34、; shi=num/100; ge=num/10%10; xiaoshu=num%10; write_com(0 x80+3); write_date(digitalshi); /显示温度十位write_com(0 x80+4); write_date(digitalge); /显示温度个位write_com(0 x80+5); write_date(0 x2e); /显示“ .”这个符号write_com(0 x80+6); write_date(digitalxiaoshu); /显示温度小数位 void display2() /显示函数 uint num; /定义的时候用uchar 宏定
35、义就会出错uint shi,ge,xiaoshu; /定义的时候用uchar 宏定义就会出错num=Readtemp2(); shi=num/100; ge=num/10%10; xiaoshu=num%10; write_com(0 x80+12); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 20 页 - - - - - - - - - 电子设计自动化实训18 write_date(digitalshi); /显示温度十位write_com(0 x80+13);
36、 write_date(digitalge); /显示温度个位write_com(0 x80+14); write_date(0 x2e); /显示“ .”这个符号write_com(0 x80+15); write_date(digitalxiaoshu); /显示温度小数位 void display3() /显示函数 uint num; /定义的时候用uchar 宏定义就会出错uint shi,ge,xiaoshu; /定义的时候用uchar 宏定义就会出错num=Readtemp3(); shi=num/100; ge=num/10%10; xiaoshu=num%10; write_c
37、om(0 x80+0 x40+3); write_date(digitalshi); /显示温度十位write_com(0 x80+0 x40+4); write_date(digitalge); /显示温度个位write_com(0 x80+0 x40+5); write_date(0 x2e); /显示“ .”这个符号write_com(0 x80+0 x40+6); write_date(digitalxiaoshu); /显示温度小数位 void display4() /显示函数 uint num; /定义的时候用uchar 宏定义就会出错uint shi,ge,xiaoshu; /定
38、义的时候用uchar 宏定义就会出错num=Readtemp4(); shi=num/100; ge=num/10%10; xiaoshu=num%10; write_com(0 x80+0 x40+12); write_date(digitalshi); /显示温度十位write_com(0 x80+0 x40+13); write_date(digitalge); /显示温度个位名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 20 页 - - - - - - - -
39、 - 电子设计自动化实训19 write_com(0 x80+0 x40+14); write_date(0 x2e); /显示“ .”这个符号write_com(0 x80+0 x40+15); write_date(digitalxiaoshu); /显示温度小数位 /* 函数功能:主函数*/ void main() init_lcd(); while(1) EAa=0; /开总中断ET0=1; /定时器 T0 中断允许TMOD=0 x01; /使用定时器T0 的模式 1 TH0=(65536-50000)/256; / 定时器 T0 的高 8 位赋初值TL0=(65536-50000)%256; / 定时器 T0 的高 8 位赋初值TR0=0; display1(); display2(); display3(); display4(); delay(10); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 20 页 - - - - - - - - -
限制150内