200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 【毕业设计】46-基于单片机的智能卫浴系统设计(原理图工程+仿真工程+源代码+答辩论文

【毕业设计】46-基于单片机的智能卫浴系统设计(原理图工程+仿真工程+源代码+答辩论文

时间:2024-05-12 13:05:59

相关推荐

【毕业设计】46-基于单片机的智能卫浴系统设计(原理图工程+仿真工程+源代码+答辩论文

typora-root-url: ./

【毕业设计】46-基于单片机的智能卫浴系统设计(原理图工程+仿真工程+源代码+答辩论文+答辩PPT)

文章目录

typora-root-url: ./【毕业设计】46-基于单片机的智能卫浴系统设计(原理图工程+仿真工程+源代码+答辩论文+答辩PPT)任务书设计说明书摘要设计框架架构设计说明书及设计文件源码展示

任务书

主要研究内容: 1.单片机; 2.温度传感器、模数转换器、蜂鸣器 设计思路: 查阅相关文献资料学习单片机、温度传感器、模数转换器、蜂鸣器,编程实现智能卫浴系统功能,采用温度传感器检测水温,再传递给主控芯片单片机进行处理,当水温过低,则继续加热,若水温超过上限值,蜂鸣器发出报警。 方法和要求: 1.查阅相关文献资料学习单片机、温度传感器、模数转换器、蜂鸣器; 2.学习Keil软件,用汇编语言或者C语言编程实现智能卫浴系统设计功能; 3.学习Proteus软件,进行仿真或实物实现智能卫浴系统设计功能。 5.撰写毕业论文。

资料链接

原理图工程文件

仿真模型工程文件

答辩论文低重复率文档,19386字

英文文献及翻译

答辩PPT

设计说明书

摘要

基于单片机的智能卫浴系统设计,需要实现的功能,有水温加热,水温,温度检测水温温度超温报警的功能。

系统在设计过程中需要有软件和硬件之间配合,才能实现整个系统的功能。系统需要使用到温度传感器,在本次系统使用的温度传感器是模拟式温度传感器。检测到温度发出的是电压信号,需要通过模数转换器相互配合、使用到的液晶显示器是LCD1602通过独立按键实现人机交互功能,控制整个系统,设定系统报警阈值。

设计框架架构

第一章 绪 论… 1

第一节 课题研究背景… 1

第二节 课题研究现状… 2

第三节 卫浴系统智能化趋势… 2

第四节 本文主要研究内容… 3

第五节 本章小结… 4

第二章 系统方案分析… 5

第一节 系统设计框架… 5

第二节 主控方案选择… 5

第三节 本章小结… 6

第三章 系统硬件电路设计… 8

第一节 单片机最小系统模块设计… 8

二、复位电路… 10

二、晶振电路… 10

第二节 电源模块设计… 11

第三节 按键电路模块设计… 12

第四节 LED显示模块电路… 12

第五节 LCD液晶显示模块电路… 13

一、显示元件介绍… 13

二、显示电路设计… 13

第六节 温度传感器模块电路… 14

第七节 蜂鸣器报警模块电路… 15

第八节 系统总电路图… 15

第九节 本章小结… 16

第四章 系统软件程序设计… 17

第一节 Keil软件介绍… 17

第二节 软件总设计流程… 17

第三节 按键模块程序设计… 19

一、按键模块程序流程图… 19

二、按键模块的程序… 19

第四节 LED显示模块程序设计… 20

一、LED显示模块程序流程图… 20

二、LED显示模块的程序… 20

第五节 LCD液晶显示模块程序设计… 22

一、LCD液晶显示模块程序流程图… 22

二、LCD液晶显示模块的程序… 23

第六节 温度传感器模块程序设计… 24

一、温度传感器模块程序流程图… 24

二、温度传感器模块的程序… 25

第七节 蜂鸣器报警模块程序设计… 26

一、蜂鸣器报警模块程序流程图… 26

二、蜂鸣器报警模块的程序设计… 26

第八节 本章小结… 27

第五章 系统仿真… 28

第一节 仿真软件介绍… 28

第二节 功能仿真并分析… 28

一、仿真总电路… 28

二、系统功能仿真… 29

第三节 本章小结… 34

结 论… 35

致 谢… 36

参考文献… 37

附 录… 39

一、英文原文… 39

二、英文翻译… 41

三、工程图纸… 43

四、源代码… 44

设计说明书及设计文件

源码展示

#include <reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include "intrins.h" #defineu8 unsigned char#defineu16 unsigned int#defineuchar unsigned char#defineuint unsigned int uchar yushe_yanwu=100;//温度预设值uchar yanwu; //用于读取ADC数据//运行模式 uchar Mode=0; //=1是设置温度阀值 =2是设置温度阀值=0是正常监控模式//管脚声明sbit Led_Reg =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;i<q;i++)for(j=0;j<110;j++);}/***********************************************************************************************************LCD1602相关函数***********************************************************************************************************///LCD管脚声明 (RW引脚实物直接接地,因为本设计只用到液晶的写操作,RW引脚一直是低电平)sbit LCDRS = P2^7;sbit LCDEN = P2^6;sbit D0 = P0^0;sbit D1 = P0^1;sbit D2 = P0^2;sbit D3 = P0^3;sbit D4 = P0^4;sbit D5 = P0^5;sbit D6 = P0^6;sbit D7 = P0^7;//LCD延时void LCDdelay(uint z) //该延时大约100us(不精确,液晶操作的延时不要求很精确){uint x,y;for(x=z;x>0;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// 日期: -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);//打开显示 阴影闪烁*///1602初始化void Init1602(){uchar i=0;write_com(0x38);//屏幕初始化write_com(0x0c);//打开显示 无光标 无光标闪烁write_com(0x06);//当读或写一个字符是指针后一一位write_com(0x01);//清屏}void Display_1602(yushe_yanwu,temp){//显示预设温度//显示预设温度LCD_Write_Char(0,13,yushe_yanwu,3) ;//时时温度LCD_Write_Char(1,13,temp,3) ;}/***********************************************************************************************************ADC0832相关函数***********************************************************************************************************/sbit ADCS =P1^5; //ADC0832 片选sbit ADCLK =P1^2; //ADC0832 时钟sbit ADDI =P1^3; //ADC0832 数据输入/*因为单片机的管脚是双向的,且ADC0832的数据输入输出不同时进行,sbit ADDO =P1^3; //ADC0832 数据输出/*为节省单片机引脚,简化电路所以输入输出连接在同一个引脚上//========================================================================// 函数: unsigned int Adc0832(unsigned char channel)// 应用: temp=Adc0832(0);// 描述: 读取0通道的AD值// 参数: channel:通道0和通道1选择// 返回: 选取通道的AD值// 版本: VER1.0// 日期: -05-29// 备注: //========================================================================unsigned int Adc0832(unsigned char channel){uchar i=0;uchar j;uint dat=0;uchar ndat=0;uchar Vot=0;if(channel==0)channel=2;if(channel==1)channel=3;ADDI=1;_nop_();_nop_();ADCS=0;//拉低CS端_nop_();_nop_();ADCLK=1;//拉高CLK端_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿1_nop_();_nop_();ADCLK=1;//拉高CLK端ADDI=channel&0x1;_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿2_nop_();_nop_();ADCLK=1;//拉高CLK端ADDI=(channel>>1)&0x1;_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿3ADDI=1;//控制命令结束_nop_();_nop_();dat=0;for(i=0;i<8;i++){dat|=ADDO;//收数据ADCLK=1;_nop_();_nop_();ADCLK=0;//形成一次时钟脉冲_nop_();_nop_();dat<<=1;if(i==7)dat|=ADDO;}for(i=0;i<8;i++){j=0;j=j|ADDO;//收数据ADCLK=1;_nop_();_nop_();ADCLK=0;//形成一次时钟脉冲_nop_();_nop_();j=j<<7;ndat=ndat|j;if(i<7)ndat>>=1;}ADCS=1;//拉低CS端ADCLK=0;//拉低CLK端ADDO=1;//拉高数据端,回到初始状态dat<<=8;dat|=ndat;return(dat); //return ad data}/***********************************************************************************************************按键检测相关函数***********************************************************************************************************///按键sbit Key1=P1^6; //设置键sbit Key2=P1^7; //加按键sbit Key3=P3^2; //减按键#define KEY_SET 1//设置#define KEY_ADD2//加#define KEY_MINUS3//减// 函数: u8 Key_Scan()// 应用: temp=u8 Key_Scan();// 描述: 按键扫描并返回按下的键值// 参数: NONE// 返回: 按下的键值// 版本: VER1.0// 日期: -05-29// 备注: 该函数带松手检测,按下键返回一次键值后返回0,直至第二次按键按下u8 Key_Scan(){ static u8 key_up=1;//按键按松开标志if(key_up&&(Key1==0||Key2==0||Key3==0)){delay_ms(10);//去抖动 key_up=0;if(Key1==0)return 1;else if(Key2==0)return 2;else if(Key3==0)return 3;}else if(Key1==1&&Key2==1&&Key3==1)key_up=1;return 0;// 无按键按下}void main (void){u8 key;Init1602(); //调用初始化显示函数LCD_Write_String(0,0,"Control MAX:000"); //开机界面LCD_Write_String(1,0,"System NOW:000"); delay_ms(1000);while (1) //主循环{key=Key_Scan();//按键扫描yanwu=Adc0832(0);//读取温度值if(key==KEY_SET){Mode++;}switch(Mode)//判断模式的值{case 0://监控模式{Display_1602(yushe_yanwu,yanwu); //显示预设温度,预设温度,温度值,温度值if(yanwu>=yushe_yanwu) //温度值大于等于预设值时{Led_Reg=0; //温度指示灯亮Fan=0;Buzzer=0; //蜂鸣器报警}else //温度值小于预设值时{Led_Reg=1; //关掉报警灯Fan=1;}if(yanwu < yushe_yanwu) //温度值小于谠偳桵?{Led_Yellow=0; //打开黄色灯}else //温度值小于预设值时{Led_Yellow=1; //关闭报警灯}if(yanwu<yushe_yanwu) //当温度小于预设值并且温度也小于预设值时 (&&:逻辑与,左右两边的表达式都成立(都为真,也就是1)时,该if语句才成立){Buzzer=1; //停止报警}break;}case 1://预设温度模式{SelectPosition(0,12) ;//指定位置write_com(0x0d);//打开显示 无光标 光标闪烁if(key==KEY_ADD)//加键按下{if(yushe_yanwu>=255) //当阀值加到大于等于255时yushe_yanwu=254; //阀值固定为254yushe_yanwu++;LCD_Write_Char(0,13,yushe_yanwu,3) ;//显示预设温度}if(key==KEY_MINUS)//减键按下{if(yushe_yanwu<=1)//当温度上限值减小到1时yushe_yanwu=1;//固定为1yushe_yanwu--;//预设温度值减一,最小为0 LCD_Write_Char(0,13,yushe_yanwu,3) ;//显示预设温度}break;}default:{write_com(0x38);//屏幕初始化write_com(0x0c);//打开显示 无光标 无光标闪烁Mode=0;//恢复正常模式break;}}}}

【毕业设计】46-基于单片机的智能卫浴系统设计(原理图工程+仿真工程+源代码+答辩论文+答辩PPT)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。