详情请私信!
基于单片机的智能温度计的系统设计(原理图+仿真+论文(低重复率))
资料包含:毕业设计全套资料(精品)
1.原理图工程及原理图截图
2.仿真工程、仿真截图、仿真视频
3.源代码
4.答辩论文(低重复率),20736字
5.流程图
6.答辩PPT
需要资料请私信
采用单片机作为控制器、结合温度传感器、A/D转换器、显示芯片等外围元件设计出一个智能温度计系统,使其实现系统的启动、停止、复位、对温度的设定、采集、显示、超温报警等功能。
1、根据智能温度计的功能要求,提出系统总体结构;
2、对系统进行硬件设计、软件设计;
3、利用PROTEUS软件对系统进行仿真验证。
在设计系统之前,首先对温度传感器的发展和使用情况分析,了解当前的需求,然后对基于单片机的智能温度计的系统方案确定。选择合适的温度计来作为本次系统的温度传感器,确定系统方案。确定系统所使用的元器件,选择使用STC89C52单片机作为系统的主控制器,通过液晶显示器来显示实时的温度和报警温度阀值,温度传感器选择使用单总线传输数据的,系统通过光学和声学两种方式报警,通过按键来调节系统报警的阀值。然后对系统电路搭建,通过模块化的方式来实现电路的设计,在设计中考虑到稳定性和抗干扰能力,然后对单片机运行程序编写,绘制程序编写流程图,首先绘制系统总流程图,然后绘制各个子流程图,根据流程图来编写系统程序,最后完成本次系统的设计通过Proteus软件对系统仿真。
前 言 1
第一章 绪论 2
第一节 温度计的研究背景 2
第二节 温度计的研究意义 2
第三节 温度计的研究现状及趋势 3
第四节 本文的主要研究内容 3
第二章 智能温度计的系统设计方案分析 5
第一节 温度检测方案的确定 5
一、温度传感器的简介及原理 5
二、温度传感器特性 6
三、温度传感器的选定 6
第二节 智能温度计的设计要求分析 7
第三节 系统结构组成框图 7
第四节 本章小结 8
第三章 智能温度计的系统硬件电路设计 10
第一节 单片机最小系统电路设计 10
一、单片机的简介 10
二、复位电路 11
二、晶振电路 12
第二节 温度检测电路的设计 13
第三节 按键电路设计 13
第四节 报警提示模块电路设计 14
第五节 LCD液晶显示模块电路 14
第六节 蜂鸣器报警模块电路 15
第七节 系统总电路图 16
第八节 本章小结 17
第四章 智能温度计的系统设计的软件设计 18
第一节 Keil软件介绍 18
第二节 系统的主程序流程设计 18
第三节 其他子程序流程设计 19
一、LED显示驱动程序流程图 19
二、按键模块程序流程图 20
三、LCD液晶显示驱动程序流程图 20
四、温度传感器驱动程序流程图 21
五、蜂鸣器报警驱动程序流程图 22
第四节 按键模块程序设计 22
第五节 LED显示驱动程序设计 23
第六节 LCD液晶显示驱动程序设计 23
第七节 温度传感器驱动程序设计 24
第八节 蜂鸣器报警驱动程序设计 25
第九节 本章小结 25
第五章 智能温度计的系统设计的仿真 26
第一节 仿真软件介绍 26
一、Proteus软件介绍 26
二、Proteus优势 26
第二节 系统仿真 27
一、系统总仿真图 27
二、功能仿真验证 28
第三节 结果分析 32
第四节 本章小结 33
结 论 34
致 谢 35
参考文献 36
附 录 38
一、英文原文 38
二、英文翻译 41
三、工程图纸 43
四、源代码 44
答辩论文(低重复率),20736字
#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include "intrins.h"
#define u8 unsigned char
#define u16 unsigned int
#define uchar unsigned char
#define uint unsigned int
uchar yushe_wendu=50; //温度预设值
uint wendu; //温度值全局变量
//运行模式
uchar Mode=0; //=1是设置温度阀值 =2是设置烟雾阀值 =0是正常监控模式
//管脚声明
sbit Led_Gre
=P2^2; //绿灯
sbit Led_Yellow =P2^4; //黄灯
sbit Buzzer =P2^0; //蜂鸣器
sbit Fan =P3^3; //
/********************************************************************
* 名称 : delay_1ms()
* 功能 : 延时1ms函数
* 输入 : q
* 输出 : 无
***********************************************************************/
void delay_ms(uint q)
{
uint i,j;
for(i=0;i0;x--)
for(y=10;y>0;y--);
}
void LCD_WriteData(u8 dat)
{
if(dat&0x01)D0=1;else D0=0;
if(dat&0x02)D1=1;else D1=0;
if(dat&0x04)D2=1;else D2=0;
if(dat&0x08)D3=1;else D3=0;
if(dat&0x10)D4=1;else D4=0;
if(dat&0x20)D5=1;else D5=0;
if(dat&0x40)D6=1;else D6=0;
if(dat&0x80)D7=1;else D7=0;
}
//写命令
void write_com(uchar com)
{
LCDRS=0;
LCD_WriteData(com);
// DAT=com;
LCDdelay(5);
LCDEN=1;
LCDdelay(5);
LCDEN=0;
}
//写数据
void write_data(uchar date)
{
LCDRS=1;
LCD_WriteData(date);
// DAT=date;
LCDdelay(5);
LCDEN=1;
LCDdelay(5);
LCDEN=0;
}
/*------------------------------------------------
选择写入位置
------------------------------------------------*/
void SelectPosition(unsigned char x,unsigned char y)
{
if (x == 0)
{
write_com(0x80 + y); //表示第一行
}
else
{
write_com(0xC0 + y); //表示第二行
}
}
/*------------------------------------------------
写入字符串函数
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
SelectPosition(x,y) ;
while (*s)
{
write_data( *s);
s ++;
}
}
//========================================================================
// 函数: void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l)
// 应用: LCD_Write_Char(0,1,366,4) ;
// 描述: 在第0行第一个字节位置显示366的后4位,显示结果为 0366
// 参数: x:行,y:列,s:要显示的字,l:显示的位数
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注: 最大显示65535
//========================================================================
void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l)
{
SelectPosition(x,y) ;
if(l>=5)
write_data(0x30+s/10000%10); //万位
if(l>=4)
write_data(0x30+s/1000%10); //千位
if(l>=3)
write_data(0x30+s/100%10); //百位
if(l>=2)
write_data(0x30+s/10%10); //十位
if(l>=1)
write_data(0x30+s%10); //个位
}
/*1602指令简介
write_com(0x38);//屏幕初始化
write_com(0x0c);//打开显示 无光标 无光标闪烁
write_com(0x0d);//打开显示 阴影闪烁
write_com(0x0d);//打开显示 阴影闪烁
*/