单片机毕业设计.docx

上传人:b****2 文档编号:1975491 上传时间:2023-05-02 格式:DOCX 页数:69 大小:124.46KB
下载 相关 举报
单片机毕业设计.docx_第1页
第1页 / 共69页
单片机毕业设计.docx_第2页
第2页 / 共69页
单片机毕业设计.docx_第3页
第3页 / 共69页
单片机毕业设计.docx_第4页
第4页 / 共69页
单片机毕业设计.docx_第5页
第5页 / 共69页
单片机毕业设计.docx_第6页
第6页 / 共69页
单片机毕业设计.docx_第7页
第7页 / 共69页
单片机毕业设计.docx_第8页
第8页 / 共69页
单片机毕业设计.docx_第9页
第9页 / 共69页
单片机毕业设计.docx_第10页
第10页 / 共69页
单片机毕业设计.docx_第11页
第11页 / 共69页
单片机毕业设计.docx_第12页
第12页 / 共69页
单片机毕业设计.docx_第13页
第13页 / 共69页
单片机毕业设计.docx_第14页
第14页 / 共69页
单片机毕业设计.docx_第15页
第15页 / 共69页
单片机毕业设计.docx_第16页
第16页 / 共69页
单片机毕业设计.docx_第17页
第17页 / 共69页
单片机毕业设计.docx_第18页
第18页 / 共69页
单片机毕业设计.docx_第19页
第19页 / 共69页
单片机毕业设计.docx_第20页
第20页 / 共69页
亲,该文档总共69页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机毕业设计.docx

《单片机毕业设计.docx》由会员分享,可在线阅读,更多相关《单片机毕业设计.docx(69页珍藏版)》请在冰点文库上搜索。

单片机毕业设计.docx

单片机毕业设计

单片机毕业设计

粮食仓库

实时温度监控报警系统

 

院系:

班级:

设计:

学号:

指导老师:

设计日期:

 

一、总体设计框图..................................................5

二、硬件设计..............................................................6

三、软件设计...............................................................7

设计小结........................................................................29

参考文献..............................................................30

 

第1章引言

本论文是基于单片机的仓库温湿度监控系统,该系统克服了传统装置的不足之处,由信号采集、信号分析和信号处理三个部分组成的,是一种造价低廉、使用方便简单,且测量准确的温湿度测量装置。

论文介绍

本设计用于温度的智能控制,节能环保,低耗能,噪音低,设计合理,体现了优化设计低碳生活的理念。

下面是本设计的具体内容及功能说明。

1.温度测量,测量范围0-125C

2.数字式温度范围可调,0-125C。

各种设定值在掉电后不会丢失,各种温度初始化设定值如下所述:

风机启动:

90C

风机停止:

70C

超温报警:

120C

报警:

100C

3.保存上次掉电时的瞬间温度,最高温度,最低温度。

4.可以手动启停风机,超温报警,报警信号的显示。

5.可以声光报警。

6.带时钟显示,可以调整时间,

7.可以查看掉电时,瞬间温度的时间,最高温度的时间,最低温度的时间

8.闹钟设置功能

9.闹钟初始值是8:

00(1键是确定键,2键是加键,3是减键,4是退出键,5是设置温度键,6是时间设置键,7是查看掉电前时的瞬间温度及出现的时间,最高温度及出现的时间,最低温度及出现的时间,当前最高时的温度及出现的时间。

8键时设置闹钟时的时间。

9键手动开关风机,超温跳闸,报警。

10.可以与上位机进行通讯:

上位机

(1)按下1键可以在上位机查看掉电前瞬间时的温度,及时间

(2)按下2键时在上位机可以看到此刻的温度,及时间

(3)按下3键可在上位机以看到设定超温的温度也就是跳闸温度

(4)按下4键可以在上位机看到设定的报警温度

(5)按下5键在上位机上可以看到设定的开风机温度

(6)按下6键在上位机上可以看到设定的关风机温度

(7)按下7键可以实现开风机

(8)按下8键可以实现关风机

11、设置时间:

按下设置时间键后,接下来设置月,设置日,设置时,设置分,设置时,按2,3键进行调整数值,设置时可以按退出键(4)退出。

12.设置闹钟时,按下设置闹钟键后,接下来设置时,分,按2,3键进行调整数值,设置时可以按退出键(4)退出。

13.设置温度:

按下设置温度键后,会弹出提示语,OK按1键,Ese按4键,设置完后,按OK键可以退出,在中间设置时,可以按退出键(4)退出。

14查询温度:

按下查询温度键后,按下2,3键可以切换查询的内容,在温度后面显示的数字:

0代表掉电前瞬间时的温度,1代表掉电前出现的最高温度,2代表掉电前出现的最低温度,3代表此次出现的最高温度,4代表此次出现的最低温度。

按退出键(4)退出查看。

15.手动开关风机,当按下9键后,超温跳闸,按2,3键后可以超温跳闸,报警,开风机,关风机之间切换,按退出键(4)键退出手动操作。

 

第2章设计任务分析

一.实时:

能够按照实际的日期时间显示和记录各项待检测物理量的参数值。

二.温度:

能够检测各连续时间点所对应的的温度值。

三.监控:

用户随时能够了解到仓库任意时间(包括历史时间)的温度状况以及做出相应的对策和处理措施,特别是不需要工作人员到仓库现场就可以知道仓库里的温度环境状况。

四.报警:

当仓库的环境温度超过设定值时系统报警,风机启动,然后进行通风。

五.本系统通过液晶显示器将时间和温度显示给用户以及和上位机通讯。

第3章仓库环境温度实时监控系统的总体设计

一、总体设计框图

二、硬件设计(附图)

重要元器件介绍

此次设计用到的芯片有AT89S52、AT2404、LCM2402、ULN2003、MAXIM487、DST302、

DS18B20

三、软件设计

设计程序如下:

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharcount,count1;

ucharclock_beep;

chark_diaodian;

ucharchaowenflag,baojinflag,kaifengjiflag;

ucharkey_ok=0;

ucharkey_Ese=0;

ucharkey_add1=0;

ucharkey_add2=0;

ucharkey_settemp=0;

ucharkey_time=0;

ucharkey_searchtem=0;

ucharkey_clock=0;

ucharkey_qiting=0;

ucharser_flag=0;

ucharser_a=0;

#defineLCM2402_DB0_DB7P0//数据总线

sbitLCM2402_RS=P2^5;//定义LCM2402的Rs控制线

sbitLCM2402_RW=P2^4;//定义LCM2402的RW控制线

sbitLCM2402_E=P2^3;//定义LCM2402的E控制线

sbitLCM2402_Busy=P0^7;//定义LCM2402的侧忙线

//LCM2402指令集

#defineCMD_clear0x01

#defineCMD_back0x02

#defineCMD_dec10x04

#defineCMD_add10x06

#defineCMD_dis_gb10x0f

#defineCMD_dis_gb20x0e

#defineCMD_dis_gb30x0c

#defineCMD_OFF_dis0x08

#defineCMD_set820x38

#defineCMD_set810x30

#defineCMD_set420x28

#defineCMD_set410x20

#definelin_10x80

#definelin_20xc0

//底层协议

voiddelayS(uinta)//延时大概1MS

{

uchari;

while(--a!

=0)

{

for(i=0;i<125;i++)

{;}

}

}

voidDelayS250(void)//延时

{

DelayS(250);

}

//LCM2402测忙,若LCM2402处于忙状态,本函数将继续测忙,直到LCM2402处于非忙状态

voidLCM2402_TestBusy(void)

{

LCM2402_DB0_DB7=0xff;//设备读状态

LCM2402_RS=0;

LCM2402_RW=1;

LCM2402_E=1;

while(LCM2402_Busy);

LCM2402_E=0;

}

 

voidLCM2402_WriteCMD(uintLCM2402_command)

{

LCM2402_TestBusy();

LCM2402_DB0_DB7=LCM2402_command;

LCM2402_RS=0;

LCM2402_RW=0;

LCM2402_E=1;

LCM2402_E=0;

}

voidLCM2402_WriteData(uintLCM2402_data)

{

LCM2402_TestBusy();

LCM2402_DB0_DB7=LCM2402_data;

LCM2402_RS=1;

LCM2402_RW=0;

LCM2402_E=1;

LCM2402_E=0;

}

voidLCM2402_Init(void)

{

LCM2402_WriteCMD(CMD_set82);

LCM2402_WriteCMD(CMD_clear);

LCM2402_WriteCMD(CMD_back);

LCM2402_WriteCMD(CMD_add1);

LCM2402_WriteCMD(CMD_dis_gb3);

}

voidprint(uint*str)

{

LCM2402_WriteCMD(a);

while(*str!

='\0')

{

LCM2402_WriteData(*str++);

}

*str=0;

}

voidprint2(uinta,uintt)

{

LCM2402_WriteCMD(a);

LCM2402_WriteData(t);

}

 

//写数据LCM创建小汉字

unsignedintcodeXword[]=

{

0x18,0x18,0x07,0x08,0x08,0x08,0x07,0x00,//C

0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,//一

0x00,0x00,0x00,0x0e,0x00,0xff,0x00,0x00,//二

0x00,0x00,0xff,0x00,0x0e,0x00,0xff,0x00,//三

0x00,0x00,0xff,0xf5,0xfb,0xf1,0xff,0x00,//四

0x00,0xfe,0x08,0xfe,0x0a,0x0a,0xff,0x00,//五

0x00,0x0r,0x00,0xff,0x00,0x0a,0x11,0x00,//六

0x00,0x1f,0x11,0x1f,0x11,0x11,0x1f,0x00,//日

};

voidCgramWrite(void)//装入cgram

{

unsignedinti,k;

k=AT24c02_Read(0x33);//读取标志位,多次开机,只执行一次这程序

if(k==1)

{

LCM2402_WriteCMD(0x06);//CGRAM地址自动加一

LCM2402_WriteCMD(0x40);//CGRAM地址设为00处

for(i=0;i<64;i++)

{

LCM2402_WriteData(Xword[i]);

}

AT24c02_WriteCMD(0x33,0);//写入0标志位

}

}

//AT24c02芯片的处理

sbitSCL=P2^1;

sbitSDA=P2^2;

sbitmos_bit

sbitlow_bit

datacom_data//定义一个能位寻址的变量

mos_bit=com_data^7;

low_bit=com_data^0;

voidstart()

{

SDA=1;_nop_();_nop_();_nop_();_nop_();

SCL=1;_nop_();_nop_();_nop_();_nop_();

SDA=0;_nop_();_nop_();_nop_();_nop_();

SCL=0;_nop_();_nop_();_nop_();_nop_();

}

voidstop()

{

SDA=0;_nop_();_nop_();_nop_();_nop_();

SCL=1;_nop_();_nop_();_nop_();_nop_();

SDA=1;_nop_();_nop_();_nop_();_nop_();

}

voidack()

{

SCL=1;_nop_();_nop_();_nop_();_nop_();

SCL=0;_nop_();_nop_();_nop_();_nop_();

}

voidshift8(chara)

{

datauchari;

com_data=a;

for(i=0;i<8;i++)

{

SDA=mos_bit;

SCL=1;_nop_();_nop_();_nop_();_nop_();

SCL=0;_nop_();_nop_();_nop_();_nop_();

com_data=com_data*2;

}

}

unsignedcharAT24c02_Read(chara)//读数据

{

dataunsignedchari,command;

SDA=1;_nop_();_nop_();_nop_();_nop_();

SCL=0;_nop_();_nop_();_nop_();_nop_();

start();

command=160;

shift(command);

ack();

shift8(a);

ack();

start();

command=161;

shift8(command);

ack();

SDA=1;_nop_();_nop_();_nop_();_nop_();

for(i=0;i<8;i++)

{

com_data=com_data*2;

SCL=1;_nop_();_nop_();_nop_();_nop_();

low_bit=SDA;

SCL=0;_nop_();_nop_();_nop_();_nop_();

}

stop();

returncom_data;

}

voidAT24c02_Write(chara,charb)//写数据,a是地址,b要写的数据

{

dataunsignedcharcommand;

nop_();_nop_();_nop_();_nop_();

SDA=1;_nop_();_nop_();_nop_();_nop_();

SCL=0;_nop_();_nop_();_nop_();_nop_();

start();

command=160;

shift8(command);

ack();

shift8(a);

ack();

shift(b);

ack();

stop();

nop_();_nop_();_nop_();_nop_();

}

 

//Ds1302时钟芯片的初始化

sbitclock_clk=P3^5;//时钟线

sbitclock_dat=P3^6;//数据线

sbitclock_Rst=P3^7;//复位线

sbita0=ACC^0;

sbita1=ACC^1;

sbita2=ACC^2;

sbita3=ACC^3;

sbita4=ACC^4;

sbita5=ACC^5;

sbita6=ACC^6;

sbita7=ACC^7;

unsignedcharyy;mo,dd,xq,hh,mm,ss;//全局变量

bitw=0;//调时标志位

voidclock_out(unsignedchardd)//发送8位数据到1302

{

ACC=dd;

clock_dat=a0;clock_clk=1;clock_clk=0;

clock_dat=a1;clock_clk=1;clock_clk=0;

clock_dat=a2;clock_clk=1;clock_clk=0;

clock_dat=a3;clock_clk=1;clock_clk=0;

clock_dat=a4;clock_clk=1;clock_clk=0;

clock_dat=a5;clock_clk=1;clock_clk=0;

clock_dat=a6;clock_clk=1;clock_clk=0;

clock_dat=a7;clock_clk=1;clock_clk=0;

}

unsignedcharclock_in(void)//从1302中接收8位数据

{

clock_dat=1;

a0=clock_dat;

clock_clk=1;clock_clk=0;a1=clock_dat;

clock_clk=1;clock_clk=0;a2=clock_dat;

clock_clk=1;clock_clk=0;a3=clock_dat;

clock_clk=1;clock_clk=0;a4=clock_dat;

clock_clk=1;clock_clk=0;a5=clock_dat;

clock_clk=1;clock_clk=0;a6=clock_dat;

clock_clk=1;clock_clk=0;a7=clock_dat;

return(ACC);

}

voidwrite_clock(unsignedcharord,unsignedchardd)//写入一个数

{

clock_clk=0;

clock_Rst=0;

clock_Rst=1;

clock_out(ord);

clock_out(dd);

clock_Rst=0;

clock_clk=1;

}

unsignedcharread_clock(unsignedcharord)//读取一个数

{

unsignedchardd=0;

clock_clk=0;

clock_Rst=0;

clock_Rst=1;

clock_out(ord);

dd=clock_in();

clock_Rst=0;

clock_clk=1;

return(dd);

}

voidInit_1302(void)//1302初始化

{

uchark;

k=AT24c02_Read(0x34);//标志位为一时,

if(k==1)

{

write_clock(0x8e,0x00);//允许写操作

write_clock(0x8c,0x10);//年

write_clock(0x8a,0x02);//星期

write_clock(0x88,0x04);//月

write_clock(0x86,0x10);//日

write_clock(0x84,0x11);//小时

write_clock(0x82,0x00);//分钟

write_clock(0x80,0x00);//秒

write_clock(0x90,0xa5);//充电

write_clock(0x34,0);//写入标志位为0;

write_clock(0x8e,0x80);//禁止写操作

}

}

//18B02温度初始化,及相关处理

sbitDQ=P2^0;

voidDelay(intnum)//延时函数

{while(num--);

}

voidInit_DS18B20(void)//初始化ds18b20

{

ucharx=0;

DQ=1;

Delay(8);

DQ=0;//单片机将DQ拉低

Delay(80);//精确延时大于480us

DQ=1;

Delay(14);

x=DQ;

Delay(20);

}

ucharReadOneChar(void)//读一个字节

{

uchari=0;

uchardat=0;

for(i=8;i>0;i--)

{

DQ=0;

dat>>=1;

DQ=1;

if(DQ)

dat|=0x80;

Delay(4);

}

return(dat);

}

voidWriteOneChar(uchardat)//写一字节

{

uchari=0;

for(i=8;i>0;i--)

{

DQ=0;

DQ=dat&01;

Delay(5);

DQ=1;

dat>>=1;

}

}

uintReadTemperature(void)//读取温度

{

uchara=0;

ucharb=0;

uintt=0;

floattt=0;

Init_DS18B20();

WriteOneChar(0xCC);//跳过序列号的操作

WriteOneChar(0x44);//启动温度转换

Init_DS18B20();

WriteOneChar(0xCC);//跳过序列号的操作

WriteOneChar(0xBE)//读取温度寄存器

a=ReadOneChar();

b=ReadOneChar();

t=b;

t<<=8;

t=t|a;

tt=t*0.0625;

t=tt*10+0.5;

return(t);

}

voidprintTemperature(void)显示温度

{

uinti=0;

uchara=0,b=0,c=0,d=0;

i=ReadTemperature();

a=i/1000;

if(a>0)

{print2(0xC2,a+0x30);}

b=i/100-a*10;

print2(0xc3,b+0x30);

c=i/10%10;

print2(0xc4,c+0x30);

print2(0xc5,".");

d=t%10;

print2(0xc6,d+0x30);

print2(0xc7,0x00);

}

 

//实时时间显示

voidRealTime_Display(void)

{

print(0x80,"20");

print2(0x82,(read_clock(0x8d)/16)+0x30);

print2(0x83,(read_clock(0x8d)%16)+0x30);

print(0x84,"/");//显示年

print2(0x85,(read_clock(0x89)/16)+0

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

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2