消毒柜的单片机设计.docx

上传人:b****5 文档编号:4249873 上传时间:2022-11-28 格式:DOCX 页数:23 大小:140.02KB
下载 相关 举报
消毒柜的单片机设计.docx_第1页
第1页 / 共23页
消毒柜的单片机设计.docx_第2页
第2页 / 共23页
消毒柜的单片机设计.docx_第3页
第3页 / 共23页
消毒柜的单片机设计.docx_第4页
第4页 / 共23页
消毒柜的单片机设计.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

消毒柜的单片机设计.docx

《消毒柜的单片机设计.docx》由会员分享,可在线阅读,更多相关《消毒柜的单片机设计.docx(23页珍藏版)》请在冰豆网上搜索。

消毒柜的单片机设计.docx

消毒柜的单片机设计

计控学院

Collegeofcomputerandcontrolengineering

QiqiharUniversity

 

电气工程课程设计报告

 

题目:

消毒柜的控制系统

 

系别电气工程系

专业班级电气101班

学生姓名杨阳

学号2010024023

指导教师李艳东

提交日期2013年6月21日

成绩

 

目录

1、绪论……………………………………………………………………

2、方案论证(规划、选定)……………………………………………

3、方案说明(设计)……………………………………………………

4、硬件方案设计…………………………………………………………

5、软件方案设计…………………………………………………………

6、调试………………………………………………………………………

7、技术小结(结束语)…………………………………………………

8、参考文献…………………………………………………………………

9、附录(源程序代码、电路图等)…………………………………………

 

1.绪论

该课题是设计一个消毒柜其实就是设计一个智能的温度控制系统,消毒柜主要通过加热到一个指定温度,对餐具等卫生洁具进行高温消毒,消毒柜将高温控制在一个指定的范围内,并维持一定时间,杀灭细菌,极大地增强了人们的饮食卫生,大大降低了疾病的交叉传染,为提高人们的身体健康起了重要的作用。

本文主要介绍了一个基于AT89C51单片机制作的消毒柜控制电路。

它主要包括供电电源电路、上电复位电路、晶振电路、开关控制电路、显示电路等部分。

文中对各电路的结构及工作原理作了详尽的介绍。

电路运行后,能自动定时控制消毒柜的加电和断电,适时有效地完成对柜内餐具或其它物品的消毒工作。

具有电路简单、制作容易、使用灵活等优点。

通过该电路,可以进一步了解到单片机电路的应用扩展功能和指令应用技巧。

本文的消毒柜控制系统就是为了人们日常生活中的餐具消毒而设计的,采用微电脑控制技术,精确地控制消毒柜内的温度和加热时间,很大程度上改善了人们的饮食卫生,提高了人们的生活水平。

本设计采用DS18B20温度传感器采集实时温度,通过DQ口送51单片机系统,实现模拟温度值的采集、转化、输出数字值,然后51单片机对采集的数据处理后送液晶显示电路,实时动态地显示当前的温度及倒计时时间。

对温度的控制主要由单片机内部三种中断方式来控制启动和停止。

 

2、设计目的及方案论证

2.1消毒柜是现代生活中经常看到或接触的电器。

消毒柜一般通过紫外线、远红外线、高温、臭氧等方式,给食具、餐具、毛巾、衣物、美容美发用具、医疗器械等物品进行杀菌消毒、保温除湿。

广泛用于酒店宾馆、餐馆、学校、部队、食堂等场所。

通过本次设计,我们要达到的目的是:

1)熟悉单片机的结构及它的工作原理;

2)能用单片机完成简单的系统控制;

3)会编制程序和设计单片机的外围电路;

4)完成软件系统设计:

绘出系统流程图、系统原理图;

5)系统调试与仿真:

将设计的控制系统在Protuse中进行系统调试或仿真

2.2系统设计要求

2.1.1显示消毒柜温度,保持时间。

2.1.2可以键盘设定消毒柜温度,定时时间。

2.1.3可以实现实时中断功能。

2.3系统组成框图

图2.1系统组成框图

2.4系统工作原理

该系统是基于AT89S51单片机的温度控制的且实现通过高温来杀灭病毒的消毒柜系统,该系统主要三大部分组成。

第一部分是由温度传感器DS18B20采集实时温度转换成数字信号;第二部分的电路是由键盘控制消毒的定时和启停;第三部分是液晶显示屏的显示部分。

AT89S51单片机对键盘的扫描结果和即时温度值的处理,实现对温度的实时控制,系统设计了启动设定定时时间,设置定时时间,中断控制定时,共四个键,按下启动设定定时时间功能键即确定开始温度增减按钮时,单片机加热时间可通过温度加减按钮设定,开始加热,启动定时器中断控制,当温度加热设定时间到后停止加热。

3、方案说明

3.1DS18B20一线总线温度传感器

特点:

体积小安装方便;

可联网,方便分散点测量;

三线∕二线式连接方式;

测量范围-55℃~+125℃;

3.2AT89C51

  按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。

AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,具有丰富的内部资源:

4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz工作频率,使用AT89C51单片机时无须外扩存储器。

因此,单片机最小系统为晶振、复位、电源等电路和必要的软件组成的单个单片机。

3.31602液晶显示

首先是1602液晶的管脚,总共有16个管脚,其中有三根是电源地、电源正、还有事对比

度的调整电压;还有两根是LCD背光的正、负极。

重要的是决定led指令的三根管脚吗,分别是RS、R/W、E(一般接单片机的P2.0~P2.2),剩下的八根式数据线分别为DB0~DB7(一般接单片机的P0口)。

4、硬件方案设计

4.1系统硬件结构框图

图2系统硬件结构框图

4.2单片机最小系统设计

单片机采用的是ATMEL公司的AT89S51芯片该款芯片是一种低功耗、高性能CMOS8位微控制器,具有4K在系统可编程Flash存储器。

使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

AT89S51具有以下标准功能:

4k字节Flash,128字节RAM,32位I/O口线,看门狗定时器,2个数据指针,两个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

另外,AT89S51可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

8位微控制器4K字节在系统可编程FlashAT89S51。

单片机最小系统电路图如图3.2所示。

图3.2单片机最小系统电路图

 

4.3DS18B20控制电路

通过P3.4口与DQ的连接实现51单片机与温度传感器DS18B20的连通工作。

 

4.4键盘控制电路

该键盘接口电路通过按键控制定时和中断。

本模块通过编制程序,扫描键盘,来比对键盘的值,来设置四个功能键。

4.5LCD液晶显示电路

通过P0口控制液晶显示的输入。

P0口必须外接上拉电阻。

通过P2口的低三位控制RS,RW,E三个功能控制引脚,从而控制液晶显示屏LCD的工作。

 

5、软件方案设计

5.1系统软件设计原理

本程序设计根据通过温度传感器采样来的温度值,经过内部转化为二进制数字量,再通过51单片机控制输出至LCD液晶显示屏,然后调用显示程序进行温度的事实显示。

对于各个功能键的程序是从P0口读数、再转换成十进制数、送显缓区、再根据键盘扫描的结果对温度值进行比较判断,当按下的键是加减功能键时,系统要控制加热的时间可进行调节。

开始加热后,通过定时器控制加热时间到的中断,当加热时间由设定值减至0时停止加热,键盘显示实时温度。

通过在主程序里面设立标志,该程序是通过延时的方法来确保温度转换为显示数据实现温度与按键的统一和“同步”,实时的控制加热的工作,以达到人们所要求达到的效果。

 

5.2主程序流程图

 

定时未到,继续判断

定时到

 

图3主程序流程图

5.3系统子程序设计

本软件设计中,系统子程序的设计是整个程序设计的重中之重,子程序以模块化的方式实现各个独立功能,再通过主程序来调用功能子程序,使整个程序实现完整的功能。

按键处理子程序,DS18B20温度采样子程序,温度采样转化子程序,显示处理子程序。

 

6、调试

6.1硬件调试

6.1.1.由于本次课程设计做了实物出来,通过设计方案,在试验焊接板上进行合理布局并焊接实物图。

然后根据实验指导书上的各功能芯片的端口地址,连接号各部分电路,用电表测量焊接点的正常与否,最后连上电源。

6.1.2.检测LCD显示模块,因为通过键盘显示,可以直观的知道程序是否基本运行正常,是否按预定的显示。

6.1.3.调试键盘模块电路,看是否按压正常,以及二极管闪灭部分是否能够实现实时闪亮。

6.1.4.最后进行整体硬件电路的联调。

6.2软件调试

软件调试是个很重要的过程,由于软件出现错误的话就基本上各部分功能都实现都有困难,所以软件的调试时重中之重。

6.2.1第一步是进行的是DS18B20的软件的调试,通过采集温度后内部转换后通过合理的内存单元的分配,存储采样后转换的值,然后同过51单片机程序看是否实现在LCD上显示实时温度值。

6.2.2键盘扫描部分程序的调试,该部分是程序中的功能键实现控制温度和时间的主要的部分,如果该部分程序出现错误的话,逻辑就会出现混乱,各功能键将不能实现,在调试的过程中,我们发现,我们的键

 

盘电路的接法接口要正确连接,一旦键盘口搞错的话,就会出现按键的功能的混乱,所以在这一步分的调试上最主要是把握键盘的控制分析。

6.2.3最后一部分调试显示程序的调试,该部分程序的调试,关系到该课设是否够直观的体现温度值,以及建立一个直观的人机对话界面,在该部分程序的调试的过程中面临的最大困难就是对于显缓单元的分配,以及初始化,读写的控制,如果显缓单元分配有冲突的话,就会导致程序逻辑错误,所以应该仔细调试该部分应该边编写边调试。

6.3调试结果

用专门的编译软件Keil对程序进行编译,编译无误后。

并让其生成HEX文件,按照软件流程图在仿真软件Proteus上进行仿真,把各个元器在仿真软件中找出来,再将它们连接起来,连接完毕后将生成的HEX文件加载到单片机中。

经过详细的硬件调试和软件调试之后,系统工作正常,LCD液晶显示模块共两行,分别按要求实时显示设定的最高和最低温,当前温度值,定时时间值。

按下“加减键”时,系统可调节消毒加热的时间,加热时间到后点亮定时到指示灯,当时间到达到0时,停止加热。

 

7、技术小结

通过一个多星期的研究动手实践完成,简单的消毒柜控制系统初步成形。

实物图也出来了,实现了课程设计的基本要求。

本设计集中了按键,定时器,液晶显示等的应用。

对于按键部分控制简单,因为是独立的按键控制,只需要与51单片机的任一输入输出端口相连,通过控制器高低电平即可。

对于定时器和外部中断0,1的设计书写,只需要对中断和定时器控制的方法和步骤熟悉,熟练运用它们的启动停止就可正确完成控制。

对于我来说最难得就是LCD液晶显示的控制了,硬件连接图可根据经验和管脚说明连接就行,但软件程序编写时对其的不熟悉和难以理解,给了我很大的障碍,以至于很久弄不出程序,

不能支持实物电路板的正常工作。

后来经过学习参考咨询和大家交流等各种渠道,慢慢的掌握了其基本的知识,才有了后来的完整的程序。

本次课设一个不足之处就是没有完成消毒后自动关机的功能,浪费单片机的内部资源。

对于温度传感器电路,还存在缺憾,并不能完全掌握该部分程序的编写。

本课程设计自己去焊接电路,锻炼了独立思考和实际操作的能力,一定程度上增加了课程设计的难度,但是真正对我们设计电路却是一个帮助和提高,所以我努力并认真的对待着本次的设计,希望能够自行设计硬件电路根据自己设计的硬件电路来编制相应的程序在对我们掌握各硬件部分电路有更好的理解,也一定程度上复习了以前所学的其基础知识,也能更好的掌握一些电气知识。

8、参考文献

[1]单片机原理与应用,张毅刚,电子工业出版社

[2]电路原理,邱关源,高等教育出版社

[3]张迎辉,.单片微型计算机键盘接口设计

[4]

 

 

9、附录

9.1主程序

源程序:

//#include//用AT89C51时就用这个头文件

#include//用华邦W78E58B时必须用这个头文件

#include

#include

#include

#include

#include

#include

#include"LCD1602.h"////液晶显示头文件

//sbitDQ=P3^4;//定义DQ引脚为P3.4

sbitk0=P3^7;//确认开始温度增减的按钮

sbitk3=P1^1;//温度加

sbitk4=P1^3;//温度减

sbitk5=P1^7;//确定按钮

sbitLED=P3^0;//温度到后亮

unsignedcharmin=0;

unsignedchartemp=0;

unsignedinta=0;

unsignedcharb=0;

unsignedchart[2],*pt;//用来存放温度值,测温程序就是通过这个数组与主函数通信的

//unsignedcharTempBuffer1[9]={0x2b,0x31,0x32,0x32,0x2e,0x30,0x30,0x43,'\0'};

unsignedcharTempBuffer1[17]={0x2b,0x31,0x32,0x32,0x2e,0x30,0x30,0x43,

0x54,0x3a,0x30,0x30,0x43,0x3a,0x30,0x30,'\0'};

//显示实时温度,上电时显示+125.00C

unsignedcharTempBuffer0[17]={0x54,0x48,0x3a,0x2b,0x31,0x32,0x35,0x20,

0x54,0x4c,0x3a,0x2b,0x31,0x32,0x34,0x43,'\0'};

//显示温度上下限,上电时显示TH:

+125TL:

+124C

unsignedcharcodedotcode[4]={0,25,50,75};

/***因显示分辨率为0.25,但小数运算比较麻烦,故采用查表的方法*******

再将表值分离出十位和个位后送到十分位和百分位********************/

 

voidcovert0(unsignedcharTH,unsignedcharTL)//将温度上下限转换为LCD显示的数据

{

if(TH>0x7F)//判断正负,如果为负温,将其转化为其绝对值

{

TempBuffer0[3]=0x2d;//0x2d为"-"的ASCII码

TH=~TH;

TH++;

}

elseTempBuffer0[3]=0x2b;//0x2B为"+"的ASCII码

if(TL>0x7f)

{

TempBuffer0[11]=0x2d;//0x2d为"-"的ASCII码

TL=~TL+1;

}

elseTempBuffer0[11]=0x2b;//0x2B为"+"的ASCII码

TempBuffer0[4]=TH/100+0x30;//分离出TH的百十个位

if(TempBuffer0[4]==0x30)TempBuffer0[4]=0xfe;//百位数消隐

TempBuffer0[5]=(TH%100)/10+0x30;//分离出十位

TempBuffer0[6]=(TH%100)%10+0x30;//分离出个位

TempBuffer0[12]=TL/100+0x30;//分离出TL的百十个位

if(TempBuffer0[12]==0x30)TempBuffer0[12]=0xfe;//百位数消隐

TempBuffer0[13]=(TL%100)/10+0x30;//分离出十位

TempBuffer0[14]=(TL%100)%10+0x30;//分离出个位

//if(k0==0)b=0;

if((TempBuffer1[2]==TempBuffer1[14])&&(TempBuffer1[3]==TempBuffer1[15])&&(b==1))

{

LED=1;

b=0;

k0=1;

}

}

 

voidcovert1(void)//将温度转换为LCD显示的数据

{

unsignedcharx=0x00,y=0x00;

t[0]=*pt;

pt++;

t[1]=*pt;

if(t[1]>0x07)//判断正负温度

{

TempBuffer1[0]=0x2d;//0x2d为"-"的ASCII码

t[1]=~t[1];/*下面几句把负数的补码*/

t[0]=~t[0];/*换算成绝对值*********/

x=t[0]+1;/***********************/

t[0]=x;/***********************/

if(x>255)/**********************/

t[1]++;/*********************/

}

elseTempBuffer1[0]=0x2b;//0xfe为变"+"的ASCII码

t[1]<<=4;//将高字节左移4位

t[1]=t[1]&0x70;//取出高字节的3个有效数字位

x=t[0];//将t[0]暂存到X,因为取小数部分还要用到它

x>>=4;//右移4位

x=x&0x0f;//和前面两句就是取出t[0]的高四位

t[1]=t[1]|x;//将高低字节的有效值的整数部分拼成一个字节

TempBuffer1[1]=t[1]/100+0x30;//+0x30为变0~9ASCII码

if(TempBuffer1[1]==0x30)TempBuffer1[1]=0xfe;//百位数消隐

TempBuffer1[2]=(t[1]%100)/10+0x30;//分离出十位

TempBuffer1[3]=(t[1]%100)%10+0x30;//分离出个位

t[0]=t[0]&0x0c;//取有效的两位小数

t[0]>>=2;//左移两位,以便查表

x=t[0];

y=dotcode[x];//查表换算成实际的小数

TempBuffer1[5]=y/10+0x30;//分离出十分位

TempBuffer1[6]=y%10+0x30;//分离出百分位

}

voiddelay(unsignedchari)

{

while(i--);

}

voiddelay1(unsignedintz)

{

unsignedinti,j;

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

for(j=100;j>0;j--);

}

/*******************设定时间函数**************************/

voidshijianset()

{

if(k3==0)

{

delay1(120);

if(k3==0)min++;

}

if(k4==0)

{

delay1(120);

if(k4==0)min--;

}

TempBuffer1[11]=min%10+0x30;

TempBuffer1[10]=min/10+0x30;

}

/*******************确认开始计时函数***************************/

voidjishi()

{

if(k5==0)

{

delay1(120);

if(k5==0)

{

TR0=1;//开始计时

b=1;

}

}

if(a==20)

{

a=0;

min--;

}

if(min==0)TR0=0;

}

/*******************设置温度函数***************************/

voidsetwendu()

{

TempBuffer1[14]=temp/10+0x30;

TempBuffer1[15]=temp%10+0x30;

}

/*******************主程序***************************/

main()

{

unsignedcharTH=110,TL=-20;//下一步扩展时可能通过这两个变量,调节上下限

LED=0;

//测温函数返回这个数组的头地址

EA=1;//开总中断

EX0=1;//允许外部中断0

EX1=1;//允许外部中断1

IT0=1;//设置外部触发0为跳沿触发

IT1=1;//设置外部触发1为跳沿触发

TMOD=0X01;//设置定时器T0为工作方式1

TL0=0XB0;

TH0=0X3C;//设置每次定时时间为50ms

ET0=1;//允许定时器中断

k0=0;

while

(1)

{

pt=ReadTemperature(TH,TL,0x3f);//上限温度-22,下限-24,分辨率10位,也就是0.25C

//读取温度,温度值存放在一个两个字节的数组中,

delay(100);

shijianset();

setwendu();

covert1();

covert0(TH,TL);

jishi();

LCD_Initial();//第一个参数列号,第二个为行号,为0表示第一行

//为1表示第二行,第三个参数为显示数据的首地址

LCD_Print(0,0,TempBuffer0);

LCD_Print(0,1,TempBuffer1);

}

}

voidextern0()interrupt0

{

temp++;

}

voidextern1()interrupt2

{

temp--;

}

voidtimer()interrupt1

{

TL0=0XB0;

TH0=0X3C;

a++;

}

 

9.2子程序

9.2.1LCD显示子程序

//#i

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

当前位置:首页 > 教学研究 > 教学计划

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

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