单片机原理及应用消毒柜操纵电路的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《单片机原理及应用》课程设计报告书-消毒柜操纵电路的
设计
1
课程设计报告书
消毒柜操纵电路的设计课落款称
姓名
学号
电气工程及其自动化专业
指导教师
机电与操纵工程学院
年月日
2
填写说明
一、正文部份:
(1) 题目与正文格式概念标准如下:
一级题目:1.题目1
二级题目:题目2
三级题目:题目3
四级题目:题目4
(2)表格:尽可能采纳三线表。
(3)图形:直接插入的插图应有图标、图号,不能直接插入的图应留出插图空位。
图中文字、符号书写要清楚,并与正文一致。
(4)文字表述:要求层次清楚,语言流畅,语句通顺,无语法和逻辑错误,无错字、别字、漏字。
文字的表述应当以科学语言描述研究进程和研究结果,不要以口语化的方式表达,报告中科技术语和名词应符合规定的通用词语,并利用法定计量单位和标准符号。
二、参考文献:
(1)数量要求:参考文献只选择最要紧的列入,应不低于5种。
(2)种类要求:参考文献的引用,能够是高作[M]、论文[J]、专利文献[P]、会议论文等。
(3)文献著录格式及例如。
参考文献用宋体五号字。
[1] 作者. 书名[M]. 版次. 出版地: 出版者, 出版年: 起止页码 (高作图书文献)
[2] 作者. 文章名[J]. 学术刊物名称. 年. 卷(期): 起止页码 (学术刊物文献)
例如: [1]王社国,赵建光。
基于ARM的嵌入式语音识别系统研究 [J]。
微运算机信息,2007,2-2:149-150.
3、附录或附件:(可选项)
重要的测试结果、图表、设计图纸、源程序代码、大量的公式、符号、照片等不宜放入正文中的能够附录形式显现。
4、若是需要可另行附页粘贴。
3
任务书
基于单片机的消毒柜操纵电路的设计
设计一台消毒柜操纵系统,
要求:
(1)显示消毒柜温度,维持时刻。
(2)能够键盘设定消毒柜温度,定不时刻。
(3)能够实现实时中断功能。
(4)消毒后自动关机。
(5)测温误差:〈 ?c。
(6)按时误差:〈20s/月
4
目录
一、绪论…………………………………………………………………………
二、方案论证(计划、选定)……………………………………………
3、方案说明(设计)………………………………………………………
4、硬件方案设计…………………………………………………………
五、软件方案设计…………………………………………………………
六、调试………………………………………………………………………
7、技术小结(终止语)…………………………………………………
八、参考文献…………………………………………………………………
九、附录(源程序代码、电路图等)…………………………………………
5
1. 绪论
该课题是设计一个消毒柜其实确实是设计一个智能的温度操纵系统,消毒柜要紧通过加热到一个指定温度,对餐具等卫生洁具进行高温消毒,消毒柜将高温操纵在一个指定的范围内,并维持一按时刻,杀灭细菌,极大地增强了人们的饮食卫生,大大降低了疾病的交叉传染,为提高人们的躯体健康起了重要的作用。
本文要紧介绍了一个基于AT89C51单片机制作的消毒柜操纵电路。
它要紧包括供电电源电路、上电复位电路、晶振电路、开关操纵电路、显示电路等部份。
文中
对各电路的结构及工作原理作了详尽的介绍。
电路运行后,能自动按时操纵消毒柜的加电和断电,适时有效地完成对柜内餐具或其它物品的消毒工作。
具有电路简单、制作容易、利用灵活等优势。
通过该电路,能够进一步了解到单片机电路的应用扩展功能和指令应用技术。
本文的消毒柜操纵系统确实是为了人们日常生活中的餐具消毒而设计的,采纳微电脑操纵技术,精准地操纵消毒柜内的温度和加热时刻,专门大程度上改善了人们的饮食卫生,提高了人们的生活水平。
本设计采纳DS18B20温度传感器搜集实时温度,通过DQ口送51单片机系统,实现模拟温度值的搜集、转化、输出数字值,然后51单片机对搜集的数据处置后送液晶显示电路,实时动态地显示当前的温度及倒计不时刻。
对温度的操纵要紧由单片机内部三种中断方式来操纵启动和停止。
6
二、方案论证
2(1 系统设计要求
显示消毒柜温度,维持时刻。
能够键盘设定消毒柜温度,定不时刻。
能够实现实时中断功能。
2(2 系统组成框图
DS18B20 液晶屏显示
单
片
机
键盘操纵发光二极管显示
图系统组成框图
2(3 系统工作原理
该系统是基于AT89S51单片机的温度操纵的且实现通太高温来杀灭病毒的消毒柜系统,该系统要紧三大部份组成。
第一部份是由温度传感器DS18B20搜集实时温度转换成数字信号;第二部份的电路是由键盘操纵消毒的按时和启停;第三部份是液晶显示屏的显示部份。
AT89S51单片机对键盘的扫描结果和即时温度值的处置,实现对温度的实时操纵,系统设计了启动设定定不时刻,设置定不时刻,中断操纵按时,共四个键,按下启动设定定不时刻功能键即确信开始温度增减按钮时,单片机加热时刻可通过温度加减按钮设定,开始加热,启动按时器中断操纵,当温度加热设按时刻到后停止加热。
2(3系统工作论证
通过对系统操纵要求的研究,确信了操纵系统的大体框图,针对其大体原理进行了分析说明,此方案能知足消毒柜操纵系统的大体要求。
7
3、方案说明
DS18B20 一线总线温度传感器
特点:
体积小安装方便;
可联网,方便分散点测量;
三线?二线式连接方式;
测量范围-55?~+125?;
AT89C51
依照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。
AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰硕的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位按时/计数器、5个向量两级中断结构、2个全双工的串行口,具有,的电压工作范围和0,24MHz工作频率,利用AT89C51单片机时不必外扩存储器。
因此,单片机最小系统为晶振、复位、电源等电路和必要的软件组成的单个单片机。
1602液晶显示
第一是1602液晶的管脚,总共有16个管脚,其中有三根是电源地、电源正、还有事对照
度的调整电压;还有两根是LCD背光的正、负极。
重要的是决定led指令的三根管脚吗,别离是RS、 R/W、E(一样接单片机的~,剩下的八根式数据线别离为DB0~DB7(一样接单片机的P0口)。
8
4、硬件方案设计
系统硬件结构框图
二极管亮灭
51实时温度,
定不时刻,单LCD液晶温度上下片显示屏限机按键 DS18B2
图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内容被保留,
9 振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
8 位微操纵器 4K 字节在系统可编程 Flash AT89S51。
单片机最小系统电路图如下图。
图单片机最小系统电路图
DS18B20操纵电路
通过口与DQ的连接实现51单片机与温度传感器DS18B20的连通工作。
10
键盘操纵电路
该键盘接口电路通过按键操纵按时和中断。
本模块通过编制程序,扫描键盘,来比对键盘的值,来设置四个功能键。
LCD液晶显示电路
通过P0口操纵液晶显示的输入。
P0口必需外接上拉电阻。
通过P2口的低三位操纵RS,RW,E三个功能操纵引脚,从而操纵液晶显示屏LCD的工作。
11
五、软件方案设计
系统软件设计原理
本程序设计依照通过温度传感器采样来的温度值,通过内部转化为二进制数字量,再通过51单片机操纵输出至LCD液晶显示屏,然后挪用显示程序进行温度的事实显示。
关于各个功能键的程序是从P0口读数、再转换成十进制数、送显缓区、再依照键盘扫描的结果对温度值进行比较判定,当按下的键是加减功能键时,系统要操纵加热的时刻可进行调剂。
开始加热后,通过按时器操纵加热时刻到的中断,当加热时刻由设定值减至0时停止加热,键盘显示实时温度。
通过在主程序里面设立标志,该程序是通过延时的方式来确保温度转换为显示数据实现温度与按键的统一和“同步”,实时的操纵加热的工作,以达到人们所要求达到的成效。
12
主程序流程图
开始
系统初始化
显示屏初始中断初始按时初始
键盘设置与液晶屏显示
按时未到,继续判定判定按时
按时到
工作
图3主程序流程图
系统子程序设计
本软件设计中,系统子程序的设计是整个程序设计的重中之重,子程序以模块化的方式实现各个独建功能,再通过主程序来挪用功能子程序,使整个程序实现完整的功能。
按键处置子程序, DS18B20温度采样子程序,温度采样转化子程序,显示处置子程序。
13
六、调试
硬件调试
由于本次课程设计做了实物出来,通过设计方案,在实验焊接板上进行合理布局并焊接实物图。
然后依如实验指导书上的各功能芯片的端口地址,连接号各部份电路,用电表测量焊接点的正常与否,最后连上电源。
检测LCD显示模块,因为通过键盘显示,能够直观的明白程序是不是大体运行正常,是不是按预定的显示。
调试键盘模块电路,看是不是按压正常,和二极管闪灭部份是不是能够实现实时闪亮。
最后进行整体硬件电路的联调。
软件调试
软件调试是个很重要的进程,由于软件显现错误的话就大体上各部份功能都实现都有困难,因此软件的调试时重中之重。
第一步是进行的是DS18B20的软件的调试,通过搜集温度后内部转换后通过合理的内存单元的分派,存储采样后转换的值,然后同过51单片机程序看是不是实此刻LCD上显示实时温度值。
键盘扫描部份程序的调试,该部份是程序中的功能键实现操纵温度和时刻的要紧的部份,若是该部份程序显现错误的话,逻辑就会显现混乱,各功能键将不能实现,在调试的进程中,咱们发觉,咱们的键
14
盘电路的接法接口要正确连接,一旦键盘口弄错的话,就会显现按键的功能的混乱,因此在这一步分的调试上最主若是把握键盘的操纵分析。
最后一部份调试显示程序的调试,该部份程序的调试,关系到该课设是不是够直观的表现温度值,和成立一个直观的人机对话界面,在该部份程序的调试的进程中面临的最大困难确实是关于显缓单元的分派,和初始化,读写的操纵,若是显缓单元分派有冲突的话,就会致使程序逻辑错误,因此应该认真调试该部份应该边编写边调试。
调试结果
用专门的编译软件Keil对程序进行编译,编译无误后。
并让其生成HEX文件,依照软件流程图在仿真软件Proteus上进行仿真,把各个元器在仿真软件中找出来,再将它们连接起来,连接完毕后将生成的HEX文件加载到单片机中。
通过详细的硬件调试和软件调试以后,系统工作正常,LCD液晶显示模块共两行,别离按要求实时显示设定的最高和最低温,当前温度值,定不时刻值。
按下“加减键”时,系统可调剂消毒加热的时刻,加热时刻到后点亮按时到指示灯,那时刻抵达到0时,停止加热。
15
7、技术小结
通过一个多礼拜的研究动手实践完成,简单的消毒柜操纵系统初步成形。
实物图也出来了,实现了课程设计的大体要求。
本设计集中了按键,按时器,液晶显示等的应用。
关于按键部份操纵简单,因为是独立的按键操纵,只需要与51单片机的任一输入输出端口相连,通过操纵器高低电平即可。
关于按时器和外部中断0,1的设计书写,只需要对中断和按时器操纵的方式和步骤熟悉,熟练运用它们的启动停止就可正确完成操纵。
关于我来讲最宝贵确实是LCD液晶显示的操纵了,硬件连接图可依照体会和管脚说明连接就行,但软件程序编写时对其的不熟悉和难以明白得,给了我专门大的障碍,以至于好久弄不出程序,不能支持实物电路板的正常工作。
后来通过学习参考咨询和大伙儿交流等各类渠道,慢慢的把握了其大体的知识,才有了后来的完整的程序。
本次课设一个不足的地方确实是没有完成消毒后自动关机的功能,浪费单片机的内部资源。
关于温度传感器电路,还存在缺憾,并非能完全把握该部份程序的编写。
本课程设计自己去焊接电路,锻炼了独立试探和实际操作的能力,必然程度上增加了课程设计的难度,可是真正对咱们设计电路却是一个帮忙和提高,因此我尽力并认真的对待着本次的设计,希望能够自行设计硬件电路依照自己设计的硬件电路来编制相应的程序在对咱们把握各硬件部份电路有更好的明白得,也必然程度上温习了以前所学的其基础知识,也能更好的把握一些电气知识。
16
、参考文献 8
【1】万福君.潘松峰.刘芳.MSC-51单片微型机原理、系统设计及应用
【M】.北京:清华大学出版社,
【2】陈黎娟.万在红.吴开志.聂鹏程.单片微型运算机实验教程【M】.
南昌航空大学,
【3】张永瑞. 电子测量技术基础【M】.西安:西安电子科技大学出版
社,
【4】刘同法.陈忠平.彭继卫.单片机外围接口电路与工程实践【M】.
北京:北京航空航天大学出版社,【5】何立民.单片机应用技术选编 (1-8). 北京:北京航空航天大学出
版社. 2001
【6】邬宽明.单片机外围器件有效手册. 数据传输接口器件分册,M,.
北京:北京航空航天大学出版社,1998
[J].(4):651~652
17
九、附录
主程序
源程序:
数据端口
//内部等待函数
**************************************************************
************
unsigned char LCD_Wait(void) {
LcdRs=0;
LcdRw=1; _nop_();
LcdEn=1; _nop_();
//while(DBPort&0x80);//在用Proteus仿真时,注意用屏蔽此语句,在挪用GotoXY()时,会进入死循环,
//可能在写该操纵字时,该模块没有返回写入完备命令,即
DBPort&0x80==0x80
//实际硬件时打开此语句
LcdEn=0;
return DBPort;
}
//向LCD写入命令或数据
************************************************************
#define LCD_COMMAND 0 // Command #define LCD_DATA 1 // Data #define LCD_CLEAR_SCREEN 0x01 // 清屏
#define LCD_HOMING 0x02 // 光标返回原点
void LCD_Write(bit style, unsigned char input)
24
{
LcdEn=0;
LcdRs=style;
LcdRw=0; _nop_();
DBPort=input; _nop_();//注意顺序
LcdEn=1; _nop_();//注意顺序
LcdEn=0; _nop_();
LCD_Wait();
}
//设置显示模式
************************************************************ #define LCD_SHOW 0x04 //显示开
#define LCD_HIDE 0x00 //显示关
#define LCD_CURSOR 0x02 //显示光标
#define LCD_NO_CURSOR 0x00 //无光标
#define LCD_FLASH 0x01 //光标闪动
#define LCD_NO_FLASH 0x00 //光标不闪动
void LCD_SetDisplay(unsigned char DisplayMode) {
LCD_Write(LCD_COMMAND, 0x08|DisplayMode); }
//设置输入模式
************************************************************ #define LCD_AC_UP 0x02
#define LCD_AC_DOWN 0x00 // default
#define LCD_MOVE 0x01 // 画面可平移
#define LCD_NO_MOVE 0x00 //default
void LCD_SetInput(unsigned char InputMode) {
LCD_Write(LCD_COMMAND, 0x04|InputMode); }
25 //初始化
LCD*********************************************************** *
void LCD_Initial()
{
LcdEn=0;
LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动
}
//************************************************************ ************
void GotoXY(unsigned char x, unsigned char y)
{
if(y==0)
LCD_Write(LCD_COMMAND,0x80|x);
if(y==1)
LCD_Write(LCD_COMMAND,0x80|(x-0x40));
}
void Print(unsigned char *str) {
while(*str!='\0')
{
LCD_Write(LCD_DATA,*str);
str++;
}
}
void LCD_Print(unsigned char x, unsigned char y, unsigned char *str)
{
GotoXY(x,y);
Print(str);
}
26
DS18B20操纵子程序
/#include <>//用AT89C51时就用那个头文件 #include <>//用华邦W78E58B
时必需用那个头文件 sbit DQ = P3^4; //概念DQ引脚为
/***********ds18b20延迟子函数(晶振12MHz )*******/
/************DS18B20对时刻要求很严,但只能长不能短 *************在下也行,因为时刻长些********/ void delay_18B20(unsigned int i) { while(i--);
}
/**********ds18b20初始化函数**********************/
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ复位
delay_18B20(8); //稍做延时
DQ = 0; //单片机将DQ拉低
delay_18B20(80); //精准延时大于 480us
DQ = 1; //拉高总线
delay_18B20(14);
x=DQ; //稍做延时后若是x=0那么初始化成功 x=1那么初始化失败
delay_18B20(20);
}
/***********ds18b20读一个字节**************/ unsigned char ReadOneChar(void) {
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
27
if(DQ)
dat|=0x80;
delay_18B20(4);
}
return(dat);
}
/*************ds18b20写一个字节****************/ void WriteOneChar(unsigned char dat) {
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay_18B20(5);
DQ = 1;
dat>>=1;
}
}
/**************读取ds18b20当前温度************/
unsigned char *ReadTemperature(char TH,char TL,unsigned char RS) { unsigned char tt[2];
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x4E); // //写入"写暂存器"命令,修改TH和TL和分辩率配置寄放器
//先写TH,再写TL,最后写配置寄放器
WriteOneChar(TH); //写入想设定的温度报警上限
WriteOneChar(TL); //写入想设定的温度报警下限
WriteOneChar(RS); //写配置寄放器,格式为0 R1 R0 1,1 1 1 1
//R1R0=00分辨率娄9位,R1R0=11分辨率为12位
delay_18B20(80); // this message is wery important
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
28
delay_18B20(80); // this message is wery important
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄放器等(共可读9个寄放器) 前两个确实是温度
delay_18B20(80);
tt[0]=ReadOneChar(); //读取温度值低位
tt[1]=ReadOneChar(); //读取温度值高位
return(tt);
}
消毒柜硬件连接图
29
30
指导教师
评语
课程设计指导教师成绩签字
年月日。