IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 毕业设计 - 题目:基于单片机的智能饮水机系统设计与实现 (物联网 嵌入式 单片机) -> 正文阅读

[嵌入式]毕业设计 - 题目:基于单片机的智能饮水机系统设计与实现 (物联网 嵌入式 单片机)


1 简介

Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片机项目

基于单片机的智能饮水机系统设计与实现

大家可用于 课程设计 或 毕业设计

技术解答、毕设帮助、开题指导
print("Q 746876041") 

在这里插入图片描述

2 绪论

2.1 课题背景与目的

这次设计的智能饮水机就是单片机结合传感器的一个应用。

该系统设计综合单片机以及电子技术理论,从生活实际出发,完善了饮水机的功能。整个设计系统实现三个功能,即加热、对温度上下限的控制和定时加热。与传统的饮水机相比,由于采用了自动检测和控制的电子设计技术,可较好地实现对水温的测量和控制,具有较广泛的应用前景。

系统包括温度传感器,键盘输入模块,输出控制模块,数据传输模块,温度显示模块和出水驱动电路等部分。



3 系统设计


3.1 智能饮水机功能设计


智能饮水机具有过热保护防干烧、 加热至沸腾、 设置温度加热、 超温报警提示、 安全锁定、 电动机出水功能等。

3.1.1 智能饮水机的按键功能:

  • ① 出水键: 控制饮水机出水和停止出水;
  • ② 加热键: 负责控制开始加热和停止加热;
  • ③ 锁定键: 按下锁定键, 其他按键无效;
  • ④ 切换健:按下后开始设定用户想要的温度;
  • ⑤ 温度设定键: 按一下温度增加 5℃,温度可在 0℃到 100℃之间循环。

3.1.2 智能饮水机的显示功能:

  • ①电源灯(绿色) : 接通电源, 电源灯点亮;
  • ②加热指示灯(黄色) :按下加热键, 加热指示灯点亮, 表示烧水开始工作。 再次按下加热键,指示灯熄灭, 表示烧水停止;
  • ③锁定键指示灯(蓝色) : 锁定其他按键功能, 灯亮表示其他按键均不可用;
  • ④超温报警灯(红色) : 灯点亮表示水已经达到设定的加热温度或已沸腾并停止加热;
  • ⑤数码管: 显示当前水温或用户设定的温度。
  • ⑥蜂鸣器: 响起后说明水以沸腾并停止加热。

3.2 系统架构

整个硬件系统由主控制系统、输入输出模块、传感器、其他功能电路和电源部分组成。主控系统使用单片机控制,包括对键盘的信息的接收和控制,对其他功能电路的控制等,通过软件编程实现预定功能;传感器部分即检测子系统,主要是进行饮水机中水的温度检测和控制,采用智能温度传感器DS18B20;其他功能电路部分包括恒温,防干烧,出水等电路,达到功能多样化;电源部分为智能饮水机提供必要的电能,保证饮水机能够正常的工作。

在这里插入图片描述

3.3 软件部分

3.3.1 主程序部分

程序的初始化主要包括三个环节:

  • (1) 实现各种设置堆栈指针、 定时器/计数器 0 初始化、 以及开中断、定时器/计数器启动;
  • (2) 实现 LED 显示当前水温并能显示预设的水温;
  • (3) 不断的进行按键扫描, 判断是否有按键按下, 如没有按键按下,则返回显示; 如有按键按下, 则根据所按键实现相应的操作。

人机对话功能键设置如下:

  • (1) “出水” 键: 控制其出水和停止出水;
  • (2) “加热” 键: 控制其加热和停止加热;
  • (3) “锁定” 键: 用于锁定其他所有按键;
  • (4) “切换” 键: 用于将显示器切换至温度设定界面并开始设定温度;
  • (5) “设置温度” 键: 以 5℃为间隔在 0℃至 100℃之间以递增方式设定水温。
// 关键代码
void main()
{
T=100;
while(1)
{
Lock_key();
if(Lock==0)
keyscan();
if(flag2==0)
temp_display();
if(flag2==1)
SEG_display(T,0);
if(temp>=T*10) {Temp_led=0;Hot=1;Hot_led=1;}
if(temp< T*10) Temp_led=1;
if(temp>=1000){Beep=0;Hot=1;Hot_led=1;}
if(temp<1000) Beep=1;
}
}

在这里插入图片描述

3.3.2 温度检测

温度检测运用 DS18B20 芯片, 因为其功能全面且精度高, 完全可以满足设计要求, 它将检测到的水温送给单片机, 再由单片机输出给显示电路将实时水温显示出来。

在这里插入图片描述

// 关键代码
void init_ds18b20()
{
uchar x=0;
DQ = 1; //DQ 复位
delay_us(10); //稍做延时
DQ = 0; //单片机将 DQ 拉低
delay_us(100); //精确延时 大于 480us
DQ = 1; //拉高总线
delay_us(10);
x=DQ; //稍做延时后 如果 x=0则初始化成功 x=1 则初始化失败
delay_us(20);
}
uchar ReadOneChar()
{
uchar i;
uchar dat=0;
for (i=8;i>0;i--)
{
DQ = 0;
dat>>=1;
DQ = 1; 
if(DQ)
dat|=0x80;
delay_us(10);
}
return(dat);
}
void WriteOneChar(uchar dat)
{
uchar i;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay_us(10);
DQ = 1;
dat>>=1;
}
}
int ReadTem()
{
int t;
uchar a,b;
init_ds18b20();
WriteOneChar(0xcc); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
delay_us(200);
init_ds18b20();
WriteOneChar(0xcc); //跳过读序号列号的操作
WriteOneChar(0xbe); //读取温度寄存器等
a=ReadOneChar();
b=ReadOneChar();
t=b;
t<<=8;
t=t|a;
return t;
}
void temp_display()
{
uint temp_point;
temp=ReadTem()*0.625; //将温度的高位与低位合并
temp_point=temp%10; //取出小数位
SEG_display(temp/10,temp_point);
}

3.3.3 显示程序设计

显示程序是负责点亮 4 支数码管, 并根据单片机送出的数据及时更新显示的数据, 其程序流程图如下

(大家可以换成oled屏显示)

在这里插入图片描述

// 关键代码
void SEG_display(uchar dat1,uchar dat2)
{
P23=1;
P0=table[dat1/100];
P20=0;
delay_us(80);
P20=1;
P0=table[dat1/10%10];
P21=0;
delay_us(80);
P21=1;
P0=table[dat1%10]|0x80;
P22=0;
delay_us(80);
P22=1;
P0=table[dat2];
P23=0;
delay_us(80);
}

3.3.4 键盘扫描程序

键盘扫描程序的任务是在程序运行过程中始终不停的检测是否有按键被按下, 如果检测到有按键被按下, 则进入与该按键对应的程序运行; 若该按键没有被按下, 则继续检测下一个按键, 如此循环, 从而完成每一个按键所对应的功能。

在这里插入图片描述

// 关键代码
void keyscan()
{
if(key1==0)
{
delay_ms(2);
if(key1==0)
{
flag=~flag;
if(flag==1)
Out=0;
if(flag==0)
Out=1;
}
while(!key1);
}
if(key2==0)
{
delay_ms(2);
if(key2==0)
{
flag1=~flag1;
if(flag1==1)
{Hot=0;Hot_led=0;}
if(flag1==0)
{Hot=1;Hot_led=1;}
}
while(!key2);
}
if(key3==0)
{
delay_ms(2);
if(key3==0)
{
if(flag2==1) T+=5;
if(T>=101)T=0;
}
while(!key3);
}
if(key5==0)
{
delay_ms(2);
if(key5==0)
{
flag2=~flag2;
}
while(!key5);
}
}
void Lock_key() // 锁定键盘
{
if(key4==0)
{
delay_ms(2);
if(key4==0)
{
Lock=~Lock;
if(Lock==1)
Lock_led=0;
if(Lock==0)
Lock_led=1;
}
while(!key4);
}
}


3.4 实现效果

在这里插入图片描述

在这里插入图片描述

4 最后

技术解答、毕设帮助、开题指导
print("Q 746876041") 

请添加图片描述

单片机毕设项目大全:
https://blog.csdn.net/huawei123444/article/details/119822845

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-01 11:36:39  更:2021-11-01 11:36:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:59:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码