文章目录
- 前言
- 资料获取
- 设计介绍
- 功能介绍
- 设计程序
- 具体实现截图
- 设计获取
前言
💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
单片机设计精品实战案例✅
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
资料获取
文章底部名片,详细资料联系我。
设计介绍
本篇文章针对目前我国国内目前智能家居的发展设计了一套智能卫生间系统,这个系统的控制系统是基于STC89C52RC的。该系统由人体感应模块、按键模块、温度检测模块、照明控制模块等组成。与传统的卫生间相比,智能卫生间更加的智能化。可以根据屋内有无人的判断进行节水节电的工作;平时有人忘关水龙头的行为也可以利用智能卫生间的功能做到人走断水。为了节省平时冲马桶的用水量,也可通过检测如厕量的多少从而智能的选择冲水量。通过理论与实践的结合,可知,本控制系统具有成本低、结构简单、智能化、操作简洁、性能稳定等优点,一定程度上符合现阶段智能家居的发展,对进一步对水资源、电力资源的节约提供了一个良好的解决方案
功能介绍
1该系统能够自动识别房间有人和无人,并且根据有人和无人的情况,分别让不同的设备开启或关闭。
2房间有人时:
a)红外检测有人时,“有人指示灯”亮,并点亮照明系统。
b)冲厕开关与GND短接时,冲厕水泵开启3秒断开;两次冲厕时间间隔10秒。
c)洗手开关与GND短接时,洗手水泵开启3–7秒断开;两次洗手时间间隔7秒。
d)内风机转,全功率工作。
3房间无人状态下:
a)红外检测无人时,“无人指示灯”亮,照明系统不工作。
b)内风机转,半功率工作。
4用一个可调电阻,来调节洗手时间(0-4秒)。
5报警开关与GND短接时,蜂鸣器响。
整个系统的控制中心就是STC89C52最小系统模块,实现对所有数据的接受与处理功能,并且发出各种所需要的指令,让卫生间变得更加智能。
设计程序
/智能垃圾箱系统
#include <AT89X52.h>
#include <string.h> // 包含头文件
Typedf signed char int8; // 有符号8位整型变量
typedef unsigned char uint8; // 无符号8位整型变量
typedef signed int int16; // 有符号16位整型变量
typedef unsigned int uint16; // 无符号16位整型变量
static uint8 ds0,i;//定义全局变量
static uint16 ds1;//定义全局变量
sbit rtgy = P3 ^ 6; // 人体感应输入
sbit key_open = P3 ^ 7; // 手动开盖按钮
sbit key_xz = P2 ^ 1; // 手动自动选择
sbit out_dj = P2 ^ 0; // 舵机输出
sbit out_gg = P1 ^ 2; // 关盖指示
sbit out_kg = P1 ^ 1; // 开盖指示
sbit out_cgq = P1 ^ 0; // 传感器指示
/********************************************************************************
* 函数名称:DelaymS()
* 功 能:1mS延时函数
* 入口参数:16位整型 延时时间(mS)
void DelaymS(uint16 b){
uint8 i;
while( -b != 0){
for(i = 0; i < 92; i++);
}
}
//中断程序
* 函数名称:time0_1_int()
* 功 能:定时中断0/1初始化
***********************************************************************************/
void time0_1_int(void) {
TMOD=0x01;//time0方式1,16位定时器
TH0=0xfe;//装载初始值0.5ms)
TL0=0x3;
ET0=1;//开T0中断
TR0=1;//启动定时中断T0
EA=1//开中断
}
/*********************************************************************************
* 函数名称:time0_fun()interrupt1
* 功 能:定时中断0服务子程序
**********************************************************************************/
void time0_fun()interrupt 1 {
TH0=0xfe;//重装载初始值
TL0=0x33;
ds0++;
ds1++;
if(ds0>40){ds0=0;}
/********************************************************************************************/
舵机控制程序开始
/********************************************************************************
* 函数名称:dj()
* 功 能:舵机控制
* 入口参数:角度
* 出口参数:无
*******************************************************************************/
void dj(uint16 j)
{
switch (j)
{
case 0 :i=1;break; //
case 45 :i=2;break; //
case 90 :i=3;break; //
case 135:i=4;break; //
case 180:i=5;break; //
case 225:i=6;break; //
default:break;
}
if(ds0==0){out_dj=1;}
if(ds0==i){out_dj=0;}
}
/********************************************************************************************
//系统主程序
//main()
*********************************************************************************************/
void main (void){
uint8 kgbz=1;
time0_1_int();
while (1)
{
if (key_xz)
{
if (rtg && kgbz==1){
ds1=0;
while (ds1<800){
dj(90);
}kgbz=0;
out_kg=0;
out_gg=1;
}
if (!rtgy && kgbz==0){
ds1=0;
while (ds1<800){
dj(0 );
}kgbz=1;
out_kg=1;
out_gg=0;
if (rtgy){
out_cgq=0;
}else{
out_cgq=1;
}
}
if (!key_xz)
{
out_cgq=1;
if (!key_open && kgbz==1){
DelaymS(100);
while (!key_open);
ds1=0;
while (ds1<800){
dj(90);
}kgbz=0;
out_kg=0;
out_gg=1;
}
if (!key_open && kgbz==0){
DelaymS(100);
while (!key_open);
ds1=0;
while (ds1<800){
dj(0 );
}kgbz=1;
out_kg=1;
out_gg=0;
}
具体实现截图
设计获取
文章下方名片联系我即可~
精彩专栏推荐订阅:在下方专栏👇🏻
毕业设计精品实战案例
收藏关注不迷路!!
🌟文末获取设计🌟