收藏 分享(赏)

基于51单片机温度检测LCD显示课程设计报告.doc

上传人:精品资料 文档编号:8890400 上传时间:2019-07-15 格式:DOC 页数:22 大小:421.53KB
下载 相关 举报
基于51单片机温度检测LCD显示课程设计报告.doc_第1页
第1页 / 共22页
基于51单片机温度检测LCD显示课程设计报告.doc_第2页
第2页 / 共22页
基于51单片机温度检测LCD显示课程设计报告.doc_第3页
第3页 / 共22页
基于51单片机温度检测LCD显示课程设计报告.doc_第4页
第4页 / 共22页
基于51单片机温度检测LCD显示课程设计报告.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、大 连 民 族 学 院单 片 机 系 统 课 程 设 计题目:温度计的设计班级:电子 105姓名:赵萌同组人:张瑛笛指导教师:李绍民设计日期: 一 设计内容及要求设计内容:基于单片机的室内温度检测 LCD 显示要求:测量温度 55125温度上下限 TH:32 TL:16温度报警:超出温度上下限 BEEP 报警二 设计方案测温部分:采用 18B20 作为温度传感器,有一个由高低电平触发的且不因掉电而丢失的报警功能。控制部分:89S52 最小系统显示部分:1602 液晶显示,模块内的字符发生存储器存储了 160 个不同的点阵图形,先是方便,同时好可以进行时间的显示。三 硬件系统设计电源 时钟晶振原

2、理图AT89S52 是一个低功耗,高性能 CMOS 8 位单片机,片内含 8k Bytes ISP(In-system programmable)的可反复擦写 1000 次的 Flash 只读程序存储器,器件采用 ATMEL 公司的高密度、非易失性存储技术制造,兼容标准 MCS -51 指令系统及 80C51 引脚结构,芯片内集成了通用8 位中央处理器和 ISP Flash 存储单元,功能强大的微型计算机的 AT89S52 可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89S52 具有如下特点:40 个引脚,8k Bytes Flash 片内程序存储器,256 bytes 的随机存取数

3、据存储器(RAM) ,32 个外部双向输入/输出(I/O)口,5 个中断优先级 2 层中断嵌套中断,2 个 16 位可编程定时计数器,2 个 全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。AT89S52 引脚图此外,AT89S52 设计和配置了振荡频率可为0Hz 并可通过软件设置省电模式。空闲模式下,CPU 暂停工作,而 RAM 定时计数器,串行口,外中断 系统可继续工作,掉电模式冻结振荡器而保存 RAM 的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、 TQFP 和 PLCC 等三 种封装形式,以适应不同产品的需求。I/O 接口外围电路工作原理及硬件图四

4、 软件系统设计软件流程框图五 仿真调试( 1) Keil C51 单 片 机 软 件 开 发 系 统 的 整 体 结 构 C51 工 具 包 的 整 体 结 构 , uVision 与 Ishell 分 别 是 C51 for Windows 和 for Dos 的 集 成 开 发 环 境 (IDE), 可 以 完 成 编 辑 、 编 译 、连 接 、 调 试 、 仿 真 等 整 个 开 发 流 程 。 开 发 人 员 可 用 IDE 本 身 或 其系统设计原理:本次课程设计是基于单片机的数字温度计设计,在开始课程设计的时候我们要理解并掌握对单片机的开发,学会使用 KEIL 及 Proteus

5、 等仿真软件。根据设计任务要求选择好器件,编写好程序运行成功之后进行软件联调,验证系统是否正确。通过筛选,我们组选用单片机AT89S52 作为主控制系统;用1602 液晶显示模块芯片作为温度数据显示装置;智能温度传感器采用 DS18B20 器件作为测温电路主要组成部分。它 编 辑 器 编 辑 C 或 汇 编 源 文 件 。 然 后 分 别 由 C51 及 C51 编 译 器 编译 生 成 目 标 文 件 (.OBJ)。 目 标 文 件 可 由 LIB51 创 建 生 成 库 文 件 ,也 可 以 与 库 文 件 一 起 经 L51 连 接 定 位 生 成 绝 对 目 标 文 件 (.ABS)。

6、ABS 文 件 由 OH51 转 换 成 标 准 的 Hex 文 件 , 以 供 调 试 器 dScope51或 tScope51 使 用 进 行 源 代 码 级 调 试 , 也 可 由 仿 真 器 使 用 直 接 对 目标 板 进 行 调 试 , 也 可 以 直 接 写 入 程 序 存 贮 器 如 EPROM 中 。( 2) 使 用 独 立 的 Keil 仿 真 器 时 , 注 意 事 项 仿 真 器 标 配 11.0592MHz 的 晶 振 , 但 用 户 可 以 在 仿 真 器 上 的 晶 振 插孔 中 换 插 其 他 频 率 的 晶 振 。 仿 真 器 上 的 复 位 按 钮 只 复

7、位 仿 真 芯 片 , 不 复 位 目 标 系 统 。 仿 真 芯 片 的 31 脚 ( /EA) 已 接 至 高 电 平 , 所 以 仿 真 时 只 能 使 用 片 内ROM, 不 能 使 用 片 外 ROM; 但 仿 真 器 外 引 插 针 中 的 31 脚 并 不 与 仿真 芯 片 的 31 脚 相 连 , 故 该 仿 真 器 仍 可 插 入 到 扩 展 有 外 部ROM( 其 CPU 的 /EA 引 脚 接 至 低 电 平 ) 的 目 标 系 统 中 使 用 。 调 试 结 果(3)结果分析在运行仿真结果时通过改变温度传感器 DS18B20 的温度,然后调用各种子函数,可以改变液晶显示

8、 1602 的第二行显示数据,说明程序编写正确。(4)系统设计电路的特点和方案的优缺点我们组设计的数字温度计系统知识运用简单的 AT89S52 芯片的I/O 口传输功能,通过几个小的读数据、传递数据、延时子函数实现温度的读取传输功能,是比较简单,容易实现的,所以我们的系统只是实现了一些简单的功能,系统整体来说比较简易,但好像这个温度计没有多大的应用价值,所以我们后续分析觉得这个系统可以加一个温度复位系统提高 AT89S52 芯片的功能价值,也提高数字温度计的智能价值,还可以增加一个报警子函数,实现智能数字温度计更高的应用价值。六 结论虽然基本功能已经做好了,但还可以有很多的扩展功能,如串口设计

9、和时钟显示,由于时间有限,但对于单片机的设计还在继续参考文献附录一程序代码:#include #include #define uchar unsigned char#define uint unsigned intsbit DQ = P22; /定义 DS18B20 端口 DQ sbit BEEP=P23 ; /蜂鸣器驱动线bit presence,flag;bit compare_th,compare_tl,alarm_on_off=0,temp_th,temp_tl;sbit LCD_RS = P35; sbit LCD_RW = P36;sbit LCD_EN = P34;uchar

10、code cdis1 = “ READ_ROMCORD “;uchar code cdis2 = “ “;uchar code cdis3 = “ DS18B20 ERR0R “;uchar code cdis4 = “ PLEASE CHECK “;uchar code cdis5 = “ TEMP: “;uchar code cdis6 = “TH: TL: “;unsigned char data temp_data2 = 0x00,0x00;unsigned char data temp_alarm2 = 0x20,0x10;unsigned char data display5 =

11、0x00,0x00,0x00,0x00,0x00; /温度值显示unsigned char data display13 = 0x00,0x00,0x00; /温度报警值显示unsigned char data RomCode8 = 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;unsigned char code mytab18 = 0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00;#define delayNOP(); _nop_();_nop_();_nop_();_nop_();unsigned char Temp,tem

12、p_comp,timecount,count;unsigned char crc;void Disp_Temp_alarm(uchar addr,uchar num);void spk(uchar addr);void set_temp_alarm();void temp_compare();void beep();/*/void delay1(int ms)unsigned char y;while(ms-)for(y = 0; y 0; i-)DQ = 0; / 给脉冲信号dat = 1;DQ = 1; / 给脉冲信号if(DQ)dat |= 0x80;Delay(4);return (d

13、at);/*/* */* 写一个字节 */* */*/WriteOneChar(unsigned char dat)unsigned char i = 0;for (i = 8; i 0; i-)DQ = 0;DQ = datDelay(5);DQ = 1;dat=1;/*/* */* 温度报警值写入 DS18B20 */* */*/Write_Temperature_alarm(void)Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0x4e); /将设定的温度报警值写入 DS18B20WriteOneChar(tem

14、p_alarm0); /写 THWriteOneChar(temp_alarm1); /写 TLWriteOneChar(0x7f); /12 位精确度Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0x48); /把暂存器里的温度报警值拷贝到EEROM/*/* */* 读取 64 位序列码 */* */*/Read_RomCord(void)unsigned char j;Init_DS18B20();WriteOneChar(0x33); / 读序列码的操作for (j = 0; j = 1; else crc = 0

15、x18; /CRC=X8+X5+X4+1crc = 1; crc |= 0x80; crcbuff = 1; return crc;/*/* */* 数据转换与显示 */* */*/Disp_RomCode(uchar H_num)uchar j;if(H_num=1)lcd_pos(0x00); if(H_num=2)lcd_pos(0x40);for(j=0;j4);if(display09) display0=display0+0x37;elsedisplay0=display0+0x30; lcd_wdat(display0); /高位数显示 display1=(Tempif(disp

16、lay19)display1=display1+0x37;else display1=display1+0x30; lcd_wdat(display1); /低位数显示 /*/* */* 读取温度 */* */*/Read_Temperature(void)uchar i;TR0=0; /关中断,防止读数错误Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0x44); /启动温度转换Init_DS18B20();WriteOneChar(0x55); /匹配 ROM 命令for(i=0;i4)|(temp_data1 /取反

17、加一,将补码变成原码if(temp_data0)=0xff)temp_data1=(temp_data1)+1;else temp_data1=temp_data1;s=1;display4=temp_data0display0=(display4*10/16)+0x30;display4=(temp_data0flag=flag; /*/ 温度比较函数/*/void temp_compare() if(temp_comp = temp_alarm0) /比较 TH 值compare_th=1; else compare_th=0;if(temp_comp temp_alarm1) /比较 T

18、L 值compare_tl=1;else compare_tl=0;if(compare_th)spk(0x46); /小喇叭闪动if(!alarm_on_off) /静音选择beep();count=temp_alarm0;else lcd_pos(0x46);lcd_wdat(0x20);if(compare_tl)spk(0x4e); /小喇叭闪动if(!alarm_on_off) /静音选择beep();count=temp_alarm1;else lcd_pos(0x4e);lcd_wdat(0x20); /*/* */* 主函数 */* */*/void main()uchar m

19、;TMOD=0x01; TH0=0x4c; TL0=0x00; /50ms 定时EA=1; ET0=1; TR0=1;P0=0;P2Init_DS18B20();Write_Temperature_alarm(); /设定报警上下限温度值if(presence)Error_Menu ();do Init_DS18B20();beep();while(presence);RomCode_Menu (); /显示 RomCodefor(m=0;m10;m+)Delay(50000);Natural_Menu (); /正常显示界面Delay(50000);while(1)Read_Temperature(); /读取当前温度Delay(50000);Disp_Temperature(); /更新当前温度temp_compare(); /温度上下限比较if(compare_th)Set_tempalarm_Flash(0x43,0); /上限报警if(compare_tl)Set_tempalarm_Flash(0x4b,1); /下限报警/end of while(1) /end of main()

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报